本發(fā)明涉及軟件預(yù)測,具體涉及基于代價敏感半監(jiān)督的軟件缺陷預(yù)測方法。
背景技術(shù):
:然而,隨著軟件規(guī)模的不斷增大,復(fù)雜程度的不斷提高、以及市場對軟件開發(fā)周期盡可能縮短的需求,對于軟件質(zhì)量進行預(yù)測和控制的難度逐漸提高,成本也不斷加大。而且,軟件技術(shù)發(fā)展至今,無論是小程序還是大型系統(tǒng),軟件中的缺陷軟件中的缺陷已經(jīng)成為軟件開發(fā)過程中必不可少的副產(chǎn)品,而且不存在一種檢驗或驗證的方法能夠發(fā)現(xiàn)并排除全部的缺陷。更糟糕的是,軟件缺陷發(fā)現(xiàn)得越晚,修復(fù)的成本越高。因此,如何在有限的人員、時間和成本條件下,有效地對軟件進行充分的測試并盡可能全面地發(fā)現(xiàn)軟件中存在的缺陷,始終是軟件質(zhì)量控制學(xué)科乃至整個軟件工程領(lǐng)域所面臨的難題。目前已經(jīng)研究出多種方式能夠有效提高軟件質(zhì)量,但是最好的方法是“預(yù)防缺陷”。軟件缺陷預(yù)測就是有效預(yù)防缺陷的一種方法。軟件缺陷檢測旨在軟件開發(fā)過程中自動檢測程序模塊中是否包含缺陷而不需要真正運行程序。通過預(yù)測軟件模塊是否包含缺陷可以有效合理地分配有限的測試資源,提高軟件開發(fā)質(zhì)量。從近年來國內(nèi)外缺陷預(yù)測領(lǐng)域的研究中容易發(fā)現(xiàn),無論是統(tǒng)計學(xué)習(xí)方法,還是機器學(xué)習(xí)方法都還存在著不足和挑戰(zhàn),主要總結(jié)為以下幾點:1)依賴大量歷史缺陷信息,而在實際應(yīng)用中難以獲取甚至不能獲取一定數(shù)量的標(biāo)簽數(shù)據(jù)進行學(xué)習(xí),在沒有足夠?qū)W習(xí)樣本的情況下預(yù)測精度不高。2)缺陷數(shù)據(jù)具有明顯的類不平衡特性,這使得傳統(tǒng)機器學(xué)習(xí)方法在缺陷預(yù)測問題上召回率不高。3)越來越多的軟件度量引入到缺陷預(yù)測領(lǐng)域,容易造成維度災(zāi)難。目前大部分預(yù)測方法旨在獲得高準(zhǔn)確率或者低錯誤率,而現(xiàn)實應(yīng)用中不同類型的錯誤分類往往會造成不同的代價,高準(zhǔn)確率并不代表預(yù)測結(jié)果的代價最小,而對真實項目而言整體代價最小化往往更具有實際意義。技術(shù)實現(xiàn)要素:針對現(xiàn)有技術(shù)存在的上述問題,本發(fā)明的目的是提供一種整體代價最小化的半監(jiān)督軟件缺陷預(yù)測方法。為實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:基于代價敏感半監(jiān)督的軟件缺陷預(yù)測方法,包括如下步驟:S1:通過版本控制工具收集待預(yù)測軟件的源代碼文件;S2:所述S1得到的源代碼文件由I個模塊組成,從所述源代碼文件中提取度量元值,所有度量元值構(gòu)成一個集合X,X={x1,1,x2,2,...xi,j,...xI,J}(1);xij表示第j個度量元在第i個模塊上的度量元值,I表示待預(yù)測軟件中源代碼文件的總數(shù),J表示提取的度量元的總數(shù);每個模塊對應(yīng)一個度量元向量,定義xi表示第i個模塊的度量元向量,xi={xij|j=1,2,3...J};S3:采樣;S3a:確定xij,i=1,2,...I,J=1,2,...J大于其在所有模塊上的度量元值的中位數(shù)Mj的數(shù)量;I)令i=1;II)令j=1;III)令Ki=0;IV)如果xij≥Mj,則Ki=Ki+1,并令j=j(luò)+1,執(zhí)行下一步;否則,令j=j(luò)+1,并執(zhí)行下一步;V)如果j≤J,則返回Ⅳ);否則令i=i+1,并執(zhí)行下一步;VI)如果i≤I,則返回Ⅱ);否則執(zhí)行下一步;VII)輸出Ki;S3b:Ki值對應(yīng)第i個模塊,i=1,2…I,根據(jù)Ki值從大到小的順序?qū)i值對應(yīng)的模塊進行排序;S3c:選取S3b排序后,處于前N位置的N個模塊構(gòu)成候選集,再從候選集中隨機選取n個模塊構(gòu)成采樣結(jié)果集,N>n;S4:構(gòu)建訓(xùn)練集;S4a:對S3c得到的采樣結(jié)果集中的n個模塊,根據(jù)其是否存在缺陷給其打上有缺陷模塊的分類標(biāo)簽或無缺陷模塊的分類標(biāo)簽,分類標(biāo)簽y∈{±1},打上分類標(biāo)簽y=1的模塊表示為有缺陷模塊,打上分類標(biāo)簽y=‐1的模塊表示為無缺陷模塊;標(biāo)記后的采樣結(jié)果集為有標(biāo)簽樣本集,記為τn={(x1,y1),…(xi,yi)…,(xn,yn)},其中,xi表示第i個模塊的度量元向量,yi表示第i個模塊的標(biāo)簽;S4b:從I個模塊中踢出采樣結(jié)果集中的n個模塊,然后再隨機選取u個模塊,所述u個模塊構(gòu)成無標(biāo)記樣本集,記為τu={(x1,y1),…(xi,yi)…,(xu,yu)},其中,yi=0,i=1,2,...u;S4c:S4a得到的有標(biāo)簽樣本集和S4b得到的無標(biāo)記樣本集構(gòu)成訓(xùn)練樣本集;S5:構(gòu)建預(yù)測模型;S5a:提出目標(biāo)函數(shù)如下:其中,H是由核函數(shù)k生成的再生核希爾伯特空間,l(yi,f(xi))和是加權(quán)損失函數(shù),分別見公式(3)和(4),C1和C2是正則化參數(shù),為經(jīng)驗值,表示訓(xùn)練過程中的預(yù)測標(biāo)簽;r是設(shè)定的參數(shù),為經(jīng)驗值,其中,,1是全1向量;其中,C(‐1)是錯分非缺陷模塊的代價,是經(jīng)驗值,C(+1)是錯分缺陷模塊的代價,為經(jīng)驗值;S5b:求解目標(biāo)函數(shù),得到使目標(biāo)函數(shù)值最小的分類函數(shù)f(xi);S6:從I個模塊中踢出訓(xùn)練樣本集中的模塊后剩余的模塊構(gòu)成待預(yù)測集,將待預(yù)測集中一個模塊的度量元向量輸入分類函數(shù)f(xi),如果得到值小于0,則該模塊被預(yù)測為無缺陷,如果得到的值大于0,則該模塊被預(yù)測為有缺陷;按照上述方式,將預(yù)測集中每個模塊對應(yīng)的度量元向量輸入所述分類函數(shù),對預(yù)測集中的每個模塊進行預(yù)測,并輸出預(yù)測結(jié)果。作為優(yōu)化,還包括對S2提取的集合X的預(yù)處理步驟,具體如下:S2a:遍歷集合X中的所有度量元值,查找度量元值為缺失狀態(tài)的進行填充,具體步驟如下:1)令i=1;2)令j=1;3)判斷xij是否有值,如沒有,則使用第j個度量元在所有模塊上的度量元值的中位數(shù)Mj進行填充;如有,則令j=j(luò)+1,并執(zhí)行下一步;4)如果j≤J,則返回3);否則令i=i+1,并執(zhí)行下一步;5)如果i≤I,則返回2);否則執(zhí)行下一步;6)輸出新集合X’;S2b:采用公式(5)對S2a輸出的新集合X’中的所有度量元值進行對數(shù)處理;相對于現(xiàn)有技術(shù),本發(fā)明具有如下優(yōu)點:本發(fā)明融合半監(jiān)督和代價敏感思想構(gòu)建軟件缺陷預(yù)測模型,同時解決了軟件缺陷預(yù)測中缺陷數(shù)據(jù)難以獲取和類不平衡兩個問題,極大提高了預(yù)測結(jié)果的準(zhǔn)確性。在模型訓(xùn)練過程中,首先采用無監(jiān)督采樣方法采樣少量樣本進行標(biāo)注,構(gòu)成有標(biāo)簽樣本集,然后隨機選擇部分無標(biāo)簽樣本,與有標(biāo)簽樣本集共同組成訓(xùn)練樣本集,這保證了訓(xùn)練數(shù)據(jù)集中缺陷數(shù)據(jù)不會太少,提高了預(yù)測的準(zhǔn)確性。最后應(yīng)用半監(jiān)督代價敏感支持向量機算法構(gòu)建預(yù)測模型,使用少量標(biāo)簽樣本取得與有監(jiān)督模型相當(dāng)?shù)念A(yù)測性能,減少了收集缺陷數(shù)據(jù)的成本,同時,代價敏感思想的融入,極大提高了缺陷預(yù)測召回率,并使得整體預(yù)測代價最小。附圖說明圖1為度量元值在缺陷數(shù)據(jù)和非缺陷數(shù)據(jù)中分布。圖2為采樣流程圖。圖3為現(xiàn)有方法與本發(fā)明采樣方法得到的訓(xùn)練集中的樣本的缺陷率對比圖。圖4為基于代價敏感半監(jiān)督的軟件缺陷預(yù)測方法流程圖。圖5為本發(fā)明方法(CS4VM+S)和三個代價敏感神經(jīng)網(wǎng)絡(luò)算法在cm1數(shù)據(jù)集上的性能對比,其中圖(a)、(b)、(c)和(d)分別表示在整體錯誤率(MR)、非缺陷模塊錯分率(FPR)、缺陷模塊錯分率(FNR)和規(guī)范化的誤分類代價期望(NECM)四個評價指標(biāo)上的性能表現(xiàn)。圖6為本發(fā)明方法(CS4VM+S)和三個代價敏感神經(jīng)網(wǎng)絡(luò)算法在pc1數(shù)據(jù)集上的性能對比,其中圖(a)、(b)、(c)和(d)分別表示在整體錯誤率(MR)、非缺陷模塊錯分率(FPR)、缺陷模塊錯分率(FNR)和規(guī)范化的誤分類代價期望(NECM)四個評價指標(biāo)上的性能表現(xiàn)。圖7為本發(fā)明方法(CS4VM+S)和三個代價敏感神經(jīng)網(wǎng)絡(luò)算法在kc1數(shù)據(jù)集上的性能對比,其中圖(a)、(b)、(c)和(d)分別表示在整體錯誤率(MR)、非缺陷模塊錯分率(FPR)、缺陷模塊錯分率(FNR)和規(guī)范化的誤分類代價期望(NECM)四個評價指標(biāo)上的性能表現(xiàn)。圖8為本發(fā)明方法(CS4VM+S)和三個代價敏感神經(jīng)網(wǎng)絡(luò)算法在kc2數(shù)據(jù)集上的性能對比,其中圖(a)、(b)、(c)和(d)分別表示在整體錯誤率(MR)、非缺陷模塊錯分率(FPR)、缺陷模塊錯分率(FNR)和規(guī)范化的誤分類代價期望(NECM)四個評價指標(biāo)上的性能表現(xiàn)。圖9為本發(fā)明方法在不同代價設(shè)置上的性能展示。圖10為本發(fā)明方法(CS4VM+S)在不同代價設(shè)置上的性能展示。圖11為使用本發(fā)明提出的采樣方法和隨機選擇樣本情況下本發(fā)明方法(CS4VM+S)的NECM指標(biāo)對比。圖12為使用本發(fā)明提出的采樣方法和隨機選擇樣本情況下本發(fā)明方法(CS4VM+S)的FNR指標(biāo)對比。具體實施方式下面對本發(fā)明作進一步詳細(xì)說明。軟件缺陷預(yù)測模型旨在通過分析靜態(tài)代碼將軟件模塊分成兩類:有缺陷和無缺陷。然而,遺憾的是至今不存在一個分類器能夠?qū)⑺械能浖K百分百地分類正確。那么,預(yù)測模型給軟件模塊錯誤分類勢必帶來一定的代價,如測試時間,人力成本,程序崩潰帶來的損失等,我們將這一類代價稱為錯分代價。將一個無缺陷模塊錯分成有缺陷浪費人力、財力和時間去詳細(xì)測試,而一個有缺陷模塊被錯分為無缺陷可能引發(fā)程序崩潰,帶來巨大的損失,如電商網(wǎng)站暫停交易,飛機控制系統(tǒng)失控等。因此,對于軟件缺陷預(yù)測這類二分類問題,主要有兩類誤分錯誤,一種是無缺陷模塊預(yù)測成有缺陷模塊,另一種是有缺陷模塊預(yù)測成無缺陷模塊。在實際項目中,兩種錯誤造成的代價是不同的,一般來說,第二種誤分錯誤造成的代價遠(yuǎn)遠(yuǎn)高于第一種。誤分代價的重要性大于被誤分模塊個數(shù)的重要性。然而,現(xiàn)有的大多數(shù)研究很少關(guān)注缺陷模型誤分帶來的整體錯誤代價,更多地是使模型誤分率最低。基于此,本發(fā)明結(jié)合半監(jiān)督SVM和代價敏感學(xué)習(xí)提出基于代價敏感半監(jiān)督SVM缺陷預(yù)測模型。該方法旨在使用少量的標(biāo)簽數(shù)據(jù)和部分無標(biāo)簽數(shù)據(jù)作為訓(xùn)練樣本,并同時考慮了兩種誤分錯誤帶來的不同代價使模型的整體誤分代價最小,這樣一來,該方法即解決了標(biāo)簽樣本難以獲取的問題,又使預(yù)測模型整體代價成本最小,這對軟件缺陷預(yù)測實際應(yīng)用與真實工程項目中更具有現(xiàn)實意義,更能滿足實踐需求?;诖鷥r敏感半監(jiān)督的軟件缺陷預(yù)測方法,包括如下步驟:S1:通過版本控制工具收集待預(yù)測軟件的源代碼文件;為了方便項目成員協(xié)作和代碼的管理,目前大多數(shù)項目源代碼都托管在代碼倉庫中,開發(fā)人員通過版本控制工具獲得各版本源代碼。當(dāng)需要預(yù)測這一類項目數(shù)據(jù)時,可以通過版本控制工具收集相關(guān)數(shù)據(jù),比如Ant項目使用GIT版本控制工具,Mylyn項目可以使用SVN和GIT。這需要根據(jù)項目數(shù)據(jù)托管平臺的類型來選擇相應(yīng)的工具。工具的使用方法如下:GIT工具:選擇一個文件目錄,在gitbrash窗口輸入gitclone“版本庫地址”,輸入用戶名密碼即可下載源代碼到本地磁盤;SVN工具:選擇一個文件目錄,使用svncheckout命令,輸入版本庫地址,用戶名和密碼,即可導(dǎo)出數(shù)據(jù)。S2:所述S1得到的源代碼文件由I個模塊組成,從所述源代碼文件中提取度量元值,所有度量元值構(gòu)成一個集合X,X={x1,1,x2,2,...xi,j,...xI,J}(1);xij表示第j個度量元在第i個模塊上的度量元值,I表示待預(yù)測軟件中源代碼文件的總數(shù),J表示提取的度量元的總數(shù);每個模塊對應(yīng)一個度量元向量,定義xi表示第i個模塊的度量元向量,xi={xij|j=1,2,3...J};度量元的提取是對源代碼進行靜態(tài)分析統(tǒng)計的過程,關(guān)于度量元的提取方法,現(xiàn)有技術(shù)提供了許多提取工具,主要有:Analyst4j,CCCC,Chidamber&KemererJavaMetrics,DependencyFinder,OOMeter,Semmle,EclipseMetricsPlug‐in3.4和UnderstandforJava等。使用這些靜態(tài)分析工具即可完成相應(yīng)度量元的提取。作為優(yōu)化,還包括對S2提取的集合X的預(yù)處理步驟,具體如下:S2a:遍歷集合X中的所有度量元值,查找度量元值為缺失狀態(tài)的進行填充,具體步驟如下:1)令i=1;2)令j=1;3)判斷xij是否有值,如沒有(則表示該在第i個模塊下該度量元的值為缺失狀態(tài)),則使用第j個度量元在所有模塊上的度量元值的中位數(shù)Mj進行填充;如有,則令j=j(luò)+1,并執(zhí)行下一步;4)如果j≤J,則返回3);否則令i=i+1,并執(zhí)行下一步;5)如果i≤I,則返回2);否則執(zhí)行下一步;6)輸出新集合X’;S2b:采用公式(5)對S2a輸出的新集合X’中的所有度量元值進行對數(shù)處理;為了獲得最佳預(yù)測性能,對屬性值進行對數(shù)化預(yù)處理,同時避免對屬性中的零值取對數(shù),采取加一個極小值的方法取對數(shù)。S3:采樣;S3a:確定xij,i=1,2,...I,J=1,2,...J大于其在所有模塊上的度量元值的中位數(shù)Mj的數(shù)量;I)令i=1;II)令j=1;III)令Ki=0;IV)如果xij≥Mj,則Ki=Ki+1,并令j=j(luò)+1,執(zhí)行下一步;否則,令j=j(luò)+1,并執(zhí)行下一步;V)如果j≤J,則返回Ⅳ);否則令i=i+1,并執(zhí)行下一步;VI)如果i≤I,則返回Ⅱ);否則執(zhí)行下一步;VII)輸出Ki;S3b:Ki值對應(yīng)第i個模塊,i=1,2…I,根據(jù)Ki值從大到小的順序?qū)i值對應(yīng)的模塊進行排序;S3c:選取S3b排序后,處于前N位置的N個模塊構(gòu)成候選集,再從候選集中隨機選取n個模塊構(gòu)成采樣結(jié)果集,N>n;缺陷預(yù)測數(shù)據(jù)分布極不平衡,只有很少一部分?jǐn)?shù)據(jù)存在缺陷。如果采用隨機劃分?jǐn)?shù)據(jù)集的方式,極有可能出現(xiàn)訓(xùn)練數(shù)據(jù)集中含有極少缺陷數(shù)據(jù)甚至沒有的情況。采用這樣的數(shù)據(jù)作為訓(xùn)練集很難訓(xùn)練出較好的預(yù)測模型,本發(fā)明基于源代碼度量元和缺陷潛在關(guān)聯(lián)提出無監(jiān)督的采樣方法。因為度量元復(fù)雜度越高,度量元的值越大,其存在缺陷的可能性越大。如圖1所示,本發(fā)明通過分析非缺陷數(shù)據(jù)和缺陷數(shù)據(jù)中度量元值得盒圖發(fā)現(xiàn),大多數(shù)情況下,存在缺陷的模塊的度量元值高于不含缺陷模塊的度量元值。通過采用步驟可以盡可能地避免訓(xùn)練集中缺陷數(shù)據(jù)太少,導(dǎo)致訓(xùn)練模型性能不佳的問題。屬性中位數(shù)可以作為閾值衡量屬性的復(fù)雜度。本發(fā)明提出一個無監(jiān)督樣本采樣方法,該方法確保選擇的樣本中缺陷率不會過低,從而提升模型的性能,圖2給出了一個具體的采用過程圖示。如圖2所示,X1‐X6表示軟件的模塊(樣本)的度量元值,I1‐I7表示軟件模塊(樣本集),假設(shè)需要采樣的帶標(biāo)簽樣本數(shù)量為N,該采樣方法主要分為以下五步:1)計算每個度量元值在所有模塊中值的中位數(shù),例如,對于屬性X1,在所有模塊中的值分別為2,3,0,1,2,1,3,這些數(shù)值的中位數(shù)為2。采用該方法依次為所有度量元值計算中位數(shù)。2)對于每個模塊(樣本),每個度量元值跟該度量元值的中位數(shù)進行比較,如果大,數(shù)量加1。例如,樣本I1,屬性X3和X5的值大于其中位數(shù),3大于2,6大于4,所以樣本I1的高屬性值數(shù)量為2。3)根據(jù)高屬性值數(shù)量對樣本進行排序。4)選擇排序結(jié)果前2*N個樣本作為候選集。5)從候選集中隨機選擇N個樣本作為最終的采樣結(jié)果。圖3展示了使用隨機選擇采樣標(biāo)簽數(shù)據(jù)和本發(fā)明提出的采樣方法采樣標(biāo)簽樣本時缺陷率的對比。其中,F(xiàn)olders是指把數(shù)據(jù)集分成Folders份,采樣其中一份大小的數(shù)據(jù)進行標(biāo)注。例如Folders為10時,我們從數(shù)據(jù)集中采樣1/10數(shù)據(jù)去標(biāo)注作為有標(biāo)簽數(shù)據(jù)。我們從圖中我們可以看出,采用本發(fā)明提出的采樣方法明顯提高了采樣樣本中缺陷樣本的比率,實驗對比結(jié)果表明采樣樣本中缺陷率的提高有助于提升模型的預(yù)測性能。S4:構(gòu)建訓(xùn)練集;S4a:對S3c得到的采樣結(jié)果集中的n個模塊,根據(jù)其是否存在缺陷給其打上有缺陷模塊的分類標(biāo)簽或無缺陷模塊的分類標(biāo)簽,分類標(biāo)簽y∈{±1},打上分類標(biāo)簽y=1的模塊表示為有缺陷模塊,打上分類標(biāo)簽y=‐1的模塊表示為無缺陷模塊;標(biāo)記后的采樣結(jié)果集為有標(biāo)簽樣本集,記為τn={(x1,y1),…(xi,yi)…,(xn,yn)},其中,xi表示第i個模塊的度量元向量,yi表示第i個模塊的標(biāo)簽;S4b:從I個模塊中踢出采樣結(jié)果集中的n個模塊,然后再隨機選取u個模塊,所述u個模塊構(gòu)成無標(biāo)記樣本集,記為τu={(x1,y1),…(xi,yi)…,(xu,yu)},其中,yi=0,i=1,2,...u;S4c:S4a得到的有標(biāo)簽樣本集和S4b得到的無標(biāo)記樣本集構(gòu)成訓(xùn)練樣本集;S5:構(gòu)建預(yù)測模型;S5a:提出目標(biāo)函數(shù)如下:其中,H是由核函數(shù)k生成的再生核希爾伯特空間(為現(xiàn)有技術(shù)),l(yi,f(xi))和是加權(quán)損失函數(shù),分別見公式(3)和(4),C1和C2是正則化參數(shù),為經(jīng)驗值,用于權(quán)衡在訓(xùn)練集中有標(biāo)簽的模塊和無標(biāo)簽的模塊的錯誤風(fēng)險以及算法復(fù)雜度,表示訓(xùn)練過程中的預(yù)測標(biāo)簽;r是設(shè)定的參數(shù),為經(jīng)驗值,用于避免極端情況下把訓(xùn)練集中所有的無標(biāo)簽的模塊都分到同一類別中,其中,,1是全1向量;其中,C(‐1)是錯分非缺陷模塊的代價,是經(jīng)驗值,C(+1)是錯分缺陷模塊的代價,為經(jīng)驗值;S5b:求解目標(biāo)函數(shù),得到使目標(biāo)函數(shù)值最小的分類函數(shù)f(xi);(該求解過程數(shù)學(xué)方法,為現(xiàn)有技術(shù));S6:從I個模塊中踢出訓(xùn)練樣本集中的模塊后剩余的模塊構(gòu)成待預(yù)測集,將待預(yù)測集中一個模塊的度量元向量輸入分類函數(shù)f(xi),如果得到值小于0,則該模塊被預(yù)測為無缺陷,如果得到的值大于0,則該模塊被預(yù)測為有缺陷;按照上述方式,將預(yù)測集中每個模塊對應(yīng)的度量元向量輸入所述分類函數(shù),對預(yù)測集中的每個模塊進行預(yù)測,并輸出預(yù)測結(jié)果。本發(fā)明的預(yù)測方法與現(xiàn)有預(yù)測方法的比對:實驗數(shù)據(jù)集本發(fā)明采用來自NASA項目的四個公開數(shù)據(jù)集CM1,KC1,KC2,PC1。各數(shù)據(jù)集的詳細(xì)如表1所示。表1中每個數(shù)據(jù)集均包含22個屬性,分別為21個軟件屬性和一個二值分類屬性,二值分類屬性用于表明軟件模塊是否有缺陷。缺陷率是指數(shù)據(jù)集中有缺陷的軟件模塊數(shù)量占所有模塊數(shù)量的比率,從表中可以看出,四個數(shù)據(jù)集的缺陷率在9.8%至20.5%之間,這也證實了軟件缺陷數(shù)據(jù)具有類不平衡特性,大部分?jǐn)?shù)據(jù)是不包含缺陷的。表1NASA缺陷預(yù)測數(shù)據(jù)集數(shù)據(jù)集編程語言系統(tǒng)模塊數(shù)缺陷數(shù)缺陷率%cm1CNASA航天器儀器系統(tǒng)498499.8kc1C++存儲管理系統(tǒng)210932615.5kc2C++科學(xué)數(shù)據(jù)處理系統(tǒng)52210720.5pc1C飛行軟件系統(tǒng)1109776.9為評估本發(fā)明方法的性能,在所選的4個NASA數(shù)據(jù)集上分別與3個基于代價敏感學(xué)習(xí)的缺陷預(yù)測模型和2個基于半監(jiān)督學(xué)習(xí)的缺陷預(yù)測模型進行對比。3個代價敏感方法分別是CSBNN‐WU1,CSBNN‐WU,CSBNN‐TM,兩個半監(jiān)督模型分別是ACoForest和S4VM。CSBNN‐WU1,CSBNN‐WU2和CSBNN‐TM是由Zheng等人提出的三個不同代價敏感神經(jīng)網(wǎng)絡(luò)算法。CSBNN‐TM算法是將非代價敏感神經(jīng)網(wǎng)絡(luò)的判決邊界向代價較低一類樣本的邊界偏移,從而降低代價較高一類樣本被分錯類的風(fēng)險。該算法在訓(xùn)練階段不做代價敏感處理,而是在預(yù)測階段引入代價敏感信息。CSBNN‐WU1和CSBNN‐WU2也是神經(jīng)網(wǎng)絡(luò)算法的變種,它們在訓(xùn)練過程中根據(jù)代價矩陣調(diào)整訓(xùn)練數(shù)據(jù)集中缺陷樣本的數(shù)量使得模型具有代價敏感性。ACoForest是一個基于主動學(xué)習(xí)的半監(jiān)督模型,該算法通過主動學(xué)習(xí)去采樣有助于提高模型性能的樣本加入到訓(xùn)練集中。而S4VM則是一個通過提高原始半監(jiān)督SVM算法安全性的半監(jiān)督SVM模型。為方便敘述,本發(fā)明方法記為CS4VM+S。實驗設(shè)置對于每個數(shù)據(jù)集,根據(jù)采樣率使用本發(fā)明提出的采樣方法采樣少量樣本進行標(biāo)注,然后隨機選擇部分無標(biāo)簽樣本組成訓(xùn)練樣本集,剩余樣本作為測試集。與有監(jiān)督代價敏感算法對比實驗時,本發(fā)明方法的采樣率設(shè)置為0.3,即從數(shù)據(jù)集中采樣30%的樣本進行標(biāo)注。有監(jiān)督代價敏感方法則是使用90%標(biāo)簽樣本作為訓(xùn)練集,10%作為測試集。與半監(jiān)督算法對比實驗時,分別在采樣率為0.1和0.2下對各項指標(biāo)進行比較。實驗結(jié)果的每個評估指標(biāo)值都是通過重復(fù)采樣、訓(xùn)練、預(yù)測等步驟20次,取20次實驗結(jié)果的平均值作為最終結(jié)果。評估指標(biāo)對于缺陷預(yù)測這類二分類問題,混淆矩陣(ConfusionMatrix)常被用于衡量模型性能,根據(jù)混淆矩陣可以計算出其他評價指標(biāo),如準(zhǔn)確率(Accuracy)、召回率(Recall)、查準(zhǔn)率(Precision),以及綜合評價指標(biāo)F值。表2混淆矩陣其中,準(zhǔn)確率是指模型預(yù)測正確的模塊占總模塊的比例,軟件缺陷預(yù)測的目的是盡可能多地預(yù)測對模塊是否具有潛在的缺陷。TP為有缺陷模塊的正確分類數(shù)目,F(xiàn)N為有缺陷模塊的誤分類數(shù)目,F(xiàn)P無缺陷模塊的誤分類數(shù)目,TN為無缺陷模塊的正確分類數(shù)目。準(zhǔn)確率計算公式如(a)所示。召回率表示正確預(yù)測的缺陷模塊占真實缺陷模塊總數(shù)的比例,一個好的預(yù)測模型應(yīng)該是具有較高的召回率,盡可能多地找到有缺陷的模塊。召回率計算公式如(b)所示。查準(zhǔn)率是查準(zhǔn)率表示正確預(yù)測的缺陷模塊占模型預(yù)測為缺陷的模塊總數(shù)比例,計算公式如式(c)所示:F值查準(zhǔn)率和召回率的加權(quán)調(diào)和平均,綜合了召回率和查準(zhǔn)率的結(jié)果,用于評價模型的綜合性能。具體計算公式如(d)所示。本發(fā)明采用上述四個評價指標(biāo)衡量本發(fā)明方法的預(yù)測性能,并與其他方法進行了實驗對比。為了更好地評估代價敏感算法的性能,本發(fā)明將采用四個被眾多代價敏感研究應(yīng)用的評估指標(biāo),它們分別是MR,F(xiàn)PR,F(xiàn)NR,NECM。MR是指錯誤率,是被誤分的軟件模塊總數(shù)占所有模塊總數(shù)的比率,MR的計算公式如(e)所示。FPR和FNR分別代表無缺陷模塊中被錯分模塊的比率和有缺陷模塊中被錯分為無缺陷模塊的占比。FNR體現(xiàn)了模型對軟件缺陷的敏感程度,而FPR體現(xiàn)了預(yù)測模型對不包含軟件缺陷的類別的敏感程度。FPR和FNR的具體計算公式如公式(f)、(g)所示。為了更好地評估代價敏感模型的整體代價,錯誤分類的預(yù)計成本(ECM)常被用作評估指標(biāo)。ECM的計算方法如公式(h)所示,其中Pndf和Pdp分別表示數(shù)據(jù)集中非缺陷樣本的比率和缺陷樣本的比率,C(‐1)和C(+1)分別表示非缺陷樣本被錯分的代價和缺陷樣本被錯分的代價。ECM=C(-1)×FPR×Pndp+C(+1)×FNR×Pdp(h);然而,在真實項目中C(‐1)和C(+1)的值不容易確定,因此一個新的評估指標(biāo)NECM(NormalizedExpectedCostofMisclassification)被提出,NECM通過ECM除以C(‐1)進行歸一化。在本發(fā)明實驗中,我們也采用NECM去評估模型的整體代價。具體計算如公式(i)所示。結(jié)果與分析本發(fā)明方法結(jié)合了代價敏感學(xué)習(xí)和半監(jiān)督學(xué)習(xí),在訓(xùn)練過程中使用少量的標(biāo)簽數(shù)據(jù)和部分無標(biāo)簽數(shù)據(jù),并在模型學(xué)習(xí)過程中綜合考慮了兩類誤分類帶來的不同代價,使得預(yù)測結(jié)果的整體代價最小,而且該模型能夠很好地解決類不平衡問題。為了對本發(fā)明方法的有效性進行驗證,本發(fā)明針對以下三方面對模型性能進行驗證:1)相對于單純的代價敏感算法或者半監(jiān)督算法,本發(fā)明方法是否能夠提高缺陷預(yù)測模型的預(yù)測效果?2)誤分類代價的設(shè)定對本發(fā)明方法有什么影響?3)本發(fā)明提出的采樣方法是否能夠提高本發(fā)明方法的預(yù)測性能?針對問題1),本發(fā)明方法與3個代價敏感算法的預(yù)測性能進行對比,還對本發(fā)明方法與兩個半監(jiān)督算法的預(yù)測性能進行了實驗對比。圖5-8展示了3個代價敏感神經(jīng)網(wǎng)絡(luò)Boosting算法和CS4VM+S在四個NASA公共數(shù)據(jù)集CM1,PC1,KC1和KC2上的各項指標(biāo)對比。為了更好評估模型對代價的敏感度,本發(fā)明采用不同的代價比率(從1到10)下評估模型的性能。實驗結(jié)果表明CS4VM+S能夠取得和三個全監(jiān)督代價敏感算法相當(dāng)?shù)念A(yù)測性能,甚至在一些情況下CS4VM+S優(yōu)于有監(jiān)督模型。例如,在CM1數(shù)據(jù)集上,CS4VM+S在NECM指標(biāo)上表現(xiàn)明顯優(yōu)于其他算法。而且NECM是能更好地評估代價敏感算法的整體性能的評價指標(biāo),在代價敏感學(xué)習(xí)中應(yīng)用廣泛。實驗結(jié)果還表明在大多數(shù)情況下CS4VM+S比CSBNN-WU1,CSBNN-WU2取得更小的NECM。CS4VM+S在CM1和PC1數(shù)據(jù)集上表現(xiàn)相對更好,而且數(shù)據(jù)集CM1和PC1都呈現(xiàn)類極不平衡性,CM1的缺陷率是9.8%,PC1的缺陷率更低,僅有6.9%。例如,當(dāng)代價比率為2,數(shù)據(jù)集為CM1時,CS4VM+S的NECM值最小,我們可以看出,在NECM指標(biāo)方面,CS4VM+S取得和CSBNN-TM幾乎相同的值,而明顯優(yōu)于CSBNN-WU1和CSBNN-WU2的結(jié)果值。在整體上,CS4VM+S和其他三個算法隨著代價比率的變化大體上呈現(xiàn)相同的變化趨勢,表明該方法對代價敏感。如圖6所示,當(dāng)代價比率大于5時,CS4VM+S在FNR指標(biāo)上表現(xiàn)與其他算法相當(dāng),甚至優(yōu)于CSBNN-WU2。在NECM指標(biāo)上,CS4VM+S算法表現(xiàn)與CSBNN-TM相近,但優(yōu)于CSBNN-WU2算法,大多數(shù)情況下優(yōu)于CSBNN-WU1算法。在MR和FPR兩個指標(biāo)上的表現(xiàn),三個算法的結(jié)果值相當(dāng)。如圖7所示,當(dāng)代價比率小于5時,當(dāng)代價比率大于5時,CS4VM+S在FNR指標(biāo)上表現(xiàn)明顯優(yōu)于其他算法。在NECM指標(biāo)上,CS4VM+S算法表現(xiàn)與CSBNN-TM相近,Costratio小于4時甚至優(yōu)于CSBNN-TM算法,而且大多數(shù)情況下優(yōu)于CSBNN-WU2算法和CSBNN-WU1算法。在MR和FPR兩個指標(biāo)上的表現(xiàn),三個算法的結(jié)果值相當(dāng)。如圖8所示,在大多數(shù)情況下,CS4VM+S在MR、FNR和NECM指標(biāo)上表現(xiàn)都優(yōu)于CSBNN-WU1和CSBNN-WU2,而與CSBNN-TM的結(jié)果值十分相近。在FPR指標(biāo)上,CS4VM+S表現(xiàn)優(yōu)于CSBNN-WU1,與CSBNN-TM的結(jié)果相近。表3‐6展示了CS4VM+S和半監(jiān)督算法ACoForest、半監(jiān)督SVM算法S4VM+S在不同采樣率上各項評價指標(biāo)的性能對比,每個結(jié)果值都是通過20次隨機實驗的平均值。由于CS4VM+S的Costratio是不可缺的一個參數(shù),本發(fā)明中當(dāng)與半監(jiān)督方法進行性能對比時Costratio設(shè)定為10。從實驗結(jié)果可以看出,CS4VM+S在四個NASA數(shù)據(jù)集上都取得更小的FNR值,更小的FNR值表示缺陷的召回率越高。高的召回率比高的精度在現(xiàn)實項目中更加有用??傮w來看,在數(shù)據(jù)集CM1和PC1上,CS4VM+S相比ACoForest算法和半監(jiān)督SVM算法獲得更高的F值和更低的FNR值。具體來看,CS4VM+S相比ACoForest方法在采樣率為0.1時FNR值降低了37.9%,采樣率為0.2時FNR值降低提升了58.2%,也就是說,在采樣率指標(biāo)方面CS4VM+S表現(xiàn)優(yōu)于ACoForest方法;與半監(jiān)督SVM方法相比,在采樣率為0.1時FNR值降低了35.8%,采樣率為0.2時FNR值降低了56.7%??偨Y(jié)來說,CS4VM+S由于代價敏感學(xué)習(xí)的融入使得FNR值降低,也就是說,在該模型上缺陷召回率得到了提高。在整體指標(biāo)F值方面,在CM1、PC1數(shù)據(jù)集上CS4VM+S表現(xiàn)優(yōu)于其他兩個半監(jiān)督模型,而CM1、PC1數(shù)據(jù)集的缺陷率都比較低,分別只有9.8%和6.9%,實驗結(jié)果表明CS4VM+S在類極不平衡數(shù)據(jù)集上整體效果更優(yōu)。表3采樣率為0.1時,與半監(jiān)督模型ACoForest的性能對比。下劃線標(biāo)注的是更好的結(jié)果。表4采樣率為0.1時,與半監(jiān)督模型S4VM+的性能對比。下劃線標(biāo)注的是更好的結(jié)果。柱狀圖9展示了CS4VM+S與兩個半監(jiān)督模型(ACoForest和S4VM+S)在采樣率分別為0.1和0.2時FNR值的對比。從柱狀圖可以更直觀的看出CS4VM+S在FNR指標(biāo)上表現(xiàn)更優(yōu),表明CS4VM+S對缺陷代價更加敏感,提高了預(yù)測模型的缺陷召回率。表5采樣率為0.2時,與半監(jiān)督模型ACoForest的性能對比。下劃線標(biāo)注的是更好的結(jié)果。表6采樣率為0.2時,與半監(jiān)督模型S4VM+的性能對比。下劃線標(biāo)注的是更好的結(jié)果。綜上所述,CS4VM+S能夠取得與有監(jiān)督代價敏感模型(CSBNN-WU1,CSBNN-WU2和CSBNN-TM)相當(dāng)?shù)念A(yù)測效果,在MR、FPR、FNR、NECM各項指標(biāo)各有優(yōu)劣,CS4VM+S在一些情況下甚至優(yōu)于有監(jiān)督代價敏感模型,而該模型只需要少量的標(biāo)簽數(shù)據(jù)作為訓(xùn)練集。與半監(jiān)督模型相比,誤分缺陷類的代價大于誤分非缺陷類帶來的代價,CS4VM+S的分類平面向缺陷類傾斜,使得CS4VM+S對缺陷代價敏感性更強,而且結(jié)果表明該模型能夠獲得更高的召回率,這對真實項目更具實際意義。這也表明CS4VM+S能夠解決類不平衡問題。針對問題2),本發(fā)明設(shè)計實驗在不同的代價設(shè)定情況下評估本發(fā)明方法的性能。圖10展示了不同的代價設(shè)定下,即C(+1)和C(-1)取不同值得情況下,CS4VM+S各項指標(biāo)變化。同樣,C(+1)和C(-1)的不同取值也是根據(jù)不同的代價比率來設(shè)定的。如圖所示,當(dāng)錯分缺陷類的代價值(C(+1))增大時,指標(biāo)FNR值隨之減小,而越小的FNR值表示召回率越大,從原理上我們也不難分析,當(dāng)缺陷類誤分代價在增大時,CS4VM+S的目標(biāo)是使得整體誤分類代價最小,從而CS4VM+S在訓(xùn)練過程中更加關(guān)注缺陷類數(shù)據(jù),使得CS4VM+S分類平面向缺陷類傾斜,缺陷類的數(shù)據(jù)分類更加準(zhǔn)確。然而,當(dāng)錯分非缺陷類的代價值(C(-1))增大時,指標(biāo)FPR值隨之減小。由于模塊中大部分模塊式?jīng)]有缺陷的,隨著FPR值增大,也就是非缺陷樣本的錯誤率增大,MR值也隨之增大。實驗結(jié)果表明CS4VM+S對缺陷代價敏感。針對問題3),本發(fā)明設(shè)計實驗在分別使用本發(fā)明提出采樣方法和隨機選擇標(biāo)簽樣本情況下評估本發(fā)明方法的性能。圖11展示了在采用本發(fā)明提出的采樣方法和隨機選擇樣本時CS4VM+S的NECM指標(biāo)對比。從圖中可以看出,在使用本發(fā)明提出的采樣方法后,在不同的代價率下,CS4VM+S獲得更小的NECM值,即獲得更小的整體代價。在cm1數(shù)據(jù)集上表現(xiàn)更為明顯,NECM值在使用采樣方法后明顯減小,降低了近1/3。圖12展示了在采用本發(fā)明提出的采樣方法和隨機選擇樣本時CS4VM+S的FNR指標(biāo)對比,F(xiàn)NR主要表現(xiàn)了體現(xiàn)了模型對軟件缺陷的敏感程度。從圖中可以看出,在使用本發(fā)明提出的采樣方法后,在不同的代價率下,CS4VM+S獲得更小的FNR值,即獲得更高的召回率,這對缺陷預(yù)測模型來說更具有實際意義。如圖所示,在CM1和PC1數(shù)據(jù)集上,F(xiàn)NR值在使用采樣方法后有了明顯降低,而在KC1和KC2數(shù)據(jù)集上有所減小但幅度不大。分析可以看出,CM1和PC1數(shù)據(jù)集中的缺陷率遠(yuǎn)遠(yuǎn)低于KC1,KC2數(shù)據(jù)集中的缺陷率,在缺陷率較低的數(shù)據(jù)集中,使用隨機選擇樣本的方法使得訓(xùn)練樣本中缺陷數(shù)據(jù)太少以至于模型訓(xùn)練效果不佳,而使用本發(fā)明提出的采樣方法能夠提高訓(xùn)練樣本訓(xùn)練集中缺陷數(shù)據(jù)的比率,從而提高了模型的預(yù)測性能,而對于KC1和KC2數(shù)據(jù)集,缺陷率相對而言不是特別地低,隨機選擇和使用采樣方法時訓(xùn)練集中的缺陷數(shù)據(jù)相差不是很大,所以預(yù)測性能提高幅度不是很大。最后說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實施例對本發(fā)明進行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的宗旨和范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。當(dāng)前第1頁1 2 3