基于机器学习的软件缺陷预测技术研究
2017-12-05韦良芬
韦良芬
(安徽三联学院 计算机工程学院, 合肥 230601)
基于机器学习的软件缺陷预测技术研究
韦良芬
(安徽三联学院 计算机工程学院, 合肥 230601)
基于机器学习的软件缺陷预测技术是提高软件可靠性的有效方法。本文分析了机器学习用于软件缺陷预测的优势,总结了基于机器学习的软件缺陷预测的关键技术、预测步骤和当前研究存在的问题,并就当前的研究内容进行了探讨。
机器学习;软件;缺陷预测
0 引言
随着各种软件系统规模不断扩大,系统复杂度不断提高,软件的可靠性面临着严峻的考验[1]。各个行业对软件的依赖性越来越大,软件故障导致的后果也越来越严重。那么,在软件开发早期对软件缺陷进行预测,以便项目开发阶段集中资源处理多缺陷、高风险项目模块,对提高软件成品的质量、平衡和控制软件开发成本等方面都将起着非常关键的作用[2]。2000年,美国经验软件工程中心就提出了软件缺陷预测领域的研究目标和方向,并开放缺陷预测样本数据,从而为研究提供条件支持。近年来,软件预测领域逐渐受到国内外学者的广泛关注,而基于机器学习的软件缺陷预测技术是当今软件技术人员研究的热点内容[3]。本文在查阅和研究大量国内外文献资料的基础上,阐述了基于机器学习软件缺陷预测技术的相关问题,并就其当前主要研究方向和研究内容进行了一定的分析与探索。
1 软件缺陷预测与机器学习技术
软件缺陷预测环境是呈增量变化的,主要表现在两个方面[4-6]:
(1)软件开发呈现增量过程
在实际应用中,大型复杂软件产品的开发通常采用增量模型。软件的各个阶段产品到最终交付的软件产品呈现天然的增量过程。软件缺陷预测通过对各个阶段的原型产品的度量样本集到最终的软件产品所对应的度量样本集也呈增量过程。
(2)未知样本经过测试验证后,带标签样本数目呈现增量
软件测试的过程,即对预测样本结果的验证,也是对已有软件缺陷预测模型的修正过程。因此,软件缺陷预测是一项伴随软件测试及维护过程的持续活动。训练样本也随着未知样本测试验证,呈现增量特征,需要在线修正软件缺陷预测模型。
机器学习是在某类任务上以性能度量衡量的性能,随着经验而自我完善,即通过学习归纳和总结,重新组织已有的知识结构从而不断改善自身的性能以获取新的知识或技能。而软件缺陷预测的增量环境非常适合通过学习进行归纳和总结,因此,将机器学习技术应用于软件缺陷预测将可以大大减少人力和物力的投入。
2 基于机器学习的软件缺陷预测关键技术
软件缺陷一方面指软件开发或维护过程中存在的错误或不足等问题;另一方面指系统功能没有达到客户的需求[7]。基于机器学习的软件缺陷预测技术是指利用软件产品开发过程中的模块度量数据和标记数据,基于机器学习的方法建立预测模型,从而预测当前未标记模块是否存在缺陷[8]。软件缺陷预测使用的方法主要有基于统计、基于机器学习以及基于两者的混合方法。近年来,基于机器学习的软件缺陷预测是软件缺陷预测的主要研究内容[9]。其缺陷预测过程如图1所示。
图1 基于机器学习的缺陷预测示意图
基于机器学习的软件缺陷预测研究主要包括以下内容:
1.1 预测模型特征属性
软件度量是指应用测量技术对软件开发过程和产品进行度量,并为该过程和产品提供及时有益的管理信息[10]。软件度量分为静态度量元和动态度量元。静态度量元是对软件产品的代码行数、函数等进行静态统计而得到的;动态度量元是对软件产品的缺陷数量进行完整测试而得到的。软件缺陷预测的基本思想是利用静态度量元确定软件的复杂度。通常情况下,软件模块的复杂度高,则它的缺陷数量相对也比较多。基于软件产品的度量数据,可将软件产品的质量进行量化。但是,一方面,由于噪音、数据不完整等原因,导致缺陷数据收集困难,可靠性不高;另一方面,由于各个领域的特性不同,收集的数据存在不同的特性,从而出现类不平衡等问题。由于缺乏训练数据,以及数据的不同特征等原因,导致软件预测模型的预测性能降低。近30年以来,软件度量一直被软件工程领域所重视,而发现软件产品开发过程的各种特征属性是该领域的研究的重点。比如圈复杂度属性、基本复杂度属性、设计复杂度属性等都是很重要的软件特征属性[11]。
1.2 软件缺陷预测模型及算法
软件缺陷预测模型主要包括基于监督学习的预测模型、基于半监督学习的预测模型和基于无监督学习的预测模型三种。其中,基于监督学习的预测模型需要足够的度量指标数据和缺陷标记数据作为训练的历史数据;基于半监督学习的预测模型需要所有模块的度量指标和部分缺陷标记数据作为训练的历史数据;基于无监督学习的预测模型只需要度量指标数据作为训练的历史数据[12]。但由于存在数据集有限、收集高质量数据困难、软件数据类不平衡分布等负面问题,在建立软件缺陷预测模型时,必须研究相关内容,设法解决这些负面因素带来的不良影响。
针对基于机器学习的软件缺陷预测模型,国内外文献介绍了各种不同的预测算法,如表1所示。另外,基于回归模型的软件缺陷预测方法和基于属性约简的缺陷预测方法等也是机器学习的常用预测方法。
表1 预测模型及相关算法
1.3 预测模型的评估指标
当前,大部分预测模型评估指标是直接引用了数据挖掘领域的评估指标,但有些数据挖掘评估指标用于软件缺陷预测模型的评估时,可能会产生很高的代价,比如数据挖掘中的Acc指标是以相同的代价将有缺陷模块预测处理为无缺陷模块,将无缺陷模块预测处理为有缺陷模块,而这两种缺陷预测的代价差距是很大的[3]。
随着机器学习和数据挖掘技术的发展,机器学习领域的分类模型逐渐运用于软件预测模型的评估。研究和借鉴有效的评估方法评估软件预测模型各方面的性能是软件缺陷预测的研究重点内容之一。
3 基于机器学习的软件缺陷预测步骤
基于软件度量的缺陷预测技术已经比较成熟,主要涉及选用何种软件度量、在哪个数据集上、使用何种预测方法和何种评价标准等4个关键因素。基于机器学习的软件缺陷预测过程分为以下5个步骤:
(1)选择合适的统计度量元集合;
(2)采集、准备和分析软件产品的统计数据;
(3)构造合适的软件预测模型,即训练算法,这是机器学习的核心;
(4)将统计数据输入到软件预测模型;
(5)对预测结果进行评估。
确定合适的度量元并按照相应的度量元在软件项目中采集数据之后,预测算法将依据采集的数据建立预测合适的模型,在输入度量元数据时,预测模型就可以预测模块的缺陷状况。这5个步骤中,预测模型是最为核心的部分。最后选择合适的评估方法对预测结果进行评估。
4 当前软件缺陷预测方法存在的问题
软件缺陷预测技术经过多年的研究已经取得了较大的成就,但仍然存在一些问题需要进一步的研究,总结当前软件缺陷预测方法及其应用存在的问题主要有一下几点[16]:
(1)软件缺陷数据中正例样本数通常比负例样本数高很多,数据分布很不均衡;
(2)当前软件缺陷预测通常是针对单个软件项目,跨平台预测能力比较弱;
(3)正样本数据集有限,建立预测模型的信息缺乏;
(4)误分代价差异较大,将有缺陷倾向的模块标记为无缺陷倾向模块后,需要花费很高的代价进行更正。
因此,针对这几方面的问题,研究新的预测方法或完善已有的预测方法是软件缺陷预测技术研究中一个非常重要的任务。
5 结语
基于机器学习的软件缺陷预测技术近年来受到了研究者的广泛关注。笔者在系统地研究相关国内外文献的基础上,总结了基于机器学的软件缺陷预测的优势、软件缺陷预测的关键技术、基于机器学习的软件缺陷预测流程和当前研究存在的缺点,并就当前的研究热点进行分析和探讨。
[1] M R Lyu.Software reliability engineering:A roadmap[C]∥Proc.of Future of SoftwareEngineering(FOSE),2007,153-170.
[2] N Bhatia.Surveyof Nearest NeighborTechniques[J].International Journal of Computer Science and Information Security,2010, 8 (2): 302-305.
[3] 马樱. 基于机器学习的软件缺陷预测技术研究[D].西安:电子科技大学,2012.
[4] A K Jain.Dataclustering: 50 years beyond K-means[J].Pattern Recognition Letters,2010, 31(8): 651-666.
[5] Rao S, Kak A.moreBugs: A New Dataset for Benchmarking Algorithms for InformationRetrieval from Software Repositories[R].ECE Technical Reports, 2013.
[6] Nam J, Pan S J, Kim S. Transfer defect learning [C]. // In Proceedings of the 2013 International Conference on Software Engineering, San Francisco, CA, 2013:382-391.
[7] Zhang F,MockusA,KeivanlooI, et al.Towards Building a Universal Defect Prediction Model[C]//Proceedings of the 11th Working Conference on Mining Software Repositories, 2014:182-191.
[8] 吴方君.软件缺陷预测经验共享:一种迁移学习方法[J].小型微型计算机系统,2014,35(11):2416-2421.
[9] Chen Y,Shen X H,Wang A B,et al.Application ofProbahilistic RelationalModel to Aerospac e Sof tware Def ectPr edict ion[J].Opticsand Precision Engineering,2013,21 (7) :1865-1872.
[10] 单锦辉,徐克俊,王戟.一种软件故障诊断过程框架[J].计算机学报,2011,34(2):371-382.
[11] N Bhatia.Survey of Nearest Neighbor Techniques[J].InternationalJournal of Computer Science and Information Security, 2010, 8 (2): 302-305.
[12] C Catal,U Sevim,B Diri.Software Fault Prediction ofUnlabeledProgram Modules[C].Proceedings of the World Congress on Engineering,London,U.K., 2009:1-3.
[13] Qing W,Wu S,M.Software Defect prediction[J].Journal of Software,2008,19(7):1565-1580.
[14] Y,Jiang,M Li,ZH Zhou.Software defect detectionwith Rocus[J].Journal of Computer Science and Technology, 2011, 26(2): 328-342.
[15] C Catal,B Diri.Unlabelledextra data do not always mean extra performance for semi-supervised fault prediction[J]. Expert Systems, 2009, 26(5): 458-471.
[16] 戴翔,毛宇光. 基于集成混合采样的软件缺陷预测研究[J].计算机工程与科学,2015,37(5):930-936.
责任编辑:程艳艳
ResearchonTechnologyofSoftwareDefectPredictionBasedonMachineLearning
WEI Liangfen
(School of Computer Engineering, Anhui Sanlian University, Hefei 230601, China)
Software defect prediction technology based on machine learning is an effective way to improve software reliability. This paper analyzes the advantages of machine learning for software defect prediction, summarizes the key technology for predicting software defects, prediction steps and existing problems, and discusses the current research contents.
machine learning; software; defect prediction
2017-06-12
安徽省教育厅自然科学重点项目(KJ2016A252); 安徽省教育厅自然科学重点项目(KJ2016A894)
韦良芬(1975-),女,安徽舒城人,副教授,硕士,主要从事机器学习和软件工程研究。
TP311
A
1009-3907(2017)10-0007-03