劉亞娜 吳彩華 陳 浩 石 晶
(空軍預(yù)警學(xué)院雷達(dá)士官學(xué)校,湖北 武漢430345)
軟件內(nèi)部隱藏的缺陷可能導(dǎo)致其在實(shí)際運(yùn)行時(shí)產(chǎn)生不可預(yù)料的后果,嚴(yán)重影響軟件質(zhì)量甚至有時(shí)會(huì)危及到人們的生命安全。而軟件缺陷預(yù)測(cè)可以為軟件開發(fā)過(guò)程提供決策支持,即:在項(xiàng)目的開發(fā)初期,通過(guò)預(yù)先識(shí)別出所有可能含有缺陷的軟件模塊,可以針對(duì)性地對(duì)這些程序模塊設(shè)計(jì)測(cè)試用例,以確保充分測(cè)試,從而提高軟件質(zhì)量。程序模塊根據(jù)實(shí)際測(cè)試需求可設(shè)置為包、文件、類或函數(shù)等。目前,缺陷預(yù)測(cè)模型在構(gòu)建時(shí)常采用支持向量機(jī)[1]、Logistic 回歸、樸素貝葉斯[2]、決策樹[3]、集成學(xué)習(xí)[4]等常見的機(jī)器學(xué)習(xí)方法。
早期的關(guān)于缺陷預(yù)測(cè)的大部分研究都是集中于單分類器的研究,它們是根據(jù)交叉驗(yàn)證所得數(shù)據(jù)進(jìn)行實(shí)驗(yàn)得到的性能的平均值來(lái)作為最終性能,并以此性能來(lái)度量模型的,但是平均后的性能并沒(méi)有得到很大改善,只是在方差上有一定的改進(jìn),同時(shí)并不能給出樣本最終的預(yù)測(cè)結(jié)果。而且軟件缺陷預(yù)測(cè)一般都更加關(guān)注少數(shù)類的預(yù)測(cè)效果,但受數(shù)據(jù)不平衡的影響交叉驗(yàn)證平均后的性能偏向于多類。比如Kaur 等人[5]使用的隨機(jī)森林分類器,Elish 等人[6]等人使用的支持向量機(jī)(SVM),Khoshgoftaar[7]等人使用的神經(jīng)網(wǎng)絡(luò),它們的結(jié)果都偏向于多類而忽略了少類,導(dǎo)致結(jié)果出現(xiàn)較高的假負(fù)率。而本文提出了一種基于軟件缺陷傾向性預(yù)測(cè)投票方法,該方法是使用單分類器的投票機(jī)制,即使用一種分類器對(duì)分層交叉驗(yàn)證的數(shù)據(jù)進(jìn)行下采樣構(gòu)建模型,對(duì)其得到的多個(gè)預(yù)測(cè)結(jié)果進(jìn)行投票得到最終的預(yù)測(cè)結(jié)果,并基于該結(jié)果計(jì)算模型的性能。
以下將軟件缺陷傾向性預(yù)測(cè)投票方法簡(jiǎn)稱投票法,將軟件缺陷傾向性預(yù)測(cè)平均法簡(jiǎn)稱平均法。
本文采用一組3×2 交叉驗(yàn)證來(lái)選擇主成分個(gè)數(shù)k,采用缺陷預(yù)測(cè)的性能指標(biāo)(本文用F1 值)在測(cè)試集上最大來(lái)選。對(duì)數(shù)據(jù)KC1,PC3,PC4 分別構(gòu)造一組3×2 交叉驗(yàn)證,對(duì)k=1,2,…p(p 為數(shù)據(jù)集中屬性的個(gè)數(shù))分別構(gòu)建基于PCA 的缺陷預(yù)測(cè)模型,選取在6 份上的F1 指標(biāo)平均值最大的k 作為模型的主成分個(gè)數(shù),KC1 數(shù)據(jù)集上挑選的k=3,PC3,PC4 數(shù)據(jù)集上挑選的k=14。
給定一個(gè)數(shù)據(jù)集為D= {(xi,xy)|i=1,2,…n},yi的取值為{0,1},0 表示沒(méi)有缺陷,1 表示有缺陷;給定二折交叉驗(yàn)證的重復(fù)次數(shù)m;給定一個(gè)機(jī)器學(xué)習(xí)算法L;給定一個(gè)m×n 的矩陣A,向量Pred,m×4 的矩陣Perf。
投票法首先對(duì)數(shù)據(jù)進(jìn)行了m×2 的分層交叉驗(yàn)證,交叉驗(yàn)證結(jié)束后可以得到一個(gè)m×n 的矩陣A,其中元素A[i,j]表示第次二折交叉驗(yàn)證后對(duì)樣本j 的預(yù)測(cè)結(jié)果(以0,1 的形式表示),二折交叉驗(yàn)證共重復(fù)m 次,所以可得到m 行n 列的預(yù)測(cè)結(jié)果A,得到矩陣A 后,對(duì)A 中的預(yù)測(cè)結(jié)果進(jìn)行投票,其中A 矩陣中第j(j=1,2,…n)列存儲(chǔ)的是第j 個(gè)樣本的m 個(gè)預(yù)測(cè)結(jié)果,對(duì)這m 個(gè)預(yù)測(cè)結(jié)果進(jìn)行投票,使用m/2 作為閾值,如果第j 列中m 個(gè)結(jié)果中1 的個(gè)數(shù)大于或等于它的閾值,則最終判斷第j 個(gè)樣本為有缺陷(1),否則為沒(méi)有缺陷(0),重復(fù)n 次,將數(shù)據(jù)集D 中n個(gè)樣本的最終預(yù)測(cè)結(jié)果存儲(chǔ)到Pred 向量中,最后按照此最終預(yù)測(cè)結(jié)果計(jì)算出precision,recall,F(xiàn)1,accuracy 的值,其算法如圖1所示。
圖1 投票法算法偽代碼
本文實(shí)驗(yàn)數(shù)據(jù)來(lái)源于PROMISE 平臺(tái)上的KC1、PC3 和PC4數(shù)據(jù)集。KC1 數(shù)據(jù)集包含2109 個(gè)樣本,21 個(gè)變量;PC3 數(shù)據(jù)集包含1125 個(gè)樣本,37 個(gè)變量;PC4 數(shù)據(jù)集包含1399 個(gè)樣本,37個(gè)變量。
本文使用的性能度量為precision、recall、F1 值、accuracy,其計(jì)算公式如下:
其中,TP 為實(shí)際有缺陷被預(yù)測(cè)為有缺陷的樣本數(shù);FP 為實(shí)際沒(méi)有缺陷被預(yù)測(cè)為有缺陷的樣本數(shù);TN 為實(shí)際沒(méi)有缺陷被預(yù)測(cè)為沒(méi)有缺陷的樣本數(shù);FN 為實(shí)際有缺陷被預(yù)測(cè)為沒(méi)有缺陷的樣本數(shù)。
在KC1、PC3 和PC4 數(shù)據(jù)集上使用logistic 回歸模型的實(shí)驗(yàn)結(jié)果如圖2 所示,對(duì)于KC1、PC3 和PC4 數(shù)據(jù)集使用logistic 回歸建模來(lái)說(shuō)其對(duì)應(yīng)的投票結(jié)果的precision、recall、F1 值、accuracy 值都高于平均結(jié)果。所以綜合而言,在KC1、PC3 和PC4數(shù)據(jù)集上投票方法的性能優(yōu)于平均結(jié)果的性能。
圖2 數(shù)據(jù)集使用logistic 模型的投票實(shí)驗(yàn)結(jié)果
在KC1、PC3 和PC4 數(shù)據(jù)集上使用決策樹模型的實(shí)驗(yàn)結(jié)果如圖3 所示,對(duì)于KC1、PC3 和PC4 數(shù)據(jù)集使用決策樹建模來(lái)說(shuō),其對(duì)應(yīng)的投票法的precision、recall、F1 值、accuracy 值都高于平均法得到的性能結(jié)果。所以綜合而言,在KC1、PC3 和PC4 數(shù)據(jù)集上投票方法的性能優(yōu)于平均結(jié)果的性能。
圖3 數(shù)據(jù)集使用決策樹模型的投票實(shí)驗(yàn)結(jié)果
針對(duì)傳統(tǒng)的計(jì)算軟件缺陷預(yù)測(cè)模型的性能是按照交叉驗(yàn)證后性能的平均值進(jìn)行度量的,而本文則是按照交叉驗(yàn)證后投票得到的最終預(yù)測(cè)結(jié)果計(jì)算得到的性能值度量模型的。該方法在NASA 的KC1、PC3 和PC4 數(shù)據(jù)集上分別構(gòu)建了logistics 回歸模型和決策樹模型,從實(shí)驗(yàn)結(jié)果可以得出,該方法可以得到待測(cè)樣本的最終預(yù)測(cè)結(jié)果;其性能基本優(yōu)于平均法計(jì)算得到的性能值。所以綜合來(lái)說(shuō),該方法具有一定優(yōu)勢(shì)。
該方法仍有一些后續(xù)工作有待擴(kuò)展:
(1)該方法只在NASA 數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),之后將在其他跨項(xiàng)目數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),驗(yàn)證該方法的有效性;
(2)嘗試以特定的比例對(duì)數(shù)據(jù)進(jìn)行下采樣,以進(jìn)一步緩解類不平衡問(wèn)題;
(3)在該方法中進(jìn)一步考慮特征選擇方法,通過(guò)移除數(shù)據(jù)集中的冗余特征和無(wú)關(guān)特征來(lái)進(jìn)一步提升軟件缺陷預(yù)測(cè)模型的性能。