软件质量度量分析与研究作者:余为峰,黄松来源:《电脑知识与技术》2010年第18期摘要:随着软件的复杂性日益增长, 软件开发的周期以及费用也日益增长,软件质量的保证与提高越来越成为了人们高度重视的问题。
解释了软件质量的概念和质量模型的发展阶段,分析了软件质量度量的过程以及度量的验证与预测,提出了几种针对软件质量的度量方法,最后对软件质量的度量做了相关的展望。
关键词:软件质量;度量;质量度量模型;度量验证中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)18-5106-03Analysis and Research of Software Quality MetricsYU Wei-feng, HUANG Song(Software Test and Evaluation Center for Military Training, Institute of Command Automation, PLA University of Science & Technolog, Nanjing 210007, China)Abstract: As the complexity of software is increasing, the cycle of software development and cost are also increasing. And people have paid more and more attention to the question that how to assure and improve the software quality. This paper not only explains the definition of software quality and developing phases of quality model, but also analyses the process of software quality metrics and validation of quality metrics. At the same time, it introduces several methods of software quality metrics. Finally, related future trends of research in this field is listed.Key words: software quality; metrics; quality metrics model; metrics validation在过去几十年里,因为软件的质量问题而导致整个系统发生失效的事例屡见不鲜,进而给人类生命安全和环境造成了巨大的损失。
20世纪80年代,美国有两个系统,耗资5600万美元的Univac联合航空订票系统和耗资2.17亿美元的高级后勤系统都因在交付使用后发现不满足要求而被迫进行重新研制[1];而在1996年6月,在阿丽亚娜5号火箭首次发射后不到一分钟的时间内,就因为软件故障问题致使火箭发生了爆炸,导致了巨大的经济损失和相应计划的延迟[2]。
因此软件的质量问题已引起了人们的极度重视,软件质量的度量问题自然也得到重视。
由于计算机技术、数据融合技术、网络技术和通信技术的飞速发展,人们对软件性能及功能提出的要求也越来越高,度量软件质量已成为一个迫切需要解决的问题。
如何通过选择合适的软件质量指标体系、确定软件质量的量化过程和方法来进行客观性地度量,对于评价软件的质量是关键的一步,进而对于减少软件失效的发生和提升软件的总体质量也是具有极其重要的意义。
1 对软件质量模型的认识1.1 软件质量及定义至今为止,软件质量还没有一个统一的、惟一的定义,不同的组织或应用可能会有不同的定义。
ANSI/IEEE Std 729—1983定义软件质量为:与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体[3];M.J.Fisher给出的定义为:表征计算机软件卓越程度的所有属性的集合。
由此可知,软件质量的优秀程度与反映软件各项功能、性能需求的特性及其组合紧密相关,如果针对软件本身设计出来的质量特性能够满足各种要求和反映软件质量需求,则说明软件产品的质量等级比较高。
结合各种定义,软件质量反映了以下三个方面的问题:1) 显式的软件需求,包括用户方、交办方等提出来关于软件的功能需求、性能需求等,这是软件质量度量最基础的需求;2) 隐式的需求,在软件生命周期中其中有一部分需求并没有明确提出来,如可维护性等;3) 软件的整个开发过程还必须按照一定的方法,规范来进行,缺少这些,就无法指导软件开发人员的各种开发活动,开发秩序会变得杂乱无章,软件质量也就得不到一定的保证。
综上以上的定义和最新的研究可以将软件质量定义为:软件所具有的能够满足功能和性能需求、遵循一定的开发准则和规范以及符合隐含的一些规定需求的本质。
1.2 软件质量度量模型软件度量工作自1958 年Rubey 和Hurtwick 首次提出软件度量学概念[4]至今,大体经历了三个阶段。
1976 年,Boehm 等人从可移植性、可使用性、可维护性三个方面来定量的评价软件质量为第一阶段;第二阶段以1978 年McCa1l 等人从“产品运行、产品修正和产品转移”提出的质量度量模型即“质量要素——评价准则——度量”为标志。
但是实践证明通过该模型不同缺陷的反馈信息可能相同,以致指标的制定及其定量的结果难以评价。
随后,国际标准化组织(ISO)[5]于1985 年和1993 年先后提出了多项关于软件质量度量技术的工作报告,其提出的软件质量度量模型将软件度量工作带入了第3 个发展阶段。
通过对这三个模型的深入研究发现,这三个模型都着重分析了软件质量属性的影响因素,这些模型研究的对象主要是软件产品,即在软件质量属性和软件设计、编程的特性之间建立关联映射[6]。
这些模型可以帮助加深对软件特性的研究,有利于分析和建立特定软件系统的质量特性及其特性组合。
但是这些质量度量模型都存在一定的局限性,每个模型都是针对软件本身提出来的,通用性比较强,在应用到具体的软件系统评估中,并不能很好地反映软件所具有的特殊性。
因此,如今很多模型都是根据自己的需求来开发建立的,虽然软件自身的性质给模型的确定带来了一定的困难,但是总的提升还是有的。
文献[7]就指出了一种基于全局和局部质量标准的框架,降低了模型建立的难度; 文献[8]中指出了从领域报告问题、用户关键情况和用户满意度等级三个方面来寻找度量元,利用数据统计分析的方法加强了软件质量的管理。
这些方法的开发和应用都为软件质量特性和模型的设计提供了很好的引用和借鉴。
2 软件质量的度量研究2.1 软件质量度量过程软件的度量过程主要可以分为五个步骤进行:1)确定软件的质量度量需求。
这一步是软件质量度量最为前提和基础的一步,主要活动包括设计可能的质量因素集合,优化并确定这一因素集合和建立软件质量模型。
2)确定软件质量度量元。
这是软件度量过程较为关键的一步,度量元选取的好坏直接影响着质量评估的结果。
首先在基于软件质量度量框架的基础之上,将质量特性分解成度量元;继而执行度量元的成本效益分析,根据其结果调整优化已选度量元集合。
3)执行软件质量度量。
包括定义度量数据收集过程并且收集数据、根据已有数据计算度量值等环节。
需要注意的是,采集的数据应该基于正确定义的度量和模型,从而保证数据的正确性、准确性和精度;因此,在收集数据之前,应当设定数据采集的目标,并且定义有意义的问题[9]。
4) 分析软件质量度量结果。
通过分析比较收集的度量数据与目标值,发现两者之间的区别。
确定那些不可接受的度量值,详细分析那些数值偏离关键值的度量元并依据分析结果重新设计软件质量度量。
5)软件质量度量的验证。
验证的目的就是为了证明通过软件产品和过程度量可以预测具体的软件质量因素值。
验证的过程中,在运用相关的验证方法和标准的前提下,必须确定软件质量因素样本和度量样本,然后执行对度量的统计分析,检验度量的作用是否实现。
整个具体过程如图1所示。
2.2 软件度量的验证与预测软件度量的验证是软件度量领域另一个非常重要的话题,因为实际上软件度量的认同取决于软件度量是否能作为软件质量特性的预报器,如果能,度量验证的目的也就达到了[10]。
从软件产品度量验证实质来分析,具体反映了以下三个问题:1)软件产品度量必须量度本应该量度的内容,例如耦合度量量度耦合性等。
2)软件产品度量和一些重要的外部度量存在关系,例如可维护性和可靠性的量度。
3)软件产品度量能促进现有的度量水平的提升,这种提升意味着将会产生降低度量收集的复杂性以及提高预测错误的可能性等等优势。
在进行软件度量验证时,我们必须注意软件度量的外部验证和内部验证的区别,内部验证考虑同态,也就是说,做用户想要的度量。
软件度量的外部验证考虑量度是否和软件品质属性(外部变量)有关系。
文献[11]和文献[12]应用算法验证进行度量的外部验证,而Zuse等人采用的是所谓原子修正进行度量的外部验证,原子修正可以看作对顺利量表的必要条例。
软件度量广泛使用的外部验证概念相对于外部特征是相互关系的考虑。
文献[13]也从内部验证和外部验证的角度出发,提出了利用理论验证和经验验证相结合的方式来对已存在的五个有关面向对象设计的质量因素的度量集进行验证。
软件组织可以利用这种方法尽早确定高风险的软件模块、构建设计和编程计划与方针以及进行系统级的预测。
具体方法如图2所示。
最近的研究表明,验证软件产品度量的方法的质量越来越受到人们的关注。
主要基于两个原因:1)应用于软件工程度量验证的一些一般实践在科学性方面令人难以接受;2)对于有效的工程管理和可靠合理的经验研究,有效的测试和验证是必须的。
因此,必须对那些来出自于研究室的度量的有效性进行验证,才可能达到准确性和科学性。
更需注意的重点是软件度量验证不只是一次的事,它是一个需要重复验证的连续过程。
2.3 软件质量度量方法与进展2.3.1面向结构度量方法较早出现的度量是建立在结构化程序设计和模块化思想基础上的,分析的对象包括程序的控制流图,实现中的操作复杂性,方法间的传递耦合和流程耦合等。
其中影响比较大的有McCabe 提出的循环计数复杂度度量,直到今天历经改进,仍然被实践者所采纳。
McCabe 1976年提出了环形复杂度(cyclomatic complexity)理论,该理论以图论为基础,通过分析程序的控制流图来获得程序的复杂度,为度量程序逻辑复杂性提供了一种很好的方法。
2.3.2 面向软件复用的度量20世纪90年代后期,软件复用的研究兴起。