韋良芬
(安徽三聯學院 計算機工程學院, 合肥 230601)
基于機器學習的軟件缺陷預測技術研究
韋良芬
(安徽三聯學院 計算機工程學院, 合肥 230601)
基于機器學習的軟件缺陷預測技術是提高軟件可靠性的有效方法。本文分析了機器學習用于軟件缺陷預測的優勢,總結了基于機器學習的軟件缺陷預測的關鍵技術、預測步驟和當前研究存在的問題,并就當前的研究內容進行了探討。
機器學習;軟件;缺陷預測
隨著各種軟件系統規模不斷擴大,系統復雜度不斷提高,軟件的可靠性面臨著嚴峻的考驗[1]。各個行業對軟件的依賴性越來越大,軟件故障導致的后果也越來越嚴重。那么,在軟件開發早期對軟件缺陷進行預測,以便項目開發階段集中資源處理多缺陷、高風險項目模塊,對提高軟件成品的質量、平衡和控制軟件開發成本等方面都將起著非常關鍵的作用[2]。2000年,美國經驗軟件工程中心就提出了軟件缺陷預測領域的研究目標和方向,并開放缺陷預測樣本數據,從而為研究提供條件支持。近年來,軟件預測領域逐漸受到國內外學者的廣泛關注,而基于機器學習的軟件缺陷預測技術是當今軟件技術人員研究的熱點內容[3]。本文在查閱和研究大量國內外文獻資料的基礎上,闡述了基于機器學習軟件缺陷預測技術的相關問題,并就其當前主要研究方向和研究內容進行了一定的分析與探索。
軟件缺陷預測環境是呈增量變化的,主要表現在兩個方面[4-6]:
(1)軟件開發呈現增量過程
在實際應用中,大型復雜軟件產品的開發通常采用增量模型。軟件的各個階段產品到最終交付的軟件產品呈現天然的增量過程。軟件缺陷預測通過對各個階段的原型產品的度量樣本集到最終的軟件產品所對應的度量樣本集也呈增量過程。
(2)未知樣本經過測試驗證后,帶標簽樣本數目呈現增量
軟件測試的過程,即對預測樣本結果的驗證,也是對已有軟件缺陷預測模型的修正過程。因此,軟件缺陷預測是一項伴隨軟件測試及維護過程的持續活動。訓練樣本也隨著未知樣本測試驗證,呈現增量特征,需要在線修正軟件缺陷預測模型。
機器學習是在某類任務上以性能度量衡量的性能,隨著經驗而自我完善,即通過學習歸納和總結,重新組織已有的知識結構從而不斷改善自身的性能以獲取新的知識或技能。而軟件缺陷預測的增量環境非常適合通過學習進行歸納和總結,因此,將機器學習技術應用于軟件缺陷預測將可以大大減少人力和物力的投入。
軟件缺陷一方面指軟件開發或維護過程中存在的錯誤或不足等問題;另一方面指系統功能沒有達到客戶的需求[7]?;跈C器學習的軟件缺陷預測技術是指利用軟件產品開發過程中的模塊度量數據和標記數據,基于機器學習的方法建立預測模型,從而預測當前未標記模塊是否存在缺陷[8]。軟件缺陷預測使用的方法主要有基于統計、基于機器學習以及基于兩者的混合方法。近年來,基于機器學習的軟件缺陷預測是軟件缺陷預測的主要研究內容[9]。其缺陷預測過程如圖1所示。

圖1 基于機器學習的缺陷預測示意圖
基于機器學習的軟件缺陷預測研究主要包括以下內容:
1.1 預測模型特征屬性
軟件度量是指應用測量技術對軟件開發過程和產品進行度量,并為該過程和產品提供及時有益的管理信息[10]。軟件度量分為靜態度量元和動態度量元。靜態度量元是對軟件產品的代碼行數、函數等進行靜態統計而得到的;動態度量元是對軟件產品的缺陷數量進行完整測試而得到的。軟件缺陷預測的基本思想是利用靜態度量元確定軟件的復雜度。通常情況下,軟件模塊的復雜度高,則它的缺陷數量相對也比較多?;谲浖a品的度量數據,可將軟件產品的質量進行量化。但是,一方面,由于噪音、數據不完整等原因,導致缺陷數據收集困難,可靠性不高;另一方面,由于各個領域的特性不同,收集的數據存在不同的特性,從而出現類不平衡等問題。由于缺乏訓練數據,以及數據的不同特征等原因,導致軟件預測模型的預測性能降低。近30年以來,軟件度量一直被軟件工程領域所重視,而發現軟件產品開發過程的各種特征屬性是該領域的研究的重點。比如圈復雜度屬性、基本復雜度屬性、設計復雜度屬性等都是很重要的軟件特征屬性[11]。
1.2 軟件缺陷預測模型及算法
軟件缺陷預測模型主要包括基于監督學習的預測模型、基于半監督學習的預測模型和基于無監督學習的預測模型三種。其中,基于監督學習的預測模型需要足夠的度量指標數據和缺陷標記數據作為訓練的歷史數據;基于半監督學習的預測模型需要所有模塊的度量指標和部分缺陷標記數據作為訓練的歷史數據;基于無監督學習的預測模型只需要度量指標數據作為訓練的歷史數據[12]。但由于存在數據集有限、收集高質量數據困難、軟件數據類不平衡分布等負面問題,在建立軟件缺陷預測模型時,必須研究相關內容,設法解決這些負面因素帶來的不良影響。
針對基于機器學習的軟件缺陷預測模型,國內外文獻介紹了各種不同的預測算法,如表1所示。另外,基于回歸模型的軟件缺陷預測方法和基于屬性約簡的缺陷預測方法等也是機器學習的常用預測方法。

表1 預測模型及相關算法
1.3 預測模型的評估指標
當前,大部分預測模型評估指標是直接引用了數據挖掘領域的評估指標,但有些數據挖掘評估指標用于軟件缺陷預測模型的評估時,可能會產生很高的代價,比如數據挖掘中的Acc指標是以相同的代價將有缺陷模塊預測處理為無缺陷模塊,將無缺陷模塊預測處理為有缺陷模塊,而這兩種缺陷預測的代價差距是很大的[3]。
隨著機器學習和數據挖掘技術的發展,機器學習領域的分類模型逐漸運用于軟件預測模型的評估。研究和借鑒有效的評估方法評估軟件預測模型各方面的性能是軟件缺陷預測的研究重點內容之一。
基于軟件度量的缺陷預測技術已經比較成熟,主要涉及選用何種軟件度量、在哪個數據集上、使用何種預測方法和何種評價標準等4個關鍵因素。基于機器學習的軟件缺陷預測過程分為以下5個步驟:
(1)選擇合適的統計度量元集合;
(2)采集、準備和分析軟件產品的統計數據;
(3)構造合適的軟件預測模型,即訓練算法,這是機器學習的核心;
(4)將統計數據輸入到軟件預測模型;
(5)對預測結果進行評估。
確定合適的度量元并按照相應的度量元在軟件項目中采集數據之后,預測算法將依據采集的數據建立預測合適的模型,在輸入度量元數據時,預測模型就可以預測模塊的缺陷狀況。這5個步驟中,預測模型是最為核心的部分。最后選擇合適的評估方法對預測結果進行評估。
軟件缺陷預測技術經過多年的研究已經取得了較大的成就,但仍然存在一些問題需要進一步的研究,總結當前軟件缺陷預測方法及其應用存在的問題主要有一下幾點[16]:
(1)軟件缺陷數據中正例樣本數通常比負例樣本數高很多,數據分布很不均衡;
(2)當前軟件缺陷預測通常是針對單個軟件項目,跨平臺預測能力比較弱;
(3)正樣本數據集有限,建立預測模型的信息缺乏;
(4)誤分代價差異較大,將有缺陷傾向的模塊標記為無缺陷傾向模塊后,需要花費很高的代價進行更正。
因此,針對這幾方面的問題,研究新的預測方法或完善已有的預測方法是軟件缺陷預測技術研究中一個非常重要的任務。
基于機器學習的軟件缺陷預測技術近年來受到了研究者的廣泛關注。筆者在系統地研究相關國內外文獻的基礎上,總結了基于機器學的軟件缺陷預測的優勢、軟件缺陷預測的關鍵技術、基于機器學習的軟件缺陷預測流程和當前研究存在的缺點,并就當前的研究熱點進行分析和探討。
[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