课件

15.2 软件演化与维护.pdf

软件变化原因

可变性是软件的本质特性,软件在投入使用之后由于出现新的需求、商业环境的变化、修复缺陷、软硬件升级以及进一步提升性能等原因,都会导致软件的不断修改,这种变化说明软件具有使用价值,但是修改又会带来副作用,所以关键的问题是需要采取适当的方法,有效地实施和管理这种变化。

Lehman法则

IBM 公司的 Lehman 博士通过对 IBM OS360 系统的研究提出了关于演化的一系列法则:
CleanShot 2022-05-14 at 8 PM.49.40@2x.png

  • 系统维护是不可避免的,当系统环境发生改变时就会产生新的需求,系统就要修改。修改后的系统重新投入使用又会促进环境的变化,于是进入新一轮的修改循环
  • 随着系统的改变,系统的结构有可能发生退化
  • 大型系统自身的动态特性是在开发早期建立的,它决定了系统维护过程中的一个总趋势,和系统变更可能次数的一个极限
  • 绝大多数大型项目是在一种饱和状态下进行运作,也就是说资源和人员的变化对系统长期演化的影响是不易察觉的
  • 向系统添加新功能难免会引入新的缺陷,一个大的功能增量意味着后面要紧跟着一个版本来修补系统新引入的缺陷,这个修补版本中新的功能会比较少,所以一个版本中如果有大的功能增量,在预算时应该考虑还需要缺陷的修复

软件演化策略

软件演化包括软件维护软件再工程两种策略。

  • 软件维护:是为了修改软件的缺陷或者增加新的功能,而对软件进行修改,这种修改通常只发生在局部,般不会改变整个结构。
  • 软件再工程:是为了避免软件本身的退化,而对软件的一部分进行重新地设计和构造,以便提高软件的可维护性和可靠性。

软件维护

软件维护类型

软件维护包括改正性维护、适应性维护和完善性维护三种类型。其中:

  • 改正性维护:是修改使用之后发现的缺陷
  • 适应性维护:是修改软件使它适应不同的操作环境
  • 完善性维护:是增加或者修改系统功能,使它适应业务的变化

完善性维护的比例最高,大概达到所有维护的2/3左右:
CleanShot 2022-05-14 at 8 PM.57.21@2x.png

软件维护成本

软件维护的成本是非常高的,通常是开发成本的 1-4 倍以上
CleanShot 2022-05-14 at 8 PM.59.25@2x.png

影响维护成本的因素

软件维护工作受到很多因素的影响。

  • 大部分情况下负责维护的人员并不是原来的开发人员,维护人员需要对系统进行理解和掌握才能做好维护。
  • 开发人员往往不喜欢做软件的维护,感觉没有成就感。
  • 维护人员的技术水平也会对维护工作产生很大影响
  • 系统使用越长久也就越难以维护,比如说很多银行系统甚至是20世纪60年代开发的,现在已经很少有人熟悉当时的编程语言

软件维护过程

CleanShot 2022-05-14 at 9 PM.03.55@2x.png
一般的软件维护过程需要分析变更产生的影响,再决定是立即修改、在后续版本修改或者暂时不修改。变更实现过程也与正常开发过程类似,有时候会有一些需要紧急处理的情况,比如说出现了严重缺陷需要马上修复,这时就会直接修改源代码进行解决。

软件再工程

当软件的修改造成系统结构受到影响,或者某些部分修改频繁,这个时候可以考虑用再工程的方法进行维护。再工程就是通过再构造和再文档化的方法,使系统更易于维护,它不会改变系统的功能。

优势:

  • 减少风险:重新开发一个在用的系统具有很高的风险,可能会有开发问题、 人员问题和规格说明问题
  • 降低成本:再工程的成本比重新开发软件的成本要小得多

再工程过程

CleanShot 2022-05-14 at 9 PM.08.41@2x.png
再工程需要对现有系统进行理解和转换。具体的方法,是首先使用逆向工程把系统重新文档化,然后进一步修改程序结构,同样也需要对数据进行再工程,最后得到一个改善了结构的再工程系统。

逆向工程

CleanShot 2022-05-14 at 9 PM.10.16@2x.png
逆向工程和开发过程相反,它是从源代码得到软件系统的规格说明和设计信息,现在也有很多逆向工程的工具,但是它们在实际应用中存在一些障碍。由于软件缺少形式化的表示方法,加上代码编写不规范或者结构比较混乱,在用工具进行逆向工程的时候,有可能得到的建模信息没有太大价值,所以逆向工程仍然是一个在探索的软件工程领域。