傅藝綺 董 威 尹良澤 杜雨晴
(國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院 長(zhǎng)沙 410073) (fu_303503@163.com)
基于組合機(jī)器學(xué)習(xí)算法的軟件缺陷預(yù)測(cè)模型
傅藝綺 董 威 尹良澤 杜雨晴
(國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院 長(zhǎng)沙 410073) (fu_303503@163.com)
軟件缺陷預(yù)測(cè)是根據(jù)軟件產(chǎn)品中提取的度量信息和已經(jīng)發(fā)現(xiàn)的缺陷來(lái)盡早地預(yù)測(cè)軟件可能還存在的缺陷,基于預(yù)測(cè)結(jié)果可合理分配測(cè)試和驗(yàn)證資源.基于機(jī)器學(xué)習(xí)的缺陷預(yù)測(cè)技術(shù)能夠較全面地、自動(dòng)地學(xué)習(xí)模型來(lái)發(fā)現(xiàn)軟件中的缺陷,已經(jīng)成為缺陷預(yù)測(cè)的主要方法.為了提高預(yù)測(cè)的效率和準(zhǔn)確性,對(duì)機(jī)器學(xué)習(xí)算法的選擇和研究是很關(guān)鍵的.對(duì)不同的機(jī)器學(xué)習(xí)缺陷預(yù)測(cè)方法進(jìn)行對(duì)比分析,發(fā)現(xiàn)各算法在不同評(píng)價(jià)指標(biāo)上有不同的優(yōu)勢(shì),利用這些優(yōu)勢(shì)并結(jié)合機(jī)器學(xué)習(xí)中的stacking集成學(xué)習(xí)方法提出了將不同預(yù)測(cè)算法的預(yù)測(cè)結(jié)果作為軟件度量并進(jìn)行再次預(yù)測(cè)的基于組合機(jī)器學(xué)習(xí)算法的軟件缺陷預(yù)測(cè)模型,最后用該模型對(duì)Eclipse數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),表明了該模型的有效性.
軟件缺陷預(yù)測(cè);機(jī)器學(xué)習(xí);集成學(xué)習(xí);組合;Eclipse預(yù)測(cè)數(shù)據(jù)集
隨著軟件逐漸深入人們的生活,軟件質(zhì)量成為人們關(guān)注的重點(diǎn).軟件缺陷是影響軟件質(zhì)量的重要因素,它在軟件的開(kāi)發(fā)過(guò)程中是不可避免的,但若不能及時(shí)發(fā)現(xiàn)并處理,可能會(huì)使軟件發(fā)生故障無(wú)法使用,甚至產(chǎn)生嚴(yán)重的后果.最常用的軟件質(zhì)量保證活動(dòng)就是軟件測(cè)試,它能有效檢查軟件的錯(cuò)誤,但同時(shí)也是軟件開(kāi)發(fā)生命周期中花費(fèi)時(shí)間、資源最多的階段.因此出現(xiàn)缺陷預(yù)測(cè)的概念,旨在根據(jù)軟件的基本屬性(復(fù)雜度、規(guī)模、開(kāi)發(fā)過(guò)程等)來(lái)盡早地預(yù)測(cè)軟件可能還遺留的缺陷,并基于預(yù)測(cè)結(jié)果合理分配測(cè)試資源,給出測(cè)試的優(yōu)先級(jí),提高軟件產(chǎn)品質(zhì)量,縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)成本.
當(dāng)前的缺陷預(yù)測(cè)技術(shù)主要分為靜態(tài)預(yù)測(cè)和動(dòng)態(tài)預(yù)測(cè)兩大類(lèi).靜態(tài)預(yù)測(cè)是基于缺陷相關(guān)的度量數(shù)據(jù),對(duì)缺陷的數(shù)量和分布進(jìn)行預(yù)測(cè);動(dòng)態(tài)預(yù)測(cè)則是對(duì)故障隨時(shí)間的分布進(jìn)行預(yù)測(cè).2005年以來(lái),機(jī)器學(xué)習(xí)方法被越來(lái)越多地用于軟件缺陷預(yù)測(cè)模型的建立,通過(guò)從以往的開(kāi)發(fā)經(jīng)驗(yàn)中抽取帶有問(wèn)題領(lǐng)域特征的數(shù)據(jù)來(lái)進(jìn)行學(xué)習(xí),建立起數(shù)據(jù)與軟件缺陷之間的關(guān)聯(lián)關(guān)系,并對(duì)未知的軟件模塊預(yù)測(cè)其可能的缺陷數(shù)量或發(fā)生缺陷的可能性.在基于機(jī)器學(xué)習(xí)技術(shù)的缺陷預(yù)測(cè)模型研究中,一般解決3個(gè)問(wèn)題:1)哪些機(jī)器學(xué)習(xí)方法適合建立預(yù)測(cè)模型;2)哪些度量元適合缺陷預(yù)測(cè);3)哪些指標(biāo)用于評(píng)估模型[1].
機(jī)器學(xué)習(xí)包含多種學(xué)習(xí)方法,如人工神經(jīng)網(wǎng)絡(luò)(artificial neural network, ANN)、貝葉斯網(wǎng)絡(luò)(Bayesian network, BN)、決策樹(shù)(decision tree, DT)、隨機(jī)森林(random forest, RF)等.Khoshgoftaar等人[2]比較了7種不同的預(yù)測(cè)模型,這些模型用到了不同的回歸和分類(lèi)樹(shù)算法,如C4.5,CHAID,CART等;Fenton等人[3]提出用貝葉斯信念網(wǎng)絡(luò)預(yù)測(cè)軟件缺陷模塊的方法;Vandecruys等人[4]比較了一些常用的學(xué)習(xí)方法,包括C4.5、支持向量機(jī)(support vector machine, SVM)、邏輯回歸、K-最近鄰等,發(fā)現(xiàn)C4.5的預(yù)測(cè)準(zhǔn)確度最高,但在其他評(píng)價(jià)指標(biāo)上這些方法不分伯仲;Turhan和Bener[5]分析了樸素貝葉斯方法在缺陷預(yù)測(cè)上的應(yīng)用,認(rèn)為同基于決策樹(shù)、線性回歸、判別分析、神經(jīng)網(wǎng)絡(luò)的軟件缺陷預(yù)測(cè)模型相比較,貝葉斯方法能夠獲得更顯著的性能提升;常成成[6]引入集成學(xué)習(xí)的概念,提出了一種基于Adaboost自適應(yīng)增強(qiáng)算法的缺陷排序預(yù)測(cè)方法,弱學(xué)習(xí)機(jī)選用SVM,該算法結(jié)合Adaboost的優(yōu)勢(shì),在學(xué)習(xí)中重點(diǎn)關(guān)注被錯(cuò)誤分類(lèi)的實(shí)例,最終獲得預(yù)測(cè)效果良好的強(qiáng)分類(lèi)器;文獻(xiàn)[7]使用Adaboost算法改進(jìn)神經(jīng)網(wǎng)絡(luò)算法,將多個(gè)弱預(yù)測(cè)器組成新的強(qiáng)預(yù)測(cè)器,改善模型預(yù)測(cè)精確度和泛化能力;文獻(xiàn)[1]認(rèn)為不同的建模技術(shù)的預(yù)測(cè)性能表現(xiàn)出的差異較小,而不同度量元的選擇對(duì)預(yù)測(cè)性能的影響更加顯著;用于建立預(yù)測(cè)模型的度量元主要分成代碼度量、復(fù)雜性度量、面向?qū)ο蠖攘俊⑦^(guò)程度量和歷史缺陷度量幾大類(lèi),Hall等人[8]以預(yù)測(cè)的精確度和召回率作為評(píng)價(jià)指標(biāo),認(rèn)為基于面向?qū)ο蠖攘吭念A(yù)測(cè)模型比基于復(fù)雜性度量元的模型效果更好,綜合使用多類(lèi)度量元的預(yù)測(cè)模型效果顯著提高,而用過(guò)程度量元進(jìn)行預(yù)測(cè)效果卻差強(qiáng)人意;文獻(xiàn)[9]選用排序能力和分類(lèi)能力作為缺陷預(yù)測(cè)模型的評(píng)價(jià)標(biāo)準(zhǔn),并引入了工作量評(píng)價(jià)指標(biāo),對(duì)這些度量元的缺陷預(yù)測(cè)能力進(jìn)行了比較分析,認(rèn)為在不同的數(shù)據(jù)集下不同種類(lèi)度量的預(yù)測(cè)能力不存在絕對(duì)的優(yōu)劣關(guān)系,而大多數(shù)情況下,代碼度量和過(guò)程度量的缺陷預(yù)測(cè)性能較好.
在實(shí)際應(yīng)用中,代碼度量能從一個(gè)軟件系統(tǒng)當(dāng)前版本的源代碼中輕松得到,而過(guò)程度量和歷史缺陷度量的收集成本昂貴,需要從版本控制系統(tǒng)和缺陷追蹤系統(tǒng)提取.因此本文主要針對(duì)構(gòu)建模型的方法問(wèn)題提出了一種基于組合機(jī)器學(xué)習(xí)算法的缺陷預(yù)測(cè)改進(jìn)模型,將不同機(jī)器學(xué)習(xí)算法的預(yù)測(cè)組合起來(lái),把第1次預(yù)測(cè)的結(jié)果作為新的度量元加入數(shù)據(jù)集后進(jìn)行第2次預(yù)測(cè),同時(shí)運(yùn)用特征選擇方法,提高缺陷預(yù)測(cè)的效率.為了表明模型的實(shí)用性,論文對(duì)Eclipse標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行了缺陷預(yù)測(cè),驗(yàn)證了本文方法的有效性.

Fig. 1 Software defects prediction model圖1 軟件缺陷預(yù)測(cè)模型
本節(jié)將簡(jiǎn)單介紹缺陷預(yù)測(cè)與機(jī)器學(xué)習(xí)的相關(guān)概念.缺陷預(yù)測(cè)是從軟件模塊中提取合適的度量元數(shù)據(jù),并由機(jī)器學(xué)習(xí)的分類(lèi)、回歸、聚類(lèi)等方法找出缺陷與度量元之間的關(guān)系,建立起相應(yīng)的模型,預(yù)測(cè)新的軟件模塊是否含有缺陷或預(yù)測(cè)缺陷的分布,模型如圖1所示[10]:
根據(jù)預(yù)測(cè)的目的可將缺陷預(yù)測(cè)模型分為2類(lèi):1)分類(lèi)問(wèn)題的軟件缺陷預(yù)測(cè),即預(yù)測(cè)軟件模塊是否含有缺陷;2)排序問(wèn)題的軟件缺陷預(yù)測(cè),預(yù)測(cè)軟件模塊的缺陷數(shù)目,并根據(jù)缺陷的多少給出模塊的排序.本文將針對(duì)不同的機(jī)器學(xué)習(xí)算法的組合對(duì)缺陷預(yù)測(cè)的分類(lèi)與排序問(wèn)題分別進(jìn)行研究.
1.1 缺陷預(yù)測(cè)模型
1.1.1 分 類(lèi)
基于分類(lèi)問(wèn)題的軟件缺陷預(yù)測(cè)的目的是預(yù)測(cè)軟件模塊是否含有缺陷,引導(dǎo)軟件開(kāi)發(fā)人員將測(cè)試資源集中在預(yù)測(cè)為有缺陷的模塊.針對(duì)此類(lèi)缺陷預(yù)測(cè)模型出現(xiàn)了大量的研究成果,預(yù)測(cè)效果良好,但仍然無(wú)法完全正確預(yù)測(cè)所有軟件模塊.當(dāng)錯(cuò)誤地將非缺陷模塊預(yù)測(cè)為有缺陷時(shí),會(huì)引起測(cè)試資源的浪費(fèi);當(dāng)錯(cuò)誤地將有缺陷的模塊預(yù)測(cè)為無(wú)缺陷時(shí),則存在缺陷不能及時(shí)發(fā)現(xiàn)與修復(fù)的風(fēng)險(xiǎn).出現(xiàn)這2種錯(cuò)誤的代價(jià)并不相同,如何平衡二者,找出更適合的軟件缺陷預(yù)測(cè)模型一直是研究的重點(diǎn).
1.1.2 排 序
基于排序問(wèn)題的缺陷預(yù)測(cè)模型適合測(cè)試資源未知的情況——將軟件模塊按缺陷數(shù)目進(jìn)行排序,優(yōu)先測(cè)試含缺陷個(gè)數(shù)多的軟件模塊,當(dāng)測(cè)試資源富余的時(shí)候,可以繼續(xù)對(duì)含缺陷少的模塊進(jìn)行測(cè)試.對(duì)于此類(lèi)缺陷預(yù)測(cè)模型,很難做到精準(zhǔn)地預(yù)測(cè)軟件模塊所含的缺陷個(gè)數(shù),關(guān)鍵是對(duì)軟件模塊給出高質(zhì)量的排序結(jié)果.目前排序問(wèn)題的軟件缺陷預(yù)測(cè)模型的主要構(gòu)造算法是利用機(jī)器學(xué)習(xí)中的回歸算法.
1.2 機(jī)器學(xué)習(xí)算法
決策樹(shù)算法[11]是一種常見(jiàn)的用于分類(lèi)的建模方法,通過(guò)構(gòu)造決策樹(shù)來(lái)發(fā)現(xiàn)數(shù)據(jù)中蘊(yùn)含的分類(lèi)規(guī)則.當(dāng)應(yīng)用決策樹(shù)建立缺陷預(yù)測(cè)模型時(shí),需要在預(yù)測(cè)變量的缺值處理、剪枝技術(shù)、派生規(guī)則等方面作相應(yīng)改進(jìn),同時(shí)還應(yīng)避免出現(xiàn)過(guò)度擬合問(wèn)題,盡量減少路徑的長(zhǎng)度,以提高預(yù)測(cè)模型的性能.
線性回歸是利用多個(gè)自變量的最優(yōu)組合共同來(lái)預(yù)測(cè)或估計(jì)因變量,比只用一個(gè)自變量進(jìn)行估計(jì)更有效,也更符合實(shí)際.線性回歸是最基礎(chǔ)的用于排序問(wèn)題的回歸算法,通過(guò)建立軟件度量元與缺陷數(shù)目之間的線性方程來(lái)計(jì)算未知模塊可能含有的缺陷數(shù)目.邏輯回歸是線性回歸的一種改進(jìn)技術(shù),采用對(duì)數(shù)變換將線性回歸的結(jié)果映射為0-1之間的值,因此對(duì)于預(yù)測(cè)軟件是否有缺陷的二分類(lèi)問(wèn)題能夠容易地建立模型.
貝葉斯分類(lèi)器基于貝葉斯定理,是建立在特征獨(dú)立性假設(shè)基礎(chǔ)上的簡(jiǎn)單的統(tǒng)計(jì)學(xué)習(xí)分類(lèi)器,它理想地認(rèn)為對(duì)于給定的類(lèi)變量,一個(gè)給定的特征不依賴(lài)于其他的特征.貝葉斯分類(lèi)器只需要很少的訓(xùn)練樣本來(lái)對(duì)預(yù)測(cè)模型的參數(shù)進(jìn)行估計(jì),在特征屬性完全獨(dú)立或?qū)傩灾g相關(guān)關(guān)系不太明顯的情況下有比較好的性能.貝葉斯網(wǎng)絡(luò)是一種不確定性因果關(guān)系模型,具有強(qiáng)大的不確定性處理問(wèn)題能力,能有效地進(jìn)行多元信息表達(dá)與融合,可廣泛地用于故障預(yù)測(cè).
人工神經(jīng)網(wǎng)絡(luò)是一種模仿動(dòng)物神經(jīng)網(wǎng)絡(luò)行為特征、進(jìn)行分布式并行信息處理的計(jì)算模型.大多數(shù)情況下,人工神經(jīng)網(wǎng)絡(luò)能基于外界信息改變內(nèi)部結(jié)構(gòu),是一種自適應(yīng)系統(tǒng).常用的多層感知機(jī)是使用標(biāo)準(zhǔn)BP算法訓(xùn)練的神經(jīng)網(wǎng)絡(luò),是一種非線性統(tǒng)計(jì)性數(shù)據(jù)建模工具,常用來(lái)對(duì)輸入與輸出間復(fù)雜的關(guān)系進(jìn)行建模,或用來(lái)探索數(shù)據(jù)的模式,是解決大復(fù)雜度問(wèn)題的一種相對(duì)簡(jiǎn)單有效的方法.
除此之外,還有支持向量機(jī)、聚類(lèi)分析等方法可以用于軟件缺陷預(yù)測(cè),都需要用歷史數(shù)據(jù)來(lái)構(gòu)建預(yù)測(cè)模型并驗(yàn)證,各技術(shù)間的優(yōu)劣取決于數(shù)據(jù)自身以及它們?cè)跍?zhǔn)確性、穩(wěn)定性、泛化程度上的比較和分析.
2.1 提出問(wèn)題
有研究指出,機(jī)器學(xué)習(xí)算法的選擇對(duì)于提高缺陷預(yù)測(cè)模型的效果并不十分理想,由于數(shù)據(jù)集的差異性,預(yù)測(cè)性能最好的機(jī)器學(xué)習(xí)算法也在發(fā)生變化.我們對(duì)Eclipse數(shù)據(jù)集分別進(jìn)行了分類(lèi)預(yù)測(cè)和排序預(yù)測(cè),其中分類(lèi)預(yù)測(cè)用到了決策樹(shù)、邏輯回歸、貝葉斯網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)多層感知機(jī)算法;排序預(yù)測(cè)運(yùn)用了隨機(jī)森林、線性回歸和神經(jīng)網(wǎng)絡(luò)多層感知機(jī)算法.通過(guò)分析發(fā)現(xiàn),在不同的評(píng)價(jià)指標(biāo)下,最優(yōu)的機(jī)器學(xué)習(xí)算法不完全相同.對(duì)于分類(lèi)問(wèn)題,邏輯回歸算法的預(yù)測(cè)精確率稍好于其他算法,而對(duì)于召回率指標(biāo),則是貝葉斯網(wǎng)絡(luò)算法較好.對(duì)比綜合評(píng)價(jià)指標(biāo),認(rèn)為復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)算法——貝葉斯網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)的缺陷預(yù)測(cè)模型的綜合效果更好,但復(fù)雜度大,預(yù)測(cè)的時(shí)間開(kāi)銷(xiāo)顯著增加,尤其是對(duì)數(shù)據(jù)集較大,度量元較多的情況.
因此我們?cè)O(shè)想:能否將不同機(jī)器學(xué)習(xí)算法結(jié)合起來(lái)構(gòu)建缺陷預(yù)測(cè)模型,綜合各機(jī)器學(xué)習(xí)算法的優(yōu)點(diǎn),在各項(xiàng)評(píng)價(jià)指標(biāo)上都取得一定的改進(jìn)效果,并提出了2個(gè)假設(shè):
1) 組合的機(jī)器學(xué)習(xí)算法構(gòu)建的軟件缺陷預(yù)測(cè)模型對(duì)于分類(lèi)問(wèn)題有一定的提高;
2) 組合的機(jī)器學(xué)習(xí)算法構(gòu)建的軟件缺陷預(yù)測(cè)模型對(duì)于排序問(wèn)題有一定的提高.
2.2 基于組合的機(jī)器學(xué)習(xí)算法的缺陷預(yù)測(cè)模型
本節(jié)將詳細(xì)描述我們提出的基于組合機(jī)器學(xué)習(xí)算法的缺陷預(yù)測(cè)模型.
2.2.1 數(shù)據(jù)預(yù)處理
將從不同數(shù)據(jù)源收集到的數(shù)據(jù)整合成數(shù)據(jù)集,數(shù)據(jù)中可能存在數(shù)據(jù)冗余、數(shù)據(jù)缺失、錯(cuò)誤的數(shù)據(jù)等問(wèn)題,引入這些數(shù)據(jù)可能會(huì)導(dǎo)致缺陷預(yù)測(cè)模型的不準(zhǔn)確,因此需要對(duì)數(shù)據(jù)集做清洗.另外,對(duì)于分類(lèi)問(wèn)題,還需要將數(shù)據(jù)集中的缺陷數(shù)目離散化,轉(zhuǎn)化為缺陷的有無(wú),故將缺陷數(shù)目大于0的看作有缺陷的一類(lèi),置為1;缺陷數(shù)目等于0的看作無(wú)缺陷,置為0.將處理后的數(shù)據(jù)集分成2部分:1)用于學(xué)習(xí)模型,也叫訓(xùn)練集;2)用于測(cè)試與驗(yàn)證,稱(chēng)為測(cè)試集.由于軟件缺陷符合“2-8”原則,80%的軟件缺陷集中在20%的軟件模塊中,因此收集到的數(shù)據(jù)中包含軟件缺陷的模塊數(shù)比不含缺陷的模塊數(shù)要少得多,造成了數(shù)據(jù)集的極大不平衡,而根據(jù)這個(gè)不均衡樣本集學(xué)習(xí)出來(lái)的模型將偏向于多數(shù)類(lèi)而忽視少數(shù)類(lèi),即更傾向于將不含缺陷的模塊正確分類(lèi).因此我們采用人工合成新樣本的重采樣策略來(lái)對(duì)不平衡數(shù)據(jù)集進(jìn)行優(yōu)化,使得含缺陷的數(shù)據(jù)與不含缺陷的數(shù)據(jù)在相同的數(shù)量級(jí)上,然后在此分布均衡的樣本集上進(jìn)行學(xué)習(xí).
2.2.2 組合預(yù)測(cè)模型
在機(jī)器學(xué)習(xí)中,提高分類(lèi)器性能的一種有效技術(shù)是集成學(xué)習(xí)[12],就是將多種算法結(jié)合起來(lái),這些算法可以是相同的,也可以是不同的.利用集成技術(shù)構(gòu)造軟件缺陷模型仍處于初級(jí)階段,應(yīng)用較廣泛的是Bagging和Boosting集成算法,將多個(gè)弱預(yù)測(cè)器組成新的強(qiáng)預(yù)測(cè)器,改善模型預(yù)測(cè)精確度和泛化能力.本文借鑒另一種著名的集成學(xué)習(xí)技術(shù)——Stacking——的思想來(lái)構(gòu)建模型.Stacking方法由Worlpert于1992年提出[13],主要利用高級(jí)的基礎(chǔ)學(xué)習(xí)器結(jié)合低級(jí)的基礎(chǔ)學(xué)習(xí)器來(lái)獲得更好的預(yù)測(cè)準(zhǔn)確性,它與Bagging和Boosting方法的最大區(qū)別是Stacking方法并不是簡(jiǎn)單地結(jié)合同一類(lèi)型的基礎(chǔ)學(xué)習(xí)器,而是采用不同的機(jī)器學(xué)習(xí)算法構(gòu)造學(xué)習(xí)器.Stacking框架包含2層分類(lèi)器,level-0為基分類(lèi)器;level-1為元分類(lèi)器.基分類(lèi)器由訓(xùn)練集以bootstrap采樣的方式來(lái)構(gòu)造,然后將基分類(lèi)器的輸出結(jié)果作為元分類(lèi)器的輸入,即訓(xùn)練集.元分類(lèi)器的任務(wù)就是合理組合輸出集,糾正基分類(lèi)器的分類(lèi)錯(cuò)誤,以正確分類(lèi)目標(biāo).因此組合預(yù)測(cè)的第1步便是用基礎(chǔ)學(xué)習(xí)器對(duì)數(shù)據(jù)集進(jìn)行預(yù)測(cè),然后將基分類(lèi)器的輸出結(jié)果作為元分類(lèi)器的輸入,即將數(shù)據(jù)集輸出的預(yù)測(cè)信息和訓(xùn)練數(shù)據(jù)的真實(shí)分類(lèi)結(jié)果整合為一個(gè)數(shù)據(jù)集,然后,將新的數(shù)據(jù)集作為新學(xué)習(xí)器的訓(xùn)練數(shù)據(jù)集,再采用一種學(xué)習(xí)算法來(lái)解決這個(gè)問(wèn)題.
這里,我們把Stacking方法的思想用于對(duì)軟件缺陷進(jìn)行預(yù)測(cè).首先對(duì)訓(xùn)練集中的數(shù)據(jù)用簡(jiǎn)單的機(jī)器學(xué)習(xí)算法做一個(gè)快速的分類(lèi)或排序預(yù)測(cè),分類(lèi)問(wèn)題可用邏輯回歸算法、決策樹(shù)算法;排序問(wèn)題可用線性回歸算法、隨機(jī)森林算法等.盡管此時(shí)數(shù)據(jù)集較大,運(yùn)用的度量元較多,依然能夠很快地得到結(jié)果.我們將預(yù)測(cè)結(jié)果寫(xiě)入原始的數(shù)據(jù)集作為一個(gè)新的度量元.由于預(yù)測(cè)的效果普遍良好,因此該預(yù)測(cè)結(jié)果與軟件模塊的真實(shí)缺陷數(shù)有較高的相關(guān)性.
運(yùn)用較復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)算法如貝葉斯網(wǎng)絡(luò)、神經(jīng)網(wǎng)絡(luò)等對(duì)新的數(shù)據(jù)集進(jìn)行第2層預(yù)測(cè).由于建立模型的過(guò)程非常復(fù)雜,時(shí)間開(kāi)銷(xiāo)非常大,因此我們考慮采用特征選擇技術(shù)來(lái)對(duì)數(shù)據(jù)降維,挑選出最優(yōu)的屬性子集運(yùn)用到學(xué)習(xí)中,在盡量少的丟失信息的情況下提高模型性能,減少開(kāi)銷(xiāo).同時(shí),特征選擇技術(shù)也可以解決度量數(shù)據(jù)集中存在的錯(cuò)誤數(shù)據(jù)和某些度量與構(gòu)建缺陷預(yù)測(cè)模型無(wú)關(guān)的問(wèn)題.信息增益(information gain)和信息增益率(information gain ratio)都可以用于屬性選擇,我們的模型通過(guò)計(jì)算增益率來(lái)選擇度量屬性.
定義1. 屬性A的信息增益率.IGR(A)=IG(A)I(A),其中IG(A)即屬性A的信息增益:IG(A)=entropy(S)-entropy(S,A),是未劃分前的數(shù)據(jù)的熵與根據(jù)屬性A劃分后的數(shù)據(jù)集的熵的差值.
假設(shè)訓(xùn)練集S={S1,S2,…,SN},其中Si包含一個(gè)屬性向量Xi=(xi1,xi2,…xip)及分類(lèi)標(biāo)簽ci∈C={c1,c2,…,cm).在缺陷預(yù)測(cè)中Xi和ci分別代表一個(gè)模塊的度量向量和模塊是否存在缺陷的標(biāo)記.設(shè)pi是S中屬于類(lèi)別i的比例,則信息熵的計(jì)算方法:



最后,將預(yù)先準(zhǔn)備的測(cè)試集輸入此模型,得到預(yù)測(cè)結(jié)果,將預(yù)測(cè)結(jié)果與真實(shí)的缺陷值進(jìn)行比較評(píng)估,驗(yàn)證模型的有效性.當(dāng)訓(xùn)練集與測(cè)試集來(lái)自同一個(gè)數(shù)據(jù)集時(shí),我們采用10折交叉算法進(jìn)行驗(yàn)證,即將數(shù)據(jù)集平均分成10份,輪流取其中9份作為訓(xùn)練數(shù)據(jù),剩下1份作為測(cè)試數(shù)據(jù),算出每一輪的準(zhǔn)確率、召回率等評(píng)價(jià)指標(biāo).該實(shí)驗(yàn)重復(fù)10次進(jìn)行,最終算出10次的平均值作為最終驗(yàn)證結(jié)果.
2.2.3 評(píng)價(jià)指標(biāo)
對(duì)于分類(lèi)模型,研究采用傳統(tǒng)的分類(lèi)器性能評(píng)價(jià)指標(biāo),包括精確度、召回率、F-度量、AUC等.我們可以將預(yù)測(cè)的結(jié)果用一個(gè)混淆矩陣表示,如表1所示:

Table 1 Confusion Matrix
1) 精確度:precision=TP(TP+FP);
2) 召回率:recall=TP(TP+FN);
3) F度量:F_measure=2×precision×recall(precision+recall);
4)AUC(area under ROC curve):ROC曲線下面積.ROC曲線原本是用于描述收益和成本之間的權(quán)衡關(guān)系,我們以Y軸表示真正率,X軸表示真負(fù)率.AUC的范圍在[0,1],面積越大,模型越好.
對(duì)于排序問(wèn)題,我們采用了Alberg圖(CLC)作為評(píng)價(jià)指標(biāo),CLC是Ohlsson和Alberg[14]提出的衡量排序任務(wù)的軟件缺陷預(yù)測(cè)模型的指標(biāo),它以模塊的百分比為橫坐標(biāo),累計(jì)的模塊缺陷數(shù)的百分比為縱坐標(biāo).模型曲線下的面積越大越好.我們還運(yùn)用了Arisholm等人[10]提出的CE(cost effectiveness)指標(biāo)來(lái)評(píng)價(jià).CE指標(biāo)建立在基于代碼行的Alberg圖的基礎(chǔ)上,和Alberg圖類(lèi)似,區(qū)別在于X軸表示排序后的模塊累計(jì)的代碼行數(shù)的百分比.每個(gè)模型的預(yù)測(cè)結(jié)果對(duì)應(yīng)圖2中的1條曲線.其中最優(yōu)模型是按照軟件的真實(shí)缺陷數(shù)排序后的結(jié)果,隨機(jī)模型是指軟件模塊的排序完全隨機(jī),這2條曲線可以作為缺陷預(yù)測(cè)模型性能比較的基準(zhǔn),預(yù)測(cè)模型的曲線越接近最優(yōu)模型則效果越好.

Fig. 2 CE cruve圖2 CE曲線
3.1 實(shí)驗(yàn)準(zhǔn)備
1) 實(shí)驗(yàn)環(huán)境
本實(shí)驗(yàn)在Intel Core i3-4130 3.40 GHz CPU,4 GB內(nèi)存的PC機(jī)上完成,在Eclipse上編程開(kāi)發(fā),外部依賴(lài)項(xiàng)有weka.jar.
2) 實(shí)驗(yàn)數(shù)據(jù)
本實(shí)驗(yàn)數(shù)據(jù)來(lái)自Eclipse標(biāo)準(zhǔn)數(shù)據(jù)集[15],其中有6個(gè)ARFF格式的文件,分別收集了Eclipse源碼在package級(jí)別和file級(jí)別的度量元和缺陷數(shù)目,涉及Eclipse2.0,2.1,3.0這3個(gè)版本.數(shù)據(jù)集中所含的度量元包括:
1) Name——每條數(shù)據(jù)對(duì)應(yīng)的文件名或包名;
2) Pre-release Defects——該版本發(fā)布前6個(gè)月內(nèi)收集的缺陷數(shù)目;
3) Post-release Defects——該版本發(fā)布后6個(gè)月內(nèi)收集的缺陷數(shù)目;
4) 復(fù)雜性度量——包括CK度量元和面向?qū)ο蠖攘吭诒?中列出;

Table 2 Complexity Metrics of Eclipse Dataset
5) 抽象語(yǔ)法樹(shù)結(jié)構(gòu)——抽象語(yǔ)法樹(shù)的結(jié)點(diǎn)度量.
由于File級(jí)別的數(shù)據(jù)集和Package級(jí)別的數(shù)據(jù)集在結(jié)構(gòu)上存在差異,因此用File級(jí)別數(shù)據(jù)訓(xùn)練的模型只能用來(lái)預(yù)測(cè)File級(jí)別的數(shù)據(jù),Package級(jí)別的同理.我們每次取其中一個(gè)版本的FilePackage數(shù)據(jù)來(lái)學(xué)習(xí)模型,分別預(yù)測(cè)3個(gè)版本的FilePackage數(shù)據(jù),并且在訓(xùn)練集和測(cè)試集來(lái)自同一個(gè)版本時(shí)采用10折交叉驗(yàn)證,故利用Eclipse數(shù)據(jù)集全部文件可進(jìn)行18次預(yù)測(cè)與驗(yàn)證.
3.2 實(shí)驗(yàn)結(jié)果
3.2.1 分類(lèi)預(yù)測(cè)
首先對(duì)數(shù)據(jù)集進(jìn)行簡(jiǎn)單算法的一次預(yù)測(cè),由于實(shí)驗(yàn)結(jié)果過(guò)多且效果相似,故只列出部分實(shí)驗(yàn)結(jié)果,如表3所示.為了表示簡(jiǎn)便,使用J48代表決策樹(shù)算法,LR代表邏輯回歸,BN代表貝葉斯網(wǎng)絡(luò),NN代表神經(jīng)網(wǎng)絡(luò).

Table 3 Partial Results of Different Machine Learning Model
從表3看出邏輯回歸算法雖預(yù)測(cè)精確度較好,但召回率在幾種算法中偏低,綜合評(píng)價(jià)模型的F_measure與AUC指標(biāo)也較低,而復(fù)雜的網(wǎng)絡(luò)模型的綜合指標(biāo)令人滿(mǎn)意,但預(yù)測(cè)花費(fèi)的時(shí)間太多.對(duì)于簡(jiǎn)單預(yù)測(cè),全部18次實(shí)驗(yàn)可以在2 min內(nèi)完成,而對(duì)于復(fù)雜算法全部完成18次實(shí)驗(yàn)需要數(shù)小時(shí),其中File級(jí)別的預(yù)測(cè)由于數(shù)據(jù)量大而占了大部分.這就證實(shí)2.1節(jié)提到的對(duì)于不同的評(píng)價(jià)指標(biāo)而言最優(yōu)的算法不盡相同.
將決策樹(shù)和邏輯回歸的預(yù)測(cè)結(jié)果分別加入數(shù)據(jù)集,根據(jù)2.2節(jié)的描述構(gòu)建組合模型,預(yù)測(cè)并加以驗(yàn)證,結(jié)果如表4所示.發(fā)現(xiàn)在訓(xùn)練集和測(cè)試集來(lái)自不同數(shù)據(jù)集時(shí),將決策樹(shù)預(yù)測(cè)結(jié)果加入度量元用組合模型預(yù)測(cè)的效果與單獨(dú)用決策樹(shù)預(yù)測(cè)的效果相近,分析原因可能是由于決策樹(shù)預(yù)測(cè)的精確度不高,將許多實(shí)際有缺陷的數(shù)據(jù)錯(cuò)分為無(wú)缺陷的數(shù)據(jù),因此將其結(jié)果加入數(shù)據(jù)集會(huì)影響模型的正確分類(lèi);而訓(xùn)練集與測(cè)試集來(lái)自同一數(shù)據(jù)集時(shí)的預(yù)測(cè)結(jié)果顯示出現(xiàn)了過(guò)度擬合.邏輯回歸結(jié)果加入數(shù)據(jù)集再進(jìn)行組合預(yù)測(cè),對(duì)大部分評(píng)價(jià)指標(biāo)都有一定的提高效果,尤其是最關(guān)注的precision比單一預(yù)測(cè)的結(jié)果均要好,并且時(shí)間開(kāi)銷(xiāo)有了很大程度的減少,可以在30 min內(nèi)完成全部預(yù)測(cè).另外,所有實(shí)驗(yàn)在Package級(jí)別均比在File級(jí)別要好,是因?yàn)镻ackage級(jí)別的測(cè)試集中有缺陷和無(wú)缺陷的數(shù)據(jù)數(shù)量上相差不大,數(shù)據(jù)集近似平衡.

Table 4 Partial Results of Combined Machine Learning Model
表5中列出了文獻(xiàn)[15]對(duì)Eclipse數(shù)據(jù)集進(jìn)行分類(lèi)預(yù)測(cè)的結(jié)果,由于Zimmermann等人之后對(duì)Eclipse數(shù)據(jù)集做了一定的清洗,本文使用的Eclipse數(shù)據(jù)集與文獻(xiàn)[15]所用的數(shù)據(jù)集略有不同,F(xiàn)ile級(jí)別的數(shù)據(jù)中有缺陷的數(shù)據(jù)占整個(gè)數(shù)據(jù)集的10%~15%,而文獻(xiàn)[15]中有缺陷的數(shù)據(jù)占23%以上,由于本文學(xué)習(xí)所用到的缺陷數(shù)據(jù)較少,可能導(dǎo)致該預(yù)測(cè)模型沒(méi)有充分學(xué)習(xí)到缺陷數(shù)據(jù)與軟件度量元之間的關(guān)系,預(yù)測(cè)時(shí)產(chǎn)生了較多的分類(lèi)錯(cuò)誤,致使組合預(yù)測(cè)算法的precision不及表5中所示.但對(duì)于本文用到的Package級(jí)別的數(shù)據(jù),有缺陷的數(shù)據(jù)占整個(gè)數(shù)據(jù)集50%左右,與文獻(xiàn)[15]數(shù)據(jù)相近,比較precision和recall評(píng)價(jià)指標(biāo)可以看出基于組合學(xué)習(xí)算法的預(yù)測(cè)具有明顯優(yōu)勢(shì).

Table 5 Prediction Result of Ref [15]
因此我們認(rèn)為,本文提出的基于組合的機(jī)器學(xué)習(xí)算法構(gòu)建的缺陷預(yù)測(cè)模型能夠在一定程度上提高模型的各項(xiàng)評(píng)價(jià)指標(biāo),且比單一的機(jī)器學(xué)習(xí)算法有一定的優(yōu)勢(shì).
3.2.2 排序預(yù)測(cè)
首先對(duì)數(shù)據(jù)集進(jìn)行簡(jiǎn)單算法的一次預(yù)測(cè),由于實(shí)驗(yàn)結(jié)果過(guò)多且效果相似,故只列出部分實(shí)驗(yàn)結(jié)果.用到的算法有隨機(jī)森林、線性回歸和神經(jīng)網(wǎng)絡(luò).從圖3可以看出這3種算法建立的模型在排序上的效果相同,實(shí)際試驗(yàn)中線性回歸和隨機(jī)森林構(gòu)建的模型結(jié)構(gòu)較簡(jiǎn)單,運(yùn)算速度更快,而神經(jīng)網(wǎng)絡(luò)的時(shí)間開(kāi)銷(xiāo)非常大,完成18次實(shí)驗(yàn)需要數(shù)小時(shí).
根據(jù)本文提出的組合機(jī)器學(xué)習(xí)算法得到新的預(yù)測(cè)模型,并按照預(yù)測(cè)結(jié)果的值從大到小將模塊排序,做出CLC曲線和CE曲線,如圖4所示.在CLC評(píng)價(jià)下,加入線性回歸度量的神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型有一定的提高,CE指標(biāo)和單個(gè)算法預(yù)測(cè)類(lèi)似.然而改進(jìn)的空間不大,分析原因是由于所選用的3種機(jī)器學(xué)習(xí)算法的效果相似,不能為組合模型的正確預(yù)測(cè)提供更多有用的信息,且每種機(jī)器學(xué)習(xí)算法的CE結(jié)果曲線均接近斜率為1的直線,即接近隨機(jī)排序的結(jié)果,推測(cè)該數(shù)據(jù)集對(duì)排序的預(yù)測(cè)不能取得良好的效果.

Fig. 3 Results of different machine learning model (File 2.0 as training Set, File 2.1 as testing Set)圖3 不同機(jī)器學(xué)習(xí)模型的部分預(yù)測(cè)結(jié)果(訓(xùn)練集為File 2.0、測(cè)試集為File 2.1)

Fig. 4 Results of combined machine learning model (File 2.0 as training set, File 2.1 as testing set)圖4 組合機(jī)器學(xué)習(xí)模型的部分預(yù)測(cè)結(jié)果(訓(xùn)練集為File 2.0、測(cè)試集為File 2.1)
本文針對(duì)當(dāng)前軟件缺陷預(yù)測(cè)模型中機(jī)器學(xué)習(xí)算法對(duì)預(yù)測(cè)模型性能的影響問(wèn)題,提出了一種基于不同機(jī)器學(xué)習(xí)算法的組合來(lái)建立缺陷預(yù)測(cè)模型的方法,首先對(duì)原始數(shù)據(jù)集進(jìn)行一次快速預(yù)測(cè),將該預(yù)測(cè)的結(jié)果加入數(shù)據(jù)集作為一個(gè)新的度量元,再對(duì)新數(shù)據(jù)集進(jìn)行屬性選擇、降維,再通過(guò)魯棒性更強(qiáng)的復(fù)雜機(jī)器學(xué)習(xí)算法來(lái)構(gòu)建新的模型并用于預(yù)測(cè),得到的預(yù)測(cè)模型在缺陷預(yù)測(cè)的分類(lèi)和排序問(wèn)題上都有一定的效果.然而第1層預(yù)測(cè)的結(jié)果對(duì)該模型的影響較大,應(yīng)盡量選擇準(zhǔn)確度較高的學(xué)習(xí)算法,否則加入新的度量元可能引入過(guò)多的錯(cuò)誤數(shù)據(jù),導(dǎo)致缺陷預(yù)測(cè)模型向著錯(cuò)誤的方向構(gòu)建.如何更好地組合不同的學(xué)習(xí)算法使它們更緊密的聯(lián)系在一起,如何進(jìn)一步提高缺陷預(yù)測(cè)模型的性能指標(biāo)以及考慮過(guò)程度量等其他類(lèi)型的度量數(shù)據(jù)是下一步將研究的問(wèn)題.
[1]Arisholm E, Briand L C, Johannessen E B. A systematic and comprehensive investigation of methods to build and evaluate fault prediction models[J]. Journal of Systems and Software, 2010, 83(1): 2-17
[2]Khoshgoftaar T M, Seliya N. Comparative assessment of software quality classification techniques: An empirical case study[J]. Empirical Software Engineering, 2004, 9(3): 229-257
[3]Fenton N, Krause P, Neil M, et al. A probabilistic model for software defect prediction[J]. IEEE Trans on Software Engineering, 2001, 44(21): 444-453
[4]Vandecruys O, Martens D, Baesens B, et al. Mining software repositories for comprehensible software fault prediction models[J]. Journal of Systems and Software, 2008, 81(5): 823-839
[5]Turhan B, Bener A. Analysis of Naive Bayes' assumptions on software fault data: An empirical study[J]. Data & Knowledge Engineering, 2009, 68(2): 278-290
[6]Chang Chengcheng. Research about software defect priority prediction model based on AdaBoost-SVM algorithm[D]. Nanjing: Nanjing University of Posts and Telecommunications, 2013 (in Chinese)(常成成. 基于AdaBoost-SVM的軟件缺陷優(yōu)先級(jí)預(yù)測(cè)模型的研究[D]. 南京: 南京郵電大學(xué), 2013)
[7]Li Xiang, Zhu Quanyin. Prediction of improved BP neural network by Adaboost algorithm[J].Computer Engineering & Science, 2013, 35(8): 96-102 (in Chinese)(李翔, 朱全銀. Adaboost算法改進(jìn)BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)研究[J]. 計(jì)算機(jī)工程與科學(xué), 2013, 35(8): 96-102)
[8]Hall T, Beecham S, Bowes D, et al. A systematic literature review on fault prediction performance in software engineering[J]. IEEE Trans on Software Engineering, 2012, 38(6): 1276-1304
[9]Zhao Hongyuan. Using effort-aware performance indicators to compare the ability of code metrics, process metrics, and historical fault metrics to predict fault-proneness[D]. Nanjing: Nanjing University, 2013 (in Chinese)(趙宏遠(yuǎn). 代碼度量、過(guò)程度量和歷史缺陷度量: 工作量感知的缺陷預(yù)測(cè)能力比較[D]. 南京: 南京大學(xué), 2013)
[10]Wang Pei. Research on software defect prediction based on feature selection[D]. Wuhan: Central China Normal University, 2013 (in Chinese)(王培. 特征選擇在軟件缺陷預(yù)測(cè)技術(shù)中的應(yīng)用研究[D]. 武漢: 華中師范大學(xué), 2013)
[11]Keene S E. A programmer’s guide to object-oriented programming in common LISP[M]. Reading, MA: Addison-Wesley, 1988
[12]Schwenker F. Ensemble methods: Foundations and algorithms [book review][J]. Computational Intelligence Magazine, 2013, 8(1): 77-79
[13]Wolpert D H. Stacked generalization[J]. Neural Networks, 1992, 5(2): 241-259
[14]Ohlsson N, Alberg H. Predicting fault-prone software modules in telephone switches[J]. IEEE Trans on Software Engineering, 1996, 22(12): 886-894
[15]Zimmermann T, Premraj R, Zeller A. Predicting defects for Eclipse[C]Proc of the 3rd International Workshop on Predictor Models in Software Engineering. Piscataway, NJ: IEEE, 2007: 9

Fu Yiqi, born in 1992. Master. Her main research interests include defects prediction and high confidence software technology.

Dong Wei, born in 1976. PhD, professor and PhD supervisor. Member of CCF. His main research interest include program analysis and high confidence software technology.

Yin Liangze, born in 1986. PhD. Member of CCF. His main research interest include model checking and high confidence software technology.

Du Yuqing, born in 1991. Master. Her main research interest is high confidence software technology.
Software Defect Prediction Model Based on the Combination of Machine Learning Algorithms
Fu Yiqi, Dong Wei, Yin Liangze, and Du Yuqing
(CollegeofComputer,NationalUniversityofDefenseTechnology,Changsha410073)
According to the metrics information and defects found in a software product, we can use software defect prediction technology to predict more defects that may also exist as early as possible, then testing and validation resources are allocated based on the prediction result appropriately. Defect prediction based on machine learning techniques can find software defects comprehensively and automatically, and it is becoming one of the main methods of current defect prediction technologies. In order to improve the efficiency and accuracy of prediction, selection and research of machine learning algorithms is the critical part. In this paper, we do comparative analysis to different machine learning defect prediction methods, and find that different algorithms have both advantages and disadvantages in different evaluation indexes. Taking these advantages, we refer to the stacking integration learning method and present a combined software defect prediction model. In this model, we first predict once, then add the prediction results of different methods in the original dataset as new software metrics, and then predict again. Finally, we make experiments on Eclipse dataset. Experimental results show that this model is technical feasibility, and can decrease the cost of time and improve the accuracy.
software defect prediction; machine learning; ensemble learning; combination; Eclipse prediction dataset
2015-12-09;
2016-06-30
國(guó)家“九七三”重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃基金項(xiàng)目(2014CB340703);國(guó)家自然科學(xué)基金項(xiàng)目(91318301,61690203) This work was supported by the National Basic Research Program of China (973 Program) (2014CB340703) and the National Natural Science Foundation of China(91318301, 61690203).
董威(wdong@nudt.edu.cn)
TP311