劉峰 任俊樺
開(kāi)源軟件的低成本性和靈活性,使得更多的IT開(kāi)發(fā)企業(yè)和行業(yè)領(lǐng)域越來(lái)越傾向于使用開(kāi)源軟件構(gòu)建產(chǎn)品或系統(tǒng),隨之帶來(lái)了軟件質(zhì)量保障問(wèn)題。采用機(jī)器學(xué)習(xí)技術(shù)預(yù)測(cè)軟件缺陷已成為提高軟件質(zhì)量的重要途徑,但僅局限于同項(xiàng)目歷史訓(xùn)練數(shù)據(jù)完整的情況下。
面對(duì)一個(gè)全新的或歷史數(shù)據(jù)稀缺的項(xiàng)目,遷移學(xué)習(xí)方法可用源項(xiàng)目的相關(guān)知識(shí)來(lái)為目標(biāo)項(xiàng)目構(gòu)建預(yù)測(cè)模型,有效利用其他項(xiàng)目或領(lǐng)域已有的訓(xùn)練數(shù)據(jù)來(lái)構(gòu)建缺陷預(yù)測(cè)模型,并遷移和應(yīng)用到另一個(gè)項(xiàng)目中,其技術(shù)挑戰(zhàn)是,由于不同項(xiàng)目之間的應(yīng)用領(lǐng)域、開(kāi)發(fā)流程、編程語(yǔ)言、開(kāi)發(fā)人員經(jīng)驗(yàn)等并不相同,如何在數(shù)據(jù)集間存在較大的分布差異性的條件下提升缺陷預(yù)測(cè)方案的實(shí)際性能。本文重點(diǎn)考察了面向開(kāi)源軟件的缺陷預(yù)測(cè)技術(shù)以及正在興起的遷移學(xué)習(xí)方法。
由于開(kāi)源軟件的開(kāi)放性,客戶可以在開(kāi)源軟件上開(kāi)發(fā)定制來(lái)滿足自己的要求。并且使用者和開(kāi)發(fā)者能共同參與使用和測(cè)試,發(fā)現(xiàn)其中的缺陷并及時(shí)修正,從而使軟件更加穩(wěn)定與可用,所以開(kāi)源軟件對(duì)于商業(yè)來(lái)說(shuō)有許多強(qiáng)有力的競(jìng)爭(zhēng)優(yōu)勢(shì)和價(jià)值,隨之而來(lái),開(kāi)源軟件的缺陷預(yù)測(cè)也成為當(dāng)下軟件工程領(lǐng)域中的一個(gè)研究熱點(diǎn)。
軟件缺陷是影響軟件質(zhì)量的首要因素,人們從事各項(xiàng)活動(dòng)的效率和安全在很大程度上依賴于軟件的質(zhì)量和系統(tǒng)的可靠性,而隱含缺陷的軟件在部署后可能會(huì)產(chǎn)生意料之外的結(jié)果或行為,嚴(yán)重的時(shí)候會(huì)給企業(yè)帶來(lái)巨額的經(jīng)濟(jì)損失,甚至有時(shí)候會(huì)引發(fā)人員傷亡。
軟件缺陷預(yù)測(cè)是軟件測(cè)試中的一項(xiàng)重要工作,本文首先對(duì)軟件缺陷預(yù)測(cè)技術(shù)現(xiàn)狀進(jìn)行了概述,其中包括基于機(jī)器學(xué)習(xí)的項(xiàng)目?jī)?nèi)軟件缺陷預(yù)測(cè)和跨項(xiàng)目軟件缺陷預(yù)測(cè),其次面臨跨項(xiàng)目預(yù)測(cè)遇到的度量元差異問(wèn)題,重點(diǎn)闡述了遷移學(xué)習(xí)用于軟件缺陷預(yù)測(cè)中相應(yīng)的解決方法。
軟件缺陷預(yù)測(cè)概述
軟件缺陷預(yù)測(cè)主要是根據(jù)歷史數(shù)據(jù)來(lái)預(yù)測(cè)軟件中潛在的缺陷,具體流程是對(duì)項(xiàng)目的歷史數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,從中抽取程序模塊并進(jìn)行類型標(biāo)記,隨后通過(guò)分析軟件代碼的內(nèi)在邏輯或開(kāi)發(fā)過(guò)程特征,設(shè)計(jì)出與軟件缺陷相關(guān)的度量元,并借助這些度量元可以構(gòu)建出用于模型訓(xùn)練的缺陷預(yù)測(cè)數(shù)據(jù)集,最后基于特定的研究方法構(gòu)建出缺陷預(yù)測(cè)模型,并用于對(duì)項(xiàng)目中的新程序模塊進(jìn)行預(yù)測(cè),挖掘軟件缺陷的分布規(guī)律,并應(yīng)用于實(shí)際的軟件缺陷預(yù)測(cè)中。
軟件缺陷預(yù)測(cè)希望能夠在項(xiàng)目開(kāi)發(fā)的早期階段,預(yù)先識(shí)別出項(xiàng)目?jī)?nèi)的潛在缺陷程序模塊,并對(duì)這類程序模塊分配足夠的測(cè)試資源以確??梢赃M(jìn)行充分的代碼審查或單元測(cè)試,最終達(dá)到提高軟件產(chǎn)品質(zhì)量的目的。
另外,軟件缺陷與軟件演化過(guò)程是緊密相關(guān)的,同一軟件的不同版本間的缺陷也會(huì)存在一定關(guān)聯(lián),在軟件投入使用后,由于缺陷修復(fù)、需求增加和環(huán)境變化等,維護(hù)人員需要對(duì)軟件進(jìn)行變更以滿足新的需求,或者為了提高軟件的性能和可靠性進(jìn)行改進(jìn)等,這時(shí)候需要對(duì)項(xiàng)目進(jìn)行跨版本預(yù)測(cè)。
作為人工智能和數(shù)據(jù)科學(xué)的核心,機(jī)器學(xué)習(xí)已成為當(dāng)今發(fā)展最快的技術(shù)領(lǐng)域之一,致力于研究如何利用經(jīng)驗(yàn)來(lái)提高系統(tǒng)自身的性能,采用機(jī)器學(xué)習(xí)的基礎(chǔ)理論、核心算法和關(guān)鍵技術(shù),解決軟件缺陷預(yù)測(cè)中的實(shí)際問(wèn)題,不僅能夠提高軟件缺陷預(yù)測(cè)能力,更重要的是能夠有效提高軟件質(zhì)量和軟件可靠性。
傳統(tǒng)機(jī)器學(xué)習(xí)預(yù)測(cè)軟件缺陷的大部分研究工作都集中關(guān)注同項(xiàng)目缺陷預(yù)測(cè)問(wèn)題,均是假設(shè)訓(xùn)練數(shù)據(jù)以及測(cè)試數(shù)據(jù)來(lái)自于同一個(gè)項(xiàng)目,二者的特征和樣本分布特性是一致的,即同項(xiàng)目的部分?jǐn)?shù)據(jù)集作為訓(xùn)練集來(lái)構(gòu)建模型,并用剩余的數(shù)據(jù)作為測(cè)試集來(lái)獲得模型的預(yù)測(cè)性能,但在實(shí)際的軟件開(kāi)發(fā)場(chǎng)景中,需要進(jìn)行缺陷預(yù)測(cè)的目標(biāo)項(xiàng)目可能是一個(gè)新啟動(dòng)項(xiàng)目,或這個(gè)項(xiàng)目已有的訓(xùn)練數(shù)據(jù)較為稀缺。
開(kāi)源軟件缺陷的評(píng)測(cè)數(shù)據(jù)集
目前,大部分的開(kāi)源軟件缺陷預(yù)測(cè)研究的數(shù)據(jù)集已公開(kāi)共享,分別來(lái)自于航天航空軟件、電器行業(yè)軟件、開(kāi)源項(xiàng)目(例如Ant、Eclipse等)等累積的軟件缺陷歷史數(shù)據(jù),這些數(shù)據(jù)集均可以在PROMISE(http://openscience.us/repo)中進(jìn)行下載。
跨項(xiàng)目缺陷預(yù)測(cè)
目前,如果要對(duì)一個(gè)全新的項(xiàng)目進(jìn)行缺陷預(yù)測(cè),但是此項(xiàng)目中的數(shù)據(jù)不充足,缺陷信息缺乏,訓(xùn)練集不足而無(wú)法構(gòu)建預(yù)測(cè),然而卻有大量的其他相關(guān)的項(xiàng)目缺陷信息數(shù)據(jù),但是此訓(xùn)練數(shù)據(jù)與所需進(jìn)行的分類任務(wù)中的測(cè)試數(shù)據(jù)特征分布不同,在這種情況下,研究者提出了跨項(xiàng)目缺陷預(yù)測(cè)方法,即將不同項(xiàng)目間的缺陷信息共享,通過(guò)在一個(gè)有足夠歷史缺陷信息的項(xiàng)目(源項(xiàng)目)上進(jìn)行訓(xùn)練,并將得到的預(yù)測(cè)模型應(yīng)用到另一個(gè)項(xiàng)目(目標(biāo)項(xiàng)目)進(jìn)行測(cè)試。
但跨項(xiàng)目缺陷預(yù)測(cè)所存在的問(wèn)題是,不同項(xiàng)目的特征(例如所處的應(yīng)用領(lǐng)域、采用的開(kāi)發(fā)流程、使用的編程語(yǔ)言或開(kāi)發(fā)人員的經(jīng)驗(yàn)等)并不相同,所以源項(xiàng)目與目標(biāo)項(xiàng)目的缺陷數(shù)據(jù)集的度量元存在很大的特征和分布差異,因此在缺陷預(yù)測(cè)模型構(gòu)建時(shí),如何從源項(xiàng)目中遷移出與目標(biāo)項(xiàng)目相關(guān)的知識(shí)是其面臨的研究挑戰(zhàn)。
遷移學(xué)習(xí)與軟件缺陷預(yù)測(cè)
針對(duì)新項(xiàng)目缺陷數(shù)據(jù)集的匱乏問(wèn)題,大部分研究借助機(jī)器學(xué)習(xí)領(lǐng)域中的遷移學(xué)習(xí)方法來(lái)構(gòu)建軟件缺陷預(yù)測(cè)模型,遷移學(xué)習(xí)是運(yùn)用已有知識(shí),對(duì)具有一定相關(guān)性的領(lǐng)域的問(wèn)題進(jìn)行求解的一種機(jī)器學(xué)習(xí)方法,其目的是遷移已有知識(shí)來(lái)解決目標(biāo)領(lǐng)域僅有少數(shù)已標(biāo)記實(shí)例甚至沒(méi)有的問(wèn)題。
跨項(xiàng)目缺陷預(yù)測(cè)問(wèn)題可以視為遷移學(xué)習(xí)在軟件缺陷預(yù)測(cè)領(lǐng)域中的一個(gè)重要應(yīng)用。采用合適的遷移學(xué)習(xí)方法則可以大大提高樣本不充足任務(wù)的分類識(shí)別結(jié)果。
圖1展示了軟件缺陷預(yù)測(cè)技術(shù)中,從傳統(tǒng)機(jī)器學(xué)習(xí)到遷移學(xué)習(xí)應(yīng)用的方法演進(jìn)過(guò)程。
遷移學(xué)習(xí)缺陷預(yù)測(cè)的流程主要分為四大部分:
①數(shù)據(jù)預(yù)處理:對(duì)項(xiàng)目數(shù)據(jù)(源項(xiàng)目或目標(biāo)項(xiàng)目)進(jìn)行篩選、去噪,去除無(wú)關(guān)樣本,解決跨項(xiàng)目中出現(xiàn)的類不平衡、不相關(guān)信息、冗余信息等問(wèn)題;
②數(shù)據(jù)遷移:對(duì)篩選后的項(xiàng)目數(shù)據(jù)(源項(xiàng)目或目標(biāo)項(xiàng)目)進(jìn)行相應(yīng)的特征或?qū)嵗龜?shù)據(jù)遷移,使目標(biāo)項(xiàng)目數(shù)據(jù)更貼近源數(shù)據(jù)的分布。
③建立預(yù)測(cè)模型:基于機(jī)器學(xué)習(xí)的算法,對(duì)遷移后的數(shù)據(jù)建立缺陷預(yù)測(cè)模型。
④模型評(píng)估:利用相應(yīng)的算法評(píng)估機(jī)制,對(duì)建立的缺陷預(yù)測(cè)模型進(jìn)行評(píng)估,驗(yàn)證所使用的模型算法性能是否可用。
圖2展示了遷移學(xué)習(xí)預(yù)測(cè)軟件缺陷的流程。
面向復(fù)雜軟件缺陷
隨著人們對(duì)軟件需求的日益增加,軟件開(kāi)發(fā)過(guò)程會(huì)越來(lái)越復(fù)雜,軟件規(guī)模和邏輯程度也持續(xù)增長(zhǎng),比如新型的復(fù)雜系統(tǒng)中的大數(shù)據(jù)、云平臺(tái)等,面對(duì)此種情況,單個(gè)源項(xiàng)目軟件數(shù)據(jù)很難充分反映一個(gè)復(fù)雜目標(biāo)項(xiàng)目的缺陷特征,可用多源異構(gòu)遷移學(xué)習(xí)跨項(xiàng)目的方法來(lái)預(yù)測(cè)軟件缺陷。
使用不同公司的數(shù)據(jù)作為源數(shù)據(jù),來(lái)預(yù)測(cè)目標(biāo)公司或目標(biāo)項(xiàng)目未標(biāo)記的軟件模塊,由于源數(shù)據(jù)和目標(biāo)數(shù)據(jù)是從不同的公司和項(xiàng)目收集的,因此它們有不同的數(shù)據(jù)分布情況,所以后面的缺陷預(yù)測(cè)模型建立中,依然會(huì)用之前的特征遷移、實(shí)例遷移等方法。
HDP(異構(gòu)遷移缺陷預(yù)測(cè))方法包括特征選擇和特征映射兩個(gè)階段,具體來(lái)說(shuō):首先借助特征選擇方法從源項(xiàng)目中選出與類標(biāo)強(qiáng)相關(guān)的特征.隨后借助特征映射方法將為源項(xiàng)目選出的特征與目標(biāo)項(xiàng)目的特征進(jìn)行映射,最后基于映射的特征構(gòu)建缺陷預(yù)測(cè)模型。
借助典型相關(guān)分析(CCA)方法,來(lái)減少源項(xiàng)目與目標(biāo)項(xiàng)目數(shù)據(jù)集分布間的差異程度,通過(guò)為源項(xiàng)目和目標(biāo)項(xiàng)目尋找一個(gè)共有空間,使得投影到該共有空間的兩個(gè)數(shù)據(jù)集間的相關(guān)性最大化,結(jié)果表明:若源項(xiàng)目與目標(biāo)項(xiàng)目之間共有的度量元數(shù)越多,該方法的性能越好,同時(shí)他們也發(fā)現(xiàn)多對(duì)1項(xiàng)目的方式要優(yōu)于1對(duì)1項(xiàng)目方式。
面向跨行業(yè)遷移軟件缺陷預(yù)測(cè)
目前關(guān)于遷移學(xué)習(xí)與跨行業(yè)軟件缺陷預(yù)測(cè)的研究還不多,但是跨行業(yè)的遷移學(xué)習(xí)已有了大量研究,主要在語(yǔ)音識(shí)別、文本分類、圖像識(shí)別等學(xué)科的研究較多??缧袠I(yè)大致的思路是尋找提取源行業(yè)項(xiàng)目和目標(biāo)行業(yè)項(xiàng)目的共性特征,嘗試去建立一個(gè)在訓(xùn)練集和測(cè)試集都適用的模型。
關(guān)于未來(lái)的展望
對(duì)于一些新啟動(dòng)的軟件項(xiàng)目或大部分中小規(guī)模企業(yè)來(lái)說(shuō),搜集充足的高質(zhì)量缺陷預(yù)測(cè)數(shù)據(jù)集較為困難,研究人員已經(jīng)通過(guò)挖掘開(kāi)源項(xiàng)目,搜集了很多高質(zhì)量的缺陷預(yù)測(cè)數(shù)據(jù)集,并共享到Promise庫(kù)中。
針對(duì)跨項(xiàng)目軟件缺陷預(yù)測(cè)問(wèn)題的研究具有豐富的理論研究?jī)r(jià)值和工業(yè)界應(yīng)用前景,雖然國(guó)內(nèi)外研究人員已經(jīng)取得了一定的研究進(jìn)展,但我們認(rèn)為,開(kāi)源軟件的遷移學(xué)習(xí)跨項(xiàng)目缺陷預(yù)測(cè)研究仍然是今后軟件缺陷預(yù)測(cè)研究中值得關(guān)注的一個(gè)開(kāi)放性研究課題。