尤姍姍,劉雪嬌
(杭州師范大學信息科學與技術學院,浙江 杭州 311121)
如今計算機中軟件的占比不斷上升,系統越來越依賴軟件,導致軟件出現任何程度的風險都會造成計算機系統出現錯誤、失效和崩潰等情況[1]。通常情況下,為保證軟件模塊的穩定,有50%以上的資金都用于測試軟件風險,浪費了大量人力和財力,所以在開發軟件時利用有效的軟件風險模塊預測方法進行風險預測顯得尤為重要[2-3]。
陳曙[4]等人提出基于領域適配的跨項目軟件模塊風險預測方法,該方法將領域適配和學習預測模型相融合,建立出軟件樣本相關權重,將權重添加到系統樣本中,利用實例權重影響預測模型的訓練,將軟件樣本中的風險數據集分配到訓練數據集中,實現軟件模塊風險預測。該方法在預測軟件模塊風險前沒有對軟件模塊數據進行預處理,只能在較高維度中進行預測,使得預測難度過大,降低了軟件模塊風險預測的精度,存在F1分數低的問題。楊杰[5]等人提出基于多源異構的軟件模塊風險預測方法,該方法首先利用數據統計特征求解出度量元相似度,其次構建不同軟件項目的預測模型,輸入軟件參數,得到輸出結果,最后根據結果相似度大小加權整合所有輸出結果,實現軟件模塊風險預測。該方法沒有通過主成分分析法對數據進行處理,無法保證數據互不依賴,也不能確保數據在計算過程中不被遺漏,因此軟件模塊在預測過程中信息數量龐大,且十分分散,大大降低了預測準確率,AUC的面積也會下降,AUC分數隨之下降。包振棟[6]等人提出基于遷移學習的軟件模塊風險預測方法,該方法首先將軟件風險預測問題轉化為遷移學習問題,以此降低風險預測對訓練樣本的需求量,且不需要標注風險類別,在樣本遷移學習的基礎上采用貝葉斯理論預測出源領域風險數據集和目標數據集上的概率參數,得出軟件模塊風險預測算法,進而實現軟件模塊風險預測。該方法只是將預測問題進行轉化,進而減少數據量,但這一處理會將數據中的有用信息損失掉,為了全面預測數據只能增加工作量,因此加長了預測時間,降低預測效率,也不能保證軟件風險預測的總體精度。
為了解決上述方法中存在的問題,提出基于非線性集成深度學習的軟件模塊風險預測方法。
利用主成分分析法將軟件風險數據進行簡化,可確保信息損失最小化的同時將數據進行降維[7],因此選擇主成分分析法對軟件模塊風險數據進行預處理。
假設軟件模塊數據集中包括n個訓練樣本,且每個訓練樣本中都含有ρ個觀測變量,則此訓練數據集的矩陣表達式為

(1)
主成分分析法的本質就是線性組合訓練樣本中的ρ個觀測變量,構成全新的變量,即主成分變量,其表達式為

(2)
簡化后的表達式為
Fi=w1ix1+w2ix2+…+wpixρ
(3)
式中,i=1,2,…,p。
上式中每個數據的主成分系數平方和都等于1,其表達式如下所示

(4)
式中,k=1,2,…,p。
在主成分分析法中不同主成分之間互不依賴,其表達式為
COV(Fi,Fj)=0
(5)
式中,i=1,2,…,p,j=1,2,…,p,且i≠j。
在主成分分析法中,軟件數據的主成分變量F1可生成主成分變量中最大的主成分方差,其余變量互不相關,F2變量方差小于F1變量方差,以此類推可知Fi變量方差為最小。
經過對主成分分析法的分析可總結出基于主成分分析法的軟件數據原始變量的處理過程如下:
步驟一,標準化處理軟件風險原始數據集X可獲取標準矩陣,其表達式為
X′ij=(xij-xmin)/(xmax-xmin)
(6)
式中,xmax表示軟件原始數據集內風險數據的最大值,xmin表示軟件原始數據集內風險數據的最小值。
步驟二,求解出標準矩陣X′的協方差矩陣

(7)
步驟三,運算協方差矩陣R的特征方程|R-λIρ|=0,在其中提取出軟件特征值,并根據自大到小的順序進行排列,得到λ1≥λ2≥…≥λρ,特征值越大代表數據中的主成分影響力越大,根據特征值求解出特征向量,將向量分別記為η1,η2,…,ηρ。
步驟四,在軟件數據特征值的基礎上運算出軟件數據前m個主成分的累計貢獻率,通常情況下,提取累計貢獻率在85%-95%之間特征值相對應的m個主成分,且m

(8)
將軟件數據經過主成分分析法處理后即可將其轉換成數量少且互不依賴的軟件數據集,進而實現數據降維[8]。
將經過降維處理后的軟件數據進行風險預測,預測包含樣本集初始化、權重更新以及預測軟件風險三大部分[9]。
非線性集成深度學習方法是通過集成深度學習模式得到非線性分類器,實現訓練樣本集初始化后,重復進行Boosting學習算法,直到獲取大量的弱分類器和相應的權重值后停止Boosting學習算法,根據數據權重值集成所有弱分類器進而構成非線性集成深度學習分類器。
將非線性集成深度學習中的訓練樣本進行標記,此標簽類別具有可靠性,因而可直接在軟件訓練樣本內任意抽取樣本進行初始化處理,而其它集成深度學習方法標記的標簽中存在“偽類別標簽”,導致其方法的標簽不可靠,因此在利用非線性集成深度學習進行訓練的軟件樣本必須是未經過其它集成深度學習方法處理的原始軟件樣本,才可生成質量較高的非線性集成深度學習分類器。
假設在等價計算最小化函數條件下,未標記的訓練樣本存在風險的概率方程為

(9)
式中,pi表示未標記的軟件訓練模塊xi存在風險的概率。
在等價計算最小化函數條件下,未標記的訓練樣本不存在風險的概率方程為

(10)
式中,qi表示未標記的軟件訓練模塊xi不存在風險的概率。


(11)

在多次Boosting運算過程中集成深度學習會生成大量的弱分類器和權重值,提取第t次運算得到的弱分類器和權重值,將其分別記為ft(x)和αt,并根據此次Boosting運算結果更新軟件訓練樣本集的權重向量,更新后的向量記為Dt+1,利用Dt+1即可進行下一次Boosting運算。
通常情況下,集成深度學習會在上一次Boosting運算結果的基礎上更新樣本的權重向量,但這種更新向量的辦法會導致錯誤分類訓練樣本的權重過高,反之正確分類樣本的權重過低,且在預測風險樣本的過程中,此方法未將錯誤預測風險成本考慮在內,導致測試成本急劇升高,其中將有風險樣本預測成無風險樣本會造成系統崩潰,可總結出將有風險樣本預測成無風險樣本比將無風險樣本預測成有風險樣本所使用的成本會更高,因而在預測軟件風險過程中,必須十分注意有風險模塊,則軟件訓練樣本中存在風險和不存在風險的更新權重向量方案表達式分別為

(12)
利用上述方案更新權重向量不僅顧忌到Boosting運算結果,又顧忌軟件樣本自身屬性,在分類軟件樣本的過程中,將存在風險的樣本正確分類,其權重不變,而錯誤分類其權重會升高,將不存在風險的樣本正確分類其權重下降,錯誤分類其權重不變,從而實現在運算過程中突顯風險樣本,使其更加受關注,盡可能避免將有風險軟件預測成無風險軟件。
在更新權重向量的基礎上進行下一次Boosting運算,最終得到T個弱分類器和對應權重,融合所有分類器構成非線性集成深度學習分類器,通過此分類器得出軟件模塊中是否包含風險,則非線性集成深度學習風險預測過程為:

1)在高斯函數運算軟件基礎上求解軟件模塊間的相似度,則相似度表達式為:

(13)
2)初始化軟件訓練樣本集

3)更新權重向量
求解出可更新軟件樣本集的權重向量公式,獲取t+1次弱分類器和其權重,不間斷地更新分類器直到Boosting運算結束停止更新。
利用權重將存在風險的軟件模塊和不存在風險的軟件模塊仔細分類,并凸顯出存在風險的軟件模塊,實現軟件模塊的風險預測。
為了驗證所提方法的整體有效性,在內存為8G,CPU是3.20GHz的硬件環境下對所提方法、文獻[4]方法和文獻[5]方法進行F1分數、AUC分數和混淆矩陣的測試。
任意選取6組數據在μ為0.1,0.2,0.3,0.4,0.5的環境下計算出三種風險預測方法的平均F1數值,μ是軟件模塊訓練集中已標記模塊和未標記模塊的比值,即μ越大,則被標記的軟件模塊越多,圖1為不同方法的F1分數對比結果。

圖1 μ不同時三種方法的F1分數
根據圖1可知,隨著μ值越來越大,三種風險預測方法的F1數值都有所上升,說明風險預測效果都有提升,但所提方法的上升能力最強,這是因為所提方法在預測軟件模塊風險前對軟件模塊數據進行了預處理,降低了數據維度,進而降低了風險預測難度,提高了軟件模塊風險預測的精度。
當μ等于0.1,0.2,0.3時,三種軟件模塊風險預測方法在5組數據集中的AUC分數如表1、表2和表3所示。

表1 μ為0.1時三種方法的AUC分數

表2 μ為0.2時三種方法的AUC分數

表3 μ為0.3時三種方法的AUC分數
AUC分數越接近1說明方法的風險預測效果越好,根據表中數據可知,所提方法的AUC分數更接近1,可證明所提方法的風險預測效果更好,這是因為所提方法利用主成分分析法在保證數據不被損失的情況下將數據進行降維,保證軟件模塊在預測過程中信息十分全面,需要分類的數據數量較少,大大增加了預測準確率,增大AUC的面積值,進而提高了AUC分數。
混淆矩陣是判斷學習分類問題優劣的重要指標,混淆矩陣中的每列表示預測類別,每列總和就是預測該類別的數據總數,每行表示數據的實際類別,每行總數表示此類別的實際風險數據數量,現選取150個軟件模塊數據,測試不同方法的混淆矩陣,結果如表4、表5和表6所示。

表5 文獻[4]方法混淆矩陣

表6 文獻[5]方法混淆矩陣
根據表4、表5和表6可知,所提方法正確預測第一類別的數據數量是43個,其余兩種方法分別是30個和29個,第二類別所提方法正確預測的數據數量是45個,其余兩種方法分別是39個和36個,第三種類別預測出的風險數據數量仍是所提方法最高,這是因為所提方法提前將軟件數據處理成互不依賴的精簡數據,但其中又含有大量有用信息,因此在預測過程中不僅加快預測時間,又保證了軟件風險預測的總體精度。
為解決目前方法所存在的問題,提出基于非線性集成深度學習的軟件模塊風險預測方法,該方法首先對軟件模塊數據進行預處理,并將訓練集初始化以及更新權重,獲取非線性集成深度學習分類器,進而實現軟件模塊風險預測,解決軟件模塊風險預測效果差的問題,提高工作效率的同時大大提高了軟件測試精度。