王馨煜,崔藝凝,段盈盈
(北京信息科技大學(xué) 計算機學(xué)院,北京 100101)
隨著時代的發(fā)展和科技進步,計算機在人們的生活中越來越多地被使用。軟件是計算機領(lǐng)域中非常重要的一部分,軟件存在的缺陷也不可小覷。軟件缺陷預(yù)測技術(shù)旨在預(yù)測出模型中的缺陷數(shù)和缺陷傾向性,從而根據(jù)預(yù)測結(jié)果對資源進行合理的分配,是缺陷檢測技術(shù)的重要輔助手段。早期,研究人員通過經(jīng)驗來估計模型中可能存在的缺陷;后來出現(xiàn)了軟件體積度量元和缺陷的關(guān)系式,用關(guān)系式來計算系統(tǒng)在測試之前存在的缺陷數(shù);有研究者將代碼對應(yīng)具體文檔位置,從而給出了缺陷率的公式;也有研究者假設(shè)模塊規(guī)模符合指數(shù)分布,給出了缺陷密度的估算公式。
融合多分類器模型對軟件缺陷預(yù)測技術(shù)有重大的研究意義,通過融合多分類器模型,不僅可以發(fā)現(xiàn)不同模型之間潛在的聯(lián)系,還可以度量軟件的可靠性。另外,融合多個效果較弱的分類器為一個性能較好的多分類器,還可以提高弱分類器的預(yù)測性能。
本文首先通過選擇不同的分類器模型對提取的軟件模塊進行預(yù)測并輸出結(jié)果;其次,對單個分類器模型與融合后的分類器模型的預(yù)測結(jié)果進行比對;采用基于集成學(xué)習(xí)的靜態(tài)軟件缺陷預(yù)測方法對軟件模塊缺陷進行預(yù)測。
軟件缺陷預(yù)測技術(shù)旨在預(yù)測出軟件模塊的缺陷,明確存在缺陷模塊的缺陷數(shù)和缺陷傾向性。軟件模塊存在缺陷可能會造成財產(chǎn)損失和安全隱患。如:1996年6月因?qū)Ш较到y(tǒng)的計算機軟件故障導(dǎo)致歐洲“阿麗亞娜”號航天飛機墜毀;1999年美國火星探測飛船墜毀事件,不包括損失時間,其工程成本耗費3.27億美元。軟件缺陷預(yù)測技術(shù)是避免軟件運行故障,減少不必要損失的重要手段,該技術(shù)自開始研究后就受到了眾多的關(guān)注。
早期的軟件缺陷通過員工的經(jīng)驗來估計,后來Akiyama明確給出了最早的軟件缺陷與代碼行的關(guān)系量化式,但只是在程序開始前初步對可能存在的軟件缺陷進行估算,并不完美。隨著測試軟件的規(guī)模與其復(fù)雜度的逐步提高,開發(fā)者更加重視的是軟件缺陷預(yù)測技術(shù)的精準(zhǔn)度及模塊測試的正確率是否能夠保證在一個穩(wěn)定的范圍里,是否可以更加高效地完成測試。成熟的軟件缺陷預(yù)測技術(shù)可以在軟件發(fā)布之前預(yù)測出真正有缺陷的程序模塊,從而提高軟件的質(zhì)量,減少資源消耗。
目前,國內(nèi)外研究人員從不同的角度研究了靜態(tài)缺陷預(yù)測和數(shù)據(jù)驅(qū)動缺陷預(yù)測等方法。在異常值檢測和處理、高維度數(shù)據(jù)、類不平衡問題和數(shù)據(jù)差異等方面進行了研究,主要使用機器學(xué)習(xí)和統(tǒng)計方法來預(yù)測缺陷模塊。如:Freund和Schapire研究的Adaboost迭代算法,可以增強預(yù)測模型的精度;Wolpert提出的Stacking算法,可以集成若干基分類器的分類性能,從而提高分類效果等。
越來越多的預(yù)測模型的出現(xiàn)使研究者的注意力更多地集中在模型預(yù)測精度上,實驗數(shù)據(jù)集的差異性和單一分類器預(yù)測性能的局限性是影響軟件缺陷預(yù)測精度的兩大原因。針對數(shù)據(jù)集的差異性,Sun等提出了通過特征選擇提高預(yù)測精度的方法;Xu等提出了Logistic方法通過尋找最佳擬合參數(shù)來提高預(yù)測效率;針對單一分類器預(yù)測性能局限性的問題,Zhu等人提出了無監(jiān)督的特征選擇方法。除此之外,集成學(xué)習(xí)方法也是解決單一分類器的預(yù)測性能不夠泛化問題的重要途徑,通過將多個弱分類器集成為一個強分類器,進而提高軟件缺陷預(yù)測的性能。
本文針對不同預(yù)測模型對軟件缺陷預(yù)測結(jié)果差異性較大的問題,對結(jié)構(gòu)復(fù)雜、類別不平衡、缺乏歷史數(shù)據(jù)的靜態(tài)軟件缺陷模塊采用基于集成學(xué)習(xí)的軟件靜態(tài)缺陷預(yù)測方法,利用已有的缺陷數(shù)據(jù)集,選擇Extra-Trees(極度隨機樹)來將多個弱分類器集成,并通過實驗對多個分類模型進行了驗證,并對融合前后各個模型的預(yù)測結(jié)果進行了比對。
在實驗中使用SMOTE方法(Synthetic Minority Oversampling Technique)對數(shù)據(jù)集進行預(yù)處理,選擇5種基分類器并結(jié)合Extra-Trees集成方法進行驗證。為了能夠有效評價分類結(jié)果,本文選擇了準(zhǔn)確率、召回率、F值3個業(yè)界認(rèn)可的評價指標(biāo)對預(yù)測結(jié)果進行評價。
為解決樣本少,特征缺失的問題,Chawla等人提出了SMOTE過采樣方法,可以減少模型的過擬合。在訓(xùn)練模型時,樣本數(shù)量少的類所能提供的信息也比較少,SMOTE方法通過對少數(shù)類樣本的分析,將少數(shù)類樣本合成新的樣本并加入數(shù)據(jù)集中,重復(fù)分析、合成過程直到達(dá)到數(shù)據(jù)樣本平衡。
生成新樣本的方法如式(1)所示。
其中,P表示新樣本;x是少數(shù)類樣本點,對于每一個少數(shù)類樣本x,從其k近鄰中隨機選擇若干個樣本,假設(shè)選擇的近鄰為y;N表示生成樣本數(shù)量。
集成學(xué)習(xí)是解決類不平衡問題的方法之一,從數(shù)據(jù)中顯式或隱式地學(xué)習(xí)多個模型,將這些模型有效結(jié)合,得到可靠、準(zhǔn)確的預(yù)測。單一分類器模型的測試能力逐漸趨于飽和,并且對缺陷模塊預(yù)測的范圍并不具有廣泛性,通過結(jié)合多個單一學(xué)習(xí)器,并聚合其預(yù)測結(jié)果的學(xué)習(xí)任務(wù),聚集多個分類方法來提高分類的精度,可以獲得比單一學(xué)習(xí)器更顯著的泛化性能,也可以稱作多分類系統(tǒng)。
目前,集成學(xué)習(xí)的主要問題就是如何將多個弱分類器合成一個強分類器,有效提高預(yù)測的精度。在實驗中采用了ExtraTree(極度隨機樹)來集成多分類器模型,但使用這種方法前需要檢查樣本的數(shù)據(jù)是否適用ExtraTree缺陷預(yù)測方法。ExtraTree具有很少的關(guān)鍵超參數(shù)和用于配置這些超參數(shù)的合理啟發(fā)式方法,能夠處理很高維度的數(shù)據(jù)。相比于從訓(xùn)練數(shù)據(jù)集的引導(dǎo)樣本開發(fā)每個決策樹的隨機森林,ExtraTree更適合整個訓(xùn)練數(shù)據(jù)集上的每個決策樹,每個決策樹都采用原始訓(xùn)練集,不會隨機采樣,訓(xùn)練速度更快。
軟件缺陷預(yù)測模型可用于對軟件模塊的缺陷情況作分類處理,評價指標(biāo)用于區(qū)分預(yù)測模型的優(yōu)劣。在本次實驗中選取了軟件缺陷預(yù)測常用的評價指標(biāo):準(zhǔn)確率(Accur acy),精確率(Precision),召回率(Recall)以及F1。
準(zhǔn)確率()又叫查準(zhǔn)率,是被正確預(yù)測出的有缺陷的樣本數(shù)量與被預(yù)測為無缺陷的樣本數(shù)量之比,如式(2):
1可以看作是模型精確率和召回率的一種調(diào)和平均,如式(4):
其中,表示被正確預(yù)測出的有缺陷的樣本數(shù)量;表示被預(yù)測為有缺陷的無缺陷樣本數(shù)量;表示被預(yù)測為無缺陷的有缺陷樣本數(shù)量;表示被正確預(yù)測出的無缺陷樣本數(shù)量。
本實驗采用數(shù)據(jù)集為NASA公布的MDP軟件缺陷數(shù)據(jù)集,來自于十三個實際軟件項目,數(shù)據(jù)集的基本信息包括樣本集名稱、模塊總數(shù)、缺陷模塊數(shù)、屬性個數(shù)以及缺陷所占比例,不同數(shù)據(jù)集缺陷所占比例不同。從NASA MDP數(shù)據(jù)集中選取缺陷所占比例不同的數(shù)據(jù)子集KC1、KC3、MC2、MW1、PC1、PC3、PC4作為本文的實驗數(shù)據(jù)集,見表1。
表1 NASA MDP數(shù)據(jù)子集Tab.1 NASA MDP Subset of the data
召回率(),又叫查全率,也就是被正確預(yù)測出的有缺陷的樣本數(shù)量與實際有缺陷的樣本數(shù)量之比,如式(3):
選擇的是決策樹分類器、隨機森林分類器、梯度提升分類器、基于直方圖的梯度提升分類器、自適應(yīng)增強分類器5種基礎(chǔ)模型,通過極度隨機樹的集成學(xué)習(xí)方法融合5個基礎(chǔ)模型。
為了保證所對模型的數(shù)據(jù)對比的有效性,每個實驗的過程是相同的,5種基礎(chǔ)模型以及極度隨機樹集成學(xué)習(xí)方法在NASA的數(shù)據(jù)子集上進行一次十字交叉驗證,使、、13個對比指標(biāo)數(shù)據(jù)進行同一數(shù)據(jù)集不同模型的數(shù)值對比。
5個基礎(chǔ)模型以及極度隨機樹集成學(xué)習(xí)方法在7個數(shù)據(jù)集中進行實驗,得到的指標(biāo)數(shù)據(jù)見表2。從表2可以看出,極度隨機樹集成學(xué)習(xí)方法在KC3、MC2、MW1、PC3這4個數(shù)據(jù)集上達(dá)到了比其他5種基礎(chǔ)模型更好的1值,說明極度隨機樹對于特定數(shù)據(jù)集可以將弱分類器集成融合成一個較強分類器。隨機森林分類器、基于直方圖的梯度提升分類器、自適應(yīng)增強分類器分別在KC1、PC4、PC1這3個數(shù)據(jù)集上1值達(dá)到最佳,該現(xiàn)象與KC1、PC4、PC13個數(shù)據(jù)集的類不平衡有一定關(guān)系。
表2 NASA MDP數(shù)據(jù)集實驗結(jié)果Tab.2 NASA MDP Experimental results of the data sets
本文基于極度隨機數(shù)集成學(xué)習(xí)方法對決策樹分類器、隨機森林分類器、梯度提升分類器、基于直方圖的梯度提升分類器和自適應(yīng)增強分類器5個單個弱學(xué)習(xí)器進行了融合;用各個單分類器及基于ExtraTree的集成分類器分別對7個數(shù)據(jù)集進行了缺陷預(yù)測。本文就是選用了極度隨機樹這一集成學(xué)習(xí)方法,對5個性能較差的弱分類器進行了融合得到一個多分類器融合模型,然后對比單個分類器的預(yù)測結(jié)果和多分類器的預(yù)測結(jié)果,比較兩者的預(yù)測性能,對軟件缺陷預(yù)測模型的預(yù)測性能問題進行了研究。預(yù)測的結(jié)果得出融合后的學(xué)習(xí)器在選中的7個數(shù)據(jù)集中有4個數(shù)據(jù)集預(yù)測出的F1值都是優(yōu)于任何一個單分類器的,在其他3個數(shù)據(jù)集中預(yù)測出的F1均處于第二或第三的位置。該集成學(xué)習(xí)方法無法在每個數(shù)據(jù)集中都達(dá)到最好的預(yù)測性能,后續(xù)將改進缺陷預(yù)測模塊分布的稀疏性引起的相關(guān)問題。