高岩,杨春晖,熊婧
(工业和信息化部电子第五研究所,广东 广州 510610)
随着信息技术的高速发展,以及计算机系统的广泛应用,软件系统在商业、政治、军事等方面占据了重要的作用。由于社会各方面对软件的需求急剧上升,软件系统的规模不断增大,复杂程度不断提高,从而导致了软件系统的可靠性问题日益突出。软件系统的普及使得软件系统承载了大量的有用信息,如果发生系统失效或者崩溃,这些信息就会丢失,造成不可估量的损失[1]。因此,软件系统对软件的可靠性和开发效率的要求越来越高,提高软件的质量成为了设计和开发高可靠性软件系统的关键。在软件开发的过程中,软件的质量问题越早被发现,所带来的损失就越小,如果能在软件开发的早期就能对软件的质量进行预测和控制,预测出软件可能出现的质量问题,检验出软件的质量是否满足软件质量特性的要求,就能够提高和控制软件的质量,提高软件开发效率,降低开发者和用户的损失。因此,软件质量预测技术就在上述需求下应运而生,成为了软件质量评价体系中的关键技术。
软件质量预测建模技术的原理就是通过统计学方法对与软件质量有关的数据进行处理,从而获得软件质量的估计值,这样就能在软件开发的早期根据软件的有关数据,对软件的质量进行预测和控制,从而预测出软件可能出现的质量问题,进而提高和控制软件的质量。近十几年来,国内外对软件质量的早期预测进行了比较深入的分析和研究,提出了基于统计学、神经网络等技术的多种软件质量预测模型。并且,软件质量预测技术也在航天、通讯等大型软件工程中得到了成功的应用,在软件开发早期就发现了人工测试所发现不了的错误。
a)软件质量
软件质量被ISO/IEC 9126定义为:能够反映软件项目满足客户规定需求和潜在需求的软件特征和特性的总和[2]。软件质量由软件本身的属性和特性组合而成,主要分为内部属性和外部属性。内部属性是由产品自身带有的、可度量的一些属性,合适的软件内部属性是获取必要的外部行为的不可或缺的因素。外部属性是软件产品的一种外在质量表现形式,通过与软件应用环境的作用来获取。
b)软件度量
软件度量是一种对影响软件质量的属性进行定量测量和度量的方法[3]。软件度量贯穿于软件工程的全过程甚至软件交付之后,软件度量的根本目的是为了管理的需要,利用度量来改变软件过程。软件度量主要包括需求度量、过程度量、项目度量、产品度量和运行度量等。
c)软件质量预测
软件质量预测就是根据一些与软件质量有关的度量数据 (包括软件错误测试报告和软件质量度量数据等),通过机器学习和统计学等方法进行建模,提出软件质量预测值的方法。由于软件失效过程是一个随机过程,所以软件质量预测模型都是基于各种不同的基本假设而建立的模型。
软件质量预测模型的构建分为4个部分,包括:度量数据采集、度量数据预处理、预测模型构建和训练、预测模型评估测试。软件质量预测模型的主要框架如图1所示。
图1 软件质量预测模型
软件质量预测模型具体的构建过程如下所述。
首先,在软件质量预测框架的前端,实现对质量数据的采集,即将一个软件对象的源代码划分为若干个软件模块,选择一组有用的软件度量,对每个软件模块进行相应的度量,每个软件模块的度量数据构成的向量就是一个样本,这样就可以得到进行统计分析的原始数据集。
然后,对所采集的原始质量数据进行预处理,包括归一化、消零和主成分分析 (PCA)等。归一化的目的是使不同的质量数据样本之间具有可比性,PCA则可以有效地去除质量数据样本中存在的冗余和噪声,有效地提高模型性能和训练效率。
接下来,在框架的核心部分,将已经构建好的软件质量数据集,转化为输入的训练样本并利用机器学习和统计学等方法进行训练,构建预测模型。具体过程会因所选用的不同分类器的建模算法而有所不同,在下面将会有详细的介绍。
最后,在框架的后端,实现模型对软件模块质量的预测。对一个新的软件模块进行度量,将构成的度量向量输入到已训练好的模型当中进行预测,判断该软件模块是否存在有缺陷的倾向。通常采用一系列软件模块度量作为测试数据,统计预测准确率来对软件质量预测模型的性能进行评估。
软件质量预测模型效果的好坏取决于模型的选择,选择合适的训练算法进行模型的训练是软件质量预测框架中的核心部分。目前应用于软件质量预测的模型非常多,主要有:1)基于统计学的传统软件质量预测模型;2)基于机器学习的软件质量预测模型。
基于统计学的传统软件质量预测模型主要采用软件的规模和复杂度、软件测试报告等作为模型输入,采用线性或非线性回归方法[4-5],以及聚类分析[6]等方法作为建模算法。这些传统的软件质量预测模型没有全面地考虑影响软件质量的众多不确定性因素,大多都只是针对一两个影响软件质量的因素进行研究和建模,这样不能较好地描述软件的内部特性和软件所表现出来的缺陷之间的不确定性的关系,得出的软件质量预测模型不能较好地表示软件质量的真实情况。而且采用的多是统计学方法,不具有自学习能力。所以传统的软件质量预测模型比较粗糙,具有一定的局限性。
基于机器学习的软件质量预测模型主要包括贝叶斯算法、人工神经网络 (ANN)和支持向量机(SVM)等。其中,神经网络由于其训练不需要完全知道系统的具体细节,并且具有良好的非线性映射逼近性能和自学习能力,在软件质量预测中得到了广泛的应用。1992年,N.Karunanithi等人首次将人工神经网络技术成功地应用于软件质量预测模型中[7]。之后,人工神经网络在软件质量预测中得到了进一步的应用,常用的几种人工神经网络算法包括:反向传播神经网络 (BP)、学习矢量化神经网络 (LVQ)及模糊自适应学习控制网络(FALCON)等。其中,基于BP神经网络的软件质量预测模型的研究[8-9]最为成熟,目前已有较为成熟的理论与实践成果。但是,BP神经网络不完全适用于各种软件预测,传统的BP神经网络具有陷入局部极小的缺点。研究人员对神经网络进行了深入的研究和改进,而现有的、在BP神经网络的基础上改进的算法[10-11]也存在一些不同的问题。因此,如何建立有效的软件质量预测模型成为了当前该领域的工作的重中之重。
随着软件质量预测技术的发展,一些性能良好的软件质量预测系统被成功地应用于实际。其中最成功的是EMERALD[12],它由Nortel、Bell Canada和佛罗里达亚特兰大大学联合开发,该系统采用具有多层前向感知器的BP神经网络进行软件质量预测,并成功地应用于大型通信工业软件模块的预测模型中,可以预测出有出错倾向的软件模块,其准确率能够达到70%以上。
除了应用于软件工程的开发阶段,软件质量预测模型在软件维护阶段也大有作为,并且,由于软件版本变得更加稳定,质量模型的总体表现相应地也变得更好了。如在Thwin等学者对某商业软件产品QUES[13]进行的软件质量预测研究中,88%的软件模块均得到了正确的预测。
软件质量预测和分析甚至可以发现人工测试所发现不了的错误。如在美国航空航天局格兰研究中心 (NASA Glenn Research Center) 某大型航空软件开发测试的后期阶段,学者Distefano使用软件质量预测系统分析软件产品时,根据系统的报警信息,核实和确认了一些之前从未被检测出的软件错误 [14]。
国内也开展了软件质量预测应用的研究。王琪等人设计了一个模糊逻辑和神经网络相结合的软件质量预测模型,在对朗讯光网络有限公司开发的SDH通信软件[15]前几个版本进行分析的基础上,成功地预测出了新版本软件中存在的缺陷。
为了深入研究软件度量与软件质量预测模型的相关关系,以及其在实际大型软件工程项目当中存在的意义,美国航空航天局开启了度量数据项目(MDP:Metrics Data Program)。MDP保存记录了十几个大型航空软件项目中的度量数据和错误历史,形成了开放的软件质量数据库,为软件质量预测研究提供了一个开放性的实验平台。
软件质量预测的研究发展至今已超过20年,从软件质量预测理论被提出开始,将软件质量模型应用到实际软件工程中的研究一直都没有停止过。良好的软件质量预测能协助软件开发人员提前预测出软件的出错倾向,合理地分配资源,提高软件开发和实际应用的可靠性,有重要的实际意义和工程价值。
软件质量预测是确认软件是否达到预期功能与性能目标,能否稳定、可靠地投入运行的重要方法,也是软件交付的关键内容。因此,软件质量预测将成为软件开发与测试过程当中的一项重要的工作。良好的软件质量预测和控制机制,不仅可以协助软件开发人员开发出高质量、高可靠性的软件产品,使开发人员在软件开发周期内能对症下药,集中力量修正可能出错的模块,节省资源,缩短开发周期,减少软件开发成本,而且可以提高软件开发机构或部门在市场中的竞争力和信誉。
早期的软件质量预测可以在软件开发的过程中提前预知软件的可靠性,对软件开发的周期的把握、资源的分配、开发计划的实施具有重大的意义。良好的软件质量预测机制能使软件开发人员缩短开发周期,抢占市场先机,节省资源,开发出高质量的软件产品。由此可以知道,软件质量预测的研究是十分有必要的。目前我国大规模的软件工程开发项目正处于快速发展阶段,而软件质量预测的研究才刚起步,与国外领先水平有很大的差距。创新研究成果少和市场的迫切需求表明,软件质量预测具有良好的发展前景。
随着软件产业的快速增长和软件规模的日趋复杂,软件质量度量技术和软件测试技术也在迅速地发展,为软件质量预测提供了更多可以挖掘和分析的、与软件质量相关的数据。因此,基于复杂多维度质量数据的软件质量预测技术是未来研究的一个新方向。另一方面,机器学习和人工智能是目前研究的热门领域之一,深度学习等许多先进的理论和技术被提了出来,这为软件质量预测建模技术的研究提供了新的思路。
软件质量预测模型在理论研究中能有效地根据软件度量预测软件质量,但是在实际应用中,随着软件复杂程度的不断提高、软件规模的不断增大,以及市场对加快软件开发周期的需求更为迫切,软件质量预测的应用往往比理论更加复杂、更加难以控制,这使得软件质量预测仍然有很多有待改进的地方。目前现有的软件质量预测模型的实际预测结果仍不尽人意,模型对象的局限性和不健壮性限制其发展。随着软件工程项目的快速发展,单个模型往往能对某一些软件工程达到较高的预测精度,但不一定适用于所有的软件项目。软件质量预测模型应用范围的局限性是影响软件质量预测技术的重要因素。软件工程项目过程的复杂因素会影响模型最终的预测结果,导致软件开发人员得到错误的结论,影响软件开发过程。
目前软件质量预测所遇到的挑战主要有以下几个方面。
a)软件质量的影响因素多,软件质量预测在软件度量选择上只能考虑主要的影响因素,或者是根据软件失效的历史经验选择软件度量,无法全面地考虑所有的因素。
b)软件实体的多变,软件实体是软件开发人员根据实际需求进行思维活动的产物,随着软件的不断开发、修正、功能的添加等,软件实体的变化具有不稳定性,小小的变动都可能会导致预测误差的巨大变化。
c)软件系统的复杂度高,软件系统中的元素、函数、结构性复杂度等并不能完全由软件度量表示完整,软件系统的高复杂度为模型的学习带来了很大的负担。
软件质量预测是对软件质量进行早期控制的方法,能够对软件系统中潜在的错误进行预测和预警,具有广泛的工程实践意义和应用前景。本文对软件质量预测进行了系统的概述,阐述了软件质量预测的概念、原理和研究现状;分析了软件质量预测的模型框架、数据采集与降维、预测模型构建和训练等核心算法;列举了软件质量预测的典型应用案例;最后对软件质量预测的发展前景和面临的挑战进行了总结。
[1]王青,伍书剑,李明树.软件缺陷预测技术 [J].软件学报, 2008, 19 (7): 1565-1580.
[2]郑人杰,殷人昆,陶永雷.实用软件工程 [M].北京:清华大学出版社,1991.
[3]李虎,史晓华,杨海燕,等.软件质量评价技术 [J].计算机研究与发展,2002,39(1):61-67.
[4]KHOSHGOFTAAR T M,SELIYA N.Tree-based software quality estimation models for fault prediction[C]//IEEE Symposium on Software Metrics.2002:203-214.
[5]KHOSHGOFTAAR T M, ALLEN E B, JONES W D, et al.Accuracy of software quality models over multiple releases[J].Annals of Software Engineering, 2000, 9 (1-2):103-116.
[6]KHOSHGOFTAAR T M,LIU Y,SELIYA N.A multiobjective module-order model for software quality enhancement[J].IEEE Transactions on Evolutionary Computation,2004, 8 (6): 593-608.
[7]FENTON N E, PFLEEGER S L.Software metrics: a rigorous and practical approach[M].Boston:PWS Publishing Co.,1998.
[8]GUPTA N,SINGH M P.Estimation of software reliability with execution time model using the pattern mapping technique of artificial neural network[J].Computers&Operations Research, 2005, 32 (1): 187-199.
[9]KHOSHGOFTAAR T M, PANDYA A S, MORE H B.A-neural-network approach for prediction of software development faults[J].IEEE Computer, 1992, 17 (8): 83-88.
[10]何勇,项利国.基于模糊聚类的 BP神经网络模型研究及应用 [J].系统工程理论与实践,2004,24(2):79-82.
[11]THWIN M M T,QUAH T S.Application of neural networks for software quality prediction using object-oriented metrics[J].Journal of Systems and Software, 2005, 76(2): 147-156.
[12]HUDEPOHL J P, AUD S J, KHOSHGOFTAAR T M, et al.Software metrics and models on the desktop[C]//IEEE Proceedings of the Fourth International Symposium on Assessment of Software Tools.1996:111-112.
[13]THWIN M M T,QUAH T S.Application of neural networks for software quality prediction using object-oriented metrics[J].Journal of Systems and Software, 2005, 76:147-156.
[14]MENZIES T, DEKHTYAR A, DISTEFANO J, et al.Problems with precision: a response to “comments on‘data mining static code attributes to learn defect predictors’” [J].IEEE Transactions on Software Engineering,2007, 33 (9): 1-4.
[15]王琪,于波.朱杰基于人工神经网络的软件失效预测模型研究 [J].计算机仿真,2004,22(3):159-161.