尤姍姍,劉雪嬌
(杭州師范大學(xué)信息科學(xué)與技術(shù)學(xué)院,浙江 杭州 311121)
如今計(jì)算機(jī)中軟件的占比不斷上升,系統(tǒng)越來越依賴軟件,導(dǎo)致軟件出現(xiàn)任何程度的風(fēng)險(xiǎn)都會(huì)造成計(jì)算機(jī)系統(tǒng)出現(xiàn)錯(cuò)誤、失效和崩潰等情況[1]。通常情況下,為保證軟件模塊的穩(wěn)定,有50%以上的資金都用于測(cè)試軟件風(fēng)險(xiǎn),浪費(fèi)了大量人力和財(cái)力,所以在開發(fā)軟件時(shí)利用有效的軟件風(fēng)險(xiǎn)模塊預(yù)測(cè)方法進(jìn)行風(fēng)險(xiǎn)預(yù)測(cè)顯得尤為重要[2-3]。
陳曙[4]等人提出基于領(lǐng)域適配的跨項(xiàng)目軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法,該方法將領(lǐng)域適配和學(xué)習(xí)預(yù)測(cè)模型相融合,建立出軟件樣本相關(guān)權(quán)重,將權(quán)重添加到系統(tǒng)樣本中,利用實(shí)例權(quán)重影響預(yù)測(cè)模型的訓(xùn)練,將軟件樣本中的風(fēng)險(xiǎn)數(shù)據(jù)集分配到訓(xùn)練數(shù)據(jù)集中,實(shí)現(xiàn)軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)。該方法在預(yù)測(cè)軟件模塊風(fēng)險(xiǎn)前沒有對(duì)軟件模塊數(shù)據(jù)進(jìn)行預(yù)處理,只能在較高維度中進(jìn)行預(yù)測(cè),使得預(yù)測(cè)難度過大,降低了軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)的精度,存在F1分?jǐn)?shù)低的問題。楊杰[5]等人提出基于多源異構(gòu)的軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法,該方法首先利用數(shù)據(jù)統(tǒng)計(jì)特征求解出度量元相似度,其次構(gòu)建不同軟件項(xiàng)目的預(yù)測(cè)模型,輸入軟件參數(shù),得到輸出結(jié)果,最后根據(jù)結(jié)果相似度大小加權(quán)整合所有輸出結(jié)果,實(shí)現(xiàn)軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)。該方法沒有通過主成分分析法對(duì)數(shù)據(jù)進(jìn)行處理,無法保證數(shù)據(jù)互不依賴,也不能確保數(shù)據(jù)在計(jì)算過程中不被遺漏,因此軟件模塊在預(yù)測(cè)過程中信息數(shù)量龐大,且十分分散,大大降低了預(yù)測(cè)準(zhǔn)確率,AUC的面積也會(huì)下降,AUC分?jǐn)?shù)隨之下降。包振棟[6]等人提出基于遷移學(xué)習(xí)的軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法,該方法首先將軟件風(fēng)險(xiǎn)預(yù)測(cè)問題轉(zhuǎn)化為遷移學(xué)習(xí)問題,以此降低風(fēng)險(xiǎn)預(yù)測(cè)對(duì)訓(xùn)練樣本的需求量,且不需要標(biāo)注風(fēng)險(xiǎn)類別,在樣本遷移學(xué)習(xí)的基礎(chǔ)上采用貝葉斯理論預(yù)測(cè)出源領(lǐng)域風(fēng)險(xiǎn)數(shù)據(jù)集和目標(biāo)數(shù)據(jù)集上的概率參數(shù),得出軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)算法,進(jìn)而實(shí)現(xiàn)軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)。該方法只是將預(yù)測(cè)問題進(jìn)行轉(zhuǎn)化,進(jìn)而減少數(shù)據(jù)量,但這一處理會(huì)將數(shù)據(jù)中的有用信息損失掉,為了全面預(yù)測(cè)數(shù)據(jù)只能增加工作量,因此加長(zhǎng)了預(yù)測(cè)時(shí)間,降低預(yù)測(cè)效率,也不能保證軟件風(fēng)險(xiǎn)預(yù)測(cè)的總體精度。
為了解決上述方法中存在的問題,提出基于非線性集成深度學(xué)習(xí)的軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法。
利用主成分分析法將軟件風(fēng)險(xiǎn)數(shù)據(jù)進(jìn)行簡(jiǎn)化,可確保信息損失最小化的同時(shí)將數(shù)據(jù)進(jìn)行降維[7],因此選擇主成分分析法對(duì)軟件模塊風(fēng)險(xiǎn)數(shù)據(jù)進(jìn)行預(yù)處理。
假設(shè)軟件模塊數(shù)據(jù)集中包括n個(gè)訓(xùn)練樣本,且每個(gè)訓(xùn)練樣本中都含有ρ個(gè)觀測(cè)變量,則此訓(xùn)練數(shù)據(jù)集的矩陣表達(dá)式為
(1)
主成分分析法的本質(zhì)就是線性組合訓(xùn)練樣本中的ρ個(gè)觀測(cè)變量,構(gòu)成全新的變量,即主成分變量,其表達(dá)式為
(2)
簡(jiǎn)化后的表達(dá)式為
Fi=w1ix1+w2ix2+…+wpixρ
(3)
式中,i=1,2,…,p。
上式中每個(gè)數(shù)據(jù)的主成分系數(shù)平方和都等于1,其表達(dá)式如下所示
(4)
式中,k=1,2,…,p。
在主成分分析法中不同主成分之間互不依賴,其表達(dá)式為
COV(Fi,F(xiàn)j)=0
(5)
式中,i=1,2,…,p,j=1,2,…,p,且i≠j。
在主成分分析法中,軟件數(shù)據(jù)的主成分變量F1可生成主成分變量中最大的主成分方差,其余變量互不相關(guān),F(xiàn)2變量方差小于F1變量方差,以此類推可知Fi變量方差為最小。
經(jīng)過對(duì)主成分分析法的分析可總結(jié)出基于主成分分析法的軟件數(shù)據(jù)原始變量的處理過程如下:
步驟一,標(biāo)準(zhǔn)化處理軟件風(fēng)險(xiǎn)原始數(shù)據(jù)集X可獲取標(biāo)準(zhǔn)矩陣,其表達(dá)式為
X′ij=(xij-xmin)/(xmax-xmin)
(6)
式中,xmax表示軟件原始數(shù)據(jù)集內(nèi)風(fēng)險(xiǎn)數(shù)據(jù)的最大值,xmin表示軟件原始數(shù)據(jù)集內(nèi)風(fēng)險(xiǎn)數(shù)據(jù)的最小值。
步驟二,求解出標(biāo)準(zhǔn)矩陣X′的協(xié)方差矩陣
(7)
步驟三,運(yùn)算協(xié)方差矩陣R的特征方程|R-λIρ|=0,在其中提取出軟件特征值,并根據(jù)自大到小的順序進(jìn)行排列,得到λ1≥λ2≥…≥λρ,特征值越大代表數(shù)據(jù)中的主成分影響力越大,根據(jù)特征值求解出特征向量,將向量分別記為η1,η2,…,ηρ。
步驟四,在軟件數(shù)據(jù)特征值的基礎(chǔ)上運(yùn)算出軟件數(shù)據(jù)前m個(gè)主成分的累計(jì)貢獻(xiàn)率,通常情況下,提取累計(jì)貢獻(xiàn)率在85%-95%之間特征值相對(duì)應(yīng)的m個(gè)主成分,且m
(8)
將軟件數(shù)據(jù)經(jīng)過主成分分析法處理后即可將其轉(zhuǎn)換成數(shù)量少且互不依賴的軟件數(shù)據(jù)集,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)降維[8]。
將經(jīng)過降維處理后的軟件數(shù)據(jù)進(jìn)行風(fēng)險(xiǎn)預(yù)測(cè),預(yù)測(cè)包含樣本集初始化、權(quán)重更新以及預(yù)測(cè)軟件風(fēng)險(xiǎn)三大部分[9]。
非線性集成深度學(xué)習(xí)方法是通過集成深度學(xué)習(xí)模式得到非線性分類器,實(shí)現(xiàn)訓(xùn)練樣本集初始化后,重復(fù)進(jìn)行Boosting學(xué)習(xí)算法,直到獲取大量的弱分類器和相應(yīng)的權(quán)重值后停止Boosting學(xué)習(xí)算法,根據(jù)數(shù)據(jù)權(quán)重值集成所有弱分類器進(jìn)而構(gòu)成非線性集成深度學(xué)習(xí)分類器。
將非線性集成深度學(xué)習(xí)中的訓(xùn)練樣本進(jìn)行標(biāo)記,此標(biāo)簽類別具有可靠性,因而可直接在軟件訓(xùn)練樣本內(nèi)任意抽取樣本進(jìn)行初始化處理,而其它集成深度學(xué)習(xí)方法標(biāo)記的標(biāo)簽中存在“偽類別標(biāo)簽”,導(dǎo)致其方法的標(biāo)簽不可靠,因此在利用非線性集成深度學(xué)習(xí)進(jìn)行訓(xùn)練的軟件樣本必須是未經(jīng)過其它集成深度學(xué)習(xí)方法處理的原始軟件樣本,才可生成質(zhì)量較高的非線性集成深度學(xué)習(xí)分類器。
假設(shè)在等價(jià)計(jì)算最小化函數(shù)條件下,未標(biāo)記的訓(xùn)練樣本存在風(fēng)險(xiǎn)的概率方程為
(9)
式中,pi表示未標(biāo)記的軟件訓(xùn)練模塊xi存在風(fēng)險(xiǎn)的概率。
在等價(jià)計(jì)算最小化函數(shù)條件下,未標(biāo)記的訓(xùn)練樣本不存在風(fēng)險(xiǎn)的概率方程為
(10)
式中,qi表示未標(biāo)記的軟件訓(xùn)練模塊xi不存在風(fēng)險(xiǎn)的概率。
(11)
在多次Boosting運(yùn)算過程中集成深度學(xué)習(xí)會(huì)生成大量的弱分類器和權(quán)重值,提取第t次運(yùn)算得到的弱分類器和權(quán)重值,將其分別記為ft(x)和αt,并根據(jù)此次Boosting運(yùn)算結(jié)果更新軟件訓(xùn)練樣本集的權(quán)重向量,更新后的向量記為Dt+1,利用Dt+1即可進(jìn)行下一次Boosting運(yùn)算。
通常情況下,集成深度學(xué)習(xí)會(huì)在上一次Boosting運(yùn)算結(jié)果的基礎(chǔ)上更新樣本的權(quán)重向量,但這種更新向量的辦法會(huì)導(dǎo)致錯(cuò)誤分類訓(xùn)練樣本的權(quán)重過高,反之正確分類樣本的權(quán)重過低,且在預(yù)測(cè)風(fēng)險(xiǎn)樣本的過程中,此方法未將錯(cuò)誤預(yù)測(cè)風(fēng)險(xiǎn)成本考慮在內(nèi),導(dǎo)致測(cè)試成本急劇升高,其中將有風(fēng)險(xiǎn)樣本預(yù)測(cè)成無風(fēng)險(xiǎn)樣本會(huì)造成系統(tǒng)崩潰,可總結(jié)出將有風(fēng)險(xiǎn)樣本預(yù)測(cè)成無風(fēng)險(xiǎn)樣本比將無風(fēng)險(xiǎn)樣本預(yù)測(cè)成有風(fēng)險(xiǎn)樣本所使用的成本會(huì)更高,因而在預(yù)測(cè)軟件風(fēng)險(xiǎn)過程中,必須十分注意有風(fēng)險(xiǎn)模塊,則軟件訓(xùn)練樣本中存在風(fēng)險(xiǎn)和不存在風(fēng)險(xiǎn)的更新權(quán)重向量方案表達(dá)式分別為
(12)
利用上述方案更新權(quán)重向量不僅顧忌到Boosting運(yùn)算結(jié)果,又顧忌軟件樣本自身屬性,在分類軟件樣本的過程中,將存在風(fēng)險(xiǎn)的樣本正確分類,其權(quán)重不變,而錯(cuò)誤分類其權(quán)重會(huì)升高,將不存在風(fēng)險(xiǎn)的樣本正確分類其權(quán)重下降,錯(cuò)誤分類其權(quán)重不變,從而實(shí)現(xiàn)在運(yùn)算過程中突顯風(fēng)險(xiǎn)樣本,使其更加受關(guān)注,盡可能避免將有風(fēng)險(xiǎn)軟件預(yù)測(cè)成無風(fēng)險(xiǎn)軟件。
在更新權(quán)重向量的基礎(chǔ)上進(jìn)行下一次Boosting運(yùn)算,最終得到T個(gè)弱分類器和對(duì)應(yīng)權(quán)重,融合所有分類器構(gòu)成非線性集成深度學(xué)習(xí)分類器,通過此分類器得出軟件模塊中是否包含風(fēng)險(xiǎn),則非線性集成深度學(xué)習(xí)風(fēng)險(xiǎn)預(yù)測(cè)過程為:
1)在高斯函數(shù)運(yùn)算軟件基礎(chǔ)上求解軟件模塊間的相似度,則相似度表達(dá)式為:
(13)
2)初始化軟件訓(xùn)練樣本集
3)更新權(quán)重向量
求解出可更新軟件樣本集的權(quán)重向量公式,獲取t+1次弱分類器和其權(quán)重,不間斷地更新分類器直到Boosting運(yùn)算結(jié)束停止更新。
利用權(quán)重將存在風(fēng)險(xiǎn)的軟件模塊和不存在風(fēng)險(xiǎn)的軟件模塊仔細(xì)分類,并凸顯出存在風(fēng)險(xiǎn)的軟件模塊,實(shí)現(xiàn)軟件模塊的風(fēng)險(xiǎn)預(yù)測(cè)。
為了驗(yàn)證所提方法的整體有效性,在內(nèi)存為8G,CPU是3.20GHz的硬件環(huán)境下對(duì)所提方法、文獻(xiàn)[4]方法和文獻(xiàn)[5]方法進(jìn)行F1分?jǐn)?shù)、AUC分?jǐn)?shù)和混淆矩陣的測(cè)試。
任意選取6組數(shù)據(jù)在μ為0.1,0.2,0.3,0.4,0.5的環(huán)境下計(jì)算出三種風(fēng)險(xiǎn)預(yù)測(cè)方法的平均F1數(shù)值,μ是軟件模塊訓(xùn)練集中已標(biāo)記模塊和未標(biāo)記模塊的比值,即μ越大,則被標(biāo)記的軟件模塊越多,圖1為不同方法的F1分?jǐn)?shù)對(duì)比結(jié)果。
圖1 μ不同時(shí)三種方法的F1分?jǐn)?shù)
根據(jù)圖1可知,隨著μ值越來越大,三種風(fēng)險(xiǎn)預(yù)測(cè)方法的F1數(shù)值都有所上升,說明風(fēng)險(xiǎn)預(yù)測(cè)效果都有提升,但所提方法的上升能力最強(qiáng),這是因?yàn)樗岱椒ㄔ陬A(yù)測(cè)軟件模塊風(fēng)險(xiǎn)前對(duì)軟件模塊數(shù)據(jù)進(jìn)行了預(yù)處理,降低了數(shù)據(jù)維度,進(jìn)而降低了風(fēng)險(xiǎn)預(yù)測(cè)難度,提高了軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)的精度。
當(dāng)μ等于0.1,0.2,0.3時(shí),三種軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法在5組數(shù)據(jù)集中的AUC分?jǐn)?shù)如表1、表2和表3所示。
表1 μ為0.1時(shí)三種方法的AUC分?jǐn)?shù)
表2 μ為0.2時(shí)三種方法的AUC分?jǐn)?shù)
表3 μ為0.3時(shí)三種方法的AUC分?jǐn)?shù)
AUC分?jǐn)?shù)越接近1說明方法的風(fēng)險(xiǎn)預(yù)測(cè)效果越好,根據(jù)表中數(shù)據(jù)可知,所提方法的AUC分?jǐn)?shù)更接近1,可證明所提方法的風(fēng)險(xiǎn)預(yù)測(cè)效果更好,這是因?yàn)樗岱椒ɡ弥鞒煞址治龇ㄔ诒WC數(shù)據(jù)不被損失的情況下將數(shù)據(jù)進(jìn)行降維,保證軟件模塊在預(yù)測(cè)過程中信息十分全面,需要分類的數(shù)據(jù)數(shù)量較少,大大增加了預(yù)測(cè)準(zhǔn)確率,增大AUC的面積值,進(jìn)而提高了AUC分?jǐn)?shù)。
混淆矩陣是判斷學(xué)習(xí)分類問題優(yōu)劣的重要指標(biāo),混淆矩陣中的每列表示預(yù)測(cè)類別,每列總和就是預(yù)測(cè)該類別的數(shù)據(jù)總數(shù),每行表示數(shù)據(jù)的實(shí)際類別,每行總數(shù)表示此類別的實(shí)際風(fēng)險(xiǎn)數(shù)據(jù)數(shù)量,現(xiàn)選取150個(gè)軟件模塊數(shù)據(jù),測(cè)試不同方法的混淆矩陣,結(jié)果如表4、表5和表6所示。
表5 文獻(xiàn)[4]方法混淆矩陣
表6 文獻(xiàn)[5]方法混淆矩陣
根據(jù)表4、表5和表6可知,所提方法正確預(yù)測(cè)第一類別的數(shù)據(jù)數(shù)量是43個(gè),其余兩種方法分別是30個(gè)和29個(gè),第二類別所提方法正確預(yù)測(cè)的數(shù)據(jù)數(shù)量是45個(gè),其余兩種方法分別是39個(gè)和36個(gè),第三種類別預(yù)測(cè)出的風(fēng)險(xiǎn)數(shù)據(jù)數(shù)量仍是所提方法最高,這是因?yàn)樗岱椒ㄌ崆皩④浖?shù)據(jù)處理成互不依賴的精簡(jiǎn)數(shù)據(jù),但其中又含有大量有用信息,因此在預(yù)測(cè)過程中不僅加快預(yù)測(cè)時(shí)間,又保證了軟件風(fēng)險(xiǎn)預(yù)測(cè)的總體精度。
為解決目前方法所存在的問題,提出基于非線性集成深度學(xué)習(xí)的軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)方法,該方法首先對(duì)軟件模塊數(shù)據(jù)進(jìn)行預(yù)處理,并將訓(xùn)練集初始化以及更新權(quán)重,獲取非線性集成深度學(xué)習(xí)分類器,進(jìn)而實(shí)現(xiàn)軟件模塊風(fēng)險(xiǎn)預(yù)測(cè),解決軟件模塊風(fēng)險(xiǎn)預(yù)測(cè)效果差的問題,提高工作效率的同時(shí)大大提高了軟件測(cè)試精度。