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) 策略风险
件
工
程
原
理
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) 策略风险