基于分类的软件缺陷严重性预测
2016-09-10王婧宇邹卫琴
王婧宇 张 欣 邹卫琴
(1.南京市产品质量监督检验院 南京 210028)(2.大连理工大学软件学院 大连 116621)(3.江西理工大学 南昌 330000)
基于分类的软件缺陷严重性预测
王婧宇1张欣2邹卫琴3
(1.南京市产品质量监督检验院南京210028)(2.大连理工大学软件学院大连116621)(3.江西理工大学南昌330000)
在软件开发过程中,软件缺陷的修复是保证软件质量的重要环节。然而随着软件规模的快速增长、缺陷数目的急剧增加、人力物力资源的有限,报告的软件缺陷不能全部被修复。为了保证软件的质量,人们往往对软件缺陷进行优先级排序,将有限的资源集中在优先级高的软件缺陷修复上。软件缺陷严重性就是一种重要的优先级度量标准。近年来对软件缺陷严重性的预测已引起了人们的广泛研究。当前主流的预测方法是基于分类的技术,即将描述软件缺陷的报告当做文档,严重程度作为标签,利用现有的机器学习算法对其建模并进行预测。论文主要对基于分类的软件缺陷严重性预测工作做一个简要的介绍,包括已有的研究成果,基于分类的技术框架以及将来可能的发展方向。
软件缺陷; 缺陷严重性; 分类
Class NumberTP311
1 引言
软件维护是软件开发过程中必不可少的重要环节,对缺陷的修复是软件维护的重要活动之一。随着软件规模的快速增长,大量的软件缺陷单靠人力来维护已变得非常困难。由此,很多软件如Mozilla、Eclipse等通常使用缺陷管理工具来跟踪和管理软件的缺陷。Bugzilla和Jira就是当前两种比较主流的跟踪维护软件缺陷的管理工具,又称bug仓库。由于任何用户在使用软件的过程中发现了问题都可以向bug仓库中提交报告来描述缺陷,这通常导致bug仓库存储了大量的缺陷报告。例如,据统计,Eclipse的bug仓库中每天平均接收94个新的bug报告[1]。另一方面,由于软件开发的资源有限,软件通常也面临快速发布的压力,开发者往往无法修复所有的软件缺陷。由此,为了保证软件质量,通常的做法是将软件缺陷按一定的优先级排序,优先解决那些高优先级的软件缺陷。
最初对软件缺陷进行优先级的判断是通过人手工完成。这种方式的缺点是排序的准确性主要依靠人的经验及其所花时间,除此之外,对海量缺陷的严重性排序也导致人力排序可操作性差。
为了解决人手工对缺陷严重性排序的问题,研究者提出将这一过程进行自动化。目前人们通常使用分类,信息检索等技术解决缺陷严重性预测的问题。而基于分类的缺陷严重性预测是当前主流的预测方法。
2 已有研究工作介绍
主流的缺陷严重性预测方法主要是基于分类的预测方法,即将描述软件缺陷的缺陷报告当做实例,抽取其中的相关特征,利用机器学习方法建模,对新的软件缺陷进行自动化的严重性预测。
2008年,Tim Menzies等[2]首先提出利用缺陷报告中的文本信息,借助文本挖掘和机器学习算法历史数据建模对缺陷严重性进行自动预测。他们将缺陷分为五类,分值从1~5,1表示最严重,严重程度依次递减。实验数据来自NASA项目的bug仓库数据。随后,Ahmed Lamkanfi等[3]在开源项目上进行了相关的研究,他们也是利用文本信息作为特征,使用Naïve Bayes方法[4]进行建模,在预测软件缺陷的严重性时只预测其是否严重。在他们的工作中,重点关注了文本信息中对建模起较强作用的特征词,概括性文本和描述性文本对建模的区别,训练样本的充足性以及组建内和跨组建的模型性能研究。在他们随后的工作中[5]重点比较了多种机器学习算法的性能,发现Naïve Bayes效果最好。文献[6~8]均研究了特征选择对分类效果的提升,使用的特征选择方法基本为信息增益、卡方验证、TFIDF等。实验数据集为开源醒目数据或者工业数据集。使用的分类方法基本为Naïve Bayes和支持向量机Support Vector Machine(SVM)。在文献[8]中,也使用了bigrams技术以提升模型的效率。2012年,Iliev M等[9]使用工业数据集,结合使用软件设计知识和用户需求来预测缺陷的严重性。同时,Tian Y等[10]基于信息检索的最近邻方法预测缺陷的严重性,使用了三个开源项目,即Eclipse、Mozilla和OpenOffice。他们将严重性分为五个等级,即Trival,Minor,Major,Critical,Blocker。在文献[11]中,作者结合使用主题模型和多种缺陷特征,使用基于KL距离的最近邻方法进行预测模型的建立。
3 缺陷严重性预测模型技术框架
3.1基于分类的预测技术框架
软件缺陷严重性是根据软件缺陷对系统成功执行产生的影响程度做出的绝对分类[3];通常来说,软件缺陷严重性从Trivial,Minor,Normal,Critical到Blocker依次递减[5]。基于分类的缺陷严重性预测模型,通常是将一个个缺陷报告当做实例,从该缺陷报告中抽取出一些特征作为实例的属性,使用已有的分类算法进行分类模型的建立。图1展示了基于分类技术的软件缺陷严重性预测的一般流程。
图1 基于分类技术的缺陷预测模型的流程
对一个软件,收到的缺陷报告数目可能较大,因此筛选出有价值并且有意义的缺陷报告,能够在很大程度上减轻缺陷严重性预测的工作量。如果一个缺陷报告中包含软件相关的基本信息,比如组件名称、堆栈等[12],可以被认为较为专业,同时这份报告也对于软件缺陷严重性的预测有一定的价值。如果报告是由熟悉开发工具的技术人员提出的,相比而言,这份报告具有更大的利用价值。
除了对缺陷报告的筛选,对报告内容的筛选也是一项重要的工作——如何在众多的文字描述中提取出有用的关键词,其详细的内容将在3.2节介绍。
前期处理后,由于缺陷报告的文本形式,分类算法将能够帮助在大量的信息中进行分类和鉴定,对于分类算法的说明将在3.3节介绍。
3.2缺陷报告内容的预处理
对于筛选后的缺陷报告,需要对报告的内容进行进一步的处理,这其中包括三个步骤:分词——去停用词——提取词干[13]。
以这句报告内容为例,”In the case, it shows that many defects are exposed in the process of design from the table showed before.”在转化为分词的过程中,该句中的每个单词对应一个分词,将整个句子转换成一组分词的集合,在这样的处理下,将得到这样的序列:{in the case it shows that many defects are exposed in the process of design from the table showed before},其次,围绕软件缺陷,去除停用词,即把一些对短语表述不构成直接影响的单词的的单词直接过滤掉,一般情况下,停用词中至少包括介词、冠词、代词,将第一步处理得到的集合过滤后可以得到{shows defects exposed process design table showed}这样的集合。最后是词干的提取工作,将报告中的所有派生词还原到词根并去除重复词根,这一步的操作在保证缺陷报告准确性的基础上,精炼出不重复的词干,帮助捕捉报告中所提到的缺陷性质,处理之后只剩下{show defect expose process design table}这样的集合,从最终的处理结果来看,能够在减少阅读量的基础上,使测试人员可以清晰准确地提取出需要的信息。
对缺陷报告的文本处理很大程度上简化了原先的表达,能够较为完整地和高效地过滤、提取出原先报告中有意义的部分[14],实现对关于缺陷的关键词的高效捕捉。
3.3分类算法
根据确定的分类主题,分类算法将一系列的文本文件自动分配一个预先定义好的类目,正式地看,分类算法是一种函数[3]:
f:Documents→{a1,…,an}
在软件缺陷严重性预测中,分类算法把预先处理过的缺陷报告映射为具体的类目,即{trivial,minor,normal,critical,blocker}。
目前存在着许多的分类算法,其中包括朴素贝叶斯算法Naïve Bayes,支持向量机Support Vector Machine(SVM)和K最邻近结点算法K-Nearest Neighbor(KNN)[15]这三种最常用于缺陷严重性预测的分类算法:
Naïve Bayes[4]即朴素贝叶斯算法,基于各待分类文本特征变量是相互独立的假设,是文本分类模型中的一种简单但性能优越的分类模型,虽然这样的假设在许多应用领域未必能很好满足,甚至是不成立的。但这种简化的贝叶斯分类器在许多实际应用中还是得到了较好的分类精度。
Support Vector Machine(SVM)[17]即支持向量机算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的
K-Nearest Neighbor(KNN)[18]即K最邻近结点算法算法,较适合处理多分类问题,即对象具有多个类别标签的情况,但计算复杂度较高,不适于大数据的分类问题。
基于这三种的优缺点分析,本文比较了这三种常见的分类算法。
4 结语
缺陷严重性预测于开发者对缺陷进行优先级排序有重要意义。本文主要对目前主流的基于分类的缺陷严重性预测工作进行了一个总结。主要介绍了该类方法的技术框架及对框架中的主要步骤进行了介绍。从当前的研究方法来看,主要使用了缺陷报告文本特征,少数结合使用了其他一些特征比如系统信息等。在分类方法的选取上,主要使用常见的如Naïve Bayes、SVM、KNN等。对特征的挖掘还不够深入,涉及的面较少;其他领域的建模方法较少使用;较少利用来自领域专家的知识。这些都是将来可以对已有方法进行改进的地方。
[1] Bettenburg N, Premraj R, Zimmermann T, et al. Duplicate bug reports considered harmful… really[C]//Software maintenance, 2008. ICSM 2008. IEEE international conference on. IEEE,2008:337-345.
[2] Menzies T, Marcus A. Automated severity assessment of software defect reports[C]//Software Maintenance, 2008. ICSM 2008. IEEE International Conference on. IEEE,2008:346-355.
[3] Lamkanfi A, Demeyer S, Giger E, et al. Predicting the severity of a reported bug[C]//Mining Software Repositories(MSR), 2010 7th IEEE Working Conference on. IEEE,2010:1-10.
[4] Rish I. An empirical study of the naive Bayes classifier[C]//IJCAI 2001 workshop on empirical methods in artificial intelligence. IBM New York,2001,3(22):41-46.
[5] Lamkanfi A, Demeyer S, Soetens Q D, et al. Comparing mining algorithms for predicting the severity of a reported bug[C]//Software Maintenance and Reengineering (CSMR), 2011 15th European Conference on. IEEE,2011:249-258.
[6] Yang C Z, Hou C C, Kao W C, et al. An empirical study on improving severity prediction of defect reports using feature selection[C]//Software Engineering Conference(APSEC), 2012 19th Asia-Pacific. IEEE,2012,1:240-249.
[7] Malhotra R, Kapoor N, Jain R, et al. Severity Assessment of Software Defect Reports using Text Classification[J]. International Journal of Computer Applications,2013,83(11):13-16.
[8] Singha Roy N K, Rossi B. Towards an Improvement of Bug Severity Classification[C]//Software Engineering and Advanced Applications (SEAA), 2014 40th EUROMICRO Conference on. IEEE,2014:269-276.
[9] Iliev M, Karasneh B, Chaudron M R V, et al. Automated prediction of defect severity based on codifying design knowledge using ontologies[C]//Realizing Artificial Intelligence Synergies in Software Engineering(RAISE), 2012 First International Workshop on. IEEE,2012:7-11.
[10] Tian Y, Lo D, Sun C. Information retrieval based nearest neighbor classification for fine-grained bug severity prediction[C]//Reverse Engineering (WCRE), 2012 19th Working Conference on. IEEE,2012:215-224.
[11] Yang G, Zhang T, Lee B. [C]//Computer software and applications conference (COMPSAC), 2014 IEEE 38th annual. IEETowards semi-automatic bug triage and severity prediction based on topic model and multi-feature of bug reportsE,2014:97-106.
[12] Bettenburg N, Just S, Schröter A, et al. What makes a good bug report[C]//Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering. ACM,2008:308-318.
[13] Sun C, Lo D, Wang X, et al. A discriminative model approach for accurate duplicate bug report retrieval[C]//Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering-Volume 1. ACM,2010:45-54.
[14] Menzies T, Marcus A. Automated severity assessment of software defect reports[C]//Software Maintenance, 2008. ICSM 2008. IEEE International Conference on. IEEE,2008:346-355.
[15] Chaturvedi K K, Singh V B. Determining bug severity using machine learning techniques[C]//Software Engineering (CONSEG), 2012 CSI Sixth International Conference on. IEEE,2012:1-6.
[16] Safavian S R, Landgrebe D. A survey of decision tree classifier methodology[J]. IEEE transactions on systems, man, and cybernetics,1991,21(3):660-674.
[17] Keller J M, Gray M R, Givens J A. A fuzzy k-nearest neighbor algorithm[J]. Systems, Man and Cybernetics, IEEE Transactions on,1985(4):580-585.
Severity Prediction of Software Defects Based on Classification
WANG Jingyu1ZHANG Xin2ZOU Weiqin3
(1. Nanjing Institute of Product Quality Inspection, Nanjing210028)
(2. Software School, Dalin Univeristy of Technology, Dalian116621)
(3. Jiangxi University of Science and Technology, Nanchang330000)
In software development, the debugging of software defects is an important part to guarantee the software’s quality. However, with the rapid increase of software scale, the more and more defects numbers and the limitation of human and material resources, reported software bugs cannot be all debugged. To guarantee the quality of software, software defects are prioritized, focusing the limited source on the debugging of software defects with high priority. The severity of software defects is an important standard for prioritization. In recent years, predicts of the severity of software defects have been state-of-the-arts. The principal aspect of predicting is based on the classification, which means building a model and predicting based on current machine learning algorithms with the reports including defect description working as documents, severity as tag. This article gives a brief introduction of on prediction the severity of software defects based on classification, including the existing research results, the framework based on classification and future work.
software defects, severity, classification
2016年2月9日,
2016年3月28日
王靖宇,女,硕士,工程师,研究方向:软件测试、标准化、信息系统检测。张欣,女,研究方向:软件测试、自动化测试。邹卫琴,女,硕士,研究方向:软件测试、软件挖掘。
TP311
10.3969/j.issn.1672-9722.2016.08.028