软件维护与演化

软件维护

软件可修改性与软件维护

在将产品交互给用户后进行维护工作,主要是为了保证产品的正常运转人进行的使用帮助、故障解决喝磨损处理等工作。

软件不会磨村,但是软件的维护涉及到人们需要经常“修改软件”。

软件维护:

软件维护是在交付之后修改软件系统或其部件的活动过程,以修正缺陷、提高性能或其他属性、适应变化的环境

软件维护的类型

软件的变更情景:

  • 问题发生了改变
  • 环境发生了改变
  • 软件产品中存在缺陷

软件维护类型:

  • 完善性维护:满足新需求,增加新功能
  • 适应性维护:使软件能适应新的环境
  • 修正性维护:排除软件产品中遗留的缺陷
  • 预防性维护:使软件产品在将来可维护,提升可维护性的软件修改工作

软件维护的高代价性

image-20220607103453814

为什么在数量上少于新开发需求,但是变更需求却耗费了比新开发大得多的成本?

软件维护的困难性

  • 程序理解

    • 修改过程中,不管被修改的是哪个部分,开发者都需要全面理解整个软件系统的结构和行为,才能确定需要修改的程序位置和修改方法。所以,也要理解程序的代码。

    • 维护时间的50%~90%被消耗在了程序理解上

    • 维护人员不是程序代码的编写者,只能靠文档和代码片段拼接来理解编写者的思路和对系统的整体理解。

  • 影响分析

    • 开发软件时,具体功能和需求并不是各自独立实现的。程序代码片段和需求之间是多对多的复杂关系。

    • 每修正一个缺陷,都有20%~50%的概率引入新的缺陷。

软件维护中的很多困难和问题根源于软件开发阶段。

开发可维护的软件

  • 预测变更并将其独立封装,便于修改时的程序定义与理解,防止修改时的连锁反应。
    • 分析需求的易变性,尽可能发现和预测可能的变更。
    • 为变更进行设计,开发人员需要进行关注点分离,使用信息隐藏等设计思想为可能的变更进行设计,将其封装起来。
  • 为后期系列程序和进行影响分析提供额外的便利。
    • 编写详细的技术文档并保持更新。
    • 保证代码的可读性。
    • 维护需求跟踪链。
    • 维护回归测试基线。

软件维护过程

image-20220607111132510

问题/修改的标识、分类与划分优先级