程雪平,陳海華
(廣州華商學(xué)院數(shù)據(jù)科學(xué)學(xué)院,廣州 511300)
軟件缺陷是指軟件系統(tǒng)中不被期望、不可接受的偏差[1]。軟件缺陷的產(chǎn)生主要源于對(duì)軟件需求做出了錯(cuò)誤的理解,或者在設(shè)計(jì)、編碼過程中,研發(fā)人員由于經(jīng)驗(yàn)或技術(shù)原因引入的人為錯(cuò)誤。軟件缺陷的存在可能會(huì)導(dǎo)致巨大的經(jīng)濟(jì)損失,甚至?xí){到人的生命安全。
軟件缺陷具有累積放大效應(yīng),即在整個(gè)軟件生命周期中,能夠越早地發(fā)現(xiàn)缺陷,其修復(fù)的代價(jià)就越??;反之,其修復(fù)的代價(jià)就越大?,F(xiàn)代軟件工程中,隨著軟件規(guī)模日益龐大,軟件復(fù)雜度越來越高,軟件開發(fā)的響應(yīng)速度、用戶對(duì)軟件質(zhì)量的要求均越來越高。如何合理分配有限的資源,及時(shí)發(fā)現(xiàn)、修復(fù)缺陷,是保證軟件質(zhì)量的關(guān)鍵。
軟件缺陷預(yù)測(cè)是保障軟件質(zhì)量的重要手段,也是近年來軟件工程領(lǐng)域的研究熱點(diǎn)問題之一[2]。軟件缺陷預(yù)測(cè)技術(shù)主要包括三個(gè)方向:一是通過軟件度量元數(shù)據(jù)對(duì)軟件模塊的缺陷傾向性進(jìn)行預(yù)測(cè);二是預(yù)測(cè)模塊的缺陷數(shù);三是對(duì)缺陷嚴(yán)重程度等進(jìn)行預(yù)測(cè)[3]。
軟件缺陷傾向性預(yù)測(cè)技術(shù)是軟件缺陷預(yù)測(cè)的重要研究方向,是對(duì)系統(tǒng)中的模塊是否存在缺陷做出預(yù)判,有助于提前對(duì)軟件測(cè)試的資源分配做好合理的安排,為軟件質(zhì)量提供堅(jiān)實(shí)的保障。軟件缺陷傾向性預(yù)測(cè)是一個(gè)不平衡的二分類問題[4],目前所使用的研究算法包括復(fù)雜網(wǎng)絡(luò)、多目標(biāo)優(yōu)化、深度學(xué)習(xí)等,更多的是基于機(jī)器學(xué)習(xí)算法進(jìn)行研究,如邏輯回歸、樸素貝葉斯、決策樹、支持向量機(jī)等算法[5]。
本文選取軟件缺陷預(yù)測(cè)中廣泛使用的數(shù)據(jù)倉(cāng)庫NASA MDP 中的部分?jǐn)?shù)據(jù)集,對(duì)原始數(shù)據(jù)中的異常值和重復(fù)值進(jìn)行預(yù)處理,然后使用三種不同的過采樣方法處理不平衡類,最后根據(jù)特征數(shù)據(jù)采用隨機(jī)森林算法構(gòu)建預(yù)測(cè)模型。
軟件缺陷傾向性預(yù)測(cè)過程由四部分組成:獲取軟件缺陷數(shù)據(jù)資源庫、數(shù)據(jù)預(yù)處理、處理類不平衡問題、構(gòu)建預(yù)測(cè)模型及評(píng)價(jià)指標(biāo),總體解決方案如圖1所示。
圖1 軟件缺陷傾向性預(yù)測(cè)方案模型
當(dāng)前,用于軟件缺陷預(yù)測(cè)的數(shù)據(jù)主要有兩大類,包括商業(yè)性的數(shù)據(jù)倉(cāng)庫和公共倉(cāng)庫。商業(yè)性數(shù)據(jù)倉(cāng)庫難以獲取,以這類數(shù)據(jù)源進(jìn)行研究,其實(shí)驗(yàn)結(jié)果難以比較和重現(xiàn),因此,研究人員通常利用公共數(shù)據(jù)倉(cāng)庫進(jìn)行研究。較為常見的公共庫包括NASA、PROMISE、AEEEM以及ReLink等,這些公共庫中的度量元與缺陷信息都是可用的,有利于實(shí)驗(yàn)結(jié)果的重現(xiàn)與分析比較。
NASA庫中總共包含13個(gè)缺陷數(shù)據(jù)集,其中,每個(gè)模塊對(duì)應(yīng)一條樣本數(shù)據(jù),無缺陷的模塊數(shù)據(jù)以N為標(biāo)記結(jié)束,有缺陷的模塊以Y為標(biāo)記結(jié)束,以CM1數(shù)據(jù)集為例,其數(shù)據(jù)結(jié)構(gòu)如圖2所示。
圖2 CM1數(shù)據(jù)結(jié)構(gòu)
本文選取NASA 庫中前四個(gè)數(shù)據(jù)集作為軟件缺陷傾向性預(yù)測(cè)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析比較:CM1、JM1、KC1、KC3。
觀察軟件缺陷實(shí)驗(yàn)數(shù)據(jù)集,無缺陷模塊數(shù)與有缺陷的模塊數(shù)相比,前者要多的多,這一現(xiàn)象與工程實(shí)踐中的軟件缺陷分布情況類似,即系統(tǒng)中的軟件缺陷分布基本滿足二八原則:20%的模塊集中了80%的缺陷數(shù)。
圖3 給出了CM1、JM1、KC1、KC3 四個(gè)數(shù)據(jù)集的有缺陷模塊與無缺陷模塊的計(jì)數(shù)餅圖。
圖3 實(shí)驗(yàn)數(shù)據(jù)集中有缺陷樣本與無缺陷樣本對(duì)比圖
無論是工程實(shí)踐,還是提供研究的公共數(shù)據(jù)倉(cāng)庫中,軟件缺陷預(yù)測(cè)數(shù)據(jù)集存在著嚴(yán)重的類不平衡問題。在軟件缺陷數(shù)據(jù)集中,由于有缺陷樣本與無缺陷樣本遵循二八定律,做缺陷傾向性預(yù)測(cè)時(shí),若把所有模塊預(yù)測(cè)為無缺陷,其模型準(zhǔn)確度依舊會(huì)很高,但會(huì)嚴(yán)重影響軟件缺陷傾向性的真實(shí)分類。
預(yù)測(cè)模型若將不同類的樣本數(shù)據(jù)進(jìn)行錯(cuò)誤的分類,付出的代價(jià)有所不同。在軟件缺陷傾向性預(yù)測(cè)中,如果將無缺陷的樣本分類成有缺陷樣本,會(huì)導(dǎo)致測(cè)試人員在進(jìn)行軟件測(cè)試工作時(shí),將寶貴的時(shí)間資源浪費(fèi)在無缺陷模塊上;另一方面,若將有缺陷樣本預(yù)測(cè)成無缺陷樣本,則會(huì)出現(xiàn)缺陷漏報(bào),缺陷漏報(bào)后把有缺陷的產(chǎn)品交付給客戶,這將會(huì)產(chǎn)生無法估量的后果,甚至使得項(xiàng)目產(chǎn)生滅頂之災(zāi)。因此,在構(gòu)建預(yù)測(cè)模型之前,需要處理軟件缺陷數(shù)據(jù)集的不平衡問題。
軟件缺陷傾向性預(yù)測(cè)數(shù)據(jù)預(yù)處理主要包括兩個(gè)方面:一是對(duì)異常數(shù)據(jù)的處理,二是對(duì)數(shù)據(jù)集中的類不平衡問題進(jìn)行處理。
基于機(jī)器學(xué)習(xí)的原始異常數(shù)據(jù)總體分為重復(fù)數(shù)據(jù)、缺失數(shù)據(jù)以及噪聲數(shù)據(jù)[6]。重復(fù)數(shù)據(jù)指同一條數(shù)據(jù)在數(shù)據(jù)集中出現(xiàn)多次,這類異常數(shù)據(jù)的存在會(huì)使預(yù)測(cè)結(jié)果具有更強(qiáng)的傾向性。對(duì)重復(fù)數(shù)據(jù)的處理可以根據(jù)重復(fù)數(shù)據(jù)所占的比例進(jìn)行降重,使其概率分布合理化。缺失數(shù)據(jù)指樣本中某些屬性對(duì)應(yīng)的值缺失,這類異常數(shù)據(jù)存在的主要原因是信息的丟失。對(duì)缺失數(shù)據(jù)的處理,可以利用均值、極大似然值或者同類均值進(jìn)行填充。噪聲數(shù)據(jù)指與其它數(shù)據(jù)有嚴(yán)重偏離的數(shù)據(jù),對(duì)噪聲數(shù)據(jù)可以使用線性回歸的方式進(jìn)行替換。
本文首先利用散點(diǎn)圖對(duì)異常值進(jìn)行檢測(cè),而后通過上述常規(guī)方法對(duì)數(shù)據(jù)集中的異常數(shù)據(jù)進(jìn)行處理獲得異常數(shù)據(jù)處理后的數(shù)據(jù)集。對(duì)于類不平衡問題,可以從三個(gè)方面進(jìn)行處理:數(shù)據(jù)處理層面、數(shù)據(jù)特征層面以及模型算法層面[7]。
數(shù)據(jù)處理層面解決類不平衡問題的主要思想是同對(duì)源數(shù)據(jù)集中的類進(jìn)行重采樣,從而使得小類樣本與大類樣本的數(shù)量之間趨于平衡。當(dāng)前,重采樣是解決類不平衡問題最直接的方法[5]。數(shù)據(jù)特征層面解決類不平衡問題的主要思想是自動(dòng)化地選擇不平衡類中具有良好區(qū)分能力的特征子集,從而提高小類以及整體分類的準(zhǔn)確率。模型算法層面處理類不平衡問題主要有代價(jià)敏感算法、單類學(xué)習(xí)、集成學(xué)習(xí)等[8]。
本文實(shí)驗(yàn)主要用重采樣方法處理類不平衡問題,并對(duì)不同的采樣方法所產(chǎn)生的效果進(jìn)行分析比較。重采樣方法可以分為下采樣和上采樣兩種。下采樣方法也稱為欠采樣,指的是通過一定的算法,將大類樣本中的部分?jǐn)?shù)據(jù)剔除,從而使得大類樣本數(shù)據(jù)與小類樣本數(shù)據(jù)趨于平衡。欠采樣采樣方法處理類不平衡問題,可能會(huì)導(dǎo)致大量有用的數(shù)據(jù)丟失,從而導(dǎo)致模型存在欠擬合問題。本文主要使用上采樣方法處理類不平衡問題,對(duì)下采樣方法不做過多贅述。上采樣也稱為過采樣,是指通過增加小類樣本數(shù)量的方法與大類的樣本數(shù)量趨于平衡。最為常見的過采樣方法是隨機(jī)過采樣,即隨機(jī)復(fù)制小類中的樣本,這種方法的優(yōu)點(diǎn)是簡(jiǎn)單便捷,但這樣一來會(huì)造成對(duì)小類樣本識(shí)別不足的過擬合現(xiàn)象。由此,SMOTE 過采樣算法[9]被提了出來。
圖4 描述了SMOTE 過采樣算法生成新樣本的過程。
圖4 SMOTE過采樣算法合成新樣本過程
如圖4 所示,SMOTE 過采樣算法生成新樣本的主要過程分為如下四個(gè)步驟:
(1)在小類樣本中隨機(jī)選擇一個(gè)樣本作為中心樣本點(diǎn);
(2)搜索與中心樣本點(diǎn)距離最近的k個(gè)鄰近同類樣本;
(3)在(2)中選出的k個(gè)近鄰樣本中隨機(jī)選擇一個(gè)樣本與中心樣本點(diǎn)進(jìn)行連線;
(4)在中心樣本點(diǎn)與隨機(jī)選擇的樣本連線之間隨機(jī)生成一個(gè)新的小類樣本數(shù)據(jù)。
由上述算法可知,雖然SMOTE 過采樣算法相較于隨機(jī)過采樣有較大改進(jìn),但是在生成新樣本時(shí)必須是成倍增加,如此便難以避免樣本的重疊生成?;诖?,有學(xué)者對(duì)基礎(chǔ)SMOTE 算法加以改進(jìn),其中以borderline-SMOTE 算法[10]應(yīng)用較為廣泛。
borderline-SMOTE 算法將小類樣本數(shù)據(jù)分為三類:Safe 樣本點(diǎn)、Noise 樣本點(diǎn)以及Danger樣本點(diǎn),Danger 樣本指靠近分類邊界的樣本點(diǎn)。該算法對(duì)SMOTE 算法的改進(jìn)之處在于其僅選用邊界上的小類樣本,即Danger 樣本點(diǎn)合成新樣本,避免成倍新樣本的重疊生成,從而改善樣本類別的分布。
針對(duì)軟件缺陷傾向性預(yù)測(cè)的類不平衡問題,本文將對(duì)比使用隨機(jī)過采樣、SMOTE 過采樣以及borderline-SMOTE采樣方法的預(yù)測(cè)效果。
當(dāng)前,針對(duì)分類預(yù)測(cè)能力的評(píng)價(jià)標(biāo)準(zhǔn)較多,如準(zhǔn)確率(Accuracy)、查準(zhǔn)率(Precision)、召回率(Recall)、G-mean、AUC等,通常來說,它們的值越大越好,本文選擇查準(zhǔn)率、召回率和AUC[11]作為模型性能評(píng)價(jià)指標(biāo)。
軟件缺陷傾向性預(yù)測(cè)的結(jié)果是判斷數(shù)據(jù)集中的每一個(gè)模塊是否有缺陷,其取值要么為Y,要么為N,因此,這是一個(gè)二分類問題。對(duì)于二分類問題的結(jié)果,可以用混淆矩陣[12]評(píng)測(cè)。
混淆矩陣如表1所示。
表1 混淆矩陣
召回率反映分類器預(yù)測(cè)正樣本全度的能力,即正樣本被預(yù)測(cè)為正樣本在總的正樣本的比例,其計(jì)算公式如(2)所示:
在軟件缺陷數(shù)據(jù)集中,標(biāo)記為有缺陷的樣本定義為正例,無缺陷樣本為負(fù)例。因此,查準(zhǔn)率P表示預(yù)測(cè)為有缺陷的樣本中,真實(shí)為有缺陷樣本的占比數(shù)。召回率R表示真實(shí)的有缺陷樣本被預(yù)測(cè)為有缺陷樣本的占比數(shù)。
AUC 值通常被用來評(píng)價(jià)一個(gè)二值分類器性能的好壞,ROC 曲線[13]以下部分的面積就是AUC,AUC 的值越大,表示模型預(yù)測(cè)效果越好。為了比較不同的采樣方法處理軟件缺陷數(shù)據(jù)集中不平衡類的效果,本文引入AUC 作為評(píng)價(jià)指標(biāo)之一。
目前,用于軟件缺陷預(yù)測(cè)的模型算法眾多,較為常見的有邏輯回歸、決策樹、樸素貝葉斯、隨機(jī)森林等。經(jīng)過前人大量實(shí)踐證明,隨機(jī)森林分類算法在多數(shù)數(shù)據(jù)集上具有良好的性能表現(xiàn)[14]。
隨機(jī)森林算法[15]是一種集成學(xué)習(xí)算法,它以決策樹為基礎(chǔ)學(xué)習(xí)器去構(gòu)建Bagging 集成。隨機(jī)森林預(yù)測(cè)模型具有準(zhǔn)確率高、簡(jiǎn)單、易于實(shí)現(xiàn)、計(jì)算開銷小、性能強(qiáng)等優(yōu)點(diǎn)。本文選擇隨機(jī)森林算法作為軟件缺陷傾向性預(yù)測(cè)模型,可以比較不同的過采樣方法處理不平衡類的性能表現(xiàn)。
本文實(shí)驗(yàn)環(huán)境主要包括SPSS modeler 18.0和anaconda3 下的jupyter,前者用來對(duì)異常值的檢測(cè)與處理,前文提到的三種過采樣算法以及隨機(jī)森林預(yù)測(cè)模型算法的實(shí)現(xiàn)則是在jupyter 環(huán)境中利用Python語言編程實(shí)現(xiàn)。
本文主要比較不同的上采樣方法處理類不平衡問題的性能表現(xiàn),因此在重采樣方案中選擇了三種不同的過采樣方法觀察預(yù)測(cè)效果:隨機(jī)過采樣、普通SMOTE過采樣算法、borderline-SMOTE過采樣算法。
圖5 以數(shù)據(jù)集CM1 為例,給出了三種不同過采樣方法的處理結(jié)果。
圖5 不同過采樣方法處理數(shù)據(jù)集CM1不平衡類的結(jié)果散點(diǎn)圖
圖5(a)是根據(jù)異常值處理后的數(shù)據(jù)集CM1繪制出的散點(diǎn)圖,反映了CM1 數(shù)據(jù)集中有缺陷樣本與無缺陷樣本的分布情況,其中正方形散點(diǎn)代表有缺陷樣本,菱形散點(diǎn)代表無缺陷樣本。圖5(b)是使用隨機(jī)過采樣方法生成新的有缺陷樣本,使得有缺陷樣本與無缺陷樣本數(shù)量相當(dāng)之后所繪制的散點(diǎn)圖,虛線為有缺陷樣本分布的趨勢(shì)線,后同。
通過對(duì)比圖5(a)與圖5(b),其數(shù)據(jù)分布幾乎沒有任何變化,這是因?yàn)殡S機(jī)過采樣所生成的新樣本是簡(jiǎn)單的隨機(jī)復(fù)制原來的小類樣本數(shù)據(jù),其所有新生成的數(shù)據(jù)點(diǎn)都與原來的樣本數(shù)據(jù)重復(fù),因此,兩圖的可視化效果一致。
圖5(c)和圖5(d)分別為采用普通SMOTE 過采樣與改進(jìn)的borderline-SMOTE 過采樣處理CM1數(shù)據(jù)集之后的有缺陷樣本與無缺陷樣本的分布情況。實(shí)驗(yàn)中,SMOTE 過采樣與borderline-SMOTE 過采樣的k近鄰參數(shù)均設(shè)置為5,后者的danger 樣本類近鄰數(shù)設(shè)為10,從圖中結(jié)果可知,SMOTE過采樣合成的新樣本有大量的重疊現(xiàn)象,相比較而言,borderline-SMOTE 過采樣所合成的新樣本分布情況更合理。
針對(duì)類不平衡處理后的數(shù)據(jù)集中的每個(gè)樣本,使用隨機(jī)森林模型進(jìn)行缺陷傾向性預(yù)測(cè)。為了降低數(shù)據(jù)的過擬合問題,在模型預(yù)測(cè)之前,對(duì)于每一個(gè)數(shù)據(jù)集,選擇70%的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集、30%的數(shù)據(jù)作為測(cè)試數(shù)據(jù)集進(jìn)行訓(xùn)練。
在類不平衡問題中,往往對(duì)小類樣本的預(yù)測(cè)結(jié)果更為重要。同樣,在軟件缺陷的傾向性預(yù)測(cè)中,對(duì)有缺陷樣本的檢測(cè)相對(duì)來說具有更為重要的現(xiàn)實(shí)意義。表2中的實(shí)驗(yàn)數(shù)據(jù)為隨機(jī)森林模型預(yù)測(cè)不同數(shù)據(jù)集中有缺陷樣本的性能指標(biāo)。
表2 三種過采樣算法評(píng)價(jià)指標(biāo)數(shù)據(jù)對(duì)比
為了避免一次實(shí)驗(yàn)結(jié)果帶來的偶然性,本文在每個(gè)數(shù)據(jù)集的預(yù)測(cè)模型上均進(jìn)行了10 次實(shí)驗(yàn),最終的評(píng)價(jià)指標(biāo)數(shù)據(jù)取10 次實(shí)驗(yàn)結(jié)果的平均數(shù)。
根據(jù)上述實(shí)驗(yàn)結(jié)果繪制折線圖,能夠更加直觀地對(duì)比出三種過采樣算法處理類不平衡問題后預(yù)測(cè)軟件缺陷傾向性的效果。
圖6是三種過采樣算法處理類不平衡問題后采用隨機(jī)森林模型預(yù)測(cè)后的查準(zhǔn)率(Precision)值的對(duì)比,其中最下面的點(diǎn)狀折線代表隨機(jī)過采樣算法對(duì)應(yīng)的值,中間的純實(shí)線折線代表普通SMOTE 過采樣算法對(duì)應(yīng)的值,最上面的虛線折線代表borderline-SMOTE過采樣算法對(duì)應(yīng)的值。
圖6 Precision值對(duì)比圖
圖7代表的是三種過采樣算法處理的召回率(Recall)對(duì)比折線圖,不同形狀折線代表的含義與圖6相同。
圖7 Recall值對(duì)比圖
圖8表示的是AUC值的對(duì)比圖。
圖8 AUC值對(duì)比圖
從實(shí)驗(yàn)結(jié)果來看,針對(duì)軟件缺陷數(shù)據(jù)集中的類不平衡問題,采用不同的過采樣算法進(jìn)行處理,對(duì)軟件缺陷傾向性的預(yù)測(cè)效果會(huì)有所不同。在少數(shù)評(píng)價(jià)指標(biāo)上,隨機(jī)過采樣算法偶爾會(huì)稍優(yōu)于普通SMOTE過采樣算法,但整體而言,SMOTE過采樣算法的性能表現(xiàn)優(yōu)于隨機(jī)過采樣算法,borderline-SMOTE 過采樣算法明顯優(yōu)于普通SMOTE過采樣算法以及隨機(jī)過采樣算法。
近年來,軟件缺陷預(yù)測(cè)是一個(gè)較為熱門的研究領(lǐng)域,軟件缺陷傾向性預(yù)測(cè)是其中之一。軟件缺陷數(shù)據(jù)集中的類不平衡問題較為顯著,要對(duì)軟件缺陷傾向性進(jìn)行預(yù)測(cè),必須解決類不平衡問題。本文采用不同的過采樣方法處理缺陷數(shù)據(jù)集中的類不平衡問題,然后選擇隨機(jī)森林模型預(yù)測(cè)各數(shù)據(jù)集中樣本的缺陷傾向性,并通過最終的預(yù)測(cè)結(jié)果,利用查準(zhǔn)率、召回率等性能評(píng)價(jià)指標(biāo)對(duì)比了不同的過采樣算法處理缺陷數(shù)據(jù)集中類不平衡問題的最終效果。
后續(xù)的工作中,將針對(duì)軟件缺陷數(shù)據(jù)集中的類不平衡問題進(jìn)行更深入細(xì)致的研究,并將研究如何更好地利用機(jī)器學(xué)習(xí)算法對(duì)軟件缺陷做出更精準(zhǔn)的預(yù)測(cè)。