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