金秀玲,柯榮泰
(閩江學院數(shù)學與數(shù)據(jù)科學學院,福建 福州 350108)
隨著軟件生產(chǎn)規(guī)模和應用范圍的擴大,軟件缺陷是軟件開發(fā)中不可避免的事情。軟件缺陷會給軟件開發(fā)團隊帶來維護的困難,給企業(yè)帶來巨大損失。因此軟件缺陷預測成為軟件開發(fā)和軟件維護中不可缺少的一部分。利用數(shù)據(jù)挖掘技術(shù)分析軟件數(shù)據(jù)、預測軟件缺陷是一種切實可行的解決方案,可以提高軟件質(zhì)量,降低測試成本。因此隨著數(shù)據(jù)挖掘技術(shù)的革新,軟件缺陷預測的精度將逐步提高。這不僅可以減少測試成本,還能令軟件開發(fā)團隊迅速找到缺陷點,從而提高工作效率。
軟件組件每次執(zhí)行故障的風險都是可用的,因此可以從不同的角度分析軟件缺陷的故障概率。軟件開發(fā)生命周期一般包括分析、設計、實現(xiàn)、測試和發(fā)布階段。測試階段應該有效地操作,以便向最終用戶發(fā)布無bug 的軟件。近二十年來,國內(nèi)外學者對軟件缺陷預測問題日益關(guān)注,各種數(shù)據(jù)挖掘技術(shù)被應用于更穩(wěn)健的預測。2014年以來,軟件缺陷預測問題研究中,國際上選定的缺陷預測論文概括為:基于機器學習的預測算法,處理數(shù)據(jù),工作量預測的實證研究。研究界仍面臨構(gòu)建方法和許多研究機會存在一些挑戰(zhàn)[1]。另外,隨著計算機硬件的提升和深度學習技術(shù)發(fā)展,Arar 將傳統(tǒng)人工神經(jīng)網(wǎng)絡(ANN)與新型人工蜂群(ABC)算法相結(jié)合,構(gòu)建新的分類器對缺陷進行預測[2]。
在國內(nèi),隨著數(shù)據(jù)挖掘技術(shù)的發(fā)展,數(shù)據(jù)挖掘技術(shù)大量用于軟件缺陷的預測問題中。主要方法是使用分類器如BP神經(jīng)網(wǎng)絡、支持向量機、貝葉斯網(wǎng)絡、LDA、隨機森林等。朱永春等使用均方誤差改進預測的技術(shù)對軟件缺陷預測[3]。王青等人也對軟件缺陷預測的起源、發(fā)展及問題做出綜述[4]。王濤等構(gòu)建支持向量機的軟件缺陷預測模型[5];王科欣等使用貝葉斯網(wǎng)絡對軟件缺陷預測[6];姜慧研將蟻群優(yōu)化算法與支持向量機相結(jié)合建立軟件缺陷預測[7];王鐵建等基于多核字典學習對先軟件缺陷進行特征選取,構(gòu)建SVM 模型預測軟件缺陷[8];黃小亮等人提出了一種基于狄利克雷分布(LDA)的軟件缺陷分布方法等[9]。
國內(nèi)外對軟件缺陷預測模型及其應用進行了大量研究,基于SVM進行軟件缺陷預測分析,得到比較不錯的成效。普遍存在著優(yōu)化SVM模型同時,使得模型的復雜度增加,模型的參數(shù)難以確定。但在變量特征選取方面考慮甚少。特征選擇有助于排除不相關(guān)特征、偏見和不必要噪音的限制來建立預測模型。因此,特征選擇是模型構(gòu)建的一個重要方面。傳統(tǒng)的特征選擇原理是選取最優(yōu)子集,以減少特征個數(shù),提高模型精確度,減少運行時間的目的。這樣難免會造成有些與因變量相關(guān)性不夠強的特征被完全忽略,造成信息丟失。軟件缺陷預測的問題,是預測潛在但未暴露的缺陷,以缺陷盡早檢驗為原則,既可以減少修復成本,還能縮短缺陷修復時間。
Boruta特征選擇方法原理是選取所有與因變量相關(guān)的特征。滿足軟件缺陷預測行業(yè)精益求精的要求。將Boruta 降維方法與SVM 模型結(jié)合應用在軟件缺陷預測問題中。通過Boruta降維方法選取最優(yōu)的軟件編碼度量特征,減少SVM 特征集的復雜度,同時采用交叉驗證方法確定高斯徑向核函數(shù)的參數(shù),用于SVM 模型識別軟件缺陷和分類的研究中。比僅使用SVM 模型預測軟件缺陷的精度有顯著提高。
Boruta 降維方法是一種圍繞隨機森林周圍的包裝算法,通過計算每個特征的重要性,篩選出所有與因變量具有相關(guān)性的特征集合,特征送樣流程見圖1。
Boruta算法運行的步驟如下:
(1)通過增加原始數(shù)據(jù)集的隨機性成分,創(chuàng)建含有混合副本的所有特征(即陰影特征),在擴展數(shù)據(jù)集上運行隨機森林分類器,采用評判特征重要性措施(平均減少精度)——即Z值,用來評估每個特征的重要性,Z值越高則意味著該特征越重要;
(2)找出陰影特征中得分最大Z值。在每次迭代中,檢查一個真實特征的Z值,將特征得分高于最大陰影特征得分的真實特征標記為“重要”,將特征得分顯著小于最大陰影特征得分的真實特征標記為“不重要”,并且從特征集合中刪除不重要的特征;
(3)最后,重復上述步驟,直到所有特征得到確認或拒絕,或算法達到隨機森林運行的一個規(guī)定的限制時,算法停止。
圖1 特征選擇流程圖
單個特征的Z值計算公式:
一棵樹中用OOB(袋外數(shù)據(jù))樣本可以得到誤差e1;然后隨機改變OOB中的第j列,保持其他列不變,得到誤差e2;mean表示平均值;sd表示標準差。
SVM(support vector machine,支持向量機)是分類器算法,其核心思想是結(jié)構(gòu)風險最小化原則[10]。加入該技巧,使得SVM模型能夠高效地解決非線性可分情況。高斯徑向核函數(shù)(RBF)保留映射到無限維空間的能力,同時能保證半正定核矩陣。徑向核函數(shù)的支持向量機模型適用軟件缺陷二分類問題。
軟件缺陷預測是二類分類問題,對給定訓練集
其中,x為樣本輸入變量,n為樣本數(shù)量,d為樣本特征維度,y為樣本缺陷類別。
SVM分類決策函數(shù):
加入核技巧解決非線性劃分的問題;高斯徑向核函數(shù)K:
高斯徑向核函數(shù)下SVM決策變量函數(shù)變換為:
C為懲罰參數(shù)。
評價指標用于區(qū)分預測模型的優(yōu)劣,混淆矩陣是一個評價分類器性能的矩陣[11]。軟件缺陷的預測是一個典型的二分類問題,根據(jù)軟件缺陷預測結(jié)果可以得到一個基礎的混淆矩陣,見表1。
表1 軟件缺陷問題混淆矩陣
在混淆矩陣的基礎上,常用的幾個性能指標:
(1)準確率(Accuracy):分類器區(qū)分正確樣本的個數(shù)占所有測試樣本個數(shù)的比例
(2)精確率(Precision):預測正確的無缺陷數(shù)據(jù)占所有預測為無缺陷類別的樣本個數(shù)比例
(3)召回率(recall):衡量預測正確的無缺陷數(shù)據(jù)占無缺陷總數(shù)的比例
(4)誤判率(Probability of False alarm):衡量預測錯誤的有缺陷模塊占總體有缺陷模塊數(shù)的比例
(5)F1:常用的對精確率P和召回率R綜合評價的指標
為了提高SVM 的軟件缺陷預測模型的性能,采用Boruta 算法先對數(shù)據(jù)集進行特征選擇,達到降維的目的,再通過10 折交叉驗證方法優(yōu)化SVM 的懲罰參數(shù)C和核函數(shù)參數(shù)γ,提高SVM 的軟件缺陷分類準確率,構(gòu)建SVM模型。
Boruta-SVM 軟件缺陷預測方法運行的步驟如下,見圖2。
(1)數(shù)據(jù)準備:數(shù)據(jù)導入,對數(shù)據(jù)進行清洗,并將數(shù)據(jù)集隨機分為兩部分,70%的訓練數(shù)據(jù)以及30%的測試數(shù)據(jù);
(2)特征選?。豪肂oruta 方法對數(shù)據(jù)進行降維,選取最優(yōu)特征數(shù)據(jù)集;
(3)建立模型:利用Boruta得到的特征,適用分類器對訓練數(shù)據(jù)進行訓練,用10折交叉驗證方法,設定徑向核函數(shù)中的優(yōu)化參數(shù),得到相應的軟件缺陷預測SVM模型;
(4)評價分析:利用建模的軟件缺陷預測模型,對測試數(shù)據(jù)進行驗證分類,將利用模型分類的結(jié)果與原結(jié)果建立混淆矩陣,分析準確率、精準率、召回率、誤判率、F1值等。接著對模型性能進行對比分析。
圖2 軟件缺陷預測模型建立流程
軟件缺陷數(shù)據(jù)集為美國航天局(簡稱NASA)官網(wǎng)發(fā)布的MDP(Metric Database Program)公開數(shù)據(jù)集,是使用Java、C 以及C++語言進行開發(fā)的飛船儀表、衛(wèi)星飛行控制等軟件,數(shù)據(jù)庫共12 個子數(shù)據(jù)集,每個數(shù)據(jù)集代表一個NASA 軟件系統(tǒng)的代碼樣本,并都存在著一定的軟件缺陷。實驗采用數(shù)據(jù)庫中的5 個子數(shù)據(jù)集,其中特征數(shù)38 個是對軟件進行度量后所得度量屬性個數(shù),樣本數(shù)為測試軟件中的樣本總數(shù),缺陷數(shù)為含有缺陷的樣本個數(shù),缺陷率為軟件的缺陷數(shù)與樣本數(shù)的比值,見表2。
表2 NASA MDP數(shù)據(jù)子集
先對5 個數(shù)據(jù)PC1,PC3,PC4,CM1 和MW1 經(jīng)過數(shù)據(jù)的清洗后,數(shù)據(jù)按照7:3 隨機分成訓練集和測試機。分別用于模型的構(gòu)建和測試。采用Boruta算法對5個數(shù)據(jù)分別進行特征選擇,維度下降到27,32,16,17和34。對于SVM模型,高斯核函數(shù)的參數(shù)C,γ參數(shù)分布設置為區(qū)間[1,100],[0.01,4];運用10折交叉驗證實驗法確定構(gòu)造硬度變化曲線選擇最優(yōu)C=4,γ=0.01,建立最終的Boruta-SVM模型。為了驗證本文提出的算法是否能夠獲得較好的特征選擇結(jié)果,利用Boruta算法對NASA MDP 數(shù)據(jù)子集進行降維,將Boruta-SVM 軟件缺陷預測模型與SVM模型進行對比,對比結(jié)果如表3所示。
表3 Boruta-SVM 軟件缺陷預測結(jié)果
可知,經(jīng)過Boruta 方法降維后,軟件缺陷預測模型的準確率與原先SVM 的,準確率都有一致提高,其中MW1 提高幅度最大為7.3%;誤判率從分別下降40%,6.5%,10%,40%和50%,誤判率得到一致降低,而且降幅明顯;F1值也得到一致提高。結(jié)果表明Boruta—SVM 模型無論從準確率、誤判率以及F1值都對分類效果提升顯著。
Boruta-SVM 軟件缺陷預測模型在SVM 的基礎上準確率和F1值都有相應的提高,誤判率也明顯降低。誤判率降低了,工作人員修復缺陷的速率也得到了大幅度的提高,軟件出錯的可能性相對之前也低了不少。因此,可以認為采用Boruta 降維方法,把特征選擇結(jié)合SVM 應用于軟件缺陷預測問題,Boruta-SVM 軟件缺陷預測模型比原模型的分類效果更準確、更有效、且可執(zhí)行性強。
采用Boruta降維方法進行特征選擇,結(jié)合支持向量機算法的優(yōu)良分類性能,構(gòu)建應用于軟件缺陷預測的Boruta-SVM 模型。研究結(jié)果表明: 該模型可以優(yōu)化SVM模型的軟件缺陷預測性能,并且結(jié)論可靠、簡單易行,在軟件缺陷預測的研究中具有一定的實用性。