第9章 软件维护 (软件工程的近期进展、管理与环境)
- 软件产品交付用户后,就进入生存周期的最后一个时期 —— 运行时期
- 维护是生存周期中花钱最多、延续时间最长的活动
1. 软件维护的种类
-
目的:满足用户对已开发产品的性能与运行环境不断提高的需要,进而延长软件的寿命
-
定义:软件系统交付使用以后,为了改正或满足新的需要而修改软件的过程
-
种类:
1. 完善性维护(perfective maintenance) :加强软件功能为目标 2. 适应性维护(adaptive maintenance):为了适应运行环境变化 3. 纠错性维护(corrective maintenance):纠正软件在开发期间的遗留错误 4. 预防性维护(preventive maintenance):改进软件的可维护性、减少将来的维护工作量
2. 软件的可维护性
2.1 可维护性的含义
-
软件维护的含义:指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。
-
可维护性是衡量维护容易程度的一种软件属性
-
影响可维护性的软件属性(定性说法) :
可理解性(understandability) 可修改性(modifiability) 可测试性(testability)
2.2 提高可维护性的方法
- 提高软件的可维护性,最根本的目的是是每个开发人员懂得维护的重要性,在开发阶段就以减少今后的维护工作量为努力的目标,可以提供完整和一致的文档(帮助维护人员读懂程序,方便被维护软件的测试),采用现代化的开发方法
3. 软件维护的实施
-
维护申请单和软件修改报告单:这是维护时期新增加的两个文档,分别用于维护开始之前和结束之后
-
维护申请单(MRF,maintenance request form)又称修改申请单或软件问题报告单(SPR,software problem report)
-
维护的副作用:
1. 修改编码的副作用: 修改源代码时可能引入错误: 删除或修改一个标号、标识符、子程序 修改文件的打开或关闭 2. 修改数据的副作用 容易导致设计与数据不相容的错误可以有: 重新定义局部的或全局的常量 重新定义记录或文件的格式 重新初始化控制标志或指针 重新排列输入/输出或子程序的参数 3. 修改文档的副作用 对数据流、软件结构、 模块逻辑或任何其它有关特性进行修改时,必须对相关技术文档进行相应修改
4. 软件维护的管理
- 维护管理文档:维护申请单、软件修改报告单、维护日志、维护申请摘要报告(定期报告)、维护趋势图(不定期报告)
5. 软件配置管理
-
软件配置管理定义:对软件开发组所建立的软件的修改进行标识、组织和控制的艺术,其目标使减少错误和提高生产力
-
软件配置项:
软件过程的输出信息可以分为3个主要类别
- 计算机程序(源代码和可执行程序)
- 描述计算机程序的文档(针对技术开发者和用户)
- 数据(包含在程序内部或外部)
这些项包含了所有在软件过程中产生的信息,总称为软件配置项(software configuration item,简称SCI)
6. 软件再工程
- 软件再工程(software reengineering)含义:就是将新技术和新工具应用于老的软件的一种较“彻底”的预防性维护
- 软件工程不同于一般的软件维护,后者是局部的,以完成纠错或适应需求变化为目的,而软件再工程则是运用逆向工程、软件重构等技术,在充分理解原有软件的基础上,进行分解、综合,并重新构建软件,用以提高软件的可理解性、可维护性、可复用性或演化性
6.1 软件再工程过程模型
- 定义软件工程6种活动
6.2 逆向工程
- 逆向工程:从源代码出发,重新恢复设计文档和需求规格说明书
6.3 软件重构
- 软件重构又可区分为:
- 代码重构
- 数据重构
- 重构不改变系统的整体体系结构,否则就变成了正向工程
6.4 正向工程
- 正向工程:改变或重构现存系统