高 晶
(煙臺(tái)職業(yè)學(xué)院 信息工程系,山東 煙臺(tái) 264670)
隨著網(wǎng)絡(luò)的蓬勃發(fā)展與日益普及,軟件在社會(huì)工作與生活中起著至關(guān)重要的作用。若部署了含有缺陷的軟件,極有可能引發(fā)不堪設(shè)想的后果。因此,精準(zhǔn)預(yù)測出軟件缺陷具有重要的現(xiàn)實(shí)意義。為了降低缺陷修復(fù)代價(jià),應(yīng)在項(xiàng)目開發(fā)初期就完成項(xiàng)目中潛在缺陷程序模塊的識(shí)別,預(yù)測對象主要為模塊中的缺陷、缺陷數(shù)及缺陷密度等。眾多相關(guān)學(xué)者對軟件缺陷預(yù)測技術(shù)展開研究,以滿足更新?lián)Q代較快的軟件需求。
文獻(xiàn)[1]提出基于文件粒度的多目標(biāo)軟件缺陷預(yù)測方法,通過對比無監(jiān)督學(xué)習(xí)方法與有監(jiān)督學(xué)習(xí)方法間的性能,設(shè)計(jì)了一種多目標(biāo)優(yōu)化的MULTI方法,基于FL-SDP 問題對兩個(gè)不同的優(yōu)化目標(biāo)進(jìn)行設(shè)定,采用Logistic回歸方法完成預(yù)測模型訓(xùn)練,將FL-SDP 問題轉(zhuǎn)換為經(jīng)典的二元分類問題后,對模塊是否存在缺陷實(shí)施判定。文獻(xiàn)[2]研究了一種兩階段的軟件模塊缺陷數(shù)預(yù)測特征選擇方法,F(xiàn)SDNP 方法中的階段分為特征聚類與特征選擇,前者采用密度峰聚類算法劃分相關(guān)性較高的缺陷特征,后者通過啟發(fā)式排序策略,對冗余、無效特征進(jìn)行濾除。文獻(xiàn)[3]則架構(gòu)了一種基于深度自編碼網(wǎng)絡(luò)的軟件缺陷預(yù)測方法,通過無監(jiān)督學(xué)習(xí)采樣策略,采集不同開源項(xiàng)目數(shù)據(jù)集,從而避免數(shù)據(jù)集出現(xiàn)類別不平衡,利用創(chuàng)建的深度自編碼網(wǎng)絡(luò)模型,降維數(shù)據(jù)集特征,經(jīng)過連接3 種分類器對其進(jìn)行訓(xùn)練,最終完成測試集預(yù)測。
由于上述方法多數(shù)是用于預(yù)測同項(xiàng)目軟件缺陷,無法精準(zhǔn)預(yù)測存在較大差異的源項(xiàng)目與目標(biāo)項(xiàng)目數(shù)據(jù)集,所以本文設(shè)計(jì)了一種基于代價(jià)敏感半監(jiān)督的跨項(xiàng)目軟件缺陷數(shù)預(yù)測模型。依據(jù)選取的度量元集合,收集各版本源代碼,應(yīng)用搜索下載的方式,采集缺陷數(shù)據(jù)。經(jīng)過在源代碼中提取度量元,將其與缺陷信息一一對應(yīng),完成度量元矩陣構(gòu)建,采用清洗、集成、規(guī)約及變換對數(shù)據(jù)進(jìn)行預(yù)處理,隨后設(shè)定屬性復(fù)雜度的閾值為中位數(shù),得到最終采樣結(jié)果。利用設(shè)計(jì)的代價(jià)敏感半監(jiān)督支持向量機(jī),劃分樣本數(shù)據(jù)集,通過對預(yù)測模型實(shí)施訓(xùn)練學(xué)習(xí),實(shí)現(xiàn)缺陷數(shù)預(yù)測。
1.1.1 數(shù)據(jù)采集
數(shù)據(jù)的采集階段不僅是預(yù)測跨項(xiàng)目軟件缺陷數(shù)的基本,也是預(yù)測模型設(shè)計(jì)的重要環(huán)節(jié)。在軟件開發(fā)階段,相關(guān)數(shù)據(jù)一般為軟件源代碼[4]、開發(fā)人員溝通歷史記錄、有關(guān)文檔和缺陷追蹤信息等。其中,軟件缺陷主要存在于軟件源代碼信息與歷史缺陷信息中。跨項(xiàng)目軟件缺陷數(shù)據(jù)的采集共分為以下5個(gè)階段:
1)度量元集合的合理選取
作為軟件缺陷預(yù)測模型的輸入部分,度量元可以實(shí)現(xiàn)源代碼缺陷信息的挖掘。因?yàn)槎攘吭獢?shù)量會(huì)隨著數(shù)據(jù)信息量的提升而增多,所以由較多度量元所組建的模型將具有更理想的預(yù)測精準(zhǔn)度。但是,當(dāng)度量元增加到一定數(shù)量時(shí),高維數(shù)據(jù)就會(huì)引發(fā)過擬合問題,降低預(yù)測性能。因此,為了使預(yù)測模型性能達(dá)到最佳狀態(tài),應(yīng)通過斯皮爾曼等級相關(guān)系數(shù)[5]的選擇方法對合適的度量元進(jìn)行選取。
已知X=(X1,X2,…,Xn)與Y=(Y1,Y2,…,Yn)為兩個(gè)變量,經(jīng)過排列Xi與Yi的順序,獲得xi與yi,則采用下列公式對斯皮爾曼等級相關(guān)系數(shù)進(jìn)行運(yùn)算:
其中,xi與yi的均值分別為xˉ和yˉ。由式(1)可以看出,度量元和缺陷數(shù)量的關(guān)聯(lián)性與斯皮爾曼等級相關(guān)系數(shù)成正比,依據(jù)斯皮爾曼等級相關(guān)系數(shù)降序排列度量元,所選取的度量元集合由序列中前N個(gè)度量元架構(gòu)而成。
2)源代碼收集
由于大部分項(xiàng)目的源代碼均被儲(chǔ)存于代碼倉庫,以便于項(xiàng)目協(xié)作與代碼管理,所以開發(fā)人員只需運(yùn)用版本控制工具,就可以完成每個(gè)版本的源代碼收集任務(wù)??刂乒ぞ叩倪x取主要由項(xiàng)目數(shù)據(jù)托管平臺(tái)種類決定。
3)缺陷數(shù)據(jù)采集
收集源代碼數(shù)據(jù)后,要從Bugzilla 與Jira 的Bug跟蹤系統(tǒng)里采集與源代碼相對應(yīng)的缺陷信息。因?yàn)閮上到y(tǒng)性能相似,所以數(shù)據(jù)提取方法也大致相同,通過搜索下載就能夠完成,最后將獲取的缺陷數(shù)據(jù)與軟件源代碼文件進(jìn)行聯(lián)立。Bugzilla開源缺陷跟蹤系統(tǒng)的缺陷信息統(tǒng)計(jì)如表1所示。
表1 缺陷信息統(tǒng)計(jì)表
4)度量元提取
靜態(tài)分析統(tǒng)計(jì)源代碼就是度量元的提取過程,可以通過諸如OOMeter、semmle等提取工具完成。
5)度量元矩陣架構(gòu)
各矢量均為代價(jià)敏感半監(jiān)督支持向量機(jī)的輸入,分類標(biāo)簽則是缺陷信息,依據(jù)取得的度量元與缺陷信息,將兩者進(jìn)行一一對應(yīng)后,即可得到度量元數(shù)據(jù)矩陣。
1.1.2 數(shù)據(jù)預(yù)處理
預(yù)處理階段由清洗、集成、規(guī)約及變換組成。在軟件模塊內(nèi),提取的標(biāo)簽值主要用于缺陷存在判定,采集的度量屬性如表2 所示。若數(shù)據(jù)有屬性值缺失現(xiàn)象,則利用屬性期望值進(jìn)行填充。
表2 數(shù)據(jù)集度量元統(tǒng)計(jì)表
為了避免發(fā)生對0 取對數(shù)的情況,通過引入極小值方法,完成屬性值的對數(shù)化預(yù)處理,其計(jì)算式如下所示:
式中,x為屬性值。
1.1.3 數(shù)據(jù)采樣
由于缺陷預(yù)測數(shù)據(jù)呈不均勻分布狀態(tài),只有部分?jǐn)?shù)據(jù)存在缺陷,所以基于源代碼度量元與缺陷之間的潛在相關(guān)性,制定理想的采樣策略。通過觀察缺陷數(shù)據(jù)與非缺陷數(shù)據(jù)的度量元數(shù)值可知,存在缺陷的模塊度量元數(shù)值相對更高。將屬性中位數(shù)作為衡量屬性復(fù)雜度的閾值,通過保證所選樣本不存在過低的缺陷率,使模型性能得到提升。圖1 所示為數(shù)據(jù)采樣流程。
圖1 數(shù)據(jù)采樣流程
圖1 中,軟件樣本屬性值為Y1~Y6,樣本集合為S1~S7。如果待采樣的帶標(biāo)簽樣本[7]有N個(gè),則采樣步驟描述如下:
1)對所有模塊的屬性中位數(shù)進(jìn)行求解;
2)針對各樣本屬性值,若大于該屬性中位數(shù),則稱之為高屬性值;
3)將高屬性值個(gè)數(shù)降序排列,得到新的樣本列表;
4)選取列表的前2N個(gè)樣本構(gòu)成候選集;
5)對候選集內(nèi)的N個(gè)樣本進(jìn)行隨機(jī)抽取,并將其作為最終的采樣結(jié)果。
通過尋求一個(gè)代價(jià)敏感半監(jiān)督支持向量機(jī)的超平面,最小化分類整體代價(jià),該方法通過代價(jià)敏感[8]學(xué)習(xí)思想的引入,實(shí)現(xiàn)半監(jiān)督支持向量機(jī)的算法擴(kuò)展。已知一個(gè)含有帶標(biāo)簽樣本與無標(biāo)簽樣本的數(shù)據(jù)集:帶標(biāo)簽樣本呈獨(dú)立分布,設(shè)為{(x1,y1),…,(xl,yl)},l表示帶標(biāo)簽樣本的數(shù)量;無標(biāo)簽樣本屬于同一分布,表示為{(xl+1,yl+1),…,(xl+u,yl+u)},u為無標(biāo)簽樣本數(shù)量,分類標(biāo)簽y∈{± 1} 。假設(shè)Il={1,2,…,l} 為帶標(biāo)簽樣本,Iu={l+1,l+2,…,l+u}為無標(biāo)簽樣本,錯(cuò)誤地將有缺陷樣本劃分為無缺陷樣本的代價(jià)為c(+1),把不存在缺陷樣本劃分為存在缺陷的代價(jià)為c(-1),則代價(jià)敏感半監(jiān)督支持向量機(jī)的代價(jià)矩陣如表3所示。
表3 代價(jià)矩陣
式中,H為核函數(shù)k產(chǎn)生的再生核希爾伯特空間;l(yi,f(xi))為加權(quán)損失函數(shù)[9];C1與C2為正則化參數(shù);r為模型設(shè)置參數(shù),主要是為了避免將訓(xùn)練集全部無標(biāo)簽樣本劃分至一個(gè)類別里。
對訓(xùn)練集合內(nèi)帶標(biāo)簽樣本與無標(biāo)簽樣本的錯(cuò)分率與復(fù)雜度進(jìn)行權(quán)衡,加權(quán)損失函數(shù)如圖2 所示。如果c(+1)=c(-1),則該函數(shù)為標(biāo)準(zhǔn)對稱函數(shù),此時(shí)的代價(jià)敏感半監(jiān)督支持向量機(jī)轉(zhuǎn)換為半監(jiān)督支持向量機(jī)模型;若c(+1)≠c(-1),損失函數(shù)值將呈現(xiàn)連續(xù)性。
圖2 損失函數(shù)
新參數(shù)代價(jià)比率的引入實(shí)現(xiàn)了代價(jià)添加對預(yù)測模型性能的影響評估,下式即為參數(shù)代價(jià)比率表達(dá)式:
C取不同值,得到相應(yīng)的預(yù)測性能數(shù)據(jù),從而評估性能發(fā)揮程度。
基于代價(jià)敏感半監(jiān)督支持向量機(jī)的最小化分類代價(jià)目標(biāo),創(chuàng)建跨項(xiàng)目軟件缺陷數(shù)預(yù)測模型,流程共分為以下5個(gè)步驟:
1)通過分析缺陷數(shù)據(jù)特征,對合適的度量元進(jìn)行選?。?/p>
2)按照清洗、規(guī)約等順序,預(yù)處理所得數(shù)據(jù)集;
3)標(biāo)記采樣的數(shù)據(jù)樣本,并將任意選取的無標(biāo)簽樣本與帶標(biāo)簽樣本進(jìn)行組合,得到訓(xùn)練樣本;
4)合理設(shè)定模型參數(shù)值;
5)對預(yù)測模型實(shí)施訓(xùn)練學(xué)習(xí),利用學(xué)習(xí)到的模型對測試集所含的缺陷數(shù)實(shí)施類標(biāo)簽預(yù)測。
基于代價(jià)敏感半監(jiān)督的跨項(xiàng)目軟件缺陷數(shù)預(yù)測模型架構(gòu)流程如圖3所示。
圖3 預(yù)測模型架構(gòu)流程
仿真實(shí)驗(yàn)環(huán)境的硬件部分為英特爾酷睿i5-3337U1.8GHz 處理器,運(yùn)行內(nèi)存為6 GB,操作系統(tǒng)為64 位Windows10,軟件部分是Matlab R2013a 版本[10]。
實(shí)驗(yàn)數(shù)據(jù)集由5 個(gè)開源項(xiàng)目的16 個(gè)版本所構(gòu)成,各項(xiàng)目含有11 個(gè)靜態(tài)代碼特征與類別標(biāo)注,將類作為程序模塊的粒度。
預(yù)測模型仿真過程中,選取查全率recall與查準(zhǔn)率precision對軟件模型性能進(jìn)行評估,計(jì)算公式如下所示:
式中,TP表示實(shí)際存在缺陷且分類正確;FP表示實(shí)際不存在缺陷且劃分正確;FN則表示實(shí)際不存在缺陷但分類錯(cuò)誤。
查全率是指所有缺陷被預(yù)測正確的占比,查準(zhǔn)率是指預(yù)測為缺陷的數(shù)量與實(shí)際缺陷數(shù)的比值。
由于兩指標(biāo)的評估效果比較片面,所以采用F1 指標(biāo)將其進(jìn)行綜合,以有效達(dá)成模型性能評價(jià),計(jì)算公式如下:
由式(7)可知,模型性能與F1值成正相關(guān)。
為了驗(yàn)證本文模型的通用性與有效性,分別利用靜態(tài)軟件缺陷預(yù)測方法與本文模型,對數(shù)據(jù)集進(jìn)行一對一形式與多對一形式的跨項(xiàng)目缺陷數(shù)預(yù)測模擬實(shí)驗(yàn)。實(shí)驗(yàn)數(shù)據(jù)均為獨(dú)立操作5 次的運(yùn)行結(jié)果均值,兩者的比較曲線如圖4和圖5所示。
圖4 一對一形式下跨項(xiàng)目預(yù)測對比
圖5 多對一形式下跨項(xiàng)目預(yù)測對比
通過圖4 可以看出,本文模型的F1 均值相比靜態(tài)預(yù)測方法增加了28.5%,且曲線走勢一直位于較高水平。
根據(jù)圖5 可知,基于多對一形式的跨項(xiàng)目預(yù)測,對比靜態(tài)預(yù)測方法,本文模型的F1均值大幅度提升,增幅約為30.7%,波動(dòng)狀態(tài)較為平穩(wěn),說明本文模型的預(yù)測性能具有顯著的穩(wěn)定性。
針對新啟動(dòng)的軟件項(xiàng)目,搜集理想的缺陷預(yù)測數(shù)據(jù)集是一項(xiàng)挑戰(zhàn)。所以,本文創(chuàng)建一種基于代價(jià)敏感半監(jiān)督的跨項(xiàng)目軟件缺陷數(shù)預(yù)測模型。根據(jù)度量元對軟件源代碼信息與歷史缺陷信息的數(shù)據(jù)進(jìn)行采集,經(jīng)過預(yù)處理,分析非缺陷數(shù)據(jù)與缺陷數(shù)據(jù)的度量元值關(guān)系;采用中位數(shù)閾值完成數(shù)據(jù)采樣,依據(jù)代價(jià)敏感半監(jiān)督支持向量機(jī)的超平面,對樣本存在的缺陷情況進(jìn)行分類;通過整合帶標(biāo)簽樣本與無標(biāo)簽樣本,架構(gòu)訓(xùn)練樣本,從而使測試集缺陷數(shù)預(yù)測得以達(dá)成。該模型為未來的研究工作奠定相關(guān)理論基礎(chǔ),提供重要數(shù)據(jù)資料,具有廣闊的應(yīng)用前景與重要的實(shí)踐價(jià)值。