王婧宇 張 欣 鄒衛(wèi)琴
(1.南京市產(chǎn)品質(zhì)量監(jiān)督檢驗院 南京 210028)(2.大連理工大學(xué)軟件學(xué)院 大連 116621)(3.江西理工大學(xué) 南昌 330000)
?
基于分類的軟件缺陷嚴(yán)重性預(yù)測
王婧宇1張欣2鄒衛(wèi)琴3
(1.南京市產(chǎn)品質(zhì)量監(jiān)督檢驗院南京210028)(2.大連理工大學(xué)軟件學(xué)院大連116621)(3.江西理工大學(xué)南昌330000)
在軟件開發(fā)過程中,軟件缺陷的修復(fù)是保證軟件質(zhì)量的重要環(huán)節(jié)。然而隨著軟件規(guī)模的快速增長、缺陷數(shù)目的急劇增加、人力物力資源的有限,報告的軟件缺陷不能全部被修復(fù)。為了保證軟件的質(zhì)量,人們往往對軟件缺陷進(jìn)行優(yōu)先級排序,將有限的資源集中在優(yōu)先級高的軟件缺陷修復(fù)上。軟件缺陷嚴(yán)重性就是一種重要的優(yōu)先級度量標(biāo)準(zhǔn)。近年來對軟件缺陷嚴(yán)重性的預(yù)測已引起了人們的廣泛研究。當(dāng)前主流的預(yù)測方法是基于分類的技術(shù),即將描述軟件缺陷的報告當(dāng)做文檔,嚴(yán)重程度作為標(biāo)簽,利用現(xiàn)有的機(jī)器學(xué)習(xí)算法對其建模并進(jìn)行預(yù)測。論文主要對基于分類的軟件缺陷嚴(yán)重性預(yù)測工作做一個簡要的介紹,包括已有的研究成果,基于分類的技術(shù)框架以及將來可能的發(fā)展方向。
軟件缺陷; 缺陷嚴(yán)重性; 分類
Class NumberTP311
軟件維護(hù)是軟件開發(fā)過程中必不可少的重要環(huán)節(jié),對缺陷的修復(fù)是軟件維護(hù)的重要活動之一。隨著軟件規(guī)模的快速增長,大量的軟件缺陷單靠人力來維護(hù)已變得非常困難。由此,很多軟件如Mozilla、Eclipse等通常使用缺陷管理工具來跟蹤和管理軟件的缺陷。Bugzilla和Jira就是當(dāng)前兩種比較主流的跟蹤維護(hù)軟件缺陷的管理工具,又稱bug倉庫。由于任何用戶在使用軟件的過程中發(fā)現(xiàn)了問題都可以向bug倉庫中提交報告來描述缺陷,這通常導(dǎo)致bug倉庫存儲了大量的缺陷報告。例如,據(jù)統(tǒng)計,Eclipse的bug倉庫中每天平均接收94個新的bug報告[1]。另一方面,由于軟件開發(fā)的資源有限,軟件通常也面臨快速發(fā)布的壓力,開發(fā)者往往無法修復(fù)所有的軟件缺陷。由此,為了保證軟件質(zhì)量,通常的做法是將軟件缺陷按一定的優(yōu)先級排序,優(yōu)先解決那些高優(yōu)先級的軟件缺陷。
最初對軟件缺陷進(jìn)行優(yōu)先級的判斷是通過人手工完成。這種方式的缺點是排序的準(zhǔn)確性主要依靠人的經(jīng)驗及其所花時間,除此之外,對海量缺陷的嚴(yán)重性排序也導(dǎo)致人力排序可操作性差。
為了解決人手工對缺陷嚴(yán)重性排序的問題,研究者提出將這一過程進(jìn)行自動化。目前人們通常使用分類,信息檢索等技術(shù)解決缺陷嚴(yán)重性預(yù)測的問題。而基于分類的缺陷嚴(yán)重性預(yù)測是當(dāng)前主流的預(yù)測方法。
主流的缺陷嚴(yán)重性預(yù)測方法主要是基于分類的預(yù)測方法,即將描述軟件缺陷的缺陷報告當(dāng)做實例,抽取其中的相關(guān)特征,利用機(jī)器學(xué)習(xí)方法建模,對新的軟件缺陷進(jìn)行自動化的嚴(yán)重性預(yù)測。
2008年,Tim Menzies等[2]首先提出利用缺陷報告中的文本信息,借助文本挖掘和機(jī)器學(xué)習(xí)算法歷史數(shù)據(jù)建模對缺陷嚴(yán)重性進(jìn)行自動預(yù)測。他們將缺陷分為五類,分值從1~5,1表示最嚴(yán)重,嚴(yán)重程度依次遞減。實驗數(shù)據(jù)來自NASA項目的bug倉庫數(shù)據(jù)。隨后,Ahmed Lamkanfi等[3]在開源項目上進(jìn)行了相關(guān)的研究,他們也是利用文本信息作為特征,使用Na?ve Bayes方法[4]進(jìn)行建模,在預(yù)測軟件缺陷的嚴(yán)重性時只預(yù)測其是否嚴(yán)重。在他們的工作中,重點關(guān)注了文本信息中對建模起較強(qiáng)作用的特征詞,概括性文本和描述性文本對建模的區(qū)別,訓(xùn)練樣本的充足性以及組建內(nèi)和跨組建的模型性能研究。在他們隨后的工作中[5]重點比較了多種機(jī)器學(xué)習(xí)算法的性能,發(fā)現(xiàn)Na?ve Bayes效果最好。文獻(xiàn)[6~8]均研究了特征選擇對分類效果的提升,使用的特征選擇方法基本為信息增益、卡方驗證、TFIDF等。實驗數(shù)據(jù)集為開源醒目數(shù)據(jù)或者工業(yè)數(shù)據(jù)集。使用的分類方法基本為Na?ve Bayes和支持向量機(jī)Support Vector Machine(SVM)。在文獻(xiàn)[8]中,也使用了bigrams技術(shù)以提升模型的效率。2012年,Iliev M等[9]使用工業(yè)數(shù)據(jù)集,結(jié)合使用軟件設(shè)計知識和用戶需求來預(yù)測缺陷的嚴(yán)重性。同時,Tian Y等[10]基于信息檢索的最近鄰方法預(yù)測缺陷的嚴(yán)重性,使用了三個開源項目,即Eclipse、Mozilla和OpenOffice。他們將嚴(yán)重性分為五個等級,即Trival,Minor,Major,Critical,Blocker。在文獻(xiàn)[11]中,作者結(jié)合使用主題模型和多種缺陷特征,使用基于KL距離的最近鄰方法進(jìn)行預(yù)測模型的建立。
3.1基于分類的預(yù)測技術(shù)框架
軟件缺陷嚴(yán)重性是根據(jù)軟件缺陷對系統(tǒng)成功執(zhí)行產(chǎn)生的影響程度做出的絕對分類[3];通常來說,軟件缺陷嚴(yán)重性從Trivial,Minor,Normal,Critical到Blocker依次遞減[5]?;诜诸惖娜毕輫?yán)重性預(yù)測模型,通常是將一個個缺陷報告當(dāng)做實例,從該缺陷報告中抽取出一些特征作為實例的屬性,使用已有的分類算法進(jìn)行分類模型的建立。圖1展示了基于分類技術(shù)的軟件缺陷嚴(yán)重性預(yù)測的一般流程。
圖1 基于分類技術(shù)的缺陷預(yù)測模型的流程
對一個軟件,收到的缺陷報告數(shù)目可能較大,因此篩選出有價值并且有意義的缺陷報告,能夠在很大程度上減輕缺陷嚴(yán)重性預(yù)測的工作量。如果一個缺陷報告中包含軟件相關(guān)的基本信息,比如組件名稱、堆棧等[12],可以被認(rèn)為較為專業(yè),同時這份報告也對于軟件缺陷嚴(yán)重性的預(yù)測有一定的價值。如果報告是由熟悉開發(fā)工具的技術(shù)人員提出的,相比而言,這份報告具有更大的利用價值。
除了對缺陷報告的篩選,對報告內(nèi)容的篩選也是一項重要的工作——如何在眾多的文字描述中提取出有用的關(guān)鍵詞,其詳細(xì)的內(nèi)容將在3.2節(jié)介紹。
前期處理后,由于缺陷報告的文本形式,分類算法將能夠幫助在大量的信息中進(jìn)行分類和鑒定,對于分類算法的說明將在3.3節(jié)介紹。
3.2缺陷報告內(nèi)容的預(yù)處理
對于篩選后的缺陷報告,需要對報告的內(nèi)容進(jìn)行進(jìn)一步的處理,這其中包括三個步驟:分詞——去停用詞——提取詞干[13]。
以這句報告內(nèi)容為例,”In the case, it shows that many defects are exposed in the process of design from the table showed before.”在轉(zhuǎn)化為分詞的過程中,該句中的每個單詞對應(yīng)一個分詞,將整個句子轉(zhuǎn)換成一組分詞的集合,在這樣的處理下,將得到這樣的序列:{in the case it shows that many defects are exposed in the process of design from the table showed before},其次,圍繞軟件缺陷,去除停用詞,即把一些對短語表述不構(gòu)成直接影響的單詞的的單詞直接過濾掉,一般情況下,停用詞中至少包括介詞、冠詞、代詞,將第一步處理得到的集合過濾后可以得到{shows defects exposed process design table showed}這樣的集合。最后是詞干的提取工作,將報告中的所有派生詞還原到詞根并去除重復(fù)詞根,這一步的操作在保證缺陷報告準(zhǔn)確性的基礎(chǔ)上,精煉出不重復(fù)的詞干,幫助捕捉報告中所提到的缺陷性質(zhì),處理之后只剩下{show defect expose process design table}這樣的集合,從最終的處理結(jié)果來看,能夠在減少閱讀量的基礎(chǔ)上,使測試人員可以清晰準(zhǔn)確地提取出需要的信息。
對缺陷報告的文本處理很大程度上簡化了原先的表達(dá),能夠較為完整地和高效地過濾、提取出原先報告中有意義的部分[14],實現(xiàn)對關(guān)于缺陷的關(guān)鍵詞的高效捕捉。
3.3分類算法
根據(jù)確定的分類主題,分類算法將一系列的文本文件自動分配一個預(yù)先定義好的類目,正式地看,分類算法是一種函數(shù)[3]:
f:Documents→{a1,…,an}
在軟件缺陷嚴(yán)重性預(yù)測中,分類算法把預(yù)先處理過的缺陷報告映射為具體的類目,即{trivial,minor,normal,critical,blocker}。
目前存在著許多的分類算法,其中包括樸素貝葉斯算法Na?ve Bayes,支持向量機(jī)Support Vector Machine(SVM)和K最鄰近結(jié)點算法K-Nearest Neighbor(KNN)[15]這三種最常用于缺陷嚴(yán)重性預(yù)測的分類算法:
Na?ve Bayes[4]即樸素貝葉斯算法,基于各待分類文本特征變量是相互獨立的假設(shè),是文本分類模型中的一種簡單但性能優(yōu)越的分類模型,雖然這樣的假設(shè)在許多應(yīng)用領(lǐng)域未必能很好滿足,甚至是不成立的。但這種簡化的貝葉斯分類器在許多實際應(yīng)用中還是得到了較好的分類精度。
Support Vector Machine(SVM)[17]即支持向量機(jī)算法,通過尋求結(jié)構(gòu)化風(fēng)險最小來提高學(xué)習(xí)機(jī)泛化能力,實現(xiàn)經(jīng)驗風(fēng)險和置信范圍的最小化,從而達(dá)到在統(tǒng)計樣本量較少的情況下,亦能獲得良好統(tǒng)計規(guī)律的目的
K-Nearest Neighbor(KNN)[18]即K最鄰近結(jié)點算法算法,較適合處理多分類問題,即對象具有多個類別標(biāo)簽的情況,但計算復(fù)雜度較高,不適于大數(shù)據(jù)的分類問題。
基于這三種的優(yōu)缺點分析,本文比較了這三種常見的分類算法。
缺陷嚴(yán)重性預(yù)測于開發(fā)者對缺陷進(jìn)行優(yōu)先級排序有重要意義。本文主要對目前主流的基于分類的缺陷嚴(yán)重性預(yù)測工作進(jìn)行了一個總結(jié)。主要介紹了該類方法的技術(shù)框架及對框架中的主要步驟進(jìn)行了介紹。從當(dāng)前的研究方法來看,主要使用了缺陷報告文本特征,少數(shù)結(jié)合使用了其他一些特征比如系統(tǒng)信息等。在分類方法的選取上,主要使用常見的如Na?ve Bayes、SVM、KNN等。對特征的挖掘還不夠深入,涉及的面較少;其他領(lǐng)域的建模方法較少使用;較少利用來自領(lǐng)域?qū)<业闹R。這些都是將來可以對已有方法進(jìn)行改進(jìn)的地方。
[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日
王靖宇,女,碩士,工程師,研究方向:軟件測試、標(biāo)準(zhǔn)化、信息系統(tǒng)檢測。張欣,女,研究方向:軟件測試、自動化測試。鄒衛(wèi)琴,女,碩士,研究方向:軟件測試、軟件挖掘。
TP311
10.3969/j.issn.1672-9722.2016.08.028