亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于數(shù)據(jù)過采樣和集成學習的軟件缺陷數(shù)目預測方法

        2018-10-16 08:23:50簡藝恒
        計算機應用 2018年9期
        關鍵詞:軟件缺陷數(shù)目軟件

        簡藝恒,余 嘯

        (1.北京理工大學 信息與電子學院,北京 102488; 2.武漢大學 計算機學院,武漢 430072)

        0 引言

        軟件在如今社會發(fā)揮著舉足輕重的作用,復雜系統(tǒng)的可靠性高度依賴于軟件的可靠性。軟件缺陷是導致系統(tǒng)失效和崩潰的潛在根源[1],如果能對軟件缺陷進行預測,就能在造成危害前對軟件缺陷進行排查和修復,從而減少軟件崩潰所帶來的經(jīng)濟損失。

        伴隨著第一個軟件的誕生并延續(xù)至今,軟件缺陷預測技術已得到了長足的發(fā)展[2]。已有很多研究提出了很多軟件缺陷預測方法。如文獻[3]探索了傳統(tǒng)的機器學習模型和半監(jiān)督學習在軟件缺陷預測中的應用,并在PROMISE數(shù)據(jù)集上進行測試,達到了工程的需求。文獻[4]比較了包括決策樹、貝葉斯、向量機、人工神經(jīng)網(wǎng)絡等傳統(tǒng)機器學習模型在多機構數(shù)據(jù)集上的預測表現(xiàn)。

        但是這些模型僅僅是基于分類問題,將軟件模塊分為由缺陷和無缺陷兩類,不能預測出軟件缺陷數(shù)目。如果能夠預測軟件缺陷數(shù)目,就能將有限的軟件資源優(yōu)先分配給軟件缺陷數(shù)目多的模塊,從而提升測試的效率。舉例而言,假如預測出一個軟件中有40個模塊具有缺陷,而測試人員因測試資源有限,只能對其中10個軟件模塊進行測試。如果使用基于分類的預測方法預測出有15個軟件模塊有缺陷,測試人員只能隨機抽取其中的10個模塊進行測試,但如果能夠預測出軟件缺陷模塊的具體數(shù)目,那么測試人員可以優(yōu)先測試缺陷數(shù)目多的10個模塊,大大提升了測試效率。

        目前針對軟件缺陷數(shù)目的預測亦有一些研究。如文獻[5]構建了一個靈活的貝葉斯網(wǎng)絡,利用貝葉斯網(wǎng)絡進行軟件缺陷數(shù)目的預測,取得了穩(wěn)定的輸出效果;文獻[6]提出了一個基于缺陷狀態(tài)轉移模型的軟件缺陷數(shù)目預測方法,并且在軟件開發(fā)實踐中得到了驗證,但是這些研究卻忽略了軟件缺陷數(shù)目分布不平衡的問題,即軟件中缺陷數(shù)目為0的軟件模塊的數(shù)量一般遠多于缺陷數(shù)目大于0的軟件模塊數(shù)量。如果對軟件模塊訓練數(shù)據(jù)不作任何處理,會導致訓練出的軟件缺陷數(shù)目預測模型對多數(shù)類樣本(缺陷數(shù)目為0的軟件模塊)具有偏向性,從而對少數(shù)類樣本(缺陷數(shù)目大于0的軟件模塊)的預測方面存在失真。而對缺陷模塊具有的缺陷數(shù)目的準確預測正是軟件缺陷預測技術的重點。故在進行軟件缺陷數(shù)目預測的時候,有必要解決軟件缺陷數(shù)據(jù)集的不平衡性問題。

        圖1 軟件缺陷分類預測與數(shù)目預測區(qū)別

        針對不平衡數(shù)據(jù)集的處理通常包含代價敏感方法和采樣方法。文獻[5]指出雖然代價敏感方法能夠有效地提高稀有類的識別率,但是仍存在若干局限,例如錯誤代價難以被精確估計,從而影響代價敏感的效果。采樣方法分為欠采樣方法和過采樣方法,其中文獻[6]表明欠采樣通過刪除部分多數(shù)類樣本使數(shù)據(jù)分布重新平衡,但會造成信息的丟失。過采樣方法通過增加少數(shù)類樣本的數(shù)量使數(shù)據(jù)分布重新平衡,保留了所有的信息,相比欠采樣方法有更好的效果。文獻[7] 提出了一種基于SMOTE(Synthetic Minority Over-sampling TEchnique)過采樣的SMOTER(SMOTE for Regression)方法用于軟件缺陷數(shù)目預測,具有普適性強和易于其他模型組合的優(yōu)點,實驗結果表明該方法具有良好的性能表現(xiàn)。

        但是不平衡數(shù)據(jù)再平衡后,使用單一的回歸模型,容易出現(xiàn)過擬合降低了模型的穩(wěn)定性。集成學習通過構建并合并多個個體學習器來完成學習任務,??色@得比單一學習器更顯著優(yōu)越的泛化性能。目前已有的研究普遍采用了集成學習的方法,在實驗中取得了較高的準確性和穩(wěn)定性[8-10]。

        目前的研究針對軟件缺陷數(shù)目預測模型的評價指標一般為預測缺陷數(shù)量與實際缺陷數(shù)量的絕對誤差和相對誤差,如文獻[11-12],但是這些評價指標同樣沒有考慮到軟件缺陷不平衡的問題,由于軟件缺陷數(shù)目分布不平衡問題,這類評價指標容易導致評價過于樂觀。本文采用專門用于軟件缺陷數(shù)目預測領域的FPA(Fault-Percentile-Average)指標[13],能夠有效地表現(xiàn)出預測模型的準確性。

        本文在現(xiàn)有研究的基礎上,結合過采樣方法和集成學習的方法,提出了一種基于數(shù)據(jù)過采樣和集成學習的軟件缺陷數(shù)目預測方法——SMOTENDEL(SMOTE for predicting the Number of Defect using Ensemble Learning)。該方法首先通過數(shù)據(jù)不平衡率確定過采樣比例,執(zhí)行n次過采樣方法,得到n個不同的平衡的軟件缺陷數(shù)據(jù)集;然后基于這n個平衡的軟件缺陷數(shù)據(jù)集訓練出n個個體學習器;最后,對這n個個體學習器通過集成得到一個組合學習器,并利用這個組合學習器來預測待預測的軟件模塊的缺陷數(shù)目。

        1 相關工作

        目前對軟件缺陷的預測已有不少研究,其中可分為兩大類:一種是預測軟件模塊是否有缺陷,一種是預測軟件模塊具體的缺陷數(shù)目。

        1.1 預測軟件模塊是否有缺陷

        文獻[14]針對目前軟件缺陷預測方法大多是針對特定的數(shù)據(jù)集建立的模型的現(xiàn)狀,研究了跨項目軟件缺陷預測的方法,發(fā)現(xiàn)將針對特定數(shù)據(jù)集的模型與跨項目模型的預測結果相比,只存在微小差異,在此基礎上建立了一種跨項目軟件缺陷預測模型,取得了更高的性能表現(xiàn)。文獻[15]提出了一種跨項目軟件模塊缺陷預測方法,建立了基于元分類邏輯回歸預測模型,使用成本效益和F-measure作為評價標準,實驗結果表明該模型相較于常規(guī)的邏輯回歸預測模型在F-measure上和平均F-measure上提升了36.88%;文獻[16]比較了基于信息增益特征選擇算法(GIS)和基于近鄰的遺傳算法(NN-filter)的預測性能,實驗結果表明GIS方法在多個指標上取得了最優(yōu)的表現(xiàn);文獻[17]提出了一種多目標優(yōu)化的JIT-SDP(Just-In-Time Software Defect Prediction)方法,使用邏輯回歸方法建立模型,實驗結果表明該模型的預測能力強于目前最先進的監(jiān)督學習和非監(jiān)督學習模型,且在跨項目、跨時間預測上同樣有良好的表現(xiàn)。上述方法沒有進行軟件缺陷數(shù)目的預測,雖然可以預測出軟件缺陷模塊,但是在測試資源有限的情況下無法合理分配資源,優(yōu)先測試具有更多缺陷的軟件模塊,會造成測試資源的浪費。

        軟件缺陷數(shù)據(jù)集一般存在數(shù)據(jù)不平衡問題,即在數(shù)據(jù)集中有缺陷的模塊數(shù)量很少,無缺陷模塊數(shù)量很多。針對數(shù)據(jù)不平衡的問題,目前已有不少研究,主要包含代價敏感和采樣方法。其中代價敏感方法[18]指的是將軟件缺陷分為兩種類型,兩種類型的錯誤分類成本不同,其中代價敏感方法將軟件缺陷分為兩種錯誤分類代價不同的類型,從而使錯誤分類代價最小。文獻[19-20]探索了基于代價敏感的不平衡數(shù)據(jù)再平衡方法,取得了良好的表現(xiàn)效果,但是存在錯誤分類成本難以準確制定的不足,對預測精度有較大的影響。采樣方法分為欠采樣和過采樣方法,欠采樣方法通過刪除多數(shù)類樣本使得不同類型樣本數(shù)量基本保持一致。文獻[21]首先使用清除正常模塊中特征相重疊的模型,對整個數(shù)據(jù)集進行多次欠采樣使數(shù)據(jù)集再平衡,再使用AdaBoost方法建立預測模型,實驗結果表明該方法在AUC(Area Under Curve)和G-mean的評價指標上取得了良好的結果。文獻[22]提出了一種基于RUS(Random Under-Sampling)欠采樣方法的數(shù)據(jù)再平衡方法,該模型具有建立簡單和高效的優(yōu)點,但是它的預測效果很大程度上取決于數(shù)據(jù)集自身的特性和后續(xù)數(shù)據(jù)處理時訓練算法的選擇。文獻[23]提出了一種在軟件缺陷數(shù)目預測中的針對不平衡現(xiàn)象的方法。文獻[7]在SMOTE過采樣的基礎上對其進行改進提出了SMOTER方法,用于預測目標變量的極值點;該方法普適性強,可與多種的回歸模型結合,是一種高效通用的數(shù)據(jù)平衡化方法。文獻[24]考慮了缺陷的軟件模塊分布不平衡問題,提出了基于SDAEs(Stacked Denoising AutoEncoders)深度學習和集成學習的軟件缺陷預測模型,先對軟件模塊數(shù)據(jù)集進行深度學習,然后使用集成學習的方法處理軟件的不平衡問題,該模型在NASA的軟件模塊數(shù)據(jù)集上取得了良好的表現(xiàn)。

        1.2 預測軟件模塊的缺陷數(shù)目

        文獻[25]構建了一個靈活的貝葉斯網(wǎng)絡,利用貝葉斯網(wǎng)絡進行軟件缺陷數(shù)目的預測,取得了穩(wěn)定的輸出效果;文獻[26]提出了一個基于缺陷狀態(tài)轉移模型的軟件缺陷數(shù)目預測方法,并且在軟件開發(fā)實踐中得到了驗證;文獻[27]探索了決策樹回歸(Decision Tree Regression, DTR)算法在版本內(nèi)缺陷數(shù)目預測和跨版本缺陷數(shù)目預測能力,在PROMISE的5個數(shù)據(jù)集上的實驗表明決策樹回歸算法在平均絕對誤差和平均相對誤差的評價指標上取得了良好的效果。文獻[28]在探索了遺傳算法、多層感知器算法、線性回歸(Linear Regression, LR)、決策樹回歸、泊松回歸和負二項回歸在軟件缺陷數(shù)目預測上的應用,實驗結果表明決策樹回歸、遺傳算法、多層感知器算法和線性回歸在平均絕對誤差和平均相對誤差上取得了更良好的表現(xiàn),而負二項回歸和泊松回歸的表現(xiàn)最差。文獻[12]探究了在項目內(nèi)和跨項目的軟件缺陷數(shù)據(jù)集上使用決策樹回歸、貝葉斯嶺回歸(Bayes Ridge Regression, BRR)、支持向量回歸、線性回歸、近鄰回歸、梯度下降算法對軟件缺陷數(shù)目進行預測,并使用精確率和均方根誤差作為評價指標,結果表明決策樹算法在以上的6個算法中的表現(xiàn)最為良好,同時6種回歸方法在項目內(nèi)和跨項目中取得了相似且良好的結果。文獻[11,29]提出了一種基于線性、非線性的軟件模塊缺陷數(shù)目預測方法,采用集成學習的方法,將線性方法(線性回歸)和非線性方法(決策樹回歸、支持向量機等方法)的結果進行集成,實驗結果表明該方法在軟件模塊缺陷數(shù)目預測的絕對誤差和相對誤差上取得了稱為level I 的良好表現(xiàn)。相比而言,本文首先將不平衡的訓練集利用過采樣方法進行平衡,然后再利用集成學習方法構建組合預測模型。文獻[30]建立了基于負二項式回歸的軟件模塊缺陷數(shù)目預測模型,并將其應用到兩個大型工業(yè)系統(tǒng)中,實驗結果表明,該模型預測出了兩個工業(yè)系統(tǒng)軟件模塊中,分別包含總缺陷數(shù)目71%和92%的20%軟件模塊,即成功預測出了具有最多軟件缺陷數(shù)目、最應該被測試的軟件模塊,但是上述研究沒有考慮到軟件缺陷預測中,軟件缺陷模塊分布不平衡問題,預測結果存在偏向性從而不準確。文獻[31]提出了一個結合數(shù)據(jù)過采樣、欠采樣與AdaBoost.R2算法的軟件缺陷數(shù)目預測方法。相比文獻[31]的方法,本文方法利用平均法的組合策略對個體回歸模型進行組合。

        2 SMOTENDEL方法

        本文針對軟件缺陷預測中存在的數(shù)據(jù)不平衡現(xiàn)象以及單一學習模型導致的過擬合問題,結合過采樣和集成學習提出一種軟件缺陷數(shù)目預測方法——SMOTENDEL。該方法包含過采樣、回歸和集成3個階段。首先通過對原始缺陷數(shù)據(jù)集進行多次過采樣形成多個平衡的缺陷數(shù)據(jù)集,然后利用當前經(jīng)典的回歸算法在各平衡數(shù)據(jù)集上進行訓練,得到若干個個體軟件缺陷數(shù)目預測模型,將多個個體預測模型進行集成得到一個組合軟件缺陷數(shù)目預測模型,最后利用該組合預測模型對新的軟件模塊進行預測。SMOTENDEL方法的基本框架如圖2所示。

        圖2 SMOTENDEL方法過程示意圖

        其中,Si表示第i次過采樣之后的平衡數(shù)據(jù)集,D代表一種回歸算法,F(xiàn)i表示基于平衡數(shù)據(jù)集Si訓練出的個體軟件缺陷數(shù)目預測模型,F(xiàn)*表示組合預測模型。

        2.1 SMOTEND采樣

        SMOTE是一種經(jīng)典的過采樣方法,由Chawla等[32]在2002年提出,在不平衡數(shù)據(jù)的平衡化方面有著不俗的表現(xiàn),但SMOTE算法只能處理分類領域的數(shù)據(jù)不平衡問題。文獻[7]提出了一種SMOTE的改進算法——SMOTER,用于預測目標變量的極值點??紤]到本文是數(shù)值預測問題以及軟件缺陷模塊在整體軟件模塊中占比較小的事實,本文改進SMOTER方法,用以解決軟件缺陷數(shù)據(jù)集數(shù)據(jù)不平衡的問題,稱改進的SMOTER方法為SMOTEND(SMOTE for predicting the Number of Defects)。為便于后面的描述,本文給出下列定義:

        定義1 正常模塊。缺陷數(shù)目為零的軟件模塊。

        定義2 缺陷模塊。缺陷數(shù)目大于零的軟件模塊。

        SMOTEND方法包含兩個關鍵步驟:

        步驟1 確定原始數(shù)據(jù)集中哪些缺陷模塊被用于合成新的缺陷模塊;

        步驟2 計算新的缺陷模塊的特征向量和缺陷個數(shù)。

        SMOTEND首先依據(jù)正常模塊和缺陷模塊的期望比例,確定需要合成的新的缺陷模塊的個數(shù)。然后,根據(jù)需要合成的新的缺陷模塊的個數(shù)和原始缺陷模塊個數(shù)確定每個原始缺陷模塊需要選擇的近鄰個數(shù),隨后根據(jù)軟件缺陷模塊和近鄰的軟件缺陷模塊構造新的軟件缺陷模塊。具體步驟如下:

        針對步驟1,設正常模塊的數(shù)量為n,缺陷模塊的數(shù)量為m,期望得到的缺陷模塊與正常模塊的比例為ratio。當ratio≤[2×m/n],即需要合成的缺陷模塊個數(shù)小于原始數(shù)據(jù)集中缺陷模塊個數(shù)時,參與合成的原始缺陷模塊數(shù)目p=ratio×n-m,每個參與合成的原始缺陷模塊的選取的近鄰個數(shù)t= 1;當ratio> [2×m/n]時,即需要合成的缺陷模塊個數(shù)大于原始數(shù)據(jù)集中缺陷模塊個數(shù)時,參與合成的原始缺陷模塊數(shù)目p=m,每個參與合成的原始缺陷模塊的選取的近鄰個數(shù)t= [ (ratio×n/m) ]。

        針對步驟2,用X=(x,y)表示一個軟件缺陷模塊,其中x是缺陷模塊X的特征向量,y是缺陷模塊X的軟件缺陷數(shù)目。對每個參與合成新模塊的原始缺陷模塊Xi,在其最近鄰的k個缺陷模塊中(根據(jù)文獻[7],本文實驗中k取5),有放回抽樣出t個最近鄰模塊{Xij|j∈(0,t]},根據(jù)模塊Xi與抽出模塊Xij構造新的軟件缺陷模塊Xnew,Xnew的特征向量xnew為:

        xnew=xi+ rand(0,1) ×(xij-xi)

        (1)

        記新合成的缺陷模塊特征向量xnew與合成新缺陷模塊的兩個母體模塊特征向量(xi,xij)之間的距離分別為d1和d2,則新合成的缺陷模塊Xnew的缺陷數(shù)目為:

        (2)

        其中yi和yij分別是缺陷模塊Xi和Xi的近鄰模塊Xij的缺陷數(shù)目。

        舉例說明:如圖3所示,根據(jù)點(23, 9)和(5, 14)代表的這兩個缺陷模塊構造新的軟件缺陷模塊,假設rand(0, 1)取0.2,則新合成的缺陷模塊為:(5, 14) + [(23, 9) - (5, 14)]×0.2 = (8.6, 13)

        設(5, 14)點的缺陷數(shù)目為4,(23, 9)點的缺陷數(shù)目為1,求得新合成的點和合成該點的兩個母體點之間的歐氏距離分別為d1=3.73和d2=14.94,則新合成的點的缺陷數(shù)目為

        (3)

        四舍五入得點(8.6,13)代表的模塊的缺陷數(shù)目為2。

        SMOTEND偽代碼如算法1所示。

        算法1 SMOTEND。

        輸入:軟件模塊數(shù)據(jù)集S=[(x1,y1),(x2,y2),…,(xK,yK)];采樣后缺陷模塊和正常模塊數(shù)量的期望比例ratio。

        1)

        fori=1 topdo:

        2)

        對第i個缺陷模塊選擇k個最近鄰缺陷模塊;

        3)

        forj= 1 totdo:

        4)

        從k個最近鄰中隨機抽取第j個最近鄰缺陷模塊,記作Xij;

        5)

        根據(jù)軟件模塊Xi,Xij和式(1)構造新的模塊的特征向量xij;

        6)

        根據(jù)式(2)得到新的模塊的缺陷數(shù)目yij;

        7)

        end for

        8)

        end for

        9)

        把上述新生成的缺陷模塊集與原缺陷模塊集合并,得到一個平衡的數(shù)據(jù)集S′;

        原始不平衡數(shù)據(jù)通過上述過采樣,即根據(jù)缺陷模塊和最近鄰的幾個缺陷模塊構造新的軟件缺陷模塊,得到p×t個新的缺陷模塊。這種方式能夠極大地改善數(shù)據(jù)的不平衡性。

        2.2 回歸算法

        為了預測軟件模塊的缺陷數(shù)目,本文采用回歸算法對平衡化后的數(shù)據(jù)集進行學習,得到一個學習模型F,根據(jù)訓練出的模型對待檢測的軟件缺陷數(shù)據(jù)集進行預測,可得到軟件缺陷數(shù)據(jù)集的缺陷數(shù)目預測結果。已有研究[8-9]表明決策樹回歸(DTR)模型,貝葉斯嶺回歸(BRR)和線性回歸(LR)這三種回歸模型在軟件缺陷數(shù)目預測中被廣泛使用并取得了較好的預測效果,同時這三種模型分屬于三種不同類型的回歸模型,其中,DTR屬于決策樹模型,BRR屬于概率框架模型,LR屬于統(tǒng)計學模型。這三個回歸模型的詳細信息如下:

        決策樹回歸(DTR) 依據(jù)決策樹原理,曲線逼近給定的訓練集,然后使用訓練出的預測模型對測試集進行預測。

        線性回歸(LR) 對存在線性關系的一個或多個自變量和一個因變量進行線性擬合,使用擬合的模型對測試集進行預測。

        貝葉斯嶺回歸(BRR) 是一種基于貝葉斯算法的回歸預測方法,可利用正則參數(shù)的對貝葉斯的參數(shù)進行先驗,規(guī)避了主觀性的矛盾,結果更具備說服力。

        2.3 集成學習

        集成學習(ensemble learning)通過構建并結合多個學習器,來完成學習任務。通過集成學習,將預測能力較弱的個體學習器進行結合,可以得到預測能力較強的組合學習器,顯著提高泛化性能。集成學習的一般結構為:先產(chǎn)生一組“個體學習器”,再使用某種策略將它們結合起來。集成學習的策略分為兩種,一種是同質(zhì)集成方法,即使用同一種學習方案對數(shù)據(jù)集的不同子集進行學習,將學習的結果集成在一起;另一種是異質(zhì)集成方法,使用多種不同的學習方法對同一數(shù)據(jù)集進行學習,將學習的結果進行集成。本文采用第一種同質(zhì)集成方法。具體步驟如下:

        首先利用2.1節(jié)中提出的SMOTEND對原始軟件缺陷數(shù)據(jù)集進行過采樣使數(shù)據(jù)集平衡化,得到一個平衡的軟件缺陷數(shù)據(jù)集,然后利用2.2節(jié)中的經(jīng)典回歸算法對平衡數(shù)據(jù)集進行學習得到一個預測模型。為了避免在單一數(shù)據(jù)集上學習而導致結果偏差過大,本文提出對多次過采樣得到的軟件缺陷數(shù)據(jù)集進行多次回歸,得到多個個體軟件缺陷數(shù)目預測模型,然后,將這多個個體預測模型集成得到一個組合預測模型。本文選擇的組合策略為平均法,即將這多個個體模型對待預測軟件模塊的缺數(shù)目的預測值取平均。本文把這種方法稱為SMOTENEDEL。SMOTENDEL方法步驟如算法2所示。

        算法2 SMOTENDEL。

        輸入:平衡數(shù)據(jù)集的個數(shù):n;軟件缺陷數(shù)據(jù)集S;一種回歸算法,如決策樹回歸算法。

        輸出:組合預測模型F*。

        Begin

        1)

        fori=1 tondo

        2)

        對S進行SMOTEND過采樣得到平衡數(shù)據(jù)集Si;

        3)

        基于Si利用回歸算法學習出一個個體軟件缺陷數(shù)目預測模型Fi;

        4)

        end for

        5)

        End

        經(jīng)過上述3個階段,得到一個組合軟件缺陷數(shù)目回歸預測模型F*。利用該組合回歸預測模型對新的軟件模塊進行缺陷數(shù)目預測得到新的軟件模塊的缺陷數(shù)目。

        圖3 SMOTENDEL示意圖

        3 實驗設置

        3.1 實驗數(shù)據(jù)集

        本實驗根據(jù)文獻[33],從開源的數(shù)據(jù)集PROMISE中選取5種實驗數(shù)據(jù)集,其中,軟件特征采用CK metrics數(shù)據(jù)集提供的20個軟件缺陷特征。實驗數(shù)據(jù)集的詳細信息如表1所示。通過表1可以看出軟件缺陷數(shù)據(jù)集中軟件缺陷數(shù)目分布有極大的不平衡性,缺陷模塊的數(shù)量明顯遠少于正常模塊的數(shù)量。

        表1 實驗中使用的PROMISE數(shù)據(jù)集

        3.2 評價指標

        現(xiàn)有的軟件缺陷數(shù)目預測的文獻采用的大多是傳統(tǒng)的評價指標。如文獻[12]采用了平均絕對誤差(Average Absolute Error, AAE)、平均相對誤差(Average Relative Error, ARE)、均方根誤差(Root Mean Square Error, RMSE)等指標,但這些指標沒有考慮到缺陷數(shù)目的不平衡性,在本文所研究的問題中具有較大的局限性。比如AAE的定義如下:

        (4)

        其中:xi,actual代表數(shù)據(jù)集中第i個軟件模塊的實際軟件缺陷數(shù)目,xi,predict代表數(shù)據(jù)集中第i個軟件模塊的軟件缺陷數(shù)目的預測值,n代表數(shù)據(jù)集中軟件模塊的個數(shù)。

        鑒于數(shù)據(jù)集的極不平衡性,類似于AAE的這類評價指標可能會導致評價過于樂觀。軟件缺陷數(shù)目預測技術的重點是正確地預測出軟件缺陷數(shù)目多的模塊,而這些模塊往往處于極少數(shù)的地位,它們的預測錯誤在類似AAE的評價指標中除以龐大的基數(shù),錯誤會被掩蓋。

        例如針對Ant.1.3數(shù)據(jù)集,其有125個模塊,正常模塊有105個,缺陷數(shù)目為1、2、3的模塊分別有11、5、4個。假設預測模型預測這20個缺陷模塊的缺陷數(shù)目都為1,則AAE計算得0.104;假設預測模型預測缺陷數(shù)目為3的預測正確了2個,缺陷數(shù)目為2的預測正確了3個,缺陷數(shù)目為1的預測正確了8個,其他的全預測為正常模塊,則AAE計算得0.104,與前者結果相同,但顯然后者的預測結果對測試人員幫助更大,故不能使用類似于AAE的這類評價指標作為本研究的評價指標。

        文獻[13]提出FPA(Fault-Percentile-Average)這個評價指標。FPA是一種專門用于軟件缺陷預測領域的評價指標,廣泛用于驗證預測模型的預測性能,該指標以軟件缺陷數(shù)目為權重,如果一個模塊的軟件缺陷數(shù)目預測值越大,則該模塊的權重就高,對評價指標的影響大。因此在軟件缺陷數(shù)目多的模塊上的預測準確度越高,評價指標表現(xiàn)就越良好。

        FPA的計算公式如下:

        FPA=M/(n×Y)

        (5)

        其中:n代表數(shù)據(jù)集中軟件模塊個數(shù),Y代表數(shù)據(jù)集中所有軟件模塊所具有的缺陷的總數(shù),M是將軟件模塊按照預測缺陷數(shù)目降序排列得到的實際缺陷數(shù)目的累加和,具體計算如下。

        考慮一個含有n個軟件模塊的數(shù)據(jù)集,按預測出的缺陷數(shù)目升序排列S={S1,S2,…,Sn},即軟件模塊Sn被預測為擁有最多的軟件缺陷。記{y1,y2,…,yn}為對應軟件模塊實際的缺陷數(shù)目。對第m(0

        (6)

        FPA值越大,表明軟件缺陷數(shù)目預測模型的預測效果越好。本實驗中,選取FPA作為評價指標評價軟件缺陷數(shù)目預測模型效果的評價指標。

        3.3 十折交叉驗證法

        為了驗證SMOTENDEL預測方法導出的模型在軟件缺陷數(shù)目預測上的預測性能,需要對模型進行驗證。對模型的驗證通常有交叉驗證法(Cross-Validation)和自助采樣法(Bootstrap)兩種方法。文獻[13]分別探究了k折交叉驗證法中,k的取值對驗證效果的影響和自助采樣法中采樣的數(shù)目對驗證效果的影響,實驗結果表明十折交叉驗證法在對模型準確性的驗證中取得了最優(yōu)的表現(xiàn)。因此本文采用十折交叉驗證法對SMOTENDEL預測方法進行驗證。

        本文在進行十折交叉檢驗時,將表1中同一項目不同版本的數(shù)據(jù)集合并為一個數(shù)據(jù)集。然后將數(shù)據(jù)集等分為10組,從中取1組作為測試集,剩下的9組作為訓練集,利用SMOTENDEL訓練得出軟件缺陷數(shù)目預測模型,用預測模型對測試集的軟件模塊進行預測,得到測試集的軟件缺陷數(shù)目的預測值。依次選擇10組中的每1組作為測試集,重復上述步驟可以得到整個軟件缺陷數(shù)據(jù)集的缺陷數(shù)目預測值,根據(jù)軟件缺陷數(shù)據(jù)集的實際缺陷數(shù)目和預測缺陷數(shù)目計算FPA值。

        3.4 研究問題

        為了驗證SMOTENDEL方法在軟件缺陷數(shù)目預測方面的性能,本文提出了以下兩個研究問題:

        問題1 SMOTENDEL方法中,應該如何設置個體缺陷數(shù)目預測模型個數(shù)n?

        問題2 SMOTENDEL是否能提升軟件缺陷數(shù)目預測模型的預測性能?

        4 實驗結果分析

        4.1 研究問題1

        針對3.4節(jié)中的問題1,本文分別選擇個體缺陷數(shù)目預測模型個數(shù)n為1,2,3,…,9,10,15,20,…,40和45,對數(shù)據(jù)集進行SMOTENDEL方法的軟件缺陷預測,記錄SMOTENDEL方法在不同n值下的表現(xiàn)。

        根據(jù)實驗結果數(shù)據(jù)繪出如圖4所示的FPA-n折線圖。由FPA-n折線圖可以得出,在使用決策樹回歸算法的SMOTENDEL方法中,當n取1~5的時候,預測模型的FPA值隨著n的增加而增大;當n處于5~15時,模型的穩(wěn)定性較差,F(xiàn)PA值具有較大的起伏,但整體趨勢隨著n的增加而增大;當n大于15時,模型的FPA值基本保持高水平和穩(wěn)定。

        圖4 采用3種回歸模型的SMOTENDEL在5種數(shù)據(jù)集上的預測性能隨個體模型個數(shù)n的變化

        在使用貝葉斯嶺回歸算法的SMOTENDEL方法中,當n取1~10的時候,預測模型的FPA值隨著n的增加而增大,但在Synapse數(shù)據(jù)集上有較大起伏;當n處于10~15時,預測模型的FPA值在Jedit和Synapse數(shù)據(jù)集上隨著n的增大先下降后提升,在Ant和Xalan數(shù)據(jù)集上隨著n的增大先提升后下降,在Ivy數(shù)據(jù)集上隨著n的增大而提升;當n大于15時,預測模型的FPA值基本保持高水平和穩(wěn)定。

        在使用線性回歸算法的SMOTENDEL方法中,當n取1~5的時候,預測模型的FPA值隨著n的增加而增大,但在Ivy和Synapse數(shù)據(jù)集上有較大起伏;當n處于5~10時,F(xiàn)PA值有小幅度的振蕩;當n大于15時,預測模型的FPA值基本保持高水平和穩(wěn)定。

        根據(jù)實驗結果得出結論:為了使SMOTENDEL方法得到的模型具有良好的性能表現(xiàn),應該將n設定為15或15以上。考慮到集成學習次數(shù)多對計算資源的占用較大,依實驗結果,將n設定為15可以在測試資源消耗與性能之間取得較好的平衡。

        4.2 研究問題2

        根據(jù)4.1節(jié)的結論,實驗將預測模型個數(shù)n設定為15,使用SMOTENDEL方法對軟件缺陷數(shù)據(jù)集進行學習,導出軟件缺陷數(shù)目預測模型,使用十折交叉驗證法對預測模型進行驗證,使用FPA指標進行評價。FPA的最高值,即所有軟件模塊缺陷數(shù)目全部預測正確,分別為0.931 6,0.957 1,0.957 6,0.911,0.874 8。對各個數(shù)據(jù)集分別采用SMOTENDEL預測方法和原始預測(RAW)方法得到的FPA值以及平均值(Average)如表2所示,其中ELEVATION RATIO(ER)為SMOTENDEL方法相對于直接進行回歸預測方法的FPA提升率。實驗結果表明,在FPA絕對值提升率上,基于DTR決策樹回歸的SMOTENDEL方法相對于直接回歸的傳統(tǒng)方法有著平均7.68%的提升,基于線性回歸(LR)和貝葉斯嶺回歸(BRR)的SMOTENDEL方法相對于傳統(tǒng)直接回歸的方法有著平均3.31%和3.38%的提升。

        表2 5個數(shù)據(jù)集在3個回歸模型下的FPA值以及FPA提升率

        此外,本文還將SMOTENDEL和RAW方法與最優(yōu)模型(即將所有軟件模塊缺陷數(shù)目全部預測正確)進行了比較, SMOTENDEL_DIFFERENCE (Ds)、RAW_DIFFERENCE(Dr)表示SMOTENDEL、RAW與最優(yōu)模型FPA值相差的百分比,ELEVATION RATIO OF DIFFERENECE (ERD)為SMOTENDEL與最優(yōu)模型FPA值相差的百分比相較于RAW與最優(yōu)模型FPA值相差的百分比的提升率。

        在與完全預測正確的結果的FPA值比較中,基于決策樹回歸的SMOTENDEL方法與完全預測正確的FPA值相差20.46%,相比傳統(tǒng)直接回歸方法有著近31.45%的提升,基于LR線性回歸和BRR貝葉斯嶺回歸的SMOTENDEL方法與完全預測正確的FPA值相差分別為20.65%和20.67%,相比傳統(tǒng)直接回歸方法也有著15.07%和16.05%的提升。

        圖5為使用盒須圖對SMOTENDEL方法在各個數(shù)據(jù)集上的FPA表現(xiàn)進行的描述,盒須圖包含最大值、上四分位點、中位數(shù)、平均數(shù)、下四分位點和最小值,能夠有效地對比SMOTENDEL方法和傳統(tǒng)預測方法在FPA上的表現(xiàn)。

        根據(jù)圖5可以發(fā)現(xiàn),在分別使用決策樹、線性回歸、貝葉斯嶺回歸的情況下,本文提出的SMOTENDEL軟件缺陷預測方法較傳統(tǒng)、不作數(shù)據(jù)處理的回歸預測方法在四分位點上等多個指標上均取得了明顯的提升。

        圖6對基于三種回歸方法的SMOTENDEL軟件缺陷數(shù)目預測方法得到的FPA提升率進行對比分析。

        由圖6可知,決策樹回歸(DTR)下的SMOTENDEL方法得到的FPA值的提升率最為明顯。線性回歸(LR)和貝葉斯嶺回歸(BRR)在中位數(shù)、最大最小值上沒有明顯的差異,貝葉斯嶺回歸較線性回歸在四分位點上有著略微的優(yōu)勢。

        根據(jù)實驗結果得出結論:SMOTENDEL方法能夠有效地提升軟件缺陷數(shù)目預測的效果?;跊Q策樹算法的SMOTENDEL方法具有最良好的性能表現(xiàn)。

        圖5 對5個數(shù)據(jù)集分別采用和不采用SMOTENDEL方法進行預測得到的FPA值

        圖6 對5個數(shù)據(jù)集采用3種回歸模型的SMOTENDEL方法的FPA提升率

        5 結語

        針對軟件缺陷數(shù)目預測問題,本文提出了一種基于過采樣和集成學習的SMOTENDEL方法。SMOTENDEL方法首先對不平衡的軟件缺陷數(shù)據(jù)集進行多次過采樣得到多個平衡數(shù)據(jù)集,然后對這多個平衡數(shù)據(jù)集進行回歸預測得到對應的個體預測模型,隨后利用集成學習的方法將這多個個體預測模型集成,得到一個組合預測模型,最后利用該組合預測模型對待預測的軟件模塊進行預測,得到其軟件缺陷數(shù)目。本文使用 FPA作為評價指標,利用十折交叉驗證法對該方法進行檢驗。實驗結果表明:1)SMOTENDEL方法能夠有效提高軟件缺陷數(shù)目預測模型的性能,其中基于決策樹回歸的預測模型取得了最優(yōu)的性能表現(xiàn);2)集成學習次數(shù)n選擇為15時能夠同時占有較少的計算資源而獲得良好的性能表現(xiàn)。

        本文所選擇的數(shù)據(jù)集特征全部來源于同一類Chidamber and Kemerer (CK) metrics,這種類型的軟件缺陷數(shù)據(jù)主要來自使用面對對象語言編寫的軟件系統(tǒng),在1994年創(chuàng)建并經(jīng)歷了時間的考驗,在軟件缺陷預測技術上被普遍使用并取得了良好的表現(xiàn),但是由于創(chuàng)建時間過早,創(chuàng)建時里面只有SmallTalk和C++兩種語言,在現(xiàn)在計算機語言飛速發(fā)展的如今,使用CK軟件缺陷數(shù)據(jù)得到的預測模型可能并不完全滿足于現(xiàn)代工業(yè)界的軟件缺陷預測需求。在未來會使用多個不同種類的數(shù)據(jù)集來驗證SMOTENDEL方法的普遍性,使其更好地服務于現(xiàn)代工業(yè)界。

        [24] TONG H, LIU B, WANG S. Software defect prediction using stacked denoising autoencoders and two-stage ensemble learning [J]. Information and Software Technology, 2017,96: 94-111.

        [25] OKUTAN A, YILDIZ O T. Software defect prediction using Bayesian networks [J]. Empirical Software Engineering, 2014, 19(1): 154-181.

        [26] WANG J, ZHANG H. Predicting defect numbers based on defect state transition models [C]// ESEM ’12: Proceedings of the ACM-IEEE International Symposium on Empirical Software Engineering and Measurement. New York: ACM, 2012: 191-200.

        [27] RATHORE S S, KUMAR S. A decision tree regression based approach for the number of software faults prediction [J]. ACM SIGSOFT Software Engineering Notes, 2016, 41(1): 1-6.

        [28] RATHORE S S, KUMAR S. An empirical study of some software fault prediction techniques for the number of faults prediction [J]. Soft Computing, 2017, 21(24): 7417-7434.

        [29] RATHORE S S, KUMAR S. Towards an ensemble based system for predicting the number of software faults [J]. Expert Systems with Applications, 2017, 82: 357-382.

        [30] OSTRAND T J, WEYUKER E J, BELL R M. Predicting the location and number of faults in large software systems [J]. IEEE Transactions on Software Engineering, 2005, 31(4): 340-355.

        [31] YU X, LIU J, YANG Z, et al. Learning from imbalanced data for predicting the number of software defects [C]// ISSRE ’17: Proceedings of the 2017 IEEE 28th International Symposium on Software Reliability Engineering. Washington, DC: IEEE Computer Society, 2017: 78-89.

        [32] CHAWLA N V, BOWYER K W, HALL L O, et al. SMOTE: synthetic minority over-sampling technique [J]. Journal of Artificial Intelligence Research, 2002, 16(1): 321-357.

        [33] YANG X, TANG K, YAO X. A learning-to-rank approach to software defect prediction [J]. IEEE Transactions on Reliability, 2015, 64(1): 234-246.

        猜你喜歡
        軟件缺陷數(shù)目軟件
        有機物“同分異構體”數(shù)目的判斷方法
        中學化學(2024年4期)2024-04-29 22:54:35
        禪宗軟件
        英語文摘(2021年10期)2021-11-22 08:02:26
        基于源文件可疑度的靜態(tài)軟件缺陷檢測方法研究
        軟件對對碰
        基于NPE-SVM的軟件缺陷預測模型
        開源程序的軟件缺陷分布特征的量化分析研究
        《哲對寧諾爾》方劑數(shù)目統(tǒng)計研究
        牧場里的馬
        談軟件的破解與保護
        精品(2015年9期)2015-01-23 01:36:01
        軟件缺陷管理方案分析
        久久亚洲中文字幕无码| 男男啪啪激烈高潮无遮挡网站网址| 国产成人精品一区二区20p| 国产边摸边吃奶叫床视频| 亚洲影院天堂中文av色| 精品丝袜国产在线播放| 午夜理论片日本中文在线| 亚洲欧洲国产成人综合在线| 日日碰狠狠丁香久燥| 韩日无码不卡| 国产精品亚洲一二三区| 99久久99久久精品免费看蜜桃| 亚洲碰碰人人av熟女天堂| 丁香九月综合激情| 久久精品熟女亚洲av香蕉| 国产婷婷色一区二区三区在线 | 福利网址在线观看| 一区二区视频网站在线观看| 国产免费一区二区三区精品视频| 亚洲一卡2卡3卡4卡5卡精品| 久久精品国产99精品九九| av资源吧首页在线观看| 国产精品黄色片在线看| 国产又黄又大又粗的视频| 在线国产视频精品视频| 日本三区在线观看视频| 亚洲av成人无码一区二区三区在线观看| 亚洲国产精品sss在线观看av| 乱人伦人妻中文字幕不卡| av网页免费在线观看| 337p日本欧洲亚洲大胆精品| 四虎影视亚洲精品| 国产啪啪视频在线观看| 久久亚洲av成人无码电影 | 一本色道久久88综合| 久久综合伊人77777麻豆| 成av人片一区二区三区久久| 久久精品美女久久| 国产黄色三级一区二区三区四区| wwww亚洲熟妇久久久久| 国产精品久久久久尤物|