李 勇,劉戰(zhàn)東,張海軍
(1.新疆師范大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,新疆 烏魯木齊 830054;2.新疆師范大學(xué) 數(shù)據(jù)安全重點(diǎn)實(shí)驗(yàn)室,新疆 烏魯木齊 830054)
隨著計(jì)算機(jī)軟件規(guī)模和復(fù)雜度的日益增加,特別是大型系統(tǒng)對(duì)軟件的強(qiáng)烈依賴,軟件在運(yùn)行過程中一旦失效可能導(dǎo)致嚴(yán)重的后果,有時(shí)甚至是致命的[1],導(dǎo)致軟件失效的根本原因是系統(tǒng)中存在軟件缺陷。通過軟件缺陷預(yù)測(cè)技術(shù)對(duì)軟件系統(tǒng)中可能存在缺陷的模塊及其分布進(jìn)行預(yù)測(cè),可以有效提高軟件測(cè)試的效率,對(duì)提高軟件系統(tǒng)質(zhì)量和保證軟件可靠性具有重要意義[2]。
軟件缺陷預(yù)測(cè)是指基于軟件開發(fā)過程中積累的歷史數(shù)據(jù)構(gòu)建預(yù)測(cè)模型,對(duì)目標(biāo)軟件模塊是否存在缺陷、缺陷嚴(yán)重程度或缺陷數(shù)量的分布等情況進(jìn)行預(yù)測(cè)。通常情況下基于目標(biāo)項(xiàng)目的歷史數(shù)據(jù),采用傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)構(gòu)建的模型可以獲得理想的預(yù)測(cè)效果[3]。但在軟件缺陷預(yù)測(cè)實(shí)踐應(yīng)用中,要進(jìn)行預(yù)測(cè)的軟件往往是新開發(fā)的項(xiàng)目,沒有或只有較少的歷史軟件數(shù)據(jù),而且進(jìn)行數(shù)據(jù)標(biāo)注的代價(jià)較高。雖然已有大量來自不同組織的軟件缺陷數(shù)據(jù)集在互聯(lián)網(wǎng)上公開,但不同軟件項(xiàng)目間通常存在數(shù)據(jù)漂移問題,無法采用傳統(tǒng)的學(xué)習(xí)算法訓(xùn)練模型[4]。
遷移學(xué)習(xí)是指可以采用與目標(biāo)領(lǐng)域相關(guān)的數(shù)據(jù)訓(xùn)練模型,適用于目標(biāo)領(lǐng)域沒有歷史積累數(shù)據(jù)的情況?;谶w移學(xué)習(xí)技術(shù)實(shí)現(xiàn)跨項(xiàng)目的軟件缺陷預(yù)測(cè)是近幾年該領(lǐng)域的研究熱點(diǎn)之一,相關(guān)研究人員開展了大量工作,有力地促進(jìn)了軟件缺陷預(yù)測(cè)技術(shù)的發(fā)展。文中對(duì)該問題相關(guān)的研究文獻(xiàn)進(jìn)行綜述。首先對(duì)相關(guān)的知識(shí)進(jìn)行介紹,包括軟件缺陷預(yù)測(cè)技術(shù)和遷移學(xué)習(xí)技術(shù);然后對(duì)已有的研究進(jìn)展進(jìn)行分類評(píng)述;接著對(duì)研究中存在的問題以及未來研究工作進(jìn)行展望;最后對(duì)全文進(jìn)行總結(jié)。
軟件缺陷預(yù)測(cè)是實(shí)證軟件工程方向的一個(gè)活躍領(lǐng)域,通過對(duì)歷史軟件缺陷數(shù)據(jù)進(jìn)行屬性度量后,基于機(jī)器學(xué)習(xí)技術(shù)構(gòu)建軟件缺陷預(yù)測(cè)模型是目前研究者關(guān)注的熱點(diǎn)。基于機(jī)器學(xué)習(xí)構(gòu)建軟件缺陷預(yù)測(cè)模型的前提是認(rèn)為軟件缺陷與軟件內(nèi)部度量屬性之間存在某種關(guān)系,發(fā)現(xiàn)這些關(guān)系也成為軟件度量發(fā)展的一個(gè)目標(biāo)?,F(xiàn)有研究文獻(xiàn)在構(gòu)建缺陷預(yù)測(cè)模型時(shí)使用的度量屬性可以分為代碼規(guī)模和復(fù)雜度度量、面向?qū)ο蠖攘恳约伴_發(fā)過程度量等。文獻(xiàn)[5]指出各種常見的度量屬性對(duì)于構(gòu)建軟件缺陷預(yù)測(cè)模型都是有效的,模型的性能取決于學(xué)習(xí)算法的選擇。
隨著機(jī)器學(xué)習(xí)技術(shù)的發(fā)展和應(yīng)用,傳統(tǒng)監(jiān)督學(xué)習(xí)算法如樸素貝葉斯、決策樹、隨機(jī)森林、神經(jīng)網(wǎng)絡(luò)和集成算法等都被用來構(gòu)建預(yù)測(cè)模型,各種算法在不同的應(yīng)用環(huán)境中均取得了理想的預(yù)測(cè)性能[6]。也有文獻(xiàn)針對(duì)軟件缺陷預(yù)測(cè)中的特性問題進(jìn)行深入的研究,如類數(shù)據(jù)的不平衡性[7]、代價(jià)敏感問題[8]和缺陷預(yù)測(cè)成本有效性[9]等??紤]到軟件歷史數(shù)據(jù)的標(biāo)注代價(jià)問題,有研究提出了無監(jiān)督或半監(jiān)督的模型學(xué)習(xí)方式,如文獻(xiàn)[10]將采用自適應(yīng)閾值過濾的方法實(shí)現(xiàn)無監(jiān)督的預(yù)測(cè)模型構(gòu)建,文獻(xiàn)[11]提出基于LDS算法的半監(jiān)督模型構(gòu)建方法。由于傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)在構(gòu)建模型時(shí)都假設(shè)訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)具有相同的特征空間和數(shù)據(jù)分布,所以現(xiàn)有研究中對(duì)模型的評(píng)價(jià)通常是基于目標(biāo)項(xiàng)目數(shù)據(jù)構(gòu)建模型,然后采用交叉驗(yàn)證的方式計(jì)算其準(zhǔn)確率、召回率、AUC等指標(biāo)以實(shí)現(xiàn)模型的驗(yàn)證和比較。
然而在軟件工程實(shí)踐中,需要進(jìn)行缺陷預(yù)測(cè)的往往是新開發(fā)項(xiàng)目的軟件模塊,而新開發(fā)項(xiàng)目一般沒有或者只有少量的歷史數(shù)據(jù)無法用于構(gòu)建預(yù)測(cè)模型?,F(xiàn)在互聯(lián)網(wǎng)上已有許多專門用于軟件缺陷預(yù)測(cè)研究的公開數(shù)據(jù)集,如創(chuàng)建于2005年的PROMISE軟件工程預(yù)測(cè)模型數(shù)據(jù)庫(kù)[12],其中的數(shù)據(jù)集均取自真實(shí)的軟件項(xiàng)目。但是每個(gè)項(xiàng)目由于其不同的上下文環(huán)境導(dǎo)致軟件缺陷數(shù)據(jù)的特征空間和分布不同,采用傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)直接構(gòu)建跨項(xiàng)目缺陷預(yù)測(cè)模型無法獲得理想的預(yù)測(cè)效果[4]。
根據(jù)NIPS在2005年對(duì)遷移學(xué)習(xí)的定義,其目標(biāo)是從相似但不同的領(lǐng)域直接進(jìn)行知識(shí)的遷移,用于解決傳統(tǒng)機(jī)器學(xué)習(xí)在遇到特征空間和分布變化時(shí)需要重新學(xué)習(xí)模型的問題[13]。由于遷移學(xué)習(xí)放寬了傳統(tǒng)機(jī)器學(xué)習(xí)在構(gòu)建模型時(shí)要求訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)獨(dú)立同分布的假設(shè),實(shí)現(xiàn)了目標(biāo)領(lǐng)域缺乏訓(xùn)練數(shù)據(jù)時(shí)的模型構(gòu)建。近年來,遷移學(xué)習(xí)技術(shù)獲得了廣泛的研究和關(guān)注。
在遷移學(xué)習(xí)中的領(lǐng)域D可以表示為D={χ,P(X)},其中χ為特征空間,P(X)為對(duì)應(yīng)的邊緣概率分布,X={x1,x2,…,xn}∈χ,xi為第i個(gè)實(shí)例的屬性向量;學(xué)習(xí)任務(wù)表示為T={Y,f(·)},其中Y是標(biāo)簽空間,f(·)是目標(biāo)函數(shù)。遷移學(xué)習(xí)的目標(biāo)是當(dāng)Ds≠Dt或者Ts≠Tt時(shí),使用Ds和Ts中有用的知識(shí)提高目標(biāo)領(lǐng)域Dt的學(xué)習(xí)函數(shù)泛化性能,其中Ds表示源領(lǐng)域,Dt表示目標(biāo)領(lǐng)域,Ts和Tt分別表示Ds和Dt對(duì)應(yīng)的學(xué)習(xí)任務(wù)。在采用遷移學(xué)習(xí)進(jìn)行模型構(gòu)建時(shí),Ds中有足夠的標(biāo)注數(shù)據(jù),而Dt中沒有或者只有少量的標(biāo)注數(shù)據(jù)。為了實(shí)現(xiàn)模型的遷移,可以通過特征遷移和實(shí)例遷移的方法實(shí)現(xiàn)[14]?;谔卣鬟w移的方法是指通過特征變換的方式使源領(lǐng)域數(shù)據(jù)與目標(biāo)領(lǐng)域數(shù)據(jù)分布最為接近,然后采用傳統(tǒng)的學(xué)習(xí)算法訓(xùn)練模型,常見的特征遷移算法有TPLSA[15]、MMDE[16]和TCA[17]等。而實(shí)例遷移方法是根據(jù)源領(lǐng)域樣例對(duì)目標(biāo)領(lǐng)域的貢獻(xiàn)程度形成新的訓(xùn)練數(shù)據(jù)用于目標(biāo)領(lǐng)域模型的構(gòu)建,常見的實(shí)例遷移算法有TrBagg[18]和TrAdaBoost[19]等算法。
目前遷移學(xué)習(xí)技術(shù)已經(jīng)被廣泛應(yīng)用在各種跨領(lǐng)域?qū)W習(xí)任務(wù)中,如文本處理、圖像處理和人工智能規(guī)劃等[20]。文中關(guān)注的是軟件缺陷預(yù)測(cè)領(lǐng)域,基于遷移學(xué)習(xí)的軟件缺陷預(yù)測(cè)研究目標(biāo)是解決跨項(xiàng)目軟件缺陷預(yù)測(cè)模型的領(lǐng)域適應(yīng)問題。在軟件缺陷預(yù)測(cè)中,當(dāng)Ds=Dt且Ts=Tt時(shí),為傳統(tǒng)的機(jī)器學(xué)習(xí)問題。當(dāng)Ds≠Dt時(shí),表示源項(xiàng)目和目標(biāo)項(xiàng)目軟件缺陷特征空間不同,如不同的開發(fā)上下文環(huán)境導(dǎo)致的Xs≠Xt或Ps(X)≠Pt(X)。對(duì)于Ts≠Tt,則表示缺陷預(yù)測(cè)任務(wù)不同,常見的軟件缺陷預(yù)測(cè)任務(wù)包括預(yù)測(cè)模塊是否存在缺陷、缺陷的數(shù)量或缺陷的嚴(yán)重程度等。在跨項(xiàng)目的軟件缺陷預(yù)測(cè)中,所關(guān)注的是學(xué)習(xí)任務(wù)相同Ts=Tt,但領(lǐng)域特征分布不同,即Ds≠Dt的情況。也就是將從已有標(biāo)注數(shù)據(jù)的源項(xiàng)目軟件數(shù)據(jù)中學(xué)習(xí)到的知識(shí)遷移到與源項(xiàng)目的特征空間和缺陷分布不同的目標(biāo)項(xiàng)目中實(shí)現(xiàn)缺陷的預(yù)測(cè)。
在軟件工程中,每個(gè)項(xiàng)目存在不同的上下文環(huán)境,如開發(fā)過程、開發(fā)者信息和程序語(yǔ)言等因素,導(dǎo)致軟件缺陷數(shù)據(jù)的特征空間和分布不同,即跨項(xiàng)目的軟件缺陷數(shù)據(jù)間存在數(shù)據(jù)漂移問題[22-23]。文獻(xiàn)[4]采用12個(gè)軟件項(xiàng)目的622個(gè)組合實(shí)現(xiàn)跨項(xiàng)目的預(yù)測(cè),結(jié)果表明只有3.4%的組合可以獲得較為理想的預(yù)測(cè)結(jié)果,進(jìn)一步驗(yàn)證了軟件項(xiàng)目間存在數(shù)據(jù)的漂移問題。因此,在跨項(xiàng)目的軟件缺陷預(yù)測(cè)中必須對(duì)源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)進(jìn)行相應(yīng)的處理才能獲得理想的預(yù)測(cè)性能。采用遷移學(xué)習(xí)技術(shù)實(shí)現(xiàn)跨項(xiàng)目的軟件缺陷預(yù)測(cè)流程如圖1所示。下面將依據(jù)遷移學(xué)習(xí)的特點(diǎn)將現(xiàn)有研究文獻(xiàn)中提出的方法分為軟件屬性特征遷移和軟件模塊實(shí)例遷移兩類進(jìn)行綜述。
圖1 跨項(xiàng)目的軟件缺陷預(yù)測(cè)流程
現(xiàn)有研究文獻(xiàn)在構(gòu)建缺陷預(yù)測(cè)模型時(shí)使用的軟件特征度量屬性可以分為軟件代碼度量屬性和開發(fā)過程度量屬性兩類。為了實(shí)現(xiàn)跨項(xiàng)目的缺陷預(yù)測(cè),有研究者提出了基于特征遷移的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法。其主要思想是通過對(duì)軟件缺陷數(shù)據(jù)屬性特征進(jìn)行相應(yīng)的處理,使得源項(xiàng)目和目標(biāo)項(xiàng)目在保證各自軟件缺陷數(shù)據(jù)特性的同時(shí)其數(shù)據(jù)分布最為相似,然后采用傳統(tǒng)的學(xué)習(xí)算法構(gòu)建預(yù)測(cè)模型,實(shí)現(xiàn)跨項(xiàng)目的缺陷預(yù)測(cè)。根據(jù)對(duì)數(shù)據(jù)特征的處理方式不同,現(xiàn)有研究文獻(xiàn)中提出的方法可歸納為特征選擇、特征轉(zhuǎn)換和特征映射三種。
2.2.1 基于特征選擇的遷移方法
基于特征選擇的方法是指找出源項(xiàng)目與目標(biāo)項(xiàng)目軟件缺陷數(shù)據(jù)的最小特征子集,該特征子集在保證源項(xiàng)目和目標(biāo)項(xiàng)目軟件缺陷特性的同時(shí)使得數(shù)據(jù)分布一致,從而實(shí)現(xiàn)軟件缺陷預(yù)測(cè)模型的遷移。文獻(xiàn)[24]在實(shí)驗(yàn)中通過迭代選擇的方式獲得使模型性能穩(wěn)定的“最優(yōu)屬性子集”后,采用樸素貝葉斯和邏輯回歸算法構(gòu)建跨項(xiàng)目的缺陷預(yù)測(cè)模型,該模型在可接受指標(biāo)范圍(預(yù)測(cè)率大于70%)內(nèi),實(shí)現(xiàn)了模型性能與模型構(gòu)建成本的平衡。
基于特征選擇的方法適用于源項(xiàng)目和目標(biāo)項(xiàng)目軟件缺陷數(shù)據(jù)采用相同的屬性度量體系,但缺陷數(shù)據(jù)分布不同的情況。其優(yōu)點(diǎn)是在模型構(gòu)建中選擇較少的度量屬性,可以有效降低模型的成本。由于該方法實(shí)現(xiàn)模型遷移的前提要求源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)存在潛在的屬性子集,該屬性子集對(duì)軟件缺陷數(shù)據(jù)處理中度量屬性的選擇有指導(dǎo)意義。但該方法在實(shí)踐中對(duì)源項(xiàng)目數(shù)據(jù)要求較高,而且由于所獲取的屬性子集對(duì)軟件模塊的缺陷特征描述有限,在實(shí)踐應(yīng)用中不一定會(huì)獲得理想的性能。
2.2.2 基于特征轉(zhuǎn)換的遷移方法
基于特征轉(zhuǎn)換的模型遷移方法是指對(duì)源項(xiàng)目或目標(biāo)項(xiàng)目的軟件缺陷數(shù)據(jù)屬性特征進(jìn)行變換,使得跨項(xiàng)目的軟件數(shù)據(jù)特征分布相似從而實(shí)現(xiàn)模型的遷移。在進(jìn)行特征轉(zhuǎn)換時(shí),根據(jù)不同情況可以只對(duì)源項(xiàng)目或目標(biāo)項(xiàng)目的缺陷數(shù)據(jù)屬性特征進(jìn)行轉(zhuǎn)換,也可以對(duì)兩者均進(jìn)行轉(zhuǎn)換。
文獻(xiàn)[25]提出采用屬性度量補(bǔ)償?shù)姆绞綄?shí)現(xiàn)不同程序語(yǔ)言編寫的跨項(xiàng)目軟件缺陷預(yù)測(cè)。由于不同項(xiàng)目間的屬性度量值范圍不同,通過補(bǔ)償?shù)姆绞綄⒃错?xiàng)目和目標(biāo)項(xiàng)目的屬性度量值調(diào)節(jié)至相似水平,結(jié)果表明可以有效提高預(yù)測(cè)模型的準(zhǔn)確率和召回率。該方法要求源項(xiàng)目和目標(biāo)項(xiàng)目的軟件規(guī)模相似,該文獻(xiàn)在研究中僅使用兩個(gè)項(xiàng)目的數(shù)據(jù)集實(shí)驗(yàn),說服力相對(duì)較弱。而文獻(xiàn)[26]則對(duì)源項(xiàng)目和目標(biāo)項(xiàng)目軟件數(shù)據(jù)屬性特征均進(jìn)行對(duì)數(shù)轉(zhuǎn)換,使其取值范圍相似,在轉(zhuǎn)換的同時(shí)去除數(shù)據(jù)中的離群點(diǎn),結(jié)果表明可以在跨項(xiàng)目軟件缺陷預(yù)測(cè)中獲得較好的預(yù)測(cè)結(jié)果。
基于特征轉(zhuǎn)換的模型遷移方法適用于源項(xiàng)目和目標(biāo)項(xiàng)目軟件度量屬性類似,但屬性取值范圍差異較大時(shí)的情況。而且在使用該方法的兩篇文獻(xiàn)中均采用相同開發(fā)組織的不同項(xiàng)目數(shù)據(jù)進(jìn)行實(shí)驗(yàn),當(dāng)跨項(xiàng)目軟件缺陷數(shù)據(jù)分布差異較大時(shí),屬性特征轉(zhuǎn)換對(duì)數(shù)據(jù)分布的改變有限,因此該方法不適用于源項(xiàng)目和目標(biāo)項(xiàng)目軟件數(shù)據(jù)分布差異較大的情況。
2.2.3 基于特征映射的遷移方法
基于特征映射的遷移方法是指將源項(xiàng)目和目標(biāo)項(xiàng)目的軟件缺陷數(shù)據(jù)原始特征空間映射到某一潛在特征空間,在該潛在特征空間下,源項(xiàng)目和目標(biāo)項(xiàng)目的數(shù)據(jù)分布最為接近,然后基于該潛在空間實(shí)現(xiàn)跨項(xiàng)目的軟件缺陷預(yù)測(cè)模型遷移。該方法與特征選擇和特征轉(zhuǎn)換方法的區(qū)別在于映射得到的是全新的特征空間。
文獻(xiàn)[27]提出基于遷移成分分析TCA+的跨項(xiàng)目軟件缺陷預(yù)測(cè)模型。TCA是指在保證數(shù)據(jù)差異的約束條件下獲得源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)特征的線性映射函數(shù),通過該函數(shù)將跨項(xiàng)目數(shù)據(jù)映射到潛在的特征空間實(shí)現(xiàn)模型的遷移。在實(shí)驗(yàn)中為了避免數(shù)據(jù)屬性取值范圍不同對(duì)模型性能的影響,提出TCA+實(shí)現(xiàn)自動(dòng)正規(guī)化算法,有效提高了預(yù)測(cè)模型的性能。文獻(xiàn)[28]將跨項(xiàng)目軟件缺陷預(yù)測(cè)模型遷移問題形式化為一個(gè)半正定矩陣,獲得該半正定規(guī)劃問題的解后采用PCA進(jìn)行降維得到新的潛在特征空間,從而實(shí)現(xiàn)模型的遷移。
基于特征映射的遷移方法適用于源項(xiàng)目和目標(biāo)項(xiàng)目的軟件缺陷數(shù)據(jù)度量屬性體系不同或差異較大時(shí)的情況。該方法的不足是在模型構(gòu)建中沒有使用軟件缺陷信息,僅使用源項(xiàng)目和目標(biāo)項(xiàng)目軟件缺陷數(shù)據(jù)映射后的分布信息,對(duì)模型性能的提高有限。
在軟件缺陷預(yù)測(cè)中,待實(shí)現(xiàn)預(yù)測(cè)的軟件程序單元可以在不同的粒度層次進(jìn)行屬性度量,如方法度量、類度量、包度量和文件度量等。文中將軟件缺陷數(shù)據(jù)中的度量程序單元稱為軟件模塊實(shí)例?;趯?shí)例的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法是指在軟件模塊實(shí)例層對(duì)源項(xiàng)目數(shù)據(jù)進(jìn)行處理實(shí)現(xiàn)模型的遷移。根據(jù)對(duì)軟件模塊實(shí)例的處理方式不同,現(xiàn)有研究文獻(xiàn)中提出的方法可以歸納為實(shí)例選擇、實(shí)例權(quán)值和局部模型三種。
2.3.1 基于實(shí)例選擇的遷移方法
基于實(shí)例選擇的方法是指根據(jù)目標(biāo)項(xiàng)目軟件模塊實(shí)例的特征從源項(xiàng)目中選擇合適的標(biāo)注實(shí)例構(gòu)成模型數(shù)據(jù),實(shí)現(xiàn)跨項(xiàng)目的模型遷移。從源項(xiàng)目數(shù)據(jù)中所選模塊實(shí)例的質(zhì)量決定著最終模型的預(yù)測(cè)性能。如果所選模塊實(shí)例較少則不能充分反映目標(biāo)項(xiàng)目的缺陷特征,容易導(dǎo)致預(yù)測(cè)率較低。但如果引入不相關(guān)的模塊實(shí)例較多時(shí),容易導(dǎo)致模型的誤報(bào)率較高。
文獻(xiàn)[29]提出Burak數(shù)據(jù)選擇方法,對(duì)于目標(biāo)項(xiàng)目中的每個(gè)軟件模塊實(shí)例使用KNN算法從多個(gè)源項(xiàng)目數(shù)據(jù)中尋找與其最接近的若干模塊實(shí)例組成目標(biāo)項(xiàng)目的訓(xùn)練數(shù)據(jù)。在該文獻(xiàn)的實(shí)驗(yàn)中僅使用目標(biāo)項(xiàng)目軟件模塊實(shí)例去引導(dǎo)源項(xiàng)目實(shí)例的選擇,而沒有關(guān)注源項(xiàng)目中的數(shù)據(jù)特性。當(dāng)目標(biāo)項(xiàng)目數(shù)據(jù)遠(yuǎn)小于源項(xiàng)目數(shù)據(jù)時(shí),源項(xiàng)目數(shù)據(jù)可以提供更多的信息,即特征不相似的實(shí)例有可能包含對(duì)模型訓(xùn)練有用的信息。針對(duì)該問題文獻(xiàn)[30]提出Peters數(shù)據(jù)選擇方法,采用源項(xiàng)目數(shù)據(jù)尋找目標(biāo)項(xiàng)目中與其最近鄰的模塊實(shí)例,將所有與目標(biāo)項(xiàng)目最近鄰的源項(xiàng)目實(shí)例構(gòu)成模型訓(xùn)練數(shù)據(jù),其結(jié)果要優(yōu)于Burak方法,該方法的優(yōu)點(diǎn)是在項(xiàng)目開發(fā)的早期階段當(dāng)目標(biāo)項(xiàng)目數(shù)據(jù)較少時(shí),也可以獲得較好的預(yù)測(cè)性能。在這兩篇文獻(xiàn)中存在的不足是對(duì)于數(shù)據(jù)的選擇均從源項(xiàng)目或目標(biāo)項(xiàng)目的每個(gè)軟件模塊實(shí)例出發(fā),當(dāng)數(shù)據(jù)量增大時(shí)算法的運(yùn)行時(shí)間呈指數(shù)增長(zhǎng),而且沒有考慮數(shù)據(jù)的整體分布特征。
文獻(xiàn)[31]提出在跨項(xiàng)目缺陷預(yù)測(cè)時(shí),如果可以充分利用源項(xiàng)目和目標(biāo)項(xiàng)目之間存在的分布特征相關(guān)性,從數(shù)據(jù)中獲取先驗(yàn)知識(shí)指導(dǎo)源項(xiàng)目數(shù)據(jù)的選擇可以很大程度提高模型的性能。為此文獻(xiàn)[32]提出根據(jù)分布特征從大量源項(xiàng)目數(shù)據(jù)中獲取目標(biāo)項(xiàng)目的訓(xùn)練數(shù)據(jù)。該文獻(xiàn)在實(shí)驗(yàn)中從項(xiàng)目數(shù)據(jù)層定義其特征屬性,然后通過聚類的方式尋找多個(gè)源項(xiàng)目數(shù)據(jù)作為訓(xùn)練集,結(jié)果表明可以有效提高模型的預(yù)測(cè)率。但由于從項(xiàng)目數(shù)據(jù)層進(jìn)行數(shù)據(jù)選擇會(huì)引入不相關(guān)的軟件模塊實(shí)例,所以導(dǎo)致了模型綜合評(píng)價(jià)指標(biāo)仍然較低。也有研究者提出采用智能算法從多個(gè)源數(shù)據(jù)中尋找最優(yōu)數(shù)據(jù)集的方法,如文獻(xiàn)[33]使用遺傳算法實(shí)現(xiàn)最優(yōu)模型訓(xùn)練集的選擇,然后采用集成的方式構(gòu)建模型,有效降低了模型的誤報(bào)率。
2.3.2 基于實(shí)例權(quán)值的遷移方法
基于實(shí)例權(quán)值的遷移方法是指根據(jù)源項(xiàng)目軟件缺陷數(shù)據(jù)中每個(gè)模塊實(shí)例對(duì)目標(biāo)模型的作用不同分配權(quán)值,然后基于重新分配權(quán)值的數(shù)據(jù)實(shí)現(xiàn)模型的遷移,在現(xiàn)有研究文獻(xiàn)中一般采用權(quán)值更新的方式。
文獻(xiàn)[34]提出遷移貝葉斯TNB算法用于構(gòu)建跨項(xiàng)目的軟件缺陷預(yù)測(cè)模型。首先提取目標(biāo)項(xiàng)目軟件缺陷數(shù)據(jù)的分布特征,然后對(duì)源項(xiàng)目數(shù)據(jù)中的每個(gè)軟件模塊實(shí)例與目標(biāo)項(xiàng)目數(shù)據(jù)特征進(jìn)行比較,基于數(shù)據(jù)引力方法計(jì)算每個(gè)實(shí)例的權(quán)值,采用加權(quán)的訓(xùn)練數(shù)據(jù)構(gòu)建模型。該方法的優(yōu)勢(shì)在于使用了源項(xiàng)目中所有軟件模塊的信息,而且只需要計(jì)算一次目標(biāo)項(xiàng)目數(shù)據(jù)的分布特征,降低了單個(gè)實(shí)例比較選擇中運(yùn)算量較大的問題,算法的時(shí)間復(fù)雜度是與數(shù)據(jù)量成線性關(guān)系。其不足是對(duì)目標(biāo)數(shù)據(jù)信息考慮較少。類似的還有文獻(xiàn)[35]提出代價(jià)敏感的TrAdaBoost算法實(shí)現(xiàn)模型遷移,該方法綜合了軟件缺陷數(shù)據(jù)的類分布不平衡以及不同誤分代價(jià)的差異,結(jié)合實(shí)例遷移TrAdaBoost和代價(jià)敏感AdaC2算法實(shí)現(xiàn)。其優(yōu)點(diǎn)是充分考慮到了不同誤分代價(jià),但在應(yīng)用中代價(jià)值只能通過手工設(shè)置,不利于實(shí)踐操作。
2.3.3 基于局部模型的遷移方法
基于實(shí)例選擇和實(shí)例權(quán)值的遷移方法都是通過對(duì)源項(xiàng)目和目標(biāo)項(xiàng)目軟件模塊實(shí)例的處理從而構(gòu)建最終的全局模型??紤]到軟件系統(tǒng)的復(fù)雜性,有研究提出在實(shí)現(xiàn)軟件質(zhì)量模型時(shí),應(yīng)該基于最小軟件模塊集合學(xué)習(xí)“專有規(guī)則”。基于局部模型的遷移方法是指根據(jù)相似性將目標(biāo)項(xiàng)目軟件數(shù)據(jù)分為多個(gè)簇,對(duì)每個(gè)簇選擇相應(yīng)的源項(xiàng)目數(shù)據(jù)構(gòu)建局部模型,然后通過多個(gè)局部模型實(shí)現(xiàn)跨項(xiàng)目的缺陷預(yù)測(cè)。
文獻(xiàn)[36]采用聚類算法形成源項(xiàng)目和目標(biāo)項(xiàng)目軟件模塊實(shí)例簇,以簇為單位選擇數(shù)據(jù)并構(gòu)建局部模型,結(jié)果表明通過局部模型實(shí)現(xiàn)的預(yù)測(cè)性能要優(yōu)于全局模型。文獻(xiàn)[37]也取得了同樣的結(jié)果,該文獻(xiàn)從38個(gè)軟件項(xiàng)目的92版本數(shù)據(jù)中實(shí)現(xiàn)相似項(xiàng)目的聚類,表明基于相似聚類簇訓(xùn)練的模型預(yù)測(cè)率較高于采用目標(biāo)項(xiàng)目數(shù)據(jù)的模型。但也有研究者提出雖然局部模型的預(yù)測(cè)性能要優(yōu)于全局模型,但多個(gè)局部模型性能平均后這種優(yōu)勢(shì)會(huì)抵消,仍然建議采用全局模型的方式實(shí)現(xiàn)預(yù)測(cè)[38]。
基于局部模型的跨項(xiàng)目預(yù)測(cè)方法結(jié)合了項(xiàng)目數(shù)據(jù)分布特征和實(shí)例特征,可以較好地反映目標(biāo)項(xiàng)目的軟件缺陷特征,通過多個(gè)局部模型進(jìn)行預(yù)測(cè)可以獲得較好的性能。但是該方法在每次進(jìn)行缺陷預(yù)測(cè)時(shí)都要重新進(jìn)行源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)的聚類和局部模型訓(xùn)練,在實(shí)踐應(yīng)用中代價(jià)較高。
基于特征遷移的方法在模型構(gòu)建中對(duì)軟件缺陷信息沒有充分利用導(dǎo)致了模型性能提高有限,而基于實(shí)例遷移的方法在進(jìn)行訓(xùn)練數(shù)據(jù)選擇時(shí)對(duì)模塊實(shí)例的數(shù)據(jù)分布特征考慮不足,容易造成算法運(yùn)行效率低和模型預(yù)測(cè)率高但準(zhǔn)確率低等問題。在未來的研究中應(yīng)該將數(shù)據(jù)特征和實(shí)例選擇結(jié)合起來,在充分考慮項(xiàng)目數(shù)據(jù)分布特征的前提下實(shí)現(xiàn)軟件模塊實(shí)例的選擇,進(jìn)一步提高最終模型的預(yù)測(cè)性能。另外如果在模型構(gòu)建中可以結(jié)合目標(biāo)項(xiàng)目軟件模塊的缺陷預(yù)測(cè)及修復(fù)實(shí)現(xiàn)部分?jǐn)?shù)據(jù)的標(biāo)注并有效利用,可以有效地避免現(xiàn)有模型方法容易造成過擬合的問題。
現(xiàn)有研究文獻(xiàn)對(duì)跨項(xiàng)目軟件缺陷預(yù)測(cè)模型的評(píng)價(jià)都是采用準(zhǔn)確率、召回率和F值等傳統(tǒng)的評(píng)價(jià)指標(biāo)。文獻(xiàn)[39]提出對(duì)于跨項(xiàng)目缺陷預(yù)測(cè)模型即使較低的準(zhǔn)確率對(duì)軟件測(cè)試和軟件質(zhì)量保證也能起到有效的作用。在未來的研究中針對(duì)軟件缺陷預(yù)測(cè)實(shí)踐中,如何使得模型構(gòu)建成本與模型性能平衡,或者如何構(gòu)建符合實(shí)踐需求指標(biāo)的模型直接決定著跨項(xiàng)目的預(yù)測(cè)模型構(gòu)建方法和模型的評(píng)價(jià),對(duì)于該問題需要進(jìn)一步深入研究。
在實(shí)現(xiàn)跨項(xiàng)目數(shù)據(jù)驅(qū)動(dòng)的軟件缺陷預(yù)測(cè)中,數(shù)據(jù)的來源是必須考慮的問題。目前互聯(lián)網(wǎng)上已經(jīng)有許多公開的軟件缺陷數(shù)據(jù)集用于實(shí)驗(yàn)研究,而且越來越多的研究者在公開自己采集處理后的軟件缺陷數(shù)據(jù)。面對(duì)大量數(shù)據(jù)如何有效的組織管理并構(gòu)建統(tǒng)一的軟件缺陷數(shù)據(jù)共享庫(kù)對(duì)實(shí)現(xiàn)跨項(xiàng)目軟件缺陷數(shù)據(jù)選擇和模型構(gòu)建尤為重要。
現(xiàn)有研究中實(shí)現(xiàn)跨項(xiàng)目軟件缺陷預(yù)測(cè)的目的是為了對(duì)未知軟件模塊進(jìn)行是否存在缺陷或者缺陷分布的預(yù)測(cè)。如果能從已有源項(xiàng)目軟件缺陷數(shù)據(jù)中學(xué)習(xí)到具有可解釋、可理解的規(guī)則,進(jìn)行合理的組織選擇并進(jìn)行可視化后用于指導(dǎo)軟件開發(fā)實(shí)踐,不但可以更加有效地利用已積累的多源項(xiàng)目數(shù)據(jù),而且可以找到提高軟件質(zhì)量的根本原因,對(duì)于軟件工程的實(shí)踐具有重要意義。
跨項(xiàng)目軟件缺陷預(yù)測(cè)研究是目前實(shí)證軟件工程領(lǐng)域的前沿方向。利用遷移學(xué)習(xí)技術(shù)實(shí)現(xiàn)跨項(xiàng)目的預(yù)測(cè)可以有效降低模型構(gòu)建成本,從而提高軟件測(cè)試效率和保證軟件質(zhì)量。文中對(duì)已有研究成果中提出的方法進(jìn)行分類綜述,并指出了其存在的不足和未來的研究方向,為完善跨項(xiàng)目的軟件缺陷預(yù)測(cè)研究與應(yīng)用提供了理論基礎(chǔ)和技術(shù)參考。