6 软件维护工程软





6.1 软件维护概述
软件变更可以考虑以下的几个策略:
( 1)软件维护。 不改变软件的基本
结构,仅对软件做局部性修改以响应
变更的需求。
( 2)体系结构转换。是系统的体系
结构发生彻底改变的重大的变更。
( 3)软件再工程。软件再工程是在






软件逆向工程 所获得信息的基础上,
对系统重新实现或重构,使得系统具
有更强的功能或性能,具有更好的可
维护性等。
软件再工程可能包括一些结构的修
改,但原则上,系统的体系结构不会
改变太大,也不增加新功能。
软件逆向工程 的基本思想方法是从
程序代码抽取设计信息,从而获得软
件的设计模型。






一、软件维护的概念
软件维护 是在软件已交付给用户使
用后, 为了改正错误, 或者满足用户
新的需求而修改软件的过程 。
软件维护一般不包括重大体系结构
的修改 。
维护工作量可能占了软件生命期整
个工作量的 70%以上 。
要进行软件维护的原因很多, 以下
列出了三种情况:






( 1)修改软件中的错误;
( 2)软件运行环境发生了变化;
( 3)用户要求增加软件新的功能或提
高软件的性能。
二、软件维护分类
1、纠错性维护
诊断和改正软件系统中潜伏下来的错
误,这样的活动称为纠错性维护。
2、适应性维护
为了适应新环境的变化而修改软件的






活动称为适应性维护。
3、完善性维护
为了改善、加强系统的功能和性能,
以满足用户新的要求,这样的维护活动
称为完善性维护。
4,预防性维护
为了改善软件系统的可维护性和可靠
性,以便减少今后对它们维护所需要的
工作量,为以后进一步改进软件打下良
好的基础,这样的维护称为预防性维护。






6.2 软件维护过程
软件维护过程又称为 软件维护活动 。
由于在软件的运行过程中,需要不断
地进行修改和完善,维护工作量逐年
上升。软件维护过程与软件类型、软
件开发过程以及人员因素有着密切的
关系。
软件维护过程的参考模型如图所示:












一、与软件维护工作量有关的因素
在维护过程,需要花费很大的工作量,
这关系到软件的维护成本问题。
与软件维护工作量有关的因素主要有
以下几点:
( 1)系统的大小。
( 2)程序设计语言。
( 3)系统的年龄。
( 4)数据库技术的应用。






( 5)先进的软件开发技术。
( 6)其他因素。
二, 维护工作量
用于维护的工作量可以分成 生产性活
动 和 非生产性活动 。 例如, 分析评价,
修改设计和实现的原代码等等是 生产性
活动 ;理解程序的功能, 解释与判断数
据结构, 接口特点, 性能的限度等等是
非生产性活动 。
维护工作量可以用一个模型表达:






M=P+K× exp( c- d)
其中,M是维护的工作量,P是生
产性工作量,K是经验常数,c是因
为缺乏好的方法和文档而导致软件
的复杂度,d是维护人员对软件熟
悉的程序。
结论:如果没有一个好的软件开
发途径,原来的开发人员不能参加
维护工作,则维护工作量将按指数
级增加。






三、软件维护组织
通常,并不需要建立一个正式的
维护机构,在一个维护过程中,每
一位参加维护的人员都要明确自己
的责任。但是,为了减少维护过程
的混乱,建立一种非正式的组织还
是有必要的。
软件维护组织如图所示:












四、软件维护报告
应该用标准的格式提出软件维护的申
请,维护申请报告是由软件组织外部提
交的文档,它是软件维护工作的基础。
五, 软件维护流程
软件维护流程如下页图示:
六、软件维护记录
为了估计软件维护的有效程序,应该
做好维护记录。
七、软件维护评价(见课本 P140)












6.3 软件维护的副作用与面临的问题
一、软件维护的副作用
由于修改软件而引起新的错误称为 软
件维护的副作用,这些新的错误又有可
能被潜伏下来。
软件维护的副作用主要有 3种:
( 1)修改代码产生的副作用
在一个地方发现错误后,要修改程序
代码,而修改一段程序代码可能波及到
别处,由此产生新的错误。






( 2)修改数据产生的副作用
由于修改了数据结构 ( 例如, 数据文
件的结构等 ), 导致软件设计与数据不
一致, 带来的不良后果 。
( 3) 文档产生的副作用
往往会出现的一种现象,当发现错误
后,程序员马上修改程序代码,但没有
及时的修改文档,这样,便产生 程序代
码与文档不一致,给以后的技术人员再
阅读文档时带来更大的困难。






二、重新验证程序
由于软件维护会产生副作用,所以,经
过修改后的软件,在提交给用户之前,应
该进行确认和测试,确保整个系统的正确
性。
( 1)静态确认。
( 2)计算机确认。
( 3)文档验收。
三, 软件维护面临的问题
造成软件维护困难性的原因是多方面的 。






目前,软件维护面临的问题主要有
以下几个:
( 1)理解别人编写的程序是困难的。
( 2)文档资料不足。
( 3)维护时间长。
( 4)软件设计时可能没有考虑将来的
维护。
( 5)通常软件人员不愿意参加维护工
作。






6.4 软件可维护性
一, 软件的可维护性度量
软件可维护性 是指纠正软件系统出
现的错误和缺陷, 以及为满足新的要
求进行修改, 扩充或压缩的容易程度 。
( 即:维护人员理解, 改正, 改动和
改进软件的难易程度 ) 。
影响可维护性有很多的因素,可以用
7个特性来度量软件的可维护性,
( 1)可理解性。
( 2)可靠性。






( 3)可测试性。
( 4)可修改性。
( 5)可移植性。
( 6)效率。
( 7)可用性。
二, 提高软件可维护性的途径
软件的可维护性对于延长软件的生存
期具有重要意义, 因此, 应该提高软件
的可维护性 。
有以下 5个方面:






( 1)建立明确的软件质量目标和优
先级。
( 2)使用提高软件质量的方法、工
具和技术。
( 3)进行明确的质量保证审查。
( 4)选择维护性好的程序设计语言。
( 5)改进程序的文档。
( 6)软件开发时应考虑维护。






6.5 软件再工程
软件再工程(再生)是软件工程
中的一类重新构建活动,它能够使
我们增进对软件的理解;提高软件
自身的可维护性、重用性和演化性
等。
新系统正向工程和软件再工程的
区别如图 (a)、图 (b)所示:












一、软件再工程活动
软件再工程主要有 6类活动:
库存目录分析, 文档重构, 逆向
工程, 代码重构, 数据重构, 正
向工程 。
这些活动并 不是线性顺序 进行
的。例如,有可能文档重构之前
必须进行逆向工程。
软件再工程过程模型如图所示,












软件再工程的主要活动,
1、库存目录分析
通过对库存目录的分析,则得到再工
程的侯选对象,然后,根据这些侯选对
象分配资源,并确定它们的优先级。
2、文档重构
当系统发生变化时,文档要更新,而
且必须进行重构。
3、逆向工程






又称为 反向工程,是以复原软件的
描述和设计为目标的一个分析过程。
软件的逆向工程是分析已有的程序,
寻求比源程序更高的抽象表示形式。
通过逆向工程,可以在已有的源程
序或者目标代码中抽取数据结构、体
系结构、程序设计等信息。
4、代码重构
代码重构的目标是生成一个设计,
并产生与原来程序相同的功能,但比原
来程序具有更高的质量。
5、数据重构
对数据结构的分析和重组以及对系统
中数据值的分析过程被称为数据再工程。
数据再工程有利于理解数据结构。
6、正向工程
通常,重构并不修改系统的体系结构。
如果重构扩展到模块边界之外,并涉及
软件体系结构,则重构变成了正向工程。












二、体系结构进化
早期,系统维护过程的变更只影响
局部范围,一般不涉及到系统的体系
结构。
20世纪 80年代开始,计算机系统的
状况发生了很大的变化,分布式系统
逐步取代集中式系统,越来越多的企
业纷纷将原有的集中式主机型系统改
造为分布式客户机 /服务器系统。
三、软件再工程的重构技术






几种软件再工程的相关技术:
( 1) 改进软件
( 2)理解软件
( 3)获取、保存、扩充软件知识
四, 软件再工程的风险
软件再工程可能会遇到风险,软件管
理人员必须有所准备,采取适当的对策,
减少风险所带来的损失。
( 1) 过程风险 ( 2) 人员风险 ( 3) 应
用问题风险 ( 4) 技术风险 ( 5) 工具
风险 ( 6) 策略风险