韋良芬
(安徽三聯(lián)學(xué)院 計(jì)算機(jī)工程學(xué)院, 合肥 230601)
基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)研究
韋良芬
(安徽三聯(lián)學(xué)院 計(jì)算機(jī)工程學(xué)院, 合肥 230601)
基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)是提高軟件可靠性的有效方法。本文分析了機(jī)器學(xué)習(xí)用于軟件缺陷預(yù)測(cè)的優(yōu)勢(shì),總結(jié)了基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)的關(guān)鍵技術(shù)、預(yù)測(cè)步驟和當(dāng)前研究存在的問(wèn)題,并就當(dāng)前的研究?jī)?nèi)容進(jìn)行了探討。
機(jī)器學(xué)習(xí);軟件;缺陷預(yù)測(cè)
隨著各種軟件系統(tǒng)規(guī)模不斷擴(kuò)大,系統(tǒng)復(fù)雜度不斷提高,軟件的可靠性面臨著嚴(yán)峻的考驗(yàn)[1]。各個(gè)行業(yè)對(duì)軟件的依賴性越來(lái)越大,軟件故障導(dǎo)致的后果也越來(lái)越嚴(yán)重。那么,在軟件開發(fā)早期對(duì)軟件缺陷進(jìn)行預(yù)測(cè),以便項(xiàng)目開發(fā)階段集中資源處理多缺陷、高風(fēng)險(xiǎn)項(xiàng)目模塊,對(duì)提高軟件成品的質(zhì)量、平衡和控制軟件開發(fā)成本等方面都將起著非常關(guān)鍵的作用[2]。2000年,美國(guó)經(jīng)驗(yàn)軟件工程中心就提出了軟件缺陷預(yù)測(cè)領(lǐng)域的研究目標(biāo)和方向,并開放缺陷預(yù)測(cè)樣本數(shù)據(jù),從而為研究提供條件支持。近年來(lái),軟件預(yù)測(cè)領(lǐng)域逐漸受到國(guó)內(nèi)外學(xué)者的廣泛關(guān)注,而基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)是當(dāng)今軟件技術(shù)人員研究的熱點(diǎn)內(nèi)容[3]。本文在查閱和研究大量國(guó)內(nèi)外文獻(xiàn)資料的基礎(chǔ)上,闡述了基于機(jī)器學(xué)習(xí)軟件缺陷預(yù)測(cè)技術(shù)的相關(guān)問(wèn)題,并就其當(dāng)前主要研究方向和研究?jī)?nèi)容進(jìn)行了一定的分析與探索。
軟件缺陷預(yù)測(cè)環(huán)境是呈增量變化的,主要表現(xiàn)在兩個(gè)方面[4-6]:
(1)軟件開發(fā)呈現(xiàn)增量過(guò)程
在實(shí)際應(yīng)用中,大型復(fù)雜軟件產(chǎn)品的開發(fā)通常采用增量模型。軟件的各個(gè)階段產(chǎn)品到最終交付的軟件產(chǎn)品呈現(xiàn)天然的增量過(guò)程。軟件缺陷預(yù)測(cè)通過(guò)對(duì)各個(gè)階段的原型產(chǎn)品的度量樣本集到最終的軟件產(chǎn)品所對(duì)應(yīng)的度量樣本集也呈增量過(guò)程。
(2)未知樣本經(jīng)過(guò)測(cè)試驗(yàn)證后,帶標(biāo)簽樣本數(shù)目呈現(xiàn)增量
軟件測(cè)試的過(guò)程,即對(duì)預(yù)測(cè)樣本結(jié)果的驗(yàn)證,也是對(duì)已有軟件缺陷預(yù)測(cè)模型的修正過(guò)程。因此,軟件缺陷預(yù)測(cè)是一項(xiàng)伴隨軟件測(cè)試及維護(hù)過(guò)程的持續(xù)活動(dòng)。訓(xùn)練樣本也隨著未知樣本測(cè)試驗(yàn)證,呈現(xiàn)增量特征,需要在線修正軟件缺陷預(yù)測(cè)模型。
機(jī)器學(xué)習(xí)是在某類任務(wù)上以性能度量衡量的性能,隨著經(jīng)驗(yàn)而自我完善,即通過(guò)學(xué)習(xí)歸納和總結(jié),重新組織已有的知識(shí)結(jié)構(gòu)從而不斷改善自身的性能以獲取新的知識(shí)或技能。而軟件缺陷預(yù)測(cè)的增量環(huán)境非常適合通過(guò)學(xué)習(xí)進(jìn)行歸納和總結(jié),因此,將機(jī)器學(xué)習(xí)技術(shù)應(yīng)用于軟件缺陷預(yù)測(cè)將可以大大減少人力和物力的投入。
軟件缺陷一方面指軟件開發(fā)或維護(hù)過(guò)程中存在的錯(cuò)誤或不足等問(wèn)題;另一方面指系統(tǒng)功能沒(méi)有達(dá)到客戶的需求[7]?;跈C(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)是指利用軟件產(chǎn)品開發(fā)過(guò)程中的模塊度量數(shù)據(jù)和標(biāo)記數(shù)據(jù),基于機(jī)器學(xué)習(xí)的方法建立預(yù)測(cè)模型,從而預(yù)測(cè)當(dāng)前未標(biāo)記模塊是否存在缺陷[8]。軟件缺陷預(yù)測(cè)使用的方法主要有基于統(tǒng)計(jì)、基于機(jī)器學(xué)習(xí)以及基于兩者的混合方法。近年來(lái),基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)是軟件缺陷預(yù)測(cè)的主要研究?jī)?nèi)容[9]。其缺陷預(yù)測(cè)過(guò)程如圖1所示。
圖1 基于機(jī)器學(xué)習(xí)的缺陷預(yù)測(cè)示意圖
基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)研究主要包括以下內(nèi)容:
1.1 預(yù)測(cè)模型特征屬性
軟件度量是指應(yīng)用測(cè)量技術(shù)對(duì)軟件開發(fā)過(guò)程和產(chǎn)品進(jìn)行度量,并為該過(guò)程和產(chǎn)品提供及時(shí)有益的管理信息[10]。軟件度量分為靜態(tài)度量元和動(dòng)態(tài)度量元。靜態(tài)度量元是對(duì)軟件產(chǎn)品的代碼行數(shù)、函數(shù)等進(jìn)行靜態(tài)統(tǒng)計(jì)而得到的;動(dòng)態(tài)度量元是對(duì)軟件產(chǎn)品的缺陷數(shù)量進(jìn)行完整測(cè)試而得到的。軟件缺陷預(yù)測(cè)的基本思想是利用靜態(tài)度量元確定軟件的復(fù)雜度。通常情況下,軟件模塊的復(fù)雜度高,則它的缺陷數(shù)量相對(duì)也比較多?;谲浖a(chǎn)品的度量數(shù)據(jù),可將軟件產(chǎn)品的質(zhì)量進(jìn)行量化。但是,一方面,由于噪音、數(shù)據(jù)不完整等原因,導(dǎo)致缺陷數(shù)據(jù)收集困難,可靠性不高;另一方面,由于各個(gè)領(lǐng)域的特性不同,收集的數(shù)據(jù)存在不同的特性,從而出現(xiàn)類不平衡等問(wèn)題。由于缺乏訓(xùn)練數(shù)據(jù),以及數(shù)據(jù)的不同特征等原因,導(dǎo)致軟件預(yù)測(cè)模型的預(yù)測(cè)性能降低。近30年以來(lái),軟件度量一直被軟件工程領(lǐng)域所重視,而發(fā)現(xiàn)軟件產(chǎn)品開發(fā)過(guò)程的各種特征屬性是該領(lǐng)域的研究的重點(diǎn)。比如圈復(fù)雜度屬性、基本復(fù)雜度屬性、設(shè)計(jì)復(fù)雜度屬性等都是很重要的軟件特征屬性[11]。
1.2 軟件缺陷預(yù)測(cè)模型及算法
軟件缺陷預(yù)測(cè)模型主要包括基于監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型、基于半監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型和基于無(wú)監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型三種。其中,基于監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型需要足夠的度量指標(biāo)數(shù)據(jù)和缺陷標(biāo)記數(shù)據(jù)作為訓(xùn)練的歷史數(shù)據(jù);基于半監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型需要所有模塊的度量指標(biāo)和部分缺陷標(biāo)記數(shù)據(jù)作為訓(xùn)練的歷史數(shù)據(jù);基于無(wú)監(jiān)督學(xué)習(xí)的預(yù)測(cè)模型只需要度量指標(biāo)數(shù)據(jù)作為訓(xùn)練的歷史數(shù)據(jù)[12]。但由于存在數(shù)據(jù)集有限、收集高質(zhì)量數(shù)據(jù)困難、軟件數(shù)據(jù)類不平衡分布等負(fù)面問(wèn)題,在建立軟件缺陷預(yù)測(cè)模型時(shí),必須研究相關(guān)內(nèi)容,設(shè)法解決這些負(fù)面因素帶來(lái)的不良影響。
針對(duì)基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)模型,國(guó)內(nèi)外文獻(xiàn)介紹了各種不同的預(yù)測(cè)算法,如表1所示。另外,基于回歸模型的軟件缺陷預(yù)測(cè)方法和基于屬性約簡(jiǎn)的缺陷預(yù)測(cè)方法等也是機(jī)器學(xué)習(xí)的常用預(yù)測(cè)方法。
表1 預(yù)測(cè)模型及相關(guān)算法
1.3 預(yù)測(cè)模型的評(píng)估指標(biāo)
當(dāng)前,大部分預(yù)測(cè)模型評(píng)估指標(biāo)是直接引用了數(shù)據(jù)挖掘領(lǐng)域的評(píng)估指標(biāo),但有些數(shù)據(jù)挖掘評(píng)估指標(biāo)用于軟件缺陷預(yù)測(cè)模型的評(píng)估時(shí),可能會(huì)產(chǎn)生很高的代價(jià),比如數(shù)據(jù)挖掘中的Acc指標(biāo)是以相同的代價(jià)將有缺陷模塊預(yù)測(cè)處理為無(wú)缺陷模塊,將無(wú)缺陷模塊預(yù)測(cè)處理為有缺陷模塊,而這兩種缺陷預(yù)測(cè)的代價(jià)差距是很大的[3]。
隨著機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘技術(shù)的發(fā)展,機(jī)器學(xué)習(xí)領(lǐng)域的分類模型逐漸運(yùn)用于軟件預(yù)測(cè)模型的評(píng)估。研究和借鑒有效的評(píng)估方法評(píng)估軟件預(yù)測(cè)模型各方面的性能是軟件缺陷預(yù)測(cè)的研究重點(diǎn)內(nèi)容之一。
基于軟件度量的缺陷預(yù)測(cè)技術(shù)已經(jīng)比較成熟,主要涉及選用何種軟件度量、在哪個(gè)數(shù)據(jù)集上、使用何種預(yù)測(cè)方法和何種評(píng)價(jià)標(biāo)準(zhǔn)等4個(gè)關(guān)鍵因素?;跈C(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)過(guò)程分為以下5個(gè)步驟:
(1)選擇合適的統(tǒng)計(jì)度量元集合;
(2)采集、準(zhǔn)備和分析軟件產(chǎn)品的統(tǒng)計(jì)數(shù)據(jù);
(3)構(gòu)造合適的軟件預(yù)測(cè)模型,即訓(xùn)練算法,這是機(jī)器學(xué)習(xí)的核心;
(4)將統(tǒng)計(jì)數(shù)據(jù)輸入到軟件預(yù)測(cè)模型;
(5)對(duì)預(yù)測(cè)結(jié)果進(jìn)行評(píng)估。
確定合適的度量元并按照相應(yīng)的度量元在軟件項(xiàng)目中采集數(shù)據(jù)之后,預(yù)測(cè)算法將依據(jù)采集的數(shù)據(jù)建立預(yù)測(cè)合適的模型,在輸入度量元數(shù)據(jù)時(shí),預(yù)測(cè)模型就可以預(yù)測(cè)模塊的缺陷狀況。這5個(gè)步驟中,預(yù)測(cè)模型是最為核心的部分。最后選擇合適的評(píng)估方法對(duì)預(yù)測(cè)結(jié)果進(jìn)行評(píng)估。
軟件缺陷預(yù)測(cè)技術(shù)經(jīng)過(guò)多年的研究已經(jīng)取得了較大的成就,但仍然存在一些問(wèn)題需要進(jìn)一步的研究,總結(jié)當(dāng)前軟件缺陷預(yù)測(cè)方法及其應(yīng)用存在的問(wèn)題主要有一下幾點(diǎn)[16]:
(1)軟件缺陷數(shù)據(jù)中正例樣本數(shù)通常比負(fù)例樣本數(shù)高很多,數(shù)據(jù)分布很不均衡;
(2)當(dāng)前軟件缺陷預(yù)測(cè)通常是針對(duì)單個(gè)軟件項(xiàng)目,跨平臺(tái)預(yù)測(cè)能力比較弱;
(3)正樣本數(shù)據(jù)集有限,建立預(yù)測(cè)模型的信息缺乏;
(4)誤分代價(jià)差異較大,將有缺陷傾向的模塊標(biāo)記為無(wú)缺陷傾向模塊后,需要花費(fèi)很高的代價(jià)進(jìn)行更正。
因此,針對(duì)這幾方面的問(wèn)題,研究新的預(yù)測(cè)方法或完善已有的預(yù)測(cè)方法是軟件缺陷預(yù)測(cè)技術(shù)研究中一個(gè)非常重要的任務(wù)。
基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)近年來(lái)受到了研究者的廣泛關(guān)注。筆者在系統(tǒng)地研究相關(guān)國(guó)內(nèi)外文獻(xiàn)的基礎(chǔ)上,總結(jié)了基于機(jī)器學(xué)的軟件缺陷預(yù)測(cè)的優(yōu)勢(shì)、軟件缺陷預(yù)測(cè)的關(guān)鍵技術(shù)、基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)流程和當(dāng)前研究存在的缺點(diǎn),并就當(dāng)前的研究熱點(diǎn)進(jìn)行分析和探討。
[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] 馬櫻. 基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測(cè)技術(shù)研究[D].西安:電子科技大學(xué),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] 吳方君.軟件缺陷預(yù)測(cè)經(jīng)驗(yàn)共享:一種遷移學(xué)習(xí)方法[J].小型微型計(jì)算機(jī)系統(tǒng),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] 單錦輝,徐克俊,王戟.一種軟件故障診斷過(guò)程框架[J].計(jì)算機(jī)學(xué)報(bào),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] 戴翔,毛宇光. 基于集成混合采樣的軟件缺陷預(yù)測(cè)研究[J].計(jì)算機(jī)工程與科學(xué),2015,37(5):930-936.
責(zé)任編輯:程艷艷
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
安徽省教育廳自然科學(xué)重點(diǎn)項(xiàng)目(KJ2016A252); 安徽省教育廳自然科學(xué)重點(diǎn)項(xiàng)目(KJ2016A894)
韋良芬(1975-),女,安徽舒城人,副教授,碩士,主要從事機(jī)器學(xué)習(xí)和軟件工程研究。
TP311
A
1009-3907(2017)10-0007-03
長(zhǎng)春大學(xué)學(xué)報(bào)2017年10期