楊騰翔, 萬(wàn) 琳, 王欽釗, 馬振宇,3, 韓志賀
(1. 陸軍裝甲兵學(xué)院信息工程系, 北京 100072; 2. 陸軍裝甲兵學(xué)院控制工程系, 北京 100072;3. 陸軍裝甲兵學(xué)院技術(shù)保障工程系, 北京 100072; 4. 31689部隊(duì), 吉林 四平 136000)
軟件缺陷預(yù)測(cè)主要用于判別軟件中是否包含缺陷,預(yù)測(cè)軟件中包含缺陷的數(shù)量或密度。預(yù)測(cè)過(guò)程屬于機(jī)器學(xué)習(xí)的范疇,依據(jù)不同方法構(gòu)建預(yù)測(cè)模型,完成軟件缺陷的預(yù)測(cè)工作。軟件缺陷預(yù)測(cè)[1-4]大致可分為靜態(tài)缺陷預(yù)測(cè)和動(dòng)態(tài)缺陷預(yù)測(cè),其中:靜態(tài)缺陷預(yù)測(cè)主要是依據(jù)軟件靜態(tài)屬性預(yù)測(cè)軟件中是否包含缺陷;動(dòng)態(tài)缺陷預(yù)測(cè)則是為了建立缺陷與相應(yīng)時(shí)間階段之間的規(guī)則聯(lián)系,記錄出現(xiàn)缺陷數(shù)量較多的時(shí)間段。目前,軟件缺陷預(yù)測(cè)模型主要有基于支持向量機(jī)(Support Vector Machine, SVM)的預(yù)測(cè)模型、基于神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)模型[5]和基于LASSO-SVM的預(yù)測(cè)模型[6]等。另外,研究者結(jié)合數(shù)據(jù)挖掘算法對(duì)模型的預(yù)測(cè)效果不斷進(jìn)行了改進(jìn),如:姜慧研等[7]提出了利用蟻群算法對(duì)軟件缺陷預(yù)測(cè)模型進(jìn)行改進(jìn);王男帥等[8]提出了利用遺傳算法優(yōu)化缺陷數(shù)據(jù)屬性和SVM參數(shù)的預(yù)測(cè)模型。
現(xiàn)階段,雖然缺陷預(yù)測(cè)技術(shù)一定程度上取得了相應(yīng)進(jìn)展,但仍存在以下問(wèn)題:1)度量元的選擇并沒(méi)有得出系統(tǒng)的論證,缺陷的度量元有幾十種且相互關(guān)聯(lián),在預(yù)測(cè)過(guò)程中需選擇對(duì)缺陷預(yù)測(cè)影響較大的度量元;2)數(shù)據(jù)集對(duì)現(xiàn)有缺陷預(yù)測(cè)模型的影響較大,對(duì)一組數(shù)據(jù)預(yù)測(cè)結(jié)果較好的模型,換一組數(shù)據(jù)或許就達(dá)不到預(yù)測(cè)的效果;3)缺陷數(shù)據(jù)的預(yù)處理和模型參數(shù)的選擇對(duì)預(yù)測(cè)結(jié)果的影響也較大。
針對(duì)上述問(wèn)題,筆者提出一種基于支持向量回歸(Support Vector Regression, SVR)的軟件缺陷密度預(yù)測(cè)模型。首先,考慮不同度量元對(duì)缺陷密度預(yù)測(cè)的影響,選擇與缺陷密度相關(guān)性較大的度量元,利用SVR構(gòu)建缺陷密度預(yù)測(cè)模型,并對(duì)預(yù)測(cè)數(shù)據(jù)進(jìn)
行歸一化和隨機(jī)排序,以降低數(shù)據(jù)集對(duì)預(yù)測(cè)模型的影響;然后,選取徑向基核函數(shù)(Radial Basis Function,RBF),并利用網(wǎng)格搜索的方法對(duì)模型參數(shù)進(jìn)行優(yōu)化;最后,通過(guò)實(shí)驗(yàn)驗(yàn)證預(yù)測(cè)模型的有效性。
王青等[9]研究表明:缺陷的存在符合二八原則,即80%的缺陷往往存在于20%的程序模塊中。缺陷密度是對(duì)軟件、程序模塊或源文件中缺陷數(shù)量和代碼行數(shù)關(guān)系的度量,反映了該模塊包含缺陷的概率。度量元是對(duì)程序內(nèi)在屬性的一種直觀表示,反映了程序代碼的質(zhì)量和復(fù)雜度。筆者將度量元、缺陷密度分別作為預(yù)測(cè)過(guò)程的輸入、輸出,通過(guò)預(yù)測(cè)模型建立二者之間的關(guān)系,用于下一步的預(yù)測(cè)。圖1為軟件項(xiàng)目的缺陷密度預(yù)測(cè)模型。
圖1 軟件項(xiàng)目的缺陷密度預(yù)測(cè)模型
本文引入Spearman秩相關(guān)系數(shù)的分析方法,用于衡量度量元和缺陷密度之間的關(guān)系,從而提取對(duì)缺陷密度影響較大的度量元,去除冗余的度量元。
給定軟件項(xiàng)目某度量元X和缺陷密度Y的n組數(shù)據(jù),可表示為X(X1,…,Xk,…,Xn)和Y(y1,…,yk,…,yn)。其中:Xk為第k個(gè)軟件項(xiàng)目的度量元;yk為第k個(gè)軟件項(xiàng)目的缺陷密度。
為分析度量元X和缺陷密度Y之間的相關(guān)程度,首先將X和Y中數(shù)據(jù)進(jìn)行配對(duì),得到數(shù)據(jù)組(X1,y1),…,(Xk,yk),…,(Xn,yn);然后將Xk和yk分別按照大小排序,獲得Xk和yk在2個(gè)順序樣本中的排名(即秩),記作Rk和Sk。由此可以得到數(shù)據(jù)組的n對(duì)秩,即(R1,S1),…,(Rk,Sk),…,(Rn,Sn)。利用Spearman秩相關(guān)系數(shù)衡量X和Y之間的相關(guān)程度,可表示為
(1)
式中:
(2)
(3)
dk=Rk-Sk。
(4)
注:1)r的取值范圍為[-1,1];2)當(dāng)r>0時(shí),表明X和Y正相關(guān),當(dāng)r<0時(shí),表明X和Y負(fù)相關(guān);3)|r|越大,說(shuō)明X和Y的相關(guān)程度越高;4)當(dāng)r=1時(shí),則X和Y完全正相關(guān),當(dāng)r=-1時(shí),則X和Y完全負(fù)相關(guān)。
為了避免在數(shù)據(jù)處理過(guò)程中因某個(gè)或某些度量元數(shù)值差別過(guò)大而影響計(jì)算的精度,加快程序的收斂速度,需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。歸一化就是將度量元屬性數(shù)值規(guī)范到 [0,1]的過(guò)程,不影響原始數(shù)據(jù)屬性對(duì)回歸模型的預(yù)測(cè)。本文將單個(gè)維度下的度量元數(shù)據(jù)分別進(jìn)行歸一化,即
(5)
另外,樣本的排序?qū)?shí)驗(yàn)結(jié)果必然產(chǎn)生一定的影響,本文利用隨機(jī)抽樣的方法對(duì)數(shù)據(jù)順序進(jìn)行重新排列,避免因?yàn)橛?xùn)練集和測(cè)試集中個(gè)別實(shí)驗(yàn)數(shù)據(jù)異常而影響回歸預(yù)測(cè)的整體效果,從而找出擬合度較高的回歸模型。
給定數(shù)據(jù)樣本集合{(x1,y1),…,(xi,yi),…,(xl,yl)},其中,xi(i=1,2,…,l)為第i個(gè)軟件項(xiàng)目的度量元向量,yi為第i個(gè)軟件項(xiàng)目的缺陷密度,xi∈Rn,yi∈R。尋找Rn上的一個(gè)模型f(x)來(lái)擬合這些點(diǎn),以便用該模型推斷任一輸入x所對(duì)應(yīng)的y值。其中,
f(x)=w·x+b,
(6)
式中:w為超平面的法向量;b為常數(shù)。
回歸預(yù)測(cè)的過(guò)程就是尋找一個(gè)最優(yōu)超平面,使所有的樣本點(diǎn)距離超平面的“總偏差”較小,因此采用一個(gè)正則化的誤差函數(shù)進(jìn)行度量,即
(7)
式中:f(xi)為第i個(gè)軟件項(xiàng)目缺陷密度的預(yù)測(cè)值。
則原問(wèn)題可轉(zhuǎn)化為最優(yōu)化問(wèn)題:
(8)
(9)
式中:C為懲罰因子;ε為允許的范圍誤差;ν為支持向量的個(gè)數(shù);ξi、ξi*分別為訓(xùn)練樣本對(duì)于超平面的上、下偏差。
引入拉格朗日乘子αi,得到對(duì)偶形式:
(10)
(11)
式中:K(xi,xj)為核函數(shù)。
最終建立的SVR預(yù)測(cè)模型為
(12)
通過(guò)上述方法構(gòu)建出軟件缺陷密度預(yù)測(cè)模型,給定任一輸入的度量元向量x,則能夠預(yù)測(cè)出軟件項(xiàng)目所對(duì)應(yīng)的缺陷密度y。
為了提高模型對(duì)缺陷密度預(yù)測(cè)的效果,首先需要對(duì)模型中的核函數(shù)進(jìn)行選擇。合適的核函數(shù)能夠較好地將低維空間的非線性問(wèn)題轉(zhuǎn)化為高維空間的線性問(wèn)題,在高維空間中尋找回歸問(wèn)題的最優(yōu)超平面,解決了傳統(tǒng)方法在轉(zhuǎn)化過(guò)程中出現(xiàn)的計(jì)算量劇增的問(wèn)題。
在缺陷密度的回歸預(yù)測(cè)過(guò)程中,核函數(shù)的作用可表示為:首先,把度量元所表示的向量x轉(zhuǎn)化到高維空間的向量x′,并計(jì)算出高維空間中回歸模型的w′和b′;然后,通過(guò)f(x′)=w′·x′+b′進(jìn)一步得到回歸結(jié)果。核函數(shù)的目的就是建立數(shù)據(jù)從低維到高維轉(zhuǎn)換的映射關(guān)系,當(dāng)給定低維空間的w和x時(shí),可直接輸出確定的f(x′)。
模型中最常用的核函數(shù)主要有線性核函數(shù)、多項(xiàng)式核函數(shù)和RBF核函數(shù)[8-9]。其中,RBF核函數(shù)是某種沿徑向?qū)ΨQ的標(biāo)量函數(shù),能夠?qū)?shù)據(jù)映射到無(wú)窮維,同時(shí)能夠逼近任意非線性函數(shù),具有良好的泛化能力,收斂速度較快。因此,本文采用RBF核函數(shù)構(gòu)建軟件缺陷密度預(yù)測(cè)模型,其表達(dá)式為
(13)
式中:xj為RBF核函數(shù)的中心;σ為RBF核函數(shù)的寬度系數(shù),決定著核函數(shù)的徑向作用范圍。
雖然SVR模型中存在默認(rèn)參數(shù),但在實(shí)際問(wèn)題中并不能適用于所有問(wèn)題的最優(yōu)解,因此在研究具體問(wèn)題時(shí)需要優(yōu)化參數(shù)。參數(shù)優(yōu)化包括懲罰因子C和g參數(shù)[10]的設(shè)置,其中:懲罰因子C在確定的特征空間中控制回歸曲線的平滑度并折中經(jīng)驗(yàn)風(fēng)險(xiǎn);g參數(shù)用來(lái)調(diào)節(jié)RBF核函數(shù)中的σ,決定著RBF核函數(shù)的性能[11]。對(duì)于C、g這2個(gè)參數(shù),國(guó)際上并沒(méi)有給出公認(rèn)統(tǒng)一的設(shè)置方法,需要根據(jù)具體研究對(duì)象和樣本數(shù)據(jù)特點(diǎn)進(jìn)行優(yōu)化。
網(wǎng)格搜索法是一種遍歷搜索的優(yōu)化方法,其優(yōu)化過(guò)程是依據(jù)步距將數(shù)值范圍劃分成網(wǎng)格,將所有數(shù)值分組并不斷取任何可能的值。
參數(shù)優(yōu)化的實(shí)質(zhì)是針對(duì)不同的研究對(duì)象選擇合適的(C,g)數(shù)據(jù)對(duì)。在缺陷密度的預(yù)測(cè)模型中設(shè)置C、g的數(shù)值范圍,根據(jù)搜索步長(zhǎng)將C、g分別劃分為n1、n2組數(shù)值,然后將這些數(shù)值進(jìn)行配對(duì),共有n1·n2組(C,g)數(shù)據(jù)對(duì)。網(wǎng)格搜索就是對(duì)n1·n2組參數(shù)進(jìn)行遍歷搜索,通過(guò)驗(yàn)證選擇出預(yù)測(cè)精度較高的(C,g)數(shù)據(jù)對(duì)作為最優(yōu)參數(shù)。
驗(yàn)證過(guò)程采用十折交叉檢驗(yàn)的方法,其主要過(guò)程是將所有的數(shù)據(jù)樣本劃分為10個(gè)子集,每個(gè)子集都將被其余數(shù)據(jù)訓(xùn)練后作為測(cè)試集。整個(gè)過(guò)程需要進(jìn)行10次,直到每個(gè)子集都被當(dāng)作一次測(cè)試集,最后將10次的平均交叉驗(yàn)證誤差作為最終結(jié)果。網(wǎng)格搜索法通過(guò)設(shè)置搜索步長(zhǎng)對(duì)參數(shù)進(jìn)行全面搜索,與其他啟發(fā)式或逼近的優(yōu)化方法相比,搜索的范圍更全面。由于每個(gè)(C,g)對(duì)是相互獨(dú)立的,因此運(yùn)算時(shí)可并行性高,能夠節(jié)省一定的時(shí)間開(kāi)銷。
為驗(yàn)證基于SVR軟件缺陷密度預(yù)測(cè)模型的效果,筆者基于MATLAB2016a、VS2010平臺(tái)C++編譯環(huán)境以及LibSVM工具包進(jìn)行測(cè)試。實(shí)驗(yàn)采用我國(guó)特種車輛軟件評(píng)測(cè)中心以及通用裝備保障軟件評(píng)測(cè)中心的33組實(shí)驗(yàn)數(shù)據(jù)進(jìn)行測(cè)試。首先利用軟件靜態(tài)分析工具LogiScope對(duì)軟件項(xiàng)目進(jìn)行度量,采集44個(gè)軟件缺陷度量元,通過(guò)Spearman相關(guān)系數(shù)分析法選擇對(duì)缺陷密度影響較大的5種缺陷度量元進(jìn)行回歸預(yù)測(cè),分別是耦合因子(ap_cof)、違反結(jié)構(gòu)化編程數(shù)量(struc_pg)、使用某個(gè)類的類數(shù)量(cu_cdusers)、某個(gè)類使用的類數(shù)量(cu_cdused)和子類數(shù)量(in_noc)。然后與Bagging、LinearRegression、Gaussian processes、IBK、MultilayerPerceptron五種機(jī)器學(xué)習(xí)算法進(jìn)行對(duì)比實(shí)驗(yàn)分析,5種機(jī)器學(xué)習(xí)算法分別基于不同的原理構(gòu)建預(yù)測(cè)模型,分析輸入和輸出之間的關(guān)系,算法具體描述如表1所示。
表1 機(jī)器學(xué)習(xí)算法描述
通過(guò)隨機(jī)抽樣的方法對(duì)33組數(shù)據(jù)進(jìn)行重新排序后,分析預(yù)測(cè)結(jié)果,搜索預(yù)測(cè)結(jié)果較好的數(shù)據(jù)序列進(jìn)行預(yù)測(cè)分析。將最優(yōu)數(shù)據(jù)序列的前22組作為訓(xùn)練集,后11組數(shù)據(jù)作為測(cè)試集,驗(yàn)證網(wǎng)格搜索后預(yù)測(cè)模型的可行性和有效性。筆者采用均方根誤差、平均絕對(duì)誤差、相對(duì)平方根誤差和相對(duì)絕對(duì)誤差4個(gè)指標(biāo),分析預(yù)測(cè)的缺陷密度值和實(shí)際缺陷密度值之間的誤差,各個(gè)指標(biāo)的表達(dá)式如下:
均方根誤差:
(14)
平均絕對(duì)誤差:
(15)
相對(duì)平方誤差:
(16)
相對(duì)絕對(duì)誤差:
(17)
另外,通過(guò)相關(guān)系數(shù)衡量預(yù)測(cè)模型中度量元數(shù)據(jù)和缺陷密度的相關(guān)程度,相關(guān)系數(shù)越大,說(shuō)明構(gòu)建的預(yù)測(cè)模型效果越好。
支持向量回歸共有ε-SVR和ν-SVR兩種類型。下面通過(guò)實(shí)驗(yàn)分析采用ε-SVR和ν-SVR的不同預(yù)測(cè)效果,結(jié)果對(duì)比如表2所示。可知:支持向量回歸中ν-SVR模型預(yù)測(cè)效果較好,這是因?yàn)棣?SVR模型在預(yù)測(cè)過(guò)程中能夠自動(dòng)將允許的范圍誤差ε最小化,而且能夠控制支持向量的個(gè)數(shù)ν,支持向量的個(gè)數(shù)直接決定預(yù)測(cè)的效果。
表2 不同SVR類型預(yù)測(cè)結(jié)果對(duì)比
因此,筆者選取ν-SVR模型進(jìn)行實(shí)驗(yàn),并將參數(shù)優(yōu)化后的SVR預(yù)測(cè)模型與5種機(jī)器學(xué)習(xí)算法的預(yù)測(cè)模型進(jìn)行對(duì)比分析,其缺陷密度預(yù)測(cè)結(jié)果對(duì)比如表3所示。
表3 不同預(yù)測(cè)模型缺陷密度預(yù)測(cè)結(jié)果對(duì)比
由表3可見(jiàn):與基于5種機(jī)器學(xué)習(xí)算法構(gòu)建的預(yù)測(cè)模型相比,本文的SVR預(yù)測(cè)模型得到的缺陷密度預(yù)測(cè)誤差較小,度量元數(shù)據(jù)和缺陷密度的相關(guān)系數(shù)較大,表明該模型的預(yù)測(cè)效果較好。
通過(guò)網(wǎng)格搜索法對(duì)SVR預(yù)測(cè)模型參數(shù)尋優(yōu)后,得到C的最優(yōu)值為8,g的最優(yōu)值為0.5,結(jié)果如圖2所示。
測(cè)試集模型的預(yù)測(cè)結(jié)果如圖3所示,可以看出:
圖2 SVR參數(shù)尋優(yōu)結(jié)果
圖3 測(cè)試集模型的預(yù)測(cè)結(jié)果
缺陷密度回歸預(yù)測(cè)值基本能夠擬合實(shí)際缺陷密度值,誤差在合理范圍之內(nèi)。
筆者通過(guò)Spearman相關(guān)系數(shù)提取對(duì)缺陷密度影響較大的缺陷度量元數(shù)據(jù),利用SVR構(gòu)建軟件缺陷密度預(yù)測(cè)模型,并采用網(wǎng)格搜索法對(duì)模型中參數(shù)(C,g)進(jìn)行優(yōu)化,一定程度上提高了回歸預(yù)測(cè)的效果,最后與5種機(jī)器學(xué)習(xí)算法進(jìn)行了對(duì)比實(shí)驗(yàn),結(jié)果表明:所建立的SVR預(yù)測(cè)模型是有效的,能較好地預(yù)測(cè)軟件缺陷。
[1] 陳翔,顧慶,劉望舒,等. 靜態(tài)軟件缺陷預(yù)測(cè)方法研究[J].軟件學(xué)報(bào),2016(1):1-25.
[2] AGARWAL S,TOMAR D,Prediction of software defects using twin support vector machine[C]∥International conference on information systems and computer networks.Mattura:IEEE,2014:128-132.
[3] SUFFIAN M D M,IBRAHIM S.A prediction model for system testing defects using regression analysis[J].International journal of soft computing & software engineering,2012,2(7):55-68.
[4] OKUTAN A,YILDIZ O T.Software defect prediction using Baye-sian networks[J]. Empirical software engineering,2014,19(1):154-181.
[5] 王李進(jìn),吳保國(guó),鄭德祥.基于人工神經(jīng)網(wǎng)絡(luò)的軟件質(zhì)量評(píng)價(jià)[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(12):133-134,150.
[6] 吳曉萍,趙學(xué)靖,喬輝,等.基于LASSO-SVM的軟件缺陷預(yù)測(cè)模型研究[J].計(jì)算機(jī)應(yīng)用研究,2013,30(9):2748-2751,2754.
[7] 姜慧研,宗茂,劉相瑩.基于ACO-SVM的軟件缺陷預(yù)測(cè)模型的研究[J].計(jì)算機(jī)學(xué)報(bào),2011,34(6):1148-1154.
[8] 王男帥,薛靜鋒,胡昌振,等.基于遺傳優(yōu)化支持向量機(jī)的軟件缺陷預(yù)測(cè)模型[J].中國(guó)科技論文,2015(2):159-163.
[9] 王青,伍書(shū)劍,李明樹(shù).軟件缺陷預(yù)測(cè)技術(shù)[J].軟件學(xué)報(bào),2008(7):1565-1580.
[10] RYU D,CHOI O,BAIK J.Value-cognitive boosting with a support vector machine for cross-project defect prediction[J].Empirical software engineering,2016,21(1):43-71.
[11] SHAN C,ZHU H J,HU C Z,et al.Software defect prediction model based on improved LLE-SVM[C]∥International Confe-rence on Computer Science and Network Technology.Harbin:IEEE,2015:530-535.