王詩博,李 勇,2,米文博
(1.新疆師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,新疆烏魯木齊 830054;2.南京航空航天大學(xué)高安全系統(tǒng)的軟件開發(fā)與驗(yàn)證技術(shù)工業(yè)和信息化部重點(diǎn)實(shí)驗(yàn)室,江蘇南京 211106)
隨著各行業(yè)對軟件需求的不斷提高,軟件的開發(fā)規(guī)模與復(fù)雜性日益提升,軟件質(zhì)量成為軟件工程中不可回避的話題。軟件缺陷預(yù)測技術(shù)是發(fā)現(xiàn)軟件缺陷、提高軟件質(zhì)量的有效方法之一。軟件缺陷預(yù)測技術(shù)基于歷史軟件開發(fā)數(shù)據(jù)結(jié)合機(jī)器學(xué)習(xí)方法實(shí)現(xiàn)預(yù)測算法[1],進(jìn)而實(shí)現(xiàn)對軟件開發(fā)過程中未發(fā)布軟件模塊的缺陷預(yù)測,已逐漸成為目前軟件工程領(lǐng)域的研究熱點(diǎn)。
在軟件開發(fā)過程中,由于各種因素導(dǎo)致軟件質(zhì)量難以保證。質(zhì)量不達(dá)標(biāo)的軟件在運(yùn)行中可能造成難以預(yù)估的災(zāi)難,并且根除軟件質(zhì)量問題的時(shí)間越晚,缺陷修復(fù)的代價(jià)也越大。因此,基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測以準(zhǔn)確、便捷以及迅速等優(yōu)點(diǎn)持續(xù)被關(guān)注。軟件缺陷預(yù)測模型是由歷史軟件數(shù)據(jù)的抽象[2-3]與機(jī)器學(xué)習(xí)算法相結(jié)合而成,有研究表明該方法高于人工檢測的預(yù)測率,可以有效應(yīng)用于軟件工程實(shí)踐。
在軟件缺陷預(yù)測中,軟件屬性度量方法和模型學(xué)習(xí)算法是決定模型預(yù)測性能的關(guān)鍵環(huán)節(jié),同時(shí)也是研究者關(guān)注的重點(diǎn)[4]。
1)軟件缺陷預(yù)測的屬性選擇方法。屬性選擇是除去冗余特征,避免維度災(zāi)難的有效方法,該方法可以有效地提高模型的預(yù)測效率,減少資源的浪費(fèi)[5]。Liu 等人提出了一種基于特征聚類和特征排名的特征選擇框架FECAR,將冗余特征進(jìn)行刪除[6]。Laradji 等人提出將集成算法與特征選擇方式結(jié)合起來[7]。實(shí)驗(yàn)結(jié)果證明以上兩種屬性選擇算法對預(yù)測準(zhǔn)確率有所提高。
2)基于機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測方法。在軟件缺陷預(yù)測領(lǐng)域常常被使用的機(jī)器學(xué)習(xí)模型有樸素貝葉斯[8]、決策樹[9]和邏輯回歸[10]。其中表現(xiàn)最好的為樸素貝葉斯模型,其準(zhǔn)確率[11]達(dá)到了71%。在此之后以集成學(xué)習(xí)[12]為基礎(chǔ),構(gòu)造多個(gè)互異基分類器共同決策,同樣獲得了良好的成果。也有研究者提出基于遷移學(xué)習(xí)的軟件缺陷預(yù)測方法,如李勇等人首先獲取與目標(biāo)項(xiàng)目特征相似的多源項(xiàng)目為候選[13];然后以候選項(xiàng)目的軟件模塊引導(dǎo)訓(xùn)練數(shù)據(jù)的選擇;最后基于樸素貝葉斯算法實(shí)現(xiàn)預(yù)測模型。實(shí)驗(yàn)結(jié)果表明該方法可以有效地解決數(shù)據(jù)不足的問題。
但上述研究中并沒有考慮到使用隨機(jī)屬性子集對于構(gòu)建軟件缺陷預(yù)測的影響。傳統(tǒng)預(yù)測算法中通常假設(shè)各個(gè)屬性之間相互獨(dú)立,但此假設(shè)在現(xiàn)實(shí)生活中并不成立。因此,本文結(jié)合以上研究工作提出一種結(jié)合隨機(jī)屬性子集與集成的軟件缺陷預(yù)測算法(Software Defect Prediction Algorithm Based on Random Attributes and Ensemble,SRAE),尋求不同屬性組合之間可能構(gòu)成的良好預(yù)測效果。
SRAE 算法構(gòu)建若干個(gè)樸素貝葉斯基分類器,以數(shù)據(jù)中不同屬性子集作為訓(xùn)練數(shù)據(jù),使用驗(yàn)證集篩選準(zhǔn)確率高于閾值的模型進(jìn)行集成。
構(gòu)建隨機(jī)屬性子集是一種對數(shù)據(jù)處理的方法,通過對源數(shù)據(jù)中所有屬性的隨機(jī)提取形成隨機(jī)屬性子集。在軟件缺陷預(yù)測中往往認(rèn)為屬性之間相互獨(dú)立,但是絕對獨(dú)立的事物并不存在。因此,構(gòu)建隨機(jī)屬性子集可發(fā)掘部分屬性之間存在的關(guān)聯(lián)對預(yù)測結(jié)果的影響。
SRAE 算法將機(jī)器學(xué)習(xí)中集成學(xué)習(xí)的思想與樸素貝葉斯算法進(jìn)行組合,利用隨機(jī)生成的多組隨機(jī)屬性進(jìn)行訓(xùn)練樸素貝葉斯基模型。集成學(xué)習(xí)是將若干互異弱分類器進(jìn)行組合,共同決策的過程,可有效提高算法泛化性以及防止算法過擬合。在集成學(xué)習(xí)中,為確保提升集成算法的準(zhǔn)確率,需保證基模型的正確率比隨機(jī)事件概率正確率[14-15]大于50%;為提高集成算法的泛化性,需保證集成的各個(gè)基模型互不相同。最后將各個(gè)互異基分類器進(jìn)行平均投票,確定預(yù)測結(jié)果。數(shù)據(jù)標(biāo)簽y(x)的取值范圍為:
基分類器的錯(cuò)分概率為:
將基分類器集成后的預(yù)測結(jié)果為:
集成基分類器后的集成分類器對目標(biāo)數(shù)據(jù)錯(cuò)分概率為:
隨著集成基分類器數(shù)目T的增加,預(yù)測的錯(cuò)誤率將呈指數(shù)級(jí)下降,最終趨向于0。樸素貝葉斯算法具有較強(qiáng)的穩(wěn)定性,即在受噪聲數(shù)據(jù)的干擾時(shí)仍能保持相對較好的預(yù)測效果,并且在軟件缺陷預(yù)測中的效果優(yōu)于決策樹、SVM 等算法。為保證基模型之間存在明顯差異,使用通過互不相同的隨機(jī)屬性子集篩選出的數(shù)據(jù)集對基模型進(jìn)行訓(xùn)練。每個(gè)基模型都是通過不同的屬性組合進(jìn)行訓(xùn)練的,這樣最大程度上保證了基模型之間的差異。使用隨機(jī)屬性子集訓(xùn)練的基模型可能存在兩種情況:其一,冗余屬性集中出現(xiàn),造成預(yù)測正確率嚴(yán)重低于理想水平;其二,數(shù)據(jù)中強(qiáng)關(guān)聯(lián)屬性集中出現(xiàn),造成預(yù)測正確率遠(yuǎn)高于平均預(yù)測正確率。當(dāng)然,本文更期待第二種情況出現(xiàn)。為保證每個(gè)基模型的預(yù)測正確率超過50%,必須將隨機(jī)屬性組合進(jìn)行篩選。使用驗(yàn)證集對基模型進(jìn)行驗(yàn)證,直接刪除正確率低于隨機(jī)事件概率的基模型,將保留下來的基模型進(jìn)行集成。因此,結(jié)合隨機(jī)屬性與集成軟件缺陷預(yù)測算法(SRAE)在理論上具有可行性。
1)實(shí)驗(yàn)數(shù)據(jù)分為訓(xùn)練集、驗(yàn)證集以及測試集,并且設(shè)置集成算法中基模型個(gè)數(shù)為M。
2)基于訓(xùn)練數(shù)據(jù)構(gòu)造隨機(jī)若干互異隨機(jī)屬性子集,使隨機(jī)屬性子集與樸素貝葉斯基模型一一對應(yīng)。
3)基于隨機(jī)屬性子集,在訓(xùn)練集中提取數(shù)據(jù)形成基模型訓(xùn)練集,并且訓(xùn)練該基模型。
4)使用驗(yàn)證集對基模型進(jìn)行驗(yàn)證,若準(zhǔn)確率大于50%,則保留該基模型;若準(zhǔn)確率小于50%,則刪除該基模型。
5)判斷符合條件的基模型個(gè)數(shù),若符合條件基模型個(gè)數(shù)小于M,則重復(fù)執(zhí)行步驟2);若符合條件基模型等于M,則輸出集成模型。
SRAE 算法流程如圖1 所示。
圖1 SRAE 算法流程圖
SRAE 算法偽代碼如下:
本節(jié)對實(shí)驗(yàn)參數(shù)設(shè)置(包括實(shí)驗(yàn)數(shù)據(jù)集、各項(xiàng)參數(shù)設(shè)置)、代價(jià)敏感分類處理以及軟件缺陷預(yù)測評價(jià)標(biāo)準(zhǔn)進(jìn)行描述。
2.1.1 實(shí)驗(yàn)數(shù)據(jù)集
為了使實(shí)驗(yàn)結(jié)果更具有參考性和可比較性,用于實(shí)驗(yàn)的數(shù)據(jù)采用NASA 公開數(shù)據(jù)集中選取的10 個(gè)數(shù)據(jù)集。NASA 數(shù)據(jù)集是軟件缺陷預(yù)測領(lǐng)域權(quán)威數(shù)據(jù)集,研究人員共同使用此數(shù)據(jù)集使實(shí)驗(yàn)結(jié)果具有參考價(jià)值與可比較性[16]。實(shí)驗(yàn)數(shù)據(jù)如表1 所示。
表1 實(shí)驗(yàn)數(shù)據(jù)
2.1.2 實(shí)驗(yàn)參數(shù)設(shè)置
SRAE 算法使用到的參數(shù)有:代價(jià)敏感技術(shù)中的代價(jià)因子、基模型的個(gè)數(shù)、隨機(jī)的屬性個(gè)數(shù)和K折交叉驗(yàn)證。參數(shù)設(shè)置如表2 所示。
表2 參數(shù)設(shè)置
文獻(xiàn)[17]通過實(shí)驗(yàn)驗(yàn)證了代價(jià)因子選擇50 時(shí),分類器分類效果最好,所以實(shí)驗(yàn)中代價(jià)因子設(shè)置為數(shù)值50?;P蛡€(gè)數(shù)為50 個(gè)。隨機(jī)的屬性子集中個(gè)數(shù)選定為數(shù)據(jù)集中總屬性的25%。SRAE 算法采用的是5 折交叉驗(yàn)證。K折交叉驗(yàn)證是將數(shù)據(jù)集分為K份,取其中1 份作為測試集,其余K-1 份作為訓(xùn)練集。需要注意的是每次選取的測試集都要與之前的不相同。最后將程序執(zhí)行K次的結(jié)果求平均作為最終結(jié)果。
軟件缺陷歷史數(shù)據(jù)包含少量缺陷數(shù)據(jù)和大量非缺陷數(shù)據(jù)。歷史軟件數(shù)據(jù)中兩類數(shù)據(jù)分布高度傾斜,此現(xiàn)象的數(shù)據(jù)被稱為類不平衡數(shù)據(jù)[18]。以此不平衡數(shù)據(jù)訓(xùn)練得到的模型預(yù)測結(jié)果將高度偏向多數(shù)類[19],造成預(yù)測結(jié)果不理想。在實(shí)際應(yīng)用中難以估量因分類錯(cuò)誤造成的后果,因此引入代價(jià)敏感技術(shù)來緩解類不平衡現(xiàn)象。代價(jià)敏感技術(shù)是由算法對目標(biāo)項(xiàng)目錯(cuò)誤分類的代價(jià)不同而產(chǎn)生[20]。由于算法偏向多數(shù)類,代價(jià)敏感技術(shù)綜合分類錯(cuò)誤代價(jià)通過調(diào)節(jié)兩個(gè)分類結(jié)果不同的權(quán)重,使少數(shù)類與多數(shù)類之間達(dá)到相對平衡[21]。代價(jià)矩陣如表3所示。
表3 代價(jià)矩陣
在代價(jià)矩陣中:1 表示有缺陷模塊;0 表示無缺陷模塊;C(x1,x2)為代價(jià)表達(dá)式。當(dāng)x1=x2時(shí)代價(jià)表達(dá)式值為0,即預(yù)測正確;當(dāng)x1≠x2時(shí),有代價(jià)表達(dá)式C(1,0)和C(0,1)。其中,C(1,0)表示將有缺陷模塊預(yù)測為無缺陷;C(0,1)表示將無缺陷模塊預(yù)測為有缺陷。根據(jù)錯(cuò)分代價(jià)不同得C(1,0)>C(0,1)。當(dāng)分類器錯(cuò)分時(shí),設(shè)代價(jià)函數(shù)F(x)=P{(x,1)}·C(0,1)+P{(x,0)}·C(1,0),P表示概率,C(0,1)=α。通過設(shè)置代價(jià)因子α使F(x)代價(jià)函數(shù)取得最小值,降低錯(cuò)分代價(jià)使類間相對平衡。
在軟件缺陷預(yù)測中對于模型的評價(jià)主要在3 個(gè)指標(biāo)上體現(xiàn),分別是預(yù)測率PD、誤報(bào)率PF 以及綜合評價(jià)指標(biāo)AUC[22-23]。在軟件缺陷預(yù)測的目標(biāo)是盡可能多地找到有缺陷的模塊并且將其成功判定為有缺陷;同樣的在預(yù)測過程中需要讓模型盡可能少地將無缺陷的模塊判定為有缺陷的模塊;AUC 綜合評價(jià)指標(biāo),模型的AUC值越高說明模型性能越出色。引入混淆矩陣幫助理解以上3 個(gè)指標(biāo)?;煜仃嚾绫? 所示。
表4 混淆矩陣
1)預(yù)測率(Probability of Detection,PD)
2)誤報(bào)率(Probability of Alarm,PF)
3)AUC(Area Under the Curve)
AUC 的值是ROC(Receive Operating Characteristic)曲線下的面積。ROC 是描述PD、PF 的一種曲線,ROC以PF 作為坐標(biāo)系橫軸、PD 作為坐標(biāo)軸縱軸。AUC 的取值范圍為0 <AUC ≤1,當(dāng)AUC=1 時(shí)模型為最佳模型;AUC=0.5 時(shí)表示模型預(yù)測結(jié)果等同于隨機(jī)事件概率;AUC <0.5 表示模型差。AUC 的值越接近于1 表示模型預(yù)測效果越好。
為方便實(shí)驗(yàn)結(jié)果的對比與分析,本文實(shí)驗(yàn)采用的數(shù)據(jù)集是NASA 公開數(shù)據(jù)集,以PD 值、PF 值以及AUC 值作為評價(jià)指標(biāo)。選擇以下兩類模型算法作為實(shí)驗(yàn)基準(zhǔn)比較方法。
1)通用機(jī)器學(xué)習(xí)算法。邏輯回歸算法(LR)和樸素貝葉斯算法(NB)。文獻(xiàn)[10]表明LR 算法具有較好的分類精度且常用于對比算法。文獻(xiàn)[11]表明NB 算法通??梢垣@得較好的預(yù)測性能且NB算法具有較好的穩(wěn)定性。
2)集成模型學(xué)習(xí)算法。隨機(jī)森林算法(RF)[12]、欠抽樣集成算法(RE)[24]、代價(jià)敏感的集成算法(CSCE)[17]。文獻(xiàn)[12]表明RF 算法可良好應(yīng)對噪聲數(shù)據(jù)且通常具有較好的分類準(zhǔn)確率。RE 算法[24]以及CSCE 算法[17]為軟件缺陷預(yù)測常用算法,可有效針對軟件數(shù)據(jù)中類不平衡問題進(jìn)行準(zhǔn)確分類。
3.1.1 預(yù)測率PD 實(shí)驗(yàn)結(jié)果比較分析
表5 所示為6 種方法構(gòu)建的軟件缺陷預(yù)測模型的PD 值實(shí)驗(yàn)結(jié)果。
表5 PD 實(shí)驗(yàn)結(jié)果
通過比較實(shí)驗(yàn)結(jié)果可以看出:
1)NB 算法在預(yù)測率PD 上表現(xiàn)最優(yōu)。NB 算法在5 個(gè)數(shù)據(jù)集中獲得最高的PD 值,平均PD 值明顯高于其他算法,且具有較好穩(wěn)定性。同時(shí)NB 算法高于SRAE算法3.8 個(gè)百分點(diǎn),并無顯著差異。
2)SRAE 算法平均PD 值僅低于NB 算法,分別高于集成學(xué)習(xí)模型算法中RF 算法24.3 個(gè)百分點(diǎn)、RE 算法18.7 個(gè)百分點(diǎn)、CECE 算法13.8 個(gè)百分點(diǎn)。
3.1.2 誤報(bào)率PF 實(shí)驗(yàn)結(jié)果比較分析
表6 所示為6 種方法構(gòu)建的軟件缺陷預(yù)測模型的誤報(bào)率PF 實(shí)驗(yàn)結(jié)果。
表6 PF 實(shí)驗(yàn)結(jié)果
通過比較實(shí)驗(yàn)結(jié)果可以看出:
1)LR 算法在誤報(bào)率PF 指標(biāo)上表現(xiàn)最優(yōu),但與RF算法SRAE 算法平均誤報(bào)率接近,并無明顯差距。
2)SRAE 算法平均誤報(bào)率略高于LR 算法與RF 算法,差距在4.4 個(gè)百分點(diǎn)之內(nèi),同時(shí)低于集成模型學(xué)習(xí)算法RE 與CSCE 8.1 個(gè)百分點(diǎn)。
3.1.3 綜合評價(jià)指標(biāo)AUC 實(shí)驗(yàn)結(jié)果比較分析
表7為6種方法構(gòu)建的軟件缺陷預(yù)測模型的綜合評價(jià)指標(biāo)AUC值實(shí)驗(yàn)結(jié)果。通過比較實(shí)驗(yàn)結(jié)果可以看出:
表7 AUC 實(shí)驗(yàn)結(jié)果
1)SRAE 算法在綜合評價(jià)指標(biāo)AUC 值上表現(xiàn)最優(yōu),并且9 個(gè)數(shù)據(jù)集上均獲得最優(yōu)AUC 值。SRAE 算法平均AUC 值明顯優(yōu)于其他對比算法。
2)SRAE 算法在平均AUC 值上分別高于通用機(jī)器學(xué)習(xí)算法中LR 算法20.1 個(gè)百分點(diǎn)、NB 算法19.2 個(gè)百分點(diǎn);分別高于集成模型學(xué)習(xí)算法中RF 算法19.5 個(gè)百分點(diǎn)、RE 算法38.7 個(gè)百分點(diǎn)、CSCE 算法12.6 個(gè)百分點(diǎn)。
根據(jù)以上6 個(gè)軟件缺陷預(yù)測算法在10 個(gè)數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果數(shù)據(jù)對比可以得出以下結(jié)論:
1)SRAE 算法在與常用機(jī)器學(xué)習(xí)算法、集成算法以及代價(jià)敏感的集成算法比較的過程中,其平均AUC 值具有顯著優(yōu)勢。SRAE 算法相比同類型算法CSCE 平均AUC 值提升0.126;相比集成算法RF 與RE 平均AUC 值提成超過0.195;相比常用機(jī)器學(xué)習(xí)算法LR 與NB 平均AUC 值提升超過0.192。
2)在PD 值與PF 值比較過程中分別獲得第2 名與第3 名的成績,且均優(yōu)于同類型算法。SRAE 算法在預(yù)測率PD 與誤報(bào)率PF 保持在平均水平的情況下獲得了AUC 值的大幅度提升。軟件缺陷預(yù)測的目標(biāo)是確定決策軟件中的模塊是否存在缺陷,因此在保證預(yù)測率與誤報(bào)率的條件下,更加準(zhǔn)確地對軟件模塊進(jìn)行決策更加符合當(dāng)前工業(yè)需求。根據(jù)“沒有免費(fèi)午餐定理”說明沒有絕對的雙贏,在保證預(yù)測率PD 與誤報(bào)率PF 的條件下大幅度提升AUC 值以及分類精度是有意義并且可行的。
軟件缺陷預(yù)測的目的是盡可能多地找到軟件中存在的有缺陷模塊。本文提出一種結(jié)合隨機(jī)屬性與集成的軟件缺陷預(yù)測方法,通過在NASA 數(shù)據(jù)集中選取10 個(gè)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),結(jié)果表明在保證預(yù)測率PD 與誤報(bào)率PF 的條件下大幅度提升AUC 值。此實(shí)驗(yàn)結(jié)論表明SRAE 算法可顯著提升分類精度,降低錯(cuò)分代價(jià),并且證明符合軟件工程中對軟件缺陷預(yù)測的要求。
基于該研究下一步的主要工作包括:
1)結(jié)合當(dāng)前熱點(diǎn)問題將SRAE 模型應(yīng)用于跨項(xiàng)目跨版本的軟件缺陷預(yù)測中;
2)通過隨機(jī)屬性的組合篩選出相互之間關(guān)聯(lián)性較高的若干種屬性作為軟件缺陷預(yù)測中屬性選擇的方式。