? 2008 BUPT TSEG
软件工程模型与方法
Models & Methods of Software
Engineering
第十三章 软件维护修佳鹏 xiujiapeng@bupt.cn
2? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心本章内容
13.1 软件维护概述
13.2 软件维护活动
13.3 修改程序的步骤和副作用
13.4 软件的可维护性
13.5 软件的逆向工程和再工程
3? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1 软件维护概述
13.1.1 软件维护的定义
13.1.2 软件维护的分类
13.1.3 影响软件维护工作量的因素
13.1.4 软件维护中的典型问题
13.1.5 软件维护的策略
4? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.1 软件维护的定义
所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程 。
作为软件生命周期的最后一个环节,软件维护将持续很长时间,往往是软件生命周期中最长的阶段。
大型软件维护成本高达开发成本的 4倍左右。目前
,国内外许多软件开发组织把 60%以上的人力用于维护已有的软件,而且这个百分比还有继续增长的趋势。
所以,软件的可维护性已经日益成为软件设计和开发所追求的一个重要目标。
5? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心软件维护的目的
改正在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷
因在软件使用过程中数据环境发生变化或处理环境发生变化,需要修改软件以适应这种变化
用户和数据处理人员在使用时常提出改进现有功能、增加新的功能、以及改善总体性能的要求,为满足这些要求,就需要修改软件把这些要求纳入到软件之中
6? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.2 软件维护的分类
改正性维护
为了识别和纠正软件错误、改正软件性能上的缺陷、
排除实施中的误使用而进行的诊断和改正错误的过程
,就叫做改正性维护
适应性维护
为了使软件适应外部环境的变化,而去修改软件的过程就叫做适应性维护
完善性维护
为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护
7? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.2 软件维护的分类
预防性维护
这种维护是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础
8? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.3影响软件维护工作量的因素
影响维护工作量的程序特性有,
系统大小
程序设计语言
系统年龄
数据库技术的应用
先进的软件开发技术
其它
9? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.4软件维护中的典型问题
软件维护中经常遇到的典型的问题,
理解别人写的程序通常非常困难
需要维护的软件往往没有合格的文档,或者文档资料明显不足
不能指望开发人员仔细说明软件
决大多数软件在设计时没有考虑将来的修改,
从而导致了软件的可维护性很差
软件维护不是一项吸引人的工作,由于以上原因经常导致维护出现困难,从而使软件维护人员产生挫折感
10? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.1.5软件维护的策略
根据影响软件维护工作量的各种因素,针对三种典型的维护,James Martin等提出了一些策略,以控制维护成本,
改正性维护
适应性维护
完善性维护
11? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2 软件维护活动
13.2.1 维护机构
13.2.2 软件维护申请报告
13.2.3 软件维护工作流程
13.2.4 软件维护记录及其评价
13.2.5 软件维护的标准化
12? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.1 维护机构
13? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.2软件维护申请报告
所有的软件维护申请应按规定的方式给出
。软件维护组织通常提供维护申请报告(
MRP,Maintenance Request Form),由申请维护的用户填写
软件组织内部相应地做出软件修改报告(
SCR,Software Change Report),其中说明软件中所需修改的变动的性质、申请修改的优先级、为满足该维护申请报告所需要的工作量、预计修改后的状况等内容
14? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.3软件维护工作流程
15? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.3软件维护工作流程
在软件维护的过程中,有下列数据需要记录:
16? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.3软件维护工作流程
维护“性能”方面的度量值,
每次程序运行时的平均出错次数
花费在每类维护上的总“人时”数
每个程序、每种语言、每种维护类型的程序平均修改次数
因为维护,增加或删除每个源程序语句所花费的平均
“人时”数
用于每种语言的平均“人时”数
维护申请报告的平均处理时间
各类维护申请的百分比
17? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.2.4软件维护的标准化
1993年 IEEE计算机学会的软件工程标准分委会颁布了 IEEE1219,即,软件维护标准,,
修改请求
分类与鉴别
分析
设计
实现
系统测试
验收测试
交付
18? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3 修改程序的步骤和副作用
13.3.1 分析和理解程序
13.3.2 修改程序
13.3.3 修改程序的副作用
13.3.4 重新验证程序
19? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.1 分析和理解程序
在进行软件维护之前,必须:
理解程序的功能和目标
掌握程序的结构信息
了解数据流信息
了解控制流信息
理解程序的操作 (使用 )要求
为了容易地理解程序,要求自顶向下地理解现有源程序的程序结构和数据结构
20? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.1 分析和理解程序
分析程序结构图
数据跟踪
控制跟踪
在分析的过程中,充分阅读和使用源程序清单和文档,分析现有文档的合理性
充分使用由编译程序或汇编程序提供的交叉引用表、符号表、以及其它有用的信息
如有可能,积极参加开发工作
21? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.2 修改程序
设计程序的修改计划修改计划的内容主要包括:
规格说明信息
维护资源
人员
提供:纸面、计算机媒体等通常,可采用自顶向下的方法,在理解程序的基础上,进行以下操作:
22? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.2 修改程序
研究程序的各个模块、模块的接口、数据库,
从全局的观点,提出修改计划
依次把要修改的、以及那些受修改影响的模块和数据结构分离出来
详细地分析要修改的、以及那些受变更影响的模块和数据结构的内部细节,设计修改计划,
标明新逻辑及要改动的现有逻辑
向用户提供回避措施
23? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.2 修改程序
修改代码,以适应变化
正确、有效地编写修改代码
要谨慎地修改程序,尽量保持程序的风格及格式,要在程序清单上注明改动的指令
不要删除程序语句,除非完全肯定它是无用的
不要试图共用程序中已有的临时变量或工作区
插入错误检测语句
在修改过程中做好修改的详细记录,消除变更中任何有害的副作用 (波动效应)
24? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.3 修改程序的副作用
所谓副作用是指因修改软件而造成的错误或其它不希望发生的情况,会带来三种副作用:
修改代码的副作用,引入新错误
修改数据的副作用,结构不匹配导致出错
文档的副作用,文档与程序不匹配
为了控制因修改而引起的副作用要做到:
按模块把修改分组
自顶向下地安排被修改模块的顺序
每次修改一个模块
对于每个修改了的模块,在安排修改下一个模块之前
,要确定这个修改的副作用 。
25? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.3.4 重新验证程序
在将修改后的程序提交用户之前,需要用以下的方法进行充分的确认和测试,以保证整个修改后的程序的正确性
静态确认
计算机确认
维护后的验收
26? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.4 软件的可维护性
软件的可维护性是软件开发阶段各个时期的关键目标。目前广泛使用如下七个特性来衡量程序的可维护性
可理解性,可理解性表明人们通过阅读源代码和相关文档,了解程序功能及其如何运行的容易程度。
可靠性,可靠性表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。
据程序错误统计数字,进行可靠性预测 ;
根据程序复杂性,预测软件可靠性
27? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.4 软件的可维护性
可测试性,可测试性表明论证程序正确性的容易程度。
可修改性,可修改性表明程序容易修改的程度。
可移植性,可移植性表明程序转移到一个新的计算环境的可能性的大小。
效率,效率表明一个程序能执行预定功能而又不浪费机器资源的程度。
28? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.4 软件的可维护性
可使用性,从用户观点出发,把可使用性定义为程序方便、实用、及易于使用的程度。
程序是否具有自描述性
程序是否能始终如一地按照用户的要求运行
程序是否让用户对数据处理有一个满意的和适当的控制
程序是否容易学会使用
程序是否使用数据管理系统来自动地处理事务性工作和管理格式化、地址分配及存储器组织
程序是否具有容错性
程序是否灵活
29? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心各类维护中的侧重点改正性维护 适应性维护 完善性维护可理解性?
可测试性?
可修改性
可 靠 性?
可移植性?
可使用性
效 率?
30? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.4 软件的可维护性
其它间接定量度量可维护性的方法
31? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5 软件的逆向工程和再工程
13.5.1 基本概念
13.5.2 逆向工程
13.5.3 软件再工程
32? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.1 基本概念
什么是逆向工程软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序表示的过程。逆向工程是设计恢复的过程。逆向工程工具可以从已存在程序中抽取数据结构、体系结构和程序设计信息
什么是再工程再工程,也叫做复壮(修理)或再生。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来改建或重构现有的系统,以改进它的综合质量
33? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.2 逆向工程
34? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程是一类软件工程活动,是一个工程过程,它将逆向工程、重构和正向工程组合起来,
将现存系统重新构造为新的形式
实施软件再工程好处:
降低软件演化的风险
补偿软件的投资
易于进一步变更
再工程有着广阔的市场
再工程是推动自动软件维护发展的动力
35? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程的过程模型
36? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程技术
37? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程技术
38? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程技术
39? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
13.5.3 软件再工程
软件再工程的风险可能出现的风险有以下 6种,
过程风险
人员风险
应用风险
技术风险
工具风险
策略风险