第2章 软件工程基础知识
软件工程方法学三要素:
方法 完成软件开发的各项任务的技术方法;
工具 为运用方法而提供的软件工程支撑环境;
过程 为获得高质量的软件所需要完成的一系列的框架
————————————————
知识点:
软件需求分析与定义;软件设计、测试与维护;软件复用;软件质量保证及质量评介;软件配置管理;软件开发环境;软件过程管理。
2.1 软件需求分析与定义
2.1.1 软件需求与需求过程
1.软件需求 系统必须完成的事,以及必须具备的品质。
功能需求、非功能需求、设计约束——需求的不同层次:业务需求、用户需求、系统需求
2.需求工程 包括创建和维护系统需求文档所必需的一切活动的过程,通常包括需求开发和需求管理
需求开发:需求捕获、需求分析、编写规格说明书和需求验证 4个阶段。
需求管理:定义需求基线、处理需求变更、需求跟踪等方面的工作。 收集需求——分析建模——规格化《软件需求规格说明书》——客户管理层验证
2.1.2需求调查与问题定义
What 应该搜集什么信息; Where 从什么地方搜集这些信息; How 用什么机制或技术搜集这些信息;
1. 要捕获的信息 三大类
A.与问题域相关的信息(业务资料、组织结构图、业务处理流程等)
B.与要求解决的问题相关的信息
C.用户对系统的特别期望与施加的任何约束信息
2.信息的来源
客户、原有系统、原有系统用户、新系统的潜在用户、原有产品、竞争对手的产品、领域专家、技术法规与标准里
从人的角度来说手续对涉众(风险承担人、项目干系人)进行分类;每类取1-2代表。文档、产品角度。——列个表(左信息,右来源)
3.需求捕获技术
a.用户访谈(结构化和非结构化,事先学习相关资料行业了解);b.用户调查(时间不充足,调查表);c.现场观摩;d.文档考古;e.联合讨论会
4.需求获取的策略 迭代式贯彻几个阶段。
2.1.3 可行性研究 提出项目是否可以完成,是否可以有更好的解决方案
真正成功的项目是满足客户的目标,为客户带来预想的价值增长。
1.可行性研究工作的基础 问题定义的解决。 内容、性质、系统目标、规模等——完整的书面报告
2.可行性研究工作的任务
a.技术可行性;b.经济可行性;c.社会可行性;——《可行性研究报告》
3.可行性研究工作的步骤
a.核心问题定义与目标 ;b.研究分析现有系统;c.为新系统建模;(系统上下文关系范围图、实体关系图、用例模型、域模型、IPO表);d.客户复核;e.提成并评价解决方案;f.确定最终推荐的解决方案;g.草拟开发计划(资源、人员、时间进度);h.以书面的形式提交《可行性分析报告》并进行审查。
成本效益分析:
A.成本估计;任务分解,目标细化——每个工作任务包分析估算——COCOMO分析计算人月数。都是估算的
B.效益分析; 货币的时间价值F=P(1+i)n、投资回收期、纯收入、投资回报率 投资额,每年预计可获得经济效益——投资回报率ROI =P=F1/(1+j)+F2(1+j)2+...+Fn/(1+j)n. P总投资额、Fi第i年底的收益,n是系统使用寿命,j是投资回报率
2.1.4 需求分析 现代软件工程学——对问题域进行抽象、分解成若干基本元素,对元素之间的关系进行建模
1、需求分析的工作任务 提炼、分析、审查需求——明白含义——找出错误、遗漏或不足
a.绘制系统上下文范围关系图;DFD 0层
b.创建用户接口原型;便于沟通理解,解决问题;
c.分析需求的可行性;
d.确定需求的优先级;
e.为需求建立模型;OO 用例模型和域模型;数据分析技术E-F图,
f.创建数据字典。确保同意的数据定义
g.使用质量功能调配(QFD)需求升华
2.需求建模 分析元素 CASE工具 保持可控性
2.1.5 流行的需求分析方法论
结构化分析方法、软系统方法、面向对象分析方法00A object oriented analysis,面向问题域的分析PDOA problem domain oriented analysis
数据字典:名称、何处和如何使用、内容描述、补充信息
如:客户基本信息=客户编号+客户名称+身份证号
客户编号={0....9}8
5.面向问题域的分析
A.关注问题域;B.关注系统的待求行为。问题框架是面向问题域分析的核心元素。
2.2 软件设计
2.2.1 软件设计基本原则
1.信息隐蔽
2.模块独立性(高内聚低耦合) 内聚模块功能强度,模块中各个元素间结合的紧密程度;耦合模块间相对独立的度量。相互联系的紧密程度。
内聚性7种:低——巧合、逻辑和时间的聚合;中——信息的聚合;高——顺序的和功能的聚合。
功能内聚functional cohesion:模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割。
信息内聚information cohesion:基于同一数据结构。多个功能内聚模块的组合;
通讯内聚communication cohesion;过程内聚procedural cohesion
耦合:软件设计中应尽量使用数据耦合,少用控制耦合、限制公共耦合的范围;完全不用内容耦合。
数据耦合data coupling:模块访问另一模块彼此之间是通过简单数据参数(不是控制参数、公共数据结构)来交换输入、输出。
2.2.2 结构化设计方法 基于模块化、自顶向下逐层细化、结构化程序设计发展而来
a.总结功能,功能过程考虑列出转向和传递的数据。b.细化数据流;c.分析过程的耦合,规划内聚
2.2.3 用户界面设计
1、可使用性;2、灵活性;3、复杂性和可靠性。
2.2.4 设计评审 开发每个阶段特别市设计阶段结束时要技术评审,采用评审会议的形式。
2.3 软件测试 根据程序开发阶段的规格说明及程序内部结构而进行设计的测试用例,进行测试,发现错误的过程。
测试对象:需求规格说明、概要设计规格说明、详细设计规格说明以及源码程序。
2.3.1 测试用例设计 黑盒测试(功能测试或数据驱动测试,依据需求规格说明书——等价类划分、边界值分析、错误推断法、因果图)、白盒测试(结构测试或逻辑驱动测试)、逻辑覆盖
2.3.2 软件测试的策略: 单元测试、集成测试(组装测试)、确认测试和系统测试。
2.3.3 软件测试种类:功能测试、可靠性测试、强度测试、性能测试(响应时间、吞吐量、辅助存储区)、恢复测试、启动/停止测试、配置测试、安全性测试、可使用性测试、安装测试、过程测试、容错测试、文档测试、兼容性测试。
2.3.4 面向对象的软件测试 开发模式OOA分析、OOD设计、OOP编程 分析阶段产生问题空间的抽象描述,归纳适用面向对象编程语言的类和类结构,最后形成代码。方法:ooa,ood,ooptest、面向对象单元测试、集成测试和系统测试
3.