- 1 -
中国科技论文在线
系统与软件可维护性的定义研究
商庆同,袁玉宇*
作者简介:商庆同,男,主要研究方向为软件工程与软件测试. E-mail: shangqingtong@
(北京邮电大学软件学院,北京 100876)
摘要:如何以更短的时间、更低的费用维护和升级软件产品仍然是计算机工业急需解决的问
题。可维护性是软件维护难易程度的评价标准,是软件产品的一个重要质量特性。但是,目
前对软件可维护性仍然缺乏系统的理论研究,关键的一点是还没有一个权威的且能够广泛适
用的可维护性的定义。本文阐述并分析了当前存在的一些软件可维护性的定义,在此基础上
给出了软件可维护性一个改进的定义,并对其正确性进行了证明分析。
关键词: 软件维护;可维护性;软件工程
中图分类号:
Research on the Definition of Maintainability of System and
Software
Shang Qingtong, Yuan Yuyu
(School of Software Engineering, Beijing University of Posts and Telecommunications,
Beijing 100876)
Abstract: How to maintain and promote the software product in a shorter time and by a lower expense
is still a question urgently needed to be solved in the computer industry. Maintainability is the
evaluation criteria for the ability of the software maintenance, and is also an important quality
characteristic of the product. But, it is still lack of systemic fundamental research at present, and an
essential point is there has been not an authoritative and widespread suitable definition of
maintainability. This paper elaborates and analyzes some current definitions of maintainability, and
based on this, an improved definition is given in this paper, and the accuracy to the new definition is
proved and analyzed as well.
Key words: maintenance; maintainability; software engineering
0 引言
软件产品开发完成交付用户使用后,就进入软件生命周期的运行和维护阶段。软件产品
在它的生命周期中需要修改原来的错误、适应新的环境、增加新的功能等原因而在不断的改
变之中。例如,新的软件和硬件的引入很有可能带来原有软件系统的修改,同时客户的需求
也是在不断变化和增长的,因此设计和开发不需要修改的软件是不现实的。软件规模和复杂
度的日益提高,使软件维护成为软件生存期中费用最高、难度最大的一个阶段。因此,良好
的软件可维护性可以降低维护成本,延长软件生命周期。
可维护性是指导软件维护工作的一个重要参考依据,是软件维护难易程度评价的标准,
是软件产品的一个重要质量特性,也是软件工程追求的目标之一。对软件可维护性进行研究
不仅有利于了解软件是否满足规定的维护性要求,而且有助于及时发现维护的设计缺陷,从
而指导软件维护的分析与设计并合理安排软件维护活动。当前有关软件可维护性较权威的定
义主要来自 ISO、IEEE和其他组织,但还没有一个权威的且能够广泛适用的可维护性的定
义。本文首先阐述了软件维护的相关内容,为后面讨论可维护性的定义作理论依据。第 4
- 2 -
中国科技论文在线
部分在对原有定义分析总结的基础上,给出了软件可维护性一个改进的定义,并对改进定义
的正确性进行了分析证明。
1 软件维护
软件维护的定义
对软件维护的定义存在多种,其中比较有代表性的定义有以下几种。
1)在国标GB11457【1】中明确指出软件运行、维护阶段是软件生命周期的一部分,“对
软件产品进行检测,以期获得满意性能;当需要时对软件产品进行修改以改正问题或对变化
了的需求做出响应”。可见,这是从软件生命周期层面对软件维护做出的定义。从另一方面
看,软件维护是一种技术措施,需要从技术的角度加以说明。国标GB11457【1】同时对软件
维护给出了如下两个定义:
z 在软件产品交付使用后对其进行修改,以纠正故障。
z 在软件产品交付使用后对其进行修改,以纠正故障,改进其性能和其他属性,或使
产品适应改变了的环境。
2)IEEE -1990【2】:软件维护是软件产品发行以后软件系统或其部件的修改过
程, 用来纠正错误、改善性能或其他属性,或者使产品适应改变了的环境。
3)Lientz和Swanson:软件维护是执行改正、适应或者完善的软件变化的过程【3】。
无论是从那个角度说明,定义1)和定义2)都将软件维护限制为软件发布以后的修改活
动,它从一个系统交付给用户开始,包括了所有保证系统运行和用户需求的活动。这是一种
传统软件工程的观点,这一定义将软件的开发过程和软件的维护过程分离,使软件的维护完
全陷于孤立。Schneidewind[4]称这种认为维护是软件产品发布运行之后的活动的观点是导致
软件维护困难的一个重要的原因。因此,Schneidewind[4]指出软件维护活动开始于用户的需
求,而且好的软件开发原则应该应用在软件开发和维护这两个过程中。在好的软件开发过程
中会尽可能考虑到对软件维护的支持。所以,在软件产品的整个生命周期中,软件维护是一
个必须考虑的因素。
在定义3)中Lientz和Swanson虽然没有限定开始软件维护的时间,软件维护可以有较大
的灵活性,也有较大的扩展范围。在这一定义中指出软件维护就是纠正软件运行中发现的错
误,为了适应新的运行环境和满足新的用户需求而对软件进行修改,但在这一定义中所提到
的维护类型没有包含软件维护类型中的预防性维护(软件的维护类型将在部分阐述)。
Osborne和Chikofsky的所坚持的观点是在管理和修改软件系统时采用生命周期的方式是
必要的,这就要求为了软件维护要关注软件开发过程的各个方面。因此,Pigoski【5】对软件
维护下的定义为:
软件维护是对一个软件系统提供有成本效益的支持所需要的所有活动。这些活动是在产
品交付之前和交付之后这两个阶段执行的。交付之前的活动包括为交付之后的运行、可支持
性和后勤决定做计划。交付之后的活动包括软件修改、培训和运作帮助平台。
这一定义指出了软件维护是从产品发布或交付之前就开始了,贯穿在软件的生命周期中,这
比较符合现代软件工程过程的思想。所以,本文采用此定义。
软件维护的类型
软件维护的类型是对软件可维护性进行分析研究所要考虑的因素。因此,在此对软件维
护的类型进行简要的阐述。
- 3 -
中国科技论文在线
对软件维护类型的划分也存在不同的观点,下面介绍主要的两种。
IEEE把维护类型归纳为完善性维护、适应性维护、纠错性维护和预防性维护四类[6]。
(1)完善性维护(Perfective Maintenance)
在软件漫长的使用过程中,为了满足用户使用过程中对软件提出的新的功能与性能要
求,需要对原来的软件的功能进行修改或扩充,这种扩充软件功能、增强软件性能、提高软
件运行效率和可维护性而进行的维护活动称为完善性维护。此维护活动工作量较大,占整个
维护工作的50%以上。
(2)适应性维护(Adaptive Maintenance)
适应性维护是为了适应计算机的飞速发展,使软件适应外部新的硬件和软件环境或者数
据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)发生的变化,而进行修
改软件的过程。它的主要维护策略是对可能变化的因素进行配置管理,将因环境变化而必须
修改的部分局部化,即局限于某些程序模块等。
(3)纠正性维护(Corrective Maintenance)
软件测试不可能找出一个软件系统中所有潜在的错误,所以当软件在特定情况下运行
时,这些潜在的错误可能会暴露出来。对在测试阶段未能发现的,在软件投入使用后才逐渐
暴露出来的错误的测试、诊断、定位、纠错以及验证、修改的回归测试过程,称为纠正性维
护。它的主要维护策略是开发过程中采用新技术,利用应用软件包,提高系统结构化程度,
进行周期性维护审查等。
(4)预防性维护(Preventive Maintenance)
预防性维护是为了提高软件的可维护性和可靠性,采用先进的软件工程方法对需要维护
的软件或软件中的某一部分重新进行设计、编制和测试,为以后进一步维护和运行打好基础。
也就是软件开发组织选择在最近的将来可能变更的程序,做好变更它们的准备。由于对于该
类维护工作必须采用先进的软件工程方法,对需要修改的软件或部分进行设计、编码和测试。
它的维护策略主要是常采用提前实现、软件重用等技术。
Lientz 和 Swanson【7】在可维护性的划分中没有包含预防性维护(Preventive Maintenance)。
但理想情况下,软件维护操作不应该使软件可靠性和软件结构退化,也不应该使软件可维护
性降低,否则将来的维护将会更加困难,甚至不可维护。不幸的是,这对实际的维护活动是
不太可能的,现实中的维护经常会有使系统老化的现象产生。Lehman【7】说过“当对一个进
化型的软件进行改变时,它的结构可能会变得更加复杂。额外的资源应该被用来保证系统语
义的正确性和简化系统结构。”因此,很多专家学者认为应该增加预防性维护,它包括所有
的为了增强软件可维护性而对软件产品所做的改动。这也就是上面提到的 IEEE对可维护性
的划分。
2 可维护性已有定义及其分析
可维护性研究背景
可维护性是指导软件维护工作的一个重要参考依据,是软件维护难易程度评价的标准,
良好的可维护性可以延长软件产品的生命周期。但是,目前对软件可维护性仍然缺乏系统的
理论研究,关键的一点是还没有给软件可维护性下一个统一的定义,而且缺乏系统的方法把
可维护性纳入软件过程中来。如果可维护性没有一个标准化的定义,那么我们的研究将无从
下手。因此,在下面的 部分阐述并分析了当前存在的一些软件可维护性的定义,在此基
- 4 -
中国科技论文在线
础上给出了软件可维护性一个改进的定义,并对其正确性进行了证明分析。
已有定义及其分析
当前对软件可维护性主要有以下几种权威性的定义。
(1)ISO/IEC 9126 软件工程–产品质量【8】中对软件可维护性的定义:
软件可维护性是指软件产品可被修改的能力。
注1:修改的类型可能包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。
这是目前得到最为广泛认可的定义。本定义简单通俗,描述出了软件维护的本质:对软
件产品进行修改。而且在注释中也给出了修改的类型,这种定义方式避免在主定义语句中出
现限定性的词汇,而是把一些说明解释性的信息放在注释中作为定义的一部分。但是在本定
义的注释中只是给出了修改的类型,没有给出软件维护的对象和过程。而且本定义中使用了
“能力”一词,而在词典中这个词是表达定性的含义,多数情况下能力的度量是“高”或者“低”,
这与目前对软件可维护性的定量研究方向有一定的不符。
(2)ISO/IEC FCD 25010 Draft【9】中对软件可维护性的定义:
软件可维护性是指软件产品可被修改的效率和有效性程度。
注1:修改的类型可能包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。
本定义与ISO/IEC 9126中定义的区别是把“能力”这个度量名词用“程度”代替。这是因为,
“程度”在词典中既可以表达定性的含义也可以表达定量的含义。这比较符合目前对软件可维
护性的研究方向。软件可维护性的好坏在表现形式上就是对软件产品进行维护的效率和有效
性程度。所以,本定义与ISO/IEC 9126中定义的定义相比更加清晰精确。在本定义的注释中
给出了软件维护的类型,但没有给出软件维护中修改的对象以及维护过程的说明解释。
(3)GB11457【1】对软件可维护性的定义
GB11457中对软件可维护性给出了3个定义:
1) 软件维护性是指对软件进行维护的容易程度。
2) 软件维护性是指按照预定的需要对某一功能部件进行维护的容易程度。
3) 软件维护性是指在规定的使用条件下,在给定时间间隔内一个软件保持在某一指定
状态或者恢复到某一指定状态的能力。
在这三个定义中,第一个定义中的动作用了“维护”一词。我们所讨论的软件可维护性一
般是指对软件产品组成部分修改的难易程度,而通过我们上面对软件维护的定义中知道,软
件维护贯穿于整个软件产品的生命周期,而且维护的实施不仅仅是对软件产品组成部分进行
修改;同时本定义中维护的主题是软件,而我们在此考虑的是软件产品,修改的对象也是软
件产品的组成部分。定义2)对软件维护的容易程度加上了限制条件,主要是为了便于比较,
维护的对象是“功能部件”,而实际的软件维护可能是修改软件产品所包含的任何一部分,例
如有可能仅仅是修改完善了软件的相关文档。定义3)的表述明显没有包含软件维护中的完
善性维护,即对增加新的功能和用户提出的新的需求没有考虑在内。
(4)Oman对软件可维护性的定义:
Oman在1992年指出,软件的可维护性包括管理、工作环境和目标软件系统。
Oman的看法体现了软件维护的系统观,认为软件的可维护性不仅仅限于软件产品本身,
而且包括与维护相关的管理与环境,这属于广义的软件可维护性,但我们通常所说的可维护
性是指狭义上的可维护性,因此我们在此不采纳此定义。
(5)IEEE标准软件工程术语表中对软件可维护性的定义
- 5 -
中国科技论文在线
可维护性是指软件系统或组件因纠正错误、改善性能或其他属性,或者使产品适应改变
了的环境而可以被修改的容易程度[7]。
本定义中体现了软件维护的几种类型,但这种枚举的方式不能全部概况软件维护的内
涵。通过上面对软件维护的分析我们知道软件维护还要包括软件产品中所包含的相关文档。
所以“软件系统或组件”不如“软件产品”表述全面。
3 软件可维护性定义的改进
改进的定义
通过上面对已有定义的优缺点分析,结合软件维护的类型、维护的对象和维护的过程,
我们给出了下面改进的定义:
软件可维护性是指软件产品可被修改的效率和有效性程度。
注 1:修改的类型可能包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。
注 2:修改的对象可能包括相关文档、数据和代码。
注 3:修改的过程包括对软件产品进行分析、修改和测试。
对改进定义的正确性分析
首先,在本定义中提到的维护的主体是软件产品,只有对软件产品进行的维护才有实际
意义。因此,可维护性的讨论也只能建立在软件产品的基础上。再次,软件维护的实质就是
根据需求对软件产品进行修改,修改的类型即对应上面提到的软件维护的四种类型。软件可
修改性好坏的表现形式体现在修改的效率和有效性程度。
最后,软件维护的过程就是分析、修改和测试,可分析性、可修改性和可测试性是软件
可维护性的三个子特性,也是影响软件可维护性的主要因素:
1)可分析性
软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能力【8】。软件可分析性表
现为维护人员分析软件的结构、接口、功能和内部过程的难易程度。模块化、详细的设计文
档、结构化设计、源代码内部的文档和良好的高级设计语言等等,都对改进软件的可分析性
有重要贡献。
2)可修改性
软件产品使指定的修改可以被实现的能力(实现包括编码、设计和文档的更改;如果软
件由最终用户修改,那么可修改性可能会影响易操作性)【8】。软件容易修改的程度与软件
设计原理和规章直接有关,藕合,内聚,局部化,控制工作域的关系等等,都影响软件的可
修改性。
3)可测试性
软件产品使已修改软件能被确认的能力【8】。诊断和测试的难易程度主要取决于软件容
易理解的程度,良好的文档对诊断和测试是至关重要的,此外,软件结构,可用的测试工具
和调试工具,以及以前设计的测试也都是非常重要的,维护人员应该能够得到在开发阶段用
过的测试方案,以便进行回归测试。在设计阶段应该尽力把软件设计成容易测试和容易诊断
的。
综上,在结合了 中对 ISO/IEC FCD 25010 Draft所下定义的优点分析基础上,我们可
以证明本定义的正确性。
- 6 -
中国科技论文在线
4 结论
软件可维护性是软件维护难易程度评价的标准,是软件产品的一个重要质量特性。本文
在理解了软件维护的概念的基础上,并结合影响软件可维护性的一些因素给出了软件可维护
性的一个改进的定义,有了这个定义后我们下一步对软件可维护性的研究工作就有了立足点
和着眼点。
[参考文献] (References)
[1] GB11457 Information technology Software engineering terminology. 2006.
[2] [2] IEEE, IEEE Standard Glossary of Software Engineering Terminology, report IEEE Std -1990, IEEE,
1990.
[3] Lientz, et al. Characteristics of Application Software Maintenance [J]. Communications of the ACM, 1978,
21(6): 466- 471.
[4] N. Schneidewind, "Software Maintenance: The Need for Standardization", Proceedings of the IEEE, No. 4,
Vol. 77, April 1989, pp. 618-624.
[5] Pigoski, T. M., “Practical Software Maintenance – Best Practices for Managing Your Software Investment”,
John Wiley & Sons, New York, NY, 1997.
[6] 郑人杰, 殷人昆, 陶永雷. 用软件工程[M]. 北京: 清华大学出版社,1997. 381 - 382.
[7] Lientz, B. P., Swanson, B. E., “Software Maintenance Management”, Addison-Wesley, Reading, MA, 1980.
[8] ISO/IEC 9126 Software Engineering - Product Quality - Part1: Quality Model. 2002.
[9] ISO/IEC FCD 25010 Systems and software engineering - Software product Quality.
[10] 软件维修性的定量评估研究,宋晓秋,航天软件评测中心,2001.