电子科大软件工程网络课件
8
第八章 软件维护
8.1 软件维护的基本概念
8.2 软件维护的过程 8.3 软件维护技术 8.4 软件可维护性 8.5 软件再工程
8.1软件维护的基本概念
8.1 软件维护的基本概念
软件维护是指软件系统交付使用以后,为了改正错误或满足新的 需求而修改软件的过程。
软件维护工作处于软件生命期的最后阶段,维护阶段是软件生存 期中最长的一个阶段,其花费高达整个软件生命期花费的约60-70%。 因此,应充分认识到维护工作的重要性和迫切性,提高软件的可维护 性,减少维护的工作量和费用,延长已开发软件的生命期,以发挥其 应有的效益。
点击选择 维护内容
纠错性维护(Corrective Maintenance)
适应性维护(Adaptive Maintenance)
预防性维护(Preventive Maintenance)
8.1.2 软件维护的类型
图8.1表示各种维护所占的比例,显 然完善性维护所占的比例最大。
预防性 维护4%
二、软件维护的策略
针对以上几种类型的维护,可采取相 应的维护策略,以提高维护效率,降低维 护成本。
1、纠错性维护策略
开发过程中采用新技术,利用应用软 件包,提高系统结构化程度,进行周期性 维护审查等。
完善性 维护50%
纠错性 维护 25%
适应性 维护21%
纠错性维护 适应性维护 完善性维护 预防性维护
图8.1 各类维护所占的比例Βιβλιοθήκη 8.1.4 软件维护的代价
二、软件维护的工作量模型
维护活动分为生产性活动和非生产性活动。 生产性活动 包括分析评价、修改设计和编写程序代码等。 非生产性活动 包括理解程序代码,解释数据结构,接口特点和设 计约束等。 Belady 和 Lehman 提出软件维护工作模型:
M=P+K*EXP(C - D) 其中:
M—维护工作的总工作量 P—生产性活动的工作量 K—经验常数 C—程序复杂度(由非结构化维护引起的) D—对维护软件熟悉程度的度量 显然,若C越大,D越小,则维护工作量成指数增长,为此,必须 防止出现非结构化维护并尽可能由熟悉软件的原开发人员参加维护。
8.2 软件维护的过程
8.2 软件维护的过程
由于软件的发展非常迅速,显然,对软件进行维护的目的是为了纠 正软件开发过程未发现的错误,增强、改进和完善软件的功能和性能, 以适应软件的发展,延长软件的寿命。
8.1.2 软件维护的类型
8.1.2 软件维护的类型
一、按照不同的维护目的,维护工作可分成4类。
完善性维护(Perfective Maintenance)
8.1.3 软件维护的特性
一、时间长、工作量大、成本高
维护阶段是软件生存期中最长的一个阶段,软件维护的工作量占整个 软件生存期的70%以上(图8.2),而且还在逐年增加。因此,如何减少 软件维护的工作量,降低软件维护的成本,就成为提高软件维护效率和质 量的关键。
二、维护的副作用
维护的副作用是指由于修改程序而导致新的错误 或者新增加一些不必要的活动。
太累了!受不了啦! 几万行程序怎么改 哦???
结构化维护 — 指软件开发过程是按照软件工程方 法进行的,开发各阶段的文档齐全,软件的维护过程, 有一整套完整的方案、技术、审定过程及文档。
可以看到,维护工作的难度及工作量的大小,明显的与前期的开发工作 密切相关。
8.1.4 软件维护的代价
8.1.4 软件维护的代价
8.1.3 软件维护的特性
三、软件维护的困难
由于软件维护工作通常并不由软件的设计和开发人员来完成,维护人 员首先要对软件各阶段的文档和代码进行分析、理解。因而出现了理解别 人的程序困难、文档不齐等问题,尤其是对大型、复杂系统的维护,更加 困难和复杂,甚至是不可能的!
1、结构化维护与非结构化维护
非结构化维护 — 缺乏必要的文档说明,文档缺少 或者不一制,难于确定数据结构、系统接口等特性,这 样的维护工作令人生畏,事倍功半。
8.1.1 软件维护的定义
8.1.1 软件维护的目的
软件维护是指在软件运行/维护阶段对软件产品进行的修改活动。 通常要求进行维护的主要原因有: 在运行中发现在测试阶段未能发现的软件错误和设计缺陷; 需要改进设计,以增强软件的功能,提高软件的性能; 要求已运行的软件能适应特定的硬件、软件、外部设备和通信设备 等的工作环境,或是要求适应已变动的数据或文件; 为使投入运行的软件与其它相关的程序有良好的接口,以利于协同 工作; 为使运行软件的应用范围得到必要的扩充。
一、软件维护工作量大
维护费用高达开发费用的60% — 70%,而且逐年上涨。维护中还可 能引入新的潜在错误。要减少维护工作量,首先要考虑影响软件维护的 因素。
影响软件维护工作量和成本的因素很多,主要有以下方面: 1、系统的大小 系统越大,功能就越复杂,维护工作量就越大。 2、程序设计语言 语言的功能越强,生成程序所需要的指令(程序) 越少,而且程序的可读性也越好,维护工作量也就越小。 3、系统年龄 系统越老,修改维护的次数就越多,结构也就越乱。 因此维护工作量也就越大。 4、软件开发新技术的应用 软件开发过程中,使用先进的分析和设 计技术,以及程序设计技术,如:面向对象的技术、构件技术、可视化 程序设计技术等,可以减少维护工作量。
1、修改代码的副作用
其余 29%
维护 71%
在修改源代码时,可能引起的错误。 2、修改数据的副作用
图8.2 维护工作比例
在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导 致软件出错。数据副作用就是修改软件信息结构导致的结果。
3、修改文档的副作用
对软件的数据流、软件结构、模块逻辑等进行修改时,必须对相关技 术文档进行相应修改。但修改文档过程会产生新的错误,导致文档与程序 功能不匹配,缺省条件改变等错误,产生文档的副作用。
2、适应性维护策略
对可能变化的因素进行配置管理,将因环境变化而必须修改的部分局部 化,即局限于某些程序模块等。
3、完善性维护策略
除了可以使用前面两类维护的策略外,还有使用功能强、使用方便的工 具,采用原型化方法开发等,也可提高可维护性。
4、预防性维护策略 常采用提前实现、软件重用等技术。
8.1.3 软件维护的特性