4. 软件工程基础知识
4.1 软件工程概述
计算机应用需求的不断增长,软件开发的生产率远远跟不上计算机应用的迅速增长;此外,由于软件开发时缺少好的方法指导和工具辅助,同时又缺少相关文档,使得大量已有的软件难以维护。这些问题严重地阻碍了软件的发展,将上述软件开发和维护过程所遇到的各种问题称为“软件危机”。
4.1.1 计算机软件
软件 = 程序 + 文档
程序:是计算任务的处理对象和处理规则的描述。
处理对象是数据或信息;
处理规则一般指处理的动作和步骤
4.1.2 软件工程基本原理
美国著名软件工程专家B.W.Boehm 提出了软件工程 7 条基本原理:
- 用分阶段的生命周期计划严格管理
即分阶段,严格执行。可分为:
1. 项目概要计划;
2. 里程碑计划;
3. 项目控制计划;
4. 产品控制计划;
5. 验证计划;
6. 运行维护计划
- 坚持进行阶段评审
越早发现错误,改正代价越小。因此在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误。
- 实现严格的产品控制
软件开发过程中不应随意改变需求,但是外部环境的变化,改变需求又是客观的需要。为了保持软件各个配置成分的一致性,必须实行严格的产品控制。
基准配置管理又称基线管理、变动控制。
基线:是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)
- 采用现代程序设计技术
高级语言比低级语言易于开发。
- 结果应能清楚的审查
软件是逻辑产品,工作进度可见性差,难以评价和管理。为更好管理,应根据总目标及完成期限尽量明确地规定小组责任和产品标准。
- 开发小组的人员应少而精
当开发小组为N人时,可能的通信信道为N(N-1)/2,人员过多会导致通信开销过大,且人员素质不同,理解能力不同。
- 承认不断改进软件工程实践的必要性
遵循上述的6条基本原理,已经实现软件的工程化生产。但是随着技术发展,并不能保证软件紧跟时代步伐。要采取积极采纳新技术,并注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据可以用来评估新的软件技术的效果。
4.1.3 软件生存周期
- 可行性分析与项目开发计划
确定软件的开发目标及其可行性。(要解决什么问题?该问题是否有可行解决办法?若有解决办法,所需资源、时间、费用?)
该阶段的输出为:《可行性分析报告》和《项目开发计划》。 - 需求分析
该阶段不是具体地解决问题,而是准确地确定软件系统必须做什么,软件系统的功能、性能、数据和界面等要求(确定系统边界),从而确定系统的逻辑模型(ER图)。
该阶段的输出为:《软件需求说明书》 - 概要设计
- 设计软件的结构
软件有哪些模块?模块的结构层次?模块的调用关系是怎样的?每个模块的功能? - 设计总体数据结构和数据库结构
系统存储什么数据?数据是什么样的结构?数据间有什么关系?
该阶段输出为:《概要设计说明书》
- 详细设计
主要任务:对每个模块完成的功能进行具体描述,要把上一阶段的功能描述转变为精确地、结构化的过程描述。
即模块的控制结构,先做什么后做什么?条件判定?有什么重复处理?
该阶段的输出为:《详细设计文档》 - 编码
把模块的控制结构转换成代码。 - 测试
测试是保证软件质量的重要手段。设计测试用例检查软件的各个组成部分。
该阶段输出:《软件测试计划》、“测试用例”和《软件测试报告》 - 维护
维护是生存周期中时间最长的阶段,软件投入正式使用后便进入了维护阶段。
4.1.4 软件过程
开发时遵循的一系列可预测的步骤(即路线图),路线图称为“软件过程”。
-
能力成熟度模型(CMM)
-
能力成熟度模型(CMMI)
- 阶段式模型
- 连续性模型
-
统一过程(UP)
统一过程模型是一种用例和风险驱动,以架构为中心,迭代(划分为小项目)并且增量”的开发过程,由UML 方法和工具支持。统一过程定义了 4 个技术阶段及其制品。- 起始阶段 (inception phase):生命周期目标
- 精化阶段 (elaboration phase):生命周期架构
- 构建阶段 (construction phase):初始运作功能
- 移交阶段 (transition phase):产品发布
每次迭代产生包括最终系统的部分完成的版本和任何相关的项目文档的基线,通过逐步迭代基线直接相互构建,直到完成最终系统。
统一过程的典型代表是 RUP (Ration Unified Process),RUP是UP 的商业扩展。