第七章软件维护 复习要求 1.了解软件质量定义和软件质量度量。 2.了解软件维护的类型与策略 3.了解软件维护的过程与管理方法。 4.了解可维护性的概念 5.了解提高可维护性的方法 6.了解软件逆向工程与再工程的概念 二、内容提要 1.软件质量的概念 (1)软件质量的定义 关于软件质量的定义,曾给出过多种定义 ANSI/ IEEE Std729-1983定义软件质量为“与软件产品满足规定的和隐含的需求的能 力有关的特征或特性的全体” MJ. Fisher定义软件质量为“所有描述计算机软件优秀程度的特性的组合” 也就是说,为满足软件的各项精确定义的功能、性能需求,符合文档化的开发标准,需 要相应地给出或设计一些质量特性及其组合,作为在软件开发与维护中的重要考虑因素。如 果这些质量特性及其组合都能在产品中得到满足,则这个软件产品质量就是高的 软件质量反映了以下三方面的问题: 软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。 规范化的标准定义了一组开发准则,用来指导软件人员用工程化的方法来开发软件 如果不遵守这些开发准则,软件质量就得不到保证。 ■往往会有一些隐含的需求没有显式地提出来。如软件应具备良好的可维护性。如果软 件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证 软件质量是各种特性的复杂组合。它随着应用的不同而不同,随着用户提出的质量要求 不同而不同。因此,有必要讨论各种质量特性,以及评价质量的准则,还要介绍为保证质量 所进行的各种活动。 (2)软件质量特性与质量模型 质量特性 软件质量特性,反映了软件的本质。讨论一个软件的质 量,问题最终要归结到定义软件的质量特性。而定义一个软 件的质量,就等价于为该软件定义一系列质量特性 评价门评价评价 准则义准则又准则 人们通常把影响软件质量的特性用软件质量模型来描 述。已有多种有关软件质量模型的方案。它们共同的特点是 量度量 把软件质量特性定义成分层模型。最基本的叫做基本质量特 性,它可以由一些子质量特性定义和度量。子质量特性在必图71MCl质量模型框架
1 第七章 软件维护 一、复习要求 1. 了解软件质量定义和软件质量度量。 2. 了解软件维护的类型与策略。 3. 了解软件维护的过程与管理方法。 4. 了解可维护性的概念。 5. 了解提高可维护性的方法。 6. 了解软件逆向工程与再工程的概念 二、内容提要 1. 软件质量的概念 (1) 软件质量的定义 关于软件质量的定义,曾给出过多种定义。 ▪ ANSI/IEEE Std 729-1983 定义软件质量为“与软件产品满足规定的和隐含的需求的能 力有关的特征或特性的全体”。 ▪ M.J. Fisher 定义软件质量为“所有描述计算机软件优秀程度的特性的组合”。 也就是说,为满足软件的各项精确定义的功能、性能需求,符合文档化的开发标准,需 要相应地给出或设计一些质量特性及其组合,作为在软件开发与维护中的重要考虑因素。如 果这些质量特性及其组合都能在产品中得到满足,则这个软件产品质量就是高的。 软件质量反映了以下三方面的问题: ▪ 软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。 ▪ 规范化的标准定义了一组开发准则,用来指导软件人员用工程化的方法来开发软件。 如果不遵守这些开发准则,软件质量就得不到保证。 ▪ 往往会有一些隐含的需求没有显式地提出来。如软件应具备良好的可维护性。如果软 件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证。 软件质量是各种特性的复杂组合。它随着应用的不同而不同,随着用户提出的质量要求 不同而不同。因此,有必要讨论各种质量特性,以及评价质量的准则,还要介绍为保证质量 所进行的各种活动。 (2) 软件质量特性与质量模型 软件质量特性,反映了软件的本质。讨论一个软件的质 量,问题最终要归结到定义软件的质量特性。而定义一个软 件的质量,就等价于为该软件定义一系列质量特性。 人们通常把影响软件质量的特性用软件质量模型来描 述。已有多种有关软件质量模型的方案。它们共同的特点是: 把软件质量特性定义成分层模型。最基本的叫做基本质量特 性,它可以由一些子质量特性定义和度量。子质量特性在必 图 7.1 McCall 质量模型框架 评价 准则 度量 质量特性 评价 准则 评价 准则 度量 度量
要时又可由它的一些子质量特性定义和度量。 早在1976年,由 Boehm等提出软件质量模型的分层方案。1979年 Mccall等人改进 Boehm 质量模型又提出了一种软件质量模型。模型的三层次式框架如图7.1所示。质量模型中的质 量概念基于11个特性之上。而这11个特性分别面向软件产品的运行、修正、转移。它们与 特性的关系如图72所示。 McCal等认为,特性是软件质量的反映,软件属性可用做评价准 则,定量化地度量软件属性可知软件质量的优劣。 可维护性 可移植性 可测试性 可复用性 灵活性 产品修正产品转移 互连性 产品运行 正确性可靠性效率可使用性完整性 图72 McCall软件质量模型 Mccall等人的质量特性定义如下: 正确性在预定环境下,软件满足设计规格说明及用户预期目标的程度。它要求软件本身没 可靠性软件按照設计要求,在规定时间和条件下不出故障,持续运行的程度 效率为了完成预定功能,软件系统所需的计算机资源的多少。 完整性为某一目的而保护数据,避免它受到偶然的或有意的破坏、改动或遗失的能力 可使用性对于一个软件系统,用户学习、使用软件及为程序准备输入和解释输出所需工作量的 可维护性为满足用户新的要求,或当环境发生了变化,或运行中发现了新的错误时,对一个已 投入运行的软件进行相应诊断和修改所需工作量的大小 可测试性测试软件以确保其能够执行预定功能所需工作量的大小 灵活性修改或改进一个已投入运行的软件所需工作量的大小 可移植性将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所 需工作量的大小 可复用性一个软件(或软件的部件)能再次用于其它应用(该应用的功能与此软件或软件部件的 互连性又称相互操作性。连接一个软件和其它系统所需工作量的大小。如果这个软件要联网 或与其它系统通信或要把其它系统纳入到自己的控制之下,必须有系统间的接口,使 对以上各个质量特性直接进行度量是很困难的,有些情况下甚至是不可能的。因此 Mccall定义了一些评价准则,使用它们对反映质量特性的软件属性分级,以此来估计软件质 量特性的值。软件属性一般分级范围从0(最低)到10(最高)。各评价准则定义如下。 可跟踪性在特定的开发和运行环境下跟踪设计表示或实际程序部件到原始需求的(可追溯)能 完备性软件需求充分实现的程度。 致性在整个软件设计与实现的过程中技术与记号的统一程度。 安全性防止软件受到意外的或蓄意的存取、使用、修改、毁坏,或防止泄密的程度。 容错性系统出错(机器临时发生故障或数据输入不合理)时,能以某种预定方式,做出适当处 理,得以继续执行和恢复系统的能力。它又称健壮性
2 要时又可由它的一些子质量特性定义和度量。 早在1976年,由Boehm等提出软件质量模型的分层方案。1979年McCall等人改进Boehm 质量模型又提出了一种软件质量模型。模型的三层次式框架如图 7.1 所示。质量模型中的质 量概念基于 11 个特性之上。而这 11 个特性分别面向软件产品的运行、修正、转移。它们与 特性的关系如图 7.2 所示。McCall 等认为,特性是软件质量的反映,软件属性可用做评价准 则,定量化地度量软件属性可知软件质量的优劣。 图 7.2 McCall 软件质量模型 McCall 等人的质量特性定义如下: 正 确 性 在预定环境下,软件满足设计规格说明及用户预期目标的程度。它要求软件本身没有 错误。 可 靠 性 软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度。 效 率 为了完成预定功能,软件系统所需的计算机资源的多少。 完 整 性 为某一目的而保护数据,避免它受到偶然的或有意的破坏、改动或遗失的能力。 可使用性 对于一个软件系统,用户学习、使用软件及为程序准备输入和解释输出所需工作量的 大小。 可维护性 为满足用户新的要求,或当环境发生了变化,或运行中发现了新的错误时,对一个已 投入运行的软件进行相应诊断和修改所需工作量的大小。 可测试性 测试软件以确保其能够执行预定功能所需工作量的大小。 灵 活 性 修改或改进一个已投入运行的软件所需工作量的大小。 可移植性 将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所 需工作量的大小。 可复用性 一个软件(或软件的部件)能再次用于其它应用(该应用的功能与此软件或软件部件的 所完成的功能有关)的程度。 互 连 性 又称相互操作性。连接一个软件和其它系统所需工作量的大小。如果这个软件要联网 或与其它系统通信或要把其它系统纳入到自己的控制之下,必须有系统间的接口,使 之可以联结。 对以上各个质量特性直接进行度量是很困难的,有些情况下甚至是不可能的。因此, McCall 定义了一些评价准则,使用它们对反映质量特性的软件属性分级,以此来估计软件质 量特性的值。软件属性一般分级范围从 0 (最低)到 10 (最高)。各评价准则定义如下。 可跟踪性 在特定的开发和运行环境下跟踪设计表示或实际程序部件到原始需求的(可追溯)能 力。 完 备 性 软件需求充分实现的程度。 一 致 性 在整个软件设计与实现的过程中技术与记号的统一程度。 安 全 性 防止软件受到意外的或蓄意的存取、使用、修改、毁坏,或防止泄密的程度。 容 错 性 系统出错(机器临时发生故障或数据输入不合理)时,能以某种预定方式,做出适当处 理,得以继续执行和恢复系统的能力。它又称健壮性。 可维护性 可测试性 灵活性 产品修正 产品转移 可移植性 可复用性 互连性 正确性 可靠性 效率 可使用性 完整性 产品运行
准确性能达到的计算或控制精度。它又称精确性 简单性在不复杂、可理解的方式下,定义和实现软件功能的程度。 执行效率为了实现某个功能,提供使用最少处理时间的程度。 存储效率为了实现某个功能,提供使用最少存储空间的程度 存取控制软件对用户存取权限的控制方式达到的程度。 存取审查软件对用户存取权限的检查程度 操作性操作软件的难易程度。它通常取决于与软件操作有关的操作规程,以及是否提供有用 的输入/输出方法。 易训练性软件辅助新的用户使用系统的能力。这取决于是否提供帮助用户熟练掌握软件系统的 。它又称可培训性或培训性。 简明性软件易读的程度。这个特性可以帮助人们方便地阅读本人或他人编制的程序和文档。 它又称可理解性。 模块独立性软件系统内部接口达到的高内聚、低耦合的程度 自描述性对软件功能进行自我说明的程度。亦称自含文档性。 结构性软件能达到的结构良好的程度。 文档完备性软件文档齐全、描述清楚、满足规范或标准的程度。 通用性软件功能覆盖面宽广的程度 可扩充性软件的体系结构、数据设计和过程设计的可扩充的程度。 可修改性软件容易修改,而不致于产生副作用的程度 自检性软件监测自身操作效果和发现自身错误的能力,又称工具性。 机器独立性不依赖于某个特定设备及计算机而能工作的程度,又称硬件独立性。 软件独立性软件不依赖于非标准程序设计语言特征、操作系统特征,或其它环境约束,仅靠自身 能实现其功能的程度,又称自包含性 通信共享性使用标准的通信协议、接口和带宽的标准化的程度。 数据共享性使用标准数据结构和数据类型的程度 通信性提供有效的I/O方式的 正确性和容错性是相互补充的。正确的程序不一定是可容错的程序。反过来,可容错的 程序不一定是完全正确的程序。我们要求一个可靠的软件应当在正常的情况下能够正确地工 作;而在意外的情况下,也能做出适当的处理,隔离故障,尽快地恢复。这才是一个好的程 序。此外,有人在灵活性中加了一个评价准则,叫做“可重配置特性”,它是指软件系统本身 各部分的配置能按用户要求实现的容易程度。在简明性中也加了一个评价准则,即“清晰性 它是指软件的内部结构、内部接口要清晰,人一机界面要清晰 (3)ISO的软件质量评价模型 ISO/IEC9126-1991标准规定的软件质量模型由三层组成。在这个标准中,三层次中的 第一层为称为质量特性,第二层称为质量子特性,第三层称为度量。如图7.3所示。该标准 定义了6个质量特性,即功能性、可靠性、可维护性、效率、可使用性、可移植性;并推荐 了21个子特性,如适合性、准确性、互操作性、依从性、安全性、成熟性、容错性、易恢复 性、易理解性、易学习性、易操作性、时间特性、资源特性、易分析性、易变更性、稳定性、 易测试性、适应性、易安装性、遵循性、易替换性,但不做为标准。用于评价质量子特性的 度量没有统一的标准,由各使用单位视实际情况制定 (4)软件质量特性之间的竞争 在软件的质量特性与质量特性之间、质量特性与子特性之间存在着有利影响和不利影 响,若用“△”表示该质量特性对质量特性有有利影响;用“V”表示该质量特性对质量特 性有不利影响。则有下面表7.1所示的关系。例如,由于效率的要求,应尽可能采用汇编语
3 准 确 性 能达到的计算或控制精度。它又称精确性。 简 单 性 在不复杂、可理解的方式下,定义和实现软件功能的程度。 执行效率 为了实现某个功能,提供使用最少处理时间的程度。 存储效率 为了实现某个功能,提供使用最少存储空间的程度。 存取控制 软件对用户存取权限的控制方式达到的程度。 存取审查 软件对用户存取权限的检查程度。 操 作 性 操作软件的难易程度。它通常取决于与软件操作有关的操作规程,以及是否提供有用 的输入/输出方法。 易训练性 软件辅助新的用户使用系统的能力。这取决于是否提供帮助用户熟练掌握软件系统的 方法。它又称可培训性或培训性。 简 明 性 软件易读的程度。这个特性可以帮助人们方便地阅读本人或他人编制的程序和文档。 它又称可理解性。 模块独立性 软件系统内部接口达到的高内聚、低耦合的程度。 自描述性 对软件功能进行自我说明的程度。亦称自含文档性。 结 构 性 软件能达到的结构良好的程度。 文档完备性 软件文档齐全、描述清楚、满足规范或标准的程度。 通 用 性 软件功能覆盖面宽广的程度。 可扩充性 软件的体系结构、数据设计和过程设计的可扩充的程度。 可修改性 软件容易修改,而不致于产生副作用的程度。 自 检 性 软件监测自身操作效果和发现自身错误的能力,又称工具性。 机器独立性 不依赖于某个特定设备及计算机而能工作的程度,又称硬件独立性。 软件独立性 软件不依赖于非标准程序设计语言特征、操作系统特征,或其它环境约束,仅靠自身 能实现其功能的程度,又称自包含性。 通信共享性 使用标准的通信协议、接口和带宽的标准化的程度。 数据共享性 使用标准数据结构和数据类型的程度。 通 信 性 提供有效的 I/O 方式的程度。 正确性和容错性是相互补充的。正确的程序不一定是可容错的程序。反过来,可容错的 程序不一定是完全正确的程序。我们要求一个可靠的软件应当在正常的情况下能够正确地工 作;而在意外的情况下,也能做出适当的处理,隔离故障,尽快地恢复。这才是一个好的程 序。此外,有人在灵活性中加了一个评价准则,叫做“可重配置特性”,它是指软件系统本身 各部分的配置能按用户要求实现的容易程度。在简明性中也加了一个评价准则,即“清晰性”, 它是指软件的内部结构、内部接口要清晰,人―机界面要清晰。 (3) ISO 的软件质量评价模型 ISO/IEC 9126-1991 标准规定的软件质量模型由三层组成。在这个标准中,三层次中的 第一层为称为质量特性,第二层称为质量子特性,第三层称为度量。如图 7.3 所示。该标准 定义了 6 个质量特性,即功能性、可靠性、可维护性、效率、可使用性、可移植性;并推荐 了 21 个子特性,如适合性、准确性、互操作性、依从性、安全性、成熟性、容错性、易恢复 性、易理解性、易学习性、易操作性、时间特性、资源特性、易分析性、易变更性、稳定性、 易测试性、适应性、易安装性、遵循性、易替换性,但不做为标准。用于评价质量子特性的 度量没有统一的标准,由各使用单位视实际情况制定。 (4) 软件质量特性之间的竞争 在软件的质量特性与质量特性之间、质量特性与子特性之间存在着有利影响和不利影 响,若用“△”表示该质量特性对质量特性有有利影响;用“▽”表示该质量特性对质量特 性有不利影响。 则有下面表 7.1 所示的关系。例如,由于效率的要求,应尽可能采用汇编语
言。但是用汇编语言编制出的程序,可靠性、可移植性以及可维护性都很差。在进行软件质 量设计时,必须考虑利弊,全面权衡,根据质量需求,适当合理地选择/设计质量特性,并 进行评价。 质量特性 质量子特性 度量 适合性 准确性 功能性 互操作性 依从性 安全性 成熟性 可靠性 易恢复性 软件质量 易理解性 可使用性 易学习性 易操作性 度量由使用单位自 时间特性 资源特性 易分析性 稳定性 可维护性 变更性 易测试性 适应性 易安装性 可移植性 遵循性 易替换性 图7.3ISO软件质量度量模型 表71各质量特性与质量特性之间的关系 功能性可靠性可使用性效 可维护性可移植性 功能性 可靠性 可使用性 △△V△ 可维护性 △ 可移植性 (5)质量活动 产品的高质量将导致成本的下降。质量活动开始于20世纪40年代E. Edwards deming 的开创性工作,由日本人发扬广大,他们开发了一种系统化的方法以从根本上消除造成产品 缺陷的原因。1970年代到1980年代,他们的工作移植到西方,称为“全面质量管理(TQC)”。 该活动采用的是4个步骤的过程 ①开展:是一个连续的过程改进体系,其目的是开发一个看得见的可重复的和可度量 的过程
4 言。但是用汇编语言编制出的程序,可靠性、可移植性以及可维护性都很差。 在进行软件质 量设计时,必须考虑利弊,全面权衡,根据质量需求,适当合理地选择/设计质量特性,并 进行评价。 质量特性 质量子特性 度量 图 7.3 ISO 软件质量度量模型 表 7.1 各质量特性与质量特性之间的关系 功能性 可靠性 可使用性 效 率 可维护性 可移植性 功能性 △ △ 可靠性 ▽ △ 可使用性 ▽ △ △ 效 率 ▽ ▽ ▽ 可维护性 △ ▽ △ 可移植性 ▽ ▽ (5) 质量活动 产品的高质量将导致成本的下降。质量活动开始于 20 世纪 40 年代 E. Edwards Deming 的开创性工作,由日本人发扬广大,他们开发了一种系统化的方法以从根本上消除造成产品 缺陷的原因。1970 年代到 1980 年代,他们的工作移植到西方,称为“全面质量管理(TQC)”。 该活动采用的是 4 个步骤的过程: ① 开展:是一个连续的过程改进体系,其目的是开发一个看得见的可重复的和可度量 的过程; 适合性 准确性 互操作性 依从性 安全性 成熟性 容错性 易恢复性 易理解性 易学习性 易操作性 时间特性 资源特性 易分析性 稳定性 易变更性 易测试性 适应性 易安装性 遵循性 易替换性 功能性 可靠性 可使用性 效 率 可维护性 可移植性 软 件 质 量 度 量 由 使 用 单 位 自 行 规 定
②当然的质量:只有在前一步完成之后才可启动。这一步将检查影响过程的无形因素, 并优化这些因素对过程的影响。例如,软件过程可能受到高层职员流动的影响,而这又是由 于公司内部不断重组引起的。公司组织的稳定对于软件质量的提高有很大帮助,因此在这 步可以对公司的重组提出建议。 ③感性:意指“第五感觉”。这一步从过程转到用户身上。通过检查用户使用软件产品 的情况,改进产品本身,并(潜在地)改进软件产品的生产过程。 ④有魅力的质量:通过观察产品在市场上的使用,寻找产品在相关领域发展的方向 从而开发出有预见性的新产品。 2.软件维护的概念 (1)软件维护的定义 我们称在软件运行/维护阶段对软件产品所进行的修改就是所谓的维护。要求进行维护 的原因多种多样,归结起来有三种类型: 改正在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷 因在软件使用过程中数据环境发生变化或处理环境发生变化,需要修改软件以适应 种变化。 用户和数据处理人员在使用时常提出改进现有功能,增加新的功能,以及改善总体性 能的要求,为满足这些要求,就需要修改软件把这些要求纳入到软件之中 由这些原因引起的维护活动可以归为以下几类: ①改正性维护 在软件交付使用后,必然会有一部分隐藏的错误被带到运行阶段来。这些隐藏下来的错 误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺 陷、排除实施中的误使用,应当进行的诊断和改正错误的过程,就叫做改正性维护。 ②适应性维护 随着计算机的飞速发展,外部环境(新的硬、软件配置)或数据环境(数据库、数据格式 数据输入/输出方式、数据存储介质)可能发生变化,为了使软件适应这种变化,而去修改软 件的过程就叫做适应性维护 ③完善性维护 在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求, 需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维 护性。这种情况下进行的维护活动叫做完善性维护。 在维护阶段的最初一、二年,改正性维护的工作量较大。随着错误发现率急剧降低,并 趋于稳定,就进入了正常使用期。然而,由于改造的要求,适应性维护和完善性维护的工作 量逐步增加。实践表明,在几种维护活动中,完善性维护所占的比重最大,来自用户要求扩 充、加强软件功能、性能的维护活动约占整个维护工作的50%。 适应 改正 性维护性维护其 5%护 完善性维护 护 50%
5 ② 当然的质量:只有在前一步完成之后才可启动。这一步将检查影响过程的无形因素, 并优化这些因素对过程的影响。例如,软件过程可能受到高层职员流动的影响,而这又是由 于公司内部不断重组引起的。公司组织的稳定对于软件质量的提高有很大帮助,因此在这一 步可以对公司的重组提出建议。 ③ 感性:意指“第五感觉”。这一步从过程转到用户身上。通过检查用户使用软件产品 的情况,改进产品本身,并(潜在地)改进软件产品的生产过程。 ④ 有魅力的质量:通过观察产品在市场上的使用,寻找产品在相关领域发展的方向, 从而开发出有预见性的新产品。 2. 软件维护的概念 (1) 软件维护的定义 我们称在软件运行∕维护阶段对软件产品所进行的修改就是所谓的维护。要求进行维护 的原因多种多样,归结起来有三种类型: ▪ 改正在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷; ▪ 因在软件使用过程中数据环境发生变化或处理环境发生变化,需要修改软件以适应这 种变化。 ▪ 用户和数据处理人员在使用时常提出改进现有功能,增加新的功能,以及改善总体性 能的要求,为满足这些要求,就需要修改软件把这些要求纳入到软件之中。 由这些原因引起的维护活动可以归为以下几类: ① 改正性维护 在软件交付使用后,必然会有一部分隐藏的错误被带到运行阶段来。这些隐藏下来的错 误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺 陷、排除实施中的误使用,应当进行的诊断和改正错误的过程,就叫做改正性维护。 ② 适应性维护 随着计算机的飞速发展,外部环境(新的硬、软件配置)或数据环境(数据库、数据格式、 数据输入∕输出方式、数据存储介质)可能发生变化,为了使软件适应这种变化,而去修改软 件的过程就叫做适应性维护。 ③ 完善性维护 在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求, 需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维 护性。这种情况下进行的维护活动叫做完善性维护。 在维护阶段的最初一、二年,改正性维护的工作量较大。随着错误发现率急剧降低,并 趋于稳定,就进入了正常使用期。然而,由于改造的要求,适应性维护和完善性维护的工作 量逐步增加。实践表明,在几种维护活动中,完善性维护所占的比重最大,来自用户要求扩 充、加强软件功能、性能的维护活动约占整个维护工作的 50%