软件维护

(第五部分:软件维护与软件管理,第11章)

李欣

Created: 2022-06-07 Tue 19:16

0.1. 互动课堂

Click to host the seminar.

0.2. 本次课的目标

第五部分:软件维护与软件管理

第11章:软件维护

  • 软件维护的概念
  • 软件维护活动
  • 逆向工程
  • 重构
  • 程序修改的步骤和修改的副作用
  • 软件的维护性
  • 提高软件维护性的方法

1. 软件维护的概念

1.1. 软件维护的定义

在软件运行/维护阶段对软件产品所进行的修改就是所谓的 维护

根据维护工作的性质,维护活动可以分为以下四种类型:

  • 改正性维护(corrective maintenance)
  • 适应性维护(adaptive maintenance)
  • 完善性维护(perfective maintenance)
  • 预防性维护(preventive maintenance)
,改正性维护(20%) ,适应性维护(25%) ,完善性维护(50%) ,其他维护(5%) ,0.2 ,0.25 ,0.5 ,0.05
,软件生存期内维护所占成本(70.8%) ,其余成本(29.2%) ,0.708 ,0.292

1.2. 影响维护工作量的因素

  • 系统规模
  • 程序设计语言
  • 系统年龄大小
  • 数据库技术的应用水平
  • 所采用的软件开发技术及软件开发工程化的程度
  • 其他
    • 应用问题的类型
    • 数学模型
    • 任务的难度
    • 开关与标记
    • IF嵌套深度
    • 索引或下标数

1.3. 软件维护的策略

2. 软件维护活动

  • 确定实施维护的机构;
  • 明确提出维护申请报告的过程及评价的过程;
  • 为每一个维护申请规定标准的处理步骤;
  • 建立维护活动的记录制度以及规定评价和评审的标准。

3. 逆向工程

软件的 逆向工程 是指通过 分析目标系统 来标识 系统的部件 及其 交互关系 , 然后使用其他形式或者更高层的抽象 创建系统表现 的过程。

4. 重构

  • 重复的代码
  • 过长的方法
  • 过大的类
  • 过多的方法参数
  • 同样的switch语句散布在多处
  • 过多的注释

5. 程序修改的步骤和修改的副作用

  • 分析和理解程序
  • 修改程序
    • 制定程序的修改计划
    • 修改代码,以适应变化
  • 修改程序的副作用及其控制
    • 修改代码的副作用
    • 修改数据的副作用
    • 文档的副作用
  • 重新验证程序
    • 静态确认
    • 确认测试
    • 维护后的验收

6. 软件的维护性

6.1. 软件维护性定义

软件维护性(maintainability) 是评价软件产品质量的一项重要指标。

  • 易分析性(analyzability)
  • 易变更性(changeability)
  • 稳定性(stability)
  • 测试性(testability)
  • 维护性符合性(maintainability compliance)

6.2. 软件维护性度量

  • 内部维护性度量 是在软件 产品尚未开发完成 时实施的度量;
  • 外部维护性度量 是在 产品完成 后,经运行开发出的程序而获得的维护性数据。
Table 1: 内部维护性度量与外部维护性度量
考虑的方面 内部维护性度量 外部维护性度量
度量的目的 预测修改软件产品所需工作量 度量修改软件产品的工作量
度量的时机 软件产品设计和编程阶段 代码完成后测试或运行时
度量的对象 对软件中间产品实施静态测量 执行代码收集数据

7. 提高软件维护性的方法

  1. 使用提高软件维护性的开发技术和工具
    1. 模块化
    2. 结构化程序设计
    3. 使用结构化程序设计技术,提高现有系统的维护性
  2. 实施开发阶段产品的维护性审查
    1. 检查点审查
    2. 验收审查
    3. 周期性的维护审查
    4. 对软件包进行审查
  3. 改进文档
    1. 系统开发日志
    2. 错误记载
    3. 系统维护日志