一、概述
软件维护是软件生命周期的最后一个阶段。总体来说软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需的工作量,降低软件系统的总成本。因此软件维护过程不可或缺。
二、软件维护定义
软件维护:就是软件已交付使用之后,为了改正错误或满足新的需要而修改的过程。
软件维护活动通常有四类:
- (50%~66%)完善性维护:在使用软件过程中用户提出增加新功能或修改已有功能的建议
- (18%~25%)适应性维护:为了适应外部环境变化而进行的
- (17%~21%)改正性维护:为了纠正在使用过程中暴露出来的错误而进行改正
- (4%左右)预防性维护:为了给未来的改进奠定更好的基础而修改软件
预防性维护方法是由Miller提出来的,他把这种方法定义为:“把今天的方法学应用到昨天的系统上,以支持明天的需求”
三、软件维护特点
—>软件两种维护差别巨大。
两种类型:
(1)非结构化维护(需要付出很大代价)
软件配置的唯一成分是程序代码,此时的维护活动从艰苦地评价程序代码开始,由于程序内部文档不足而使评价困难;对于软件结构、全程数据结构、系统接口、性能和设计约束等理解往往出现偏差;且对程序代码所做的改动后果也难以估量。
因此这种维护方式是 没有使用良好定义的方法学开发出来的软件的必然结果(没有文档)
(2)结构化维护
如果有一个完整的软件配置存在,那么维护工作从评价设计文档开始,确定软件结构特点、性能特点以及接口特点等。
—>软件维护的代价高昂。
—>软件维护的问题很多。
四、软件维护过程
本质上是修改和压缩了的软件定义和开发过程。
一套复审标准
- 维护组织
- 维护报告
- 维护的事件流
- 保存维护记录
- 评价维护活动
五、软件的可维护性
1、可以把软件的可维护性定义为:维护人员理解、改正、改动或改进这个软件的难以程度。
❗️决定软件可维护性的因素:
- 可理解性:是指外来读者理解软件结构、功能、接口和内部处理过程之难易度
- 可测试性:是指诊断和测试的容易程度取决于软件容易理解的程度。
对于程序模块来说,可以用程序复杂度衡量它的可测试性。
- 可修改性:耦合、内聚、信息隐藏、局部化等都影响可修改性。
- 可移植性:是指把程序从一种计算机环境 转移到 另一种计算机环境(硬件配置和操作系统)的难易程度。
- 可重用性:是指同一事物不做修改或稍加改动就在不同环境中多次重复使用。
2、文档
文档是影响软件可维护性的决定因素。
文档分为两类:
- 用户文档(是用户了解系统的第一步,应使用户获得准确的初步印象
其至少具备五方面内容:1⃣️功能描述 2⃣️安装文档 3⃣️使用手册 4⃣️参考手册 5⃣️操作员指南
- 系统文档
所谓系统文档指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。
3、可维护性复审
六、软件再工程过程
基本概括为六类活动:
- 库存目录分析
- 文档重构
- 逆向工程(恢复设计结果的过程
- 代码重构
重构并不修改整体的程序体系结构,仅关注个体模块的设计细节以及在模块中定义的局部结构
- 数据重构
与代码重构不同,数据重构发生在相当低的抽象层次上,是一种全范围的再工程活动
- 正向工程(革新或改造的过程