软件维护与软件管理

软件维护

软件工程 第五部分 第11章,主讲人:李欣

Created: 2024-03-05 Tue 16:42

0.1. 互动课堂

Click to host the seminar.

0.2. 签到

https://dash.memopixel.com/tool/attendance/

0.3. 本次课的目标

  • 第五部分:软件维护与软件管理
    • 第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. 影响维护工作量的因素

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

1.3. 软件维护的策略

参考教材

  • 11.1.3 pp.271-272

2. 软件维护活动

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

2.1. 软件维护申请报告

维护申请报告 是由软件组织外部提交的文档,它是计划维护工作的基础。 软件组织内部应相应地制作 软件修改报告(Software Change Report, SCR)

制作软件修改报告时应指明的几点
  • 所需修改变动的性质;
  • 申请修改的优先级;
  • 为满足某个维护申请报告所需的工作量;
  • 预计修改后的状况。

2.2. 软件维护工作流程

workflow-for-software-maintenance.png

Figure 1: 软件维护的工作流程

2.3. 维护档案记录

维护档案记录包括的方面
  • 程序名称
  • 源程序语句条数
  • 机器代码指令条数
  • 所用的程序设计语言
  • 程序安装的日期
  • 程序安装后的运行次数
  • 与程序安装后运行次数有关的处理故障次数
  • 程序改变的层次及名称
  • 修改程序所增加的源程序语句条数
  • 修改程序所减少的源程序语句条数
  • ……

2.4. 维护评价

评价维护活动时可参考的度量值
  • 每次程序运行时的平均出错次数;
  • 花费在每类维护上的总 人时 数;
  • 每个程序、每种语言、每种维护类型的程序平均修改次数;
  • 因为维护,增加或删除每个源程序语句所花费的平均 人时 数;
  • 用户每种语言的平均 人时 数;
  • 维护申请报告的平均处理时间;
  • 各类维护申请的百分比。

3. 逆向工程

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

4. 重构

在程序内部结构中可能出现的各种不合理情形称为 代码坏味道 , 它是设计质量低下的表现。此时就需要 重构

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

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

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

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. 系统维护日志