基于度量元的静态软件缺陷预测技术*
2015-01-08常瑞花贾鹏
常瑞花,贾鹏
(武警工程大学科研部,西安710086)
基于度量元的静态软件缺陷预测技术*
常瑞花,贾鹏
(武警工程大学科研部,西安710086)
软件缺陷预测技术是当前软件工程领域的一个热点研究问题。回顾和综述了基于度量元的静态软件缺陷预测技术研究的起源与国内外最新进展动态,并对常用缺陷预测技术的评价指标进行对比和分析,指出其优缺点和适用范围。最后对静态软件缺陷预测技术的可能发展方向进行预测。
度量元,软件缺陷,预测,静态
0 引言
软件密集型装备中软件所占比例的日益增加,使得系统的可靠性越来越依赖于其采用软件的可靠性。研究表明普遍存在于软件中的缺陷,已成为制约系统可靠性的瓶颈。而当前常用的检验、验证手段往往难以发现并排除所有的软件缺陷。为此,软件缺陷预测技术应运而生,成为当前国内外研究的热点。
1 软件缺陷预测技术的国外研究现状
软件缺陷预测技术从20世纪70年代发展至今,一直都是软件工程领域中最活跃的内容之一。软件缺陷预测技术大致可以分为静态软件缺陷预测和动态软件缺陷预测两种。静态软件缺陷预测技术主要是指基于软件缺陷相关的度量元数据,对软件缺陷的数量或分布进行预测研究的技术。主要针对静态软件缺陷预测技术及相关问题展开研究。当前软件缺陷预测的研究内容主要集中在以下3个方面。
1.1 估计软件中遗留或需移除的软件缺陷数目
早期软件缺陷预测主要根据经验来估计,通常使用统计学习方法估计遗留在软件系统中的缺陷数目[1]。例如,人们普遍认为一个软件模块中缺陷数量大约为每60行一个缺陷(乐观估计的话为每100行有1个缺陷),并据此来估计项目验证和测试阶段所需要的人力和计算机资源。之后量化的研究有:Halstead[2]提出缺陷与软件体积度量元的关系D=V/3 000。其中,软件体积V与开发语言相关,V=N(log2(n)),N=N1+N2,n=n1+n2,n1表示不同操作符数量,n2表示不同操作数数量,N1表示总的操作符数量,N2代表总的操作数数量;Lipow[3]在Halstead的基础上进行了改进,考虑了语言的差异性,提出了缺陷与可执行代码行L的关系式:D/L=A0+A1lnL+ A2ln2L,其中,系数Ai(i=0,1,2…)与编程语言相关,语言越高级,则系数Ai越大;Takahashi[4]将代码与具体的文档数量对应起来,给出了缺陷密度的估计式:B=67.98+0.46f1-9.69f2-0.08f3。其中B为缺陷率,即每千行代码中包含的缺陷数目,f1为程序规约变更的频率,f2为程序员技能,f3为程序设计文档;之后,Malaiya等人[5]在假设模块规模符合指数分布的情况下,给出了缺陷密度估算公式:D(s)=a/s+b+cs。其中,D(s)表示缺陷密度,s为规模,a,b,c为经验值,它们分别取决于编程人员能力,过程成熟度以及测试程度等。
1.2 软件缺陷分布预测技术
著名学者Khoshgoftaar,Lessmann等人[6-8]通过收集软件缺陷、软件技术、软件过程以及执行代码等关联的度量元数据,利用分类技术或回归技术研究软件缺陷的分布问题。研究结果表明,软件缺陷在软件模块中的分布符合2~8原则,因此,要预测或识别这些包含大多数软件缺陷的少数模块,就需要分类技术来进行判定。随着机器学习技术研究在软件工程领域中的广泛深入,用于软件缺陷预测的分类技术有很多[3,9-19],例如线性判别分析(Linear Discriminant Analysis,LDA),逻辑回归(Logistic Regression,LR),朴素贝叶斯(Naïve Bayes,NB),贝叶斯网络(Bayesian Networks,BN),K近邻(K-Nearest Neighbor,KNN),多层感知机(Multi-Layer Perceptron,MLP),径向基网络(Radial Basis Function network,RBFnet),遗传程序(Genetic Programming,GP),支持向量机(Support Vector Machine,SVM),决策树(Decision Tree,DT),随机森林(Random Forest,RF)等等。
虽然提出了大量的软件缺陷预测方法,然而准确的软件缺陷预测问题依然没有彻底解决。Lessmann和Menzies等人[7,20]发现当前大量的软件缺陷预测方法在预测精度上遇到了瓶颈,分析其原因主要有两点:①可供使用的(有标识)软件度量元数据有限;②从软件度量元数据中获取的信息有限。而且大多数的软件缺陷预测方法建立于存在大量的有标识软件度量元数据的假设上,但在实际过程中,存在许多可供使用的有标识软件度量元数据十分有限的情况,限制了上述预测方法性能的有效发挥,因此,一定程度上限制了其推广应用。为了克服该瓶颈,学者进行了一些有益的研究,Menzies等人[21]提出和设计了元学习模型WHICH,并指出针对不同的需求采用不同的评价指标,同时提出指标AUC(Effort,PD)用于模型的评价。也有学者提出使用不同项目的软件度量元数据[22-23]。Selia和Catal等人[24-25]则利用大量存在的无标识软件度量元数据进行软件缺陷预测。
1.3 软件缺陷预测技术的评价
在软件缺陷预测研究的领域中,提出了许多的缺陷预测模型和方法,然而由于数据私有或不公开的问题,对于各类预测技术的评价和比较分析一直比较少。最早进行软件缺陷预测模型比较的是:2003年,Khoshgoftaar等人[26]利用一组大型通信软件度量元数据对6类缺陷预测方法进行了比较和评价,评价指标选用平均绝对误差(Average Absolute Error,AAE)和平均相对误差(Average Relative Error,ARE)。2004年,Khoshgoftaar等人[27]指出不同的分类方法产生不同的I类和II类错误率,如果单纯利用某个错误率来评价不同的预测方法是难以得到大家认同的,需要在两类错误类之间取得平衡。如果按照I类和II类错误率的总计来评价这几类预测方法也存在一定的问题,因为I类和II类错误的成本是不同的,所以Khoshgoftaar按照经验值给出了I类和II类错误的成本对比,将成本因素考虑进去引入错分成本(Expected Cost of Misclassification,ECM)的概念,并在大型通信系统中收集软件度量元和缺陷数据完成对这7类缺陷方法进行评价。2005年前后,美国国家航空航天局NASA和一些研究学者收集并建立了公开软件度量元数据库MDP(Metrics Data Program)[28]和PROMISE[29],这为软件缺陷预测技术的研究提供了大量可以免费下载的软件度量元数据样本,很大程度上缓解了软件度量元数据不足的现状。在这些公开的软件度量元数据集上,2004年,Zhong等人[30]比较了25种软件缺陷预测方法的性能。2008年,Lessmann[7]也在NASA的10组公开数据上对22种软件缺陷预测算法进行了比较。2007年,张洪宇等人[31]对基于朴素贝叶斯缺陷预测过程中采用的(PD,PF)评价指标进行了质疑,发现较高的PD值和较低的PF值并不能确保精确率(Precision)取得较高的值,并指出对于不平衡数据而言,较好的缺陷模型应该达到较高的反馈率和精确率,指出(PD,Precision)指标更适于软件缺陷的预测。同期,Menzies等人对张洪宇等人的质疑进行了回应,指出Precison和PF近似反比,且Precision指标稳定性差,高的精确率需要付出较高的代价[32]。另外,基于混淆矩阵的评价指标通常假设正确的肯定率或错误的否定率的成本是相同的,但这与实际情况不符,所以Eric等人[33-34]提出了基于成本效益(Cost-Effectiveness,CE)的评价方法。
2 软件缺陷预测技术的国内研究现状
国内对于软件缺陷的研究,主要集中在软件缺陷数据的分析、缺陷的分类和管理等方面[35-37]。而基于度量元的软件缺陷预测方法研究,国内起步较晚,但是发展十分迅速。最早基于度量元的软件缺陷预测研究的是哈尔滨工程大学张家海等人[38],利用单隐层神经网络估测了组合导航软件模块中的缺陷数目,但神经网络需要大量的导航软件数据,限制了模型在实际过程中的使用。随着机器学习和数据挖掘等技术的发展,许多高校和研究所陆续提出了各种软件缺陷预测方法[39-41]。但是,这些方法主要建立在私有数据上,大大限制了模型的推广。随着NASA MDP和Promise等公开数据库的出现,国内高校和研究组织基于这些公开数据展开了软件缺陷预测的相关研究,涌现出一批最新的研究成果,例如,西安交通大学宋擒豹等人[42]提出了复杂软件缺陷预测模型无偏向比较的框架,通过仿真数据和公开数据对该框架的有效性进行了验证。东北大学的姜慧研等人[43]提出了ACO-SVM软件缺陷预测算法,并在多组公开数据上进行仿真实验验证其有效性,然而该方法的不足之处在于参数的寻优需要较长的时间。电子科技大学的彭怡和马樱等人也分别对软件缺陷预测展开研究,彭怡等人[44]对基于集成方法的软件缺陷预测模型提出了一种多准则决策的评价方法AHP;马樱等人[45]提出了基于基本偏相关方法的软件缺陷预测模型,在公开数据Eclipse上取得较好的性能,但该方法对于软件度量元和缺陷数据的质量要求比较高。最近马樱等人[46]又提出了基于非对称核主成分分析方法用于软件缺陷的预测。
可以发现上述软件缺陷预测的研究主要是基于有标识的软件度量元数据展开的,而且许多方法假设存在大量的有标识软件度量元数据。但在许多的实际过程中,有标识的软件度量元数据是相对贫瘠的。近一两年来,国内学者为了解决有标识软件数据匮乏或不足情况下的软件缺陷预测问题,进行了一些有益的研究。一些学者利用实际过程中大量存在的无标识度量元数据进行缺陷检测模型的建立[47],也有学者使用跨项目(Cross-Project)数据缓解有标识软件数据的不足[48],但是基于跨项目数据的软件缺陷预测是一个极富挑战性的问题,研究发现基于跨项目数据的缺陷预测模型性能有时反而更差。清华大学的张洪宇和其团队[49]也对此进行研究,提出了主动和半监督学习结合采样的软件缺陷预测方法,该方法比较适于大规模的软件项目,不足之处在于样本的训练对收集的软件数据要求很高,限制了其推广。可以看出,国内高校和研究所对于无标识软件度量元数据缺陷预测的研究还处于一个起步摸索阶段。
3 总结与展望
软件缺陷预测技术的研究既是软件工程领域的探索性研究,具有较强的创新性,也是该领域的基础性研究。虽然当前提出了众多的软件缺陷预测方法或模型,但到目前为止,软件缺陷预测问题还没有得到彻底解决,尚有如下问题存在:
3.1 软件缺陷预测模型通用性差
存在许多的软件缺陷预测模型基于私有数据建立,由于种种原因这些私有数据没有公开,使得其他研究人员难以进行预测模型的比较,且针对特定数据建立的该模型通用性较差。
3.2 软件度量元选择缺乏理论支持
不同度量元对于软件缺陷预测结果的影响问题。传统的软件度量元技术主要是基于规模度量元,随着软件开发技术的发展,软件的复杂度不断增加,出现了许多新的度量元,例如过程度量元,执行度量元等。新的度量元能否提高原来预测技术的性能,还没有确凿的证据。
3.3 有标识软件度量元数据预测精度的提高
软件缺陷预测过程中,软件度量元数据的收集需要大量的成本,导致训练软件缺陷预测模型的数据很有限,尤其是有类别标识的软件度量元数据。准确的软件缺陷预测是软件测试人员和项目管理者追求的目标,如何从新角度出发,进一步提高软件缺陷预测的精度是一个重要的研究内容。
3.4 无标识软件度量元数据的预测技术研究
当前大部分基于机器学习的软件缺陷预测技术都假设存在大量的软件度量元和缺陷数据。然而出于种种原因,在实际情况中有标识软件度量元数据是十分匮乏的,如何利用无标识软件缺陷度量元数据进行准确的软件缺陷预测是软件工程领域中下一步研究的热点和难点。
4 结论
论文综述了基于度量元静态软件缺陷预测技术的国内外研究现状,归纳总结当前存在的问题,并指出了下一步研究的内容和方向。
参考文献:
[1]王青,伍书剑,李明树.软件缺陷预测技术[J].软件学报,2008,19(7):1565-1580.
[2]Halstead M H.Elements of Software Science(Operating and Programming Systems Series)[M].New York:Elsevier Science Inc,1977.
[3]Lipow M.Number ofFaults Per Line of Code[J].IEEE Transactionson SoftwareEngineering,1982,8(4):437-439.
[4]Takahashi M,Kamayachi Y.An Empirical Study of a Model for Program Error Prediction[J].IEEE Transactions on Software Engineering,1989,15(1):82-86.
[5]Malayia Y K,Denton J.Module Size Distribution and Defect Density[C]//In:Proceeding of the 11th International Symposium on Software Reliability Engineering.San Jose::IEEE Computer Society Press,2000.
[6]Evett M,Khoshgoftaar T,Chien P,et al.GP-based Software Quality Prediction[C]//In:Proceeding of the 3rd Annual Genetic Programming Conference.SanFrancisco:Morgan Kaufmann Press,1998.
[7]Lessmann S,Baesens B,Mues C,et al.Benchmarking Classification Models for Software Defect Prediction:A Proposed Framework and Novel Findings[J].IEEE Trans Softw Eng,2008,34(4):485-496.
[8]Naeem Seliya,Taghi M K.The Use of Decision Trees for Cost-sensitive Classification:an Empirical Study in Software Quality Prediction[J].Data Ming and Knowledge Discovery,2011,5(1):448-459.
[9]Munson J C,Khoshgoftaar T M.The Detection of Fault-prone Programs[J].IEEE Transaction on Software Engineering,1992,18(5):423-433.
[10]Briand L C,Melo W L,Wust J.Assessing the Applicability of Fault-proneness Models Across Object-oriented Software Projects[J].IEEE Transaction on Software Engineering,2002,28(7):706-720.
[11]Porter A,Selby R.Empirically Guided Software Development Using Metric-based Classification Trees[J].IEEE Software,1990,7(2):46-54.
[12]Menzies T,Greenwald J,Frank A.Data Mining Static Code Attributes to Learn Defect Predictors[J].IEEE Transactions on Software Engineering,2007,33(1):2-13.
[13]Zheng J.Prediction Software Reliability with Neural Network Ensembles[J].Expert System with Application,2009,36(2):2116-2122.
[14]Kaim O E,Mahmoud O E.Predicting Defect-prone Software Modules using Support Vector Machines[J].The Journal of Systems and Software,2008,81(5):649-660.
[15]Catal C,Diri B.Investigating the Effect of Dataset Size,Metrics Sets and Feature Selection Techniques on Software FaultPrediction Problem[J].Information Science,2009,179(8):1040-1058.
[16]Bibi S,Tsoumakas G,Stamelos I,et al.Regression via Classification Applied on Software Defect Estimation[J]. ExpertSystemswithApplication,2005,34(3): 2091-2101.
[17]Pai G J,Dugan J B.Empirical Analysis of Software Fault Content and Fault Proness Using Byesian Methods[J]. IEEE Transaction on Software Engineering,2006,33(10): 675-686.
[18]Gao K,Khoshgoftaar T M.A Comprehensive Empirical Study of Count Models for Software Fault Prediction[J]. IEEE Transactions for Reliability,2011,56(2):223-236.
[19]Khoshgoftaar T M,Seliya N,Gao K.Assessment of a New Three-group Software Quality Classification Technique:An Empirical Case Study[J].Empirical Software Engineering,10(2):183-218.
[20]Menzies T,Turhan B,Gregory G,et al.Implication of Ceiling Effects in Defect Predictors[C]//In Proceedings of the 4th International Workshop on Predictor Models in Software Engineering.Leipzig,Germany,2008.
[21]Menzies T,Milton Z,Turhan B,et al.Defect Prediction from Static Code Features:Current Results,Limitations,New Approaches[J].Automated Software Engineering,2010,17(4):375-407.
[22]Zimmermann T,Nagappan N,Gall H,et al.Cross-project Defect Prediction:a Large Scale Experiment on Data vs. Domain vs.Process[C]//In:Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering.Amsterdam,the Netherlands,New York:ACM Press,2009.
[23]He Z M,Shu F D,Yang Y,et al.An Investigation on the Feasibility of Cross-project Defect Prediction[J].Automated Software Engineering,2012,19(2):167-199.
[24]Seliya N,Khoshgoftaar T M.Software Quality Estimation with Limited Fault Data:a Semi-supervised Learning Perspective[J].Software Quality Journal,2007,15(3): 327-344.
[25]Catal C,Sevim U,Diri B.Clustering and Metrics Thresholds Based Software Fault Prediction of Unlabeled Program Modules[C]//In:Proceedings of the 6th International Conference on Information Technology:New Generations,Software Engineering Track.New York:ACM Press,2009.
[26]Khoshgoftaar T M,Seliya N.Fault Prediction Modeling for Software Quality Estimation:Comparing Commonly used Techniques[J].Empirical Software Engineering,2003,8(3):255-283.
[27]Khoshgoftaar T M,Seliya N.Comparative Assessment of Software Quality Classification Techniques:An EmpiricalCase Study[J].Empirical Software Engineering,2004,9(3):229-257.
[28]NASA/IV&VFacility.NASAMetricsDataProgram[DB/EL].http://mdp.ivv.nasa.gov/.2005-12-5.
[29]Sayyad S J,Menzies T J.The PROMISE Repository of Software Engineering Database[EB/OL].Canada:University of Ottawa.http://promise.site.uottawa.ca/SERepository.2013-11-5.
[30]Zhong S,Khoshgoftaar T,Seliya N.Analyzing Software Measurement Data with Clustering Techniques[J].IEEE Intelligent System,2004,19(2):20-27.
[31]Zhang H,Zhang X.Comments on“Data Mining Static Code Attributes to Learn Defect Predictors”[J].IEEE Transactions on Software Engineering,2007,33(9):635-637.
[32]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): 637-640.
[33]Erik A,Lionel C B,Magnus J F.Data Mining Techniques for Building Fault-proneness Model in Telecom Java Software[C]//In:Proceedings of the 18th International Symposium on Software Reliability Engineering.New York:IEEE Computer Society Press,2007.
[34]Erik A,Lionel D,Briand,et al.A Systematic and Comprehensive Investigation of Methods to Build and Evaluate Fault Prediction Models[J].The Journal of System and Software,2010,83(1):2-17.
[35]聂剑平,韩柯,陈光,等.软件缺陷增长过程的混沌分析[J].计算机工程与应用,2008,44(11):97-100.
[36]刘海,郝克刚.软件缺陷数据的分析方法及其实现[J].计算机科学,2008,35(8):262-264.
[37]王贺.基于ODC的软件缺陷管理方法的研究与应用[J].北京:北京邮电大学,2009.
[38]张家海,孙枫,谢荣生,等.估测组合导航系统软件缺陷的一种神经网络方法[J].哈尔滨工程大学学报,2001,22(1):55-58.
[39]李心科,金元杰.基于灰色预测理论的软件缺陷预测模型研究[J].计算机应用与软件,2009,26(3):101-103.
[40]颜真.基于模糊支持向量回归的软件缺陷预测[D].北京:北京理工大学,2010.
[41]赵亮,侯金宝.文件和包层次的软件缺陷预测[J].清华大学学报(自然科学版),2011,51(S1):1472-1476.
[42]Song Q B,Jia Z H,Shepperd M,et al.A General Software Defect-proneness Prediction Framework[J].IEEE Transactions on Software Engineering,2011,37(3):356-370.
[43]姜慧研,宗茂,刘相莹.基于ACO-SVM的软件缺陷预测模型的研究[J].计算机学报,2011,34(6): 1148-1154.
[44]Peng Y,Kou G,Wang G X,et al.Ensemble of Software Defect Predictors:an AHP-based Evaluation Method[J].International Journal of Information Technology&Decision Making,2011,10(1):187-206.
[45]马樱,罗光春,李炯,等.偏相关方法在软件缺陷预测中的应用[J].计算机应用研究,2012,29(2):594-596.
[46]Ma Y,Luo G C,Chen H.Kernel Based Asymmetric Learning for Software Defect Prediction[J].IEICE Trans.Inf.& Syst.,2012,E95-D(1):267-270.
[47]Jiang Y,Li M S,Zhou Z H.Software Defect Detection with ROCUS[J].Journal of Computer Science&Technology,2011,26(2):328-342.
[48]Ma Y,Luo G C,Zeng X,et al.Transfer Learning for Cross-company Software Defect Prediction[J].Information and software technology,2012,54(3):248-25.
[49]Li M,Zhang H Y,Wu R X,et al.Sample-based Software Defect Prediction with Active and Semi-supervised Learning[J].Automated Software Engineering,2012,19(2): 201-230.
Review of Static Software Defect Prediction Based on Metrics
CHANG Rui-hua,JIA Peng
(Engineering University of Armed Police Force,Xi’an 710086,China)
Software defect prediction technology has been a hot topic in the field of software engineering.Firstly,this paper reviewed and summarized the origin and new development of static software defect prediction based on metrics.Then evaluation methods for software defect prediction are analyzed.Meantime,its advantages and disadvantages and scope are compared and pointed out. Finally,some opinions of the authors about the future development in this research field are presented.
metric,software defect,prediction,static
TP311
A
1002-0640(2015)02-0001-05
2013-12-05
2014-02-07
“十一五”国防预研基金资助项目;武警工程大学基础研究项目(WJY201315)
常瑞花(1982-),女,山西太原人,博士。研究方向:软件缺陷预测,信息处理与信息安全。