蔣蘭華
(煙臺汽車工程職業(yè)學(xué)院 招生就業(yè)處,煙臺 265500)
軟件復(fù)雜度隨著實際需求的不斷提高而隨之增大,進而增加了軟件中隱藏缺陷的概率,易對應(yīng)用該軟件的生產(chǎn)、生活帶來不利的影響,因而對軟件質(zhì)量的重視程度逐漸提高,將軟件缺陷問題前置,若軟件中存在的缺陷在軟件開發(fā)過程中能夠被發(fā)現(xiàn)并加以修復(fù),就能夠?qū)τ邢薜臏y試資源進行合理有效的分配,通過對源代碼文件進行挖掘和文檔的開發(fā)是常用的軟件缺陷預(yù)測手段,對新軟件模塊的預(yù)測過程需通過缺陷預(yù)測模型的構(gòu)建實現(xiàn),對足夠多的歷史訓(xùn)練數(shù)據(jù)缺乏合理有效的利用。
作為軟件工程領(lǐng)域最為活躍的一種技術(shù),軟件缺陷預(yù)測技術(shù)(包括靜態(tài)的和動態(tài)的兩種缺陷預(yù)測技術(shù))在軟件開發(fā)過程中通過對軟件進行自動的度量、統(tǒng)計及分析從而實現(xiàn)預(yù)測潛在軟件缺陷的功能,有助于對軟件質(zhì)量進行分析,同時對軟件成本進行平衡,該領(lǐng)域的研究重點在于對軟件代碼進行靜態(tài)度量分析,近年來在軟件缺陷預(yù)測方法中逐漸融合了統(tǒng)計方法和機器學(xué)習(xí)技術(shù),具有代表性的有線性判別分析、布爾判別函數(shù)、聚類分析等,這些方法過于重視靜態(tài)代碼缺少對動態(tài)代碼的關(guān)注。Kim等提出的故障預(yù)測技術(shù)以代碼歷史改變?yōu)橐罁?jù),進行訓(xùn)練時將其作為分類器的輸入,使有限的代碼資源得以充分利用從而顯著提升了預(yù)測性能[1]。
但是分類或回歸技術(shù)的缺陷在于:對于新的項目由于擁有的訓(xùn)練樣本較少,在對其進行缺陷預(yù)測時,訓(xùn)練準(zhǔn)確模型的難度較大;另外一個項目的各子項目通常具有較大的相似性,訓(xùn)練的缺陷預(yù)測模型難以在進行其他相似項目預(yù)測時直接使用,例如對于項目的缺陷分類器已完成了大量C#編寫的訓(xùn)練,通常在面臨新的java項目時,需在當(dāng)前項目下通過有限的樣本標(biāo)記的利用完成對分類器的重新訓(xùn)練,缺少對不同項目間的相關(guān)性的重視程度,由于項目內(nèi)部具有相同的程序設(shè)計及算法機理(只有語言不同),兩者間的相關(guān)性較強,若在此基礎(chǔ)上進行遷移訓(xùn)練能夠使模型訓(xùn)練所需的樣本數(shù)得以顯著降低,進而使預(yù)測精度進一步提高。
開發(fā)軟件過程中為提高軟件質(zhì)量及可靠性,軟件測試是不可或缺的階段,為發(fā)現(xiàn)和修復(fù)缺陷,對規(guī)模和復(fù)雜度不斷提高的軟件進行全面的測試時所需成本較高,通過使用軟件缺陷預(yù)測技術(shù)能夠?qū)撛诘能浖毕菽K進行提前定位,協(xié)助相關(guān)人員對有限的測試資源進行合理分配,降低成本,從而提高軟件質(zhì)量。
假設(shè)源項目的邊緣特征分布由P(Xs)表示簡寫為P,目標(biāo)項目的邊緣特征分布由Q(XT)表示簡寫為Q,P、Q在不同風(fēng)格的項目中表現(xiàn)也不同,但在項目具有較高相似性的算法流程和程序設(shè)計方式時P、Q兩者間同樣會具有較大的相似性,本文用距離對其進行表述[2],P和Q的距離表達式如式(1)。
(1)
全局的核希爾伯特空間由H表示,需找到一種映射(由φ表示),以使數(shù)據(jù)分布差別在φ(Xs)和φ(XT)間最小,為達到更大的預(yù)測精度,分類模型(由f表示)可以在φ(Xs)和Ys上訓(xùn)練,同時對φ(XT)進行預(yù)測[3]。表示如式(2)。
minDist(φ(Xs),φ(XT))+λR(φ)
s.t.constraintsonφ(Xs) andφ(XT)
(2)
在對上述數(shù)據(jù)分布距離度量及優(yōu)化問題定義進行分析的基礎(chǔ)上,能夠獲取一個優(yōu)化問題的具體描述:在核希波爾特空間里,φ(x):X→H,函數(shù)f的表達式如式(3)。
f(x)=<φ(x),f>
(3)
在此基礎(chǔ)上映射后的數(shù)據(jù)分布間的距離表達式如式(4)。
(4)
接下來為使映射后的數(shù)據(jù)分布間的距離最小化,需找到一個通用核函數(shù)的特征映射(由k表示),源數(shù)據(jù)Xs經(jīng)通用核函數(shù)k定義后由Ks表示得到的混合核矩陣,源數(shù)據(jù)XT經(jīng)通用核函數(shù)k定義后由KT表示得到的混合核矩陣[4],則(4)式可重新定義如式(5)—式(7)。
(5)
(6)
(7)
(8)
將遷移學(xué)習(xí)方法應(yīng)用到軟件工程數(shù)據(jù)中完成缺陷預(yù)測時,具體的軟件缺陷處理流程如圖1所示。
圖1 缺陷預(yù)測流程
在軟件代碼實例中預(yù)測對象表示一個待預(yù)測單元,預(yù)測對象通常可選取文件、方法或一個模塊表示,由于單個文件在多種語言編寫程序種獲取方便且利于統(tǒng)計,因此本文實際的預(yù)測對象選取了單個文件,接下來針對軟件代碼庫的數(shù)據(jù)需對其進行包括提取特征、維度約減、數(shù)據(jù)歸一化等在內(nèi)的預(yù)處理,本文在進行實驗時采用標(biāo)了準(zhǔn)數(shù)據(jù)集,并采用最大最小值歸一化表示式(9)。
(9)
為使兩者距離最小,將源代碼和模板代碼按照上文方法完成在新的空間的統(tǒng)一映射,以歸一化后的數(shù)據(jù)為輸入完成半正定規(guī)劃問題的求解,進而獲取降維處理后的數(shù)據(jù)表示,此過程即為模型遷移;完成模型遷移后,進行模型訓(xùn)練時利用所獲取的源代碼庫和目標(biāo)代碼庫的數(shù)據(jù),本文的分類器采用logistic回歸模型,該回歸模型在軟件工程領(lǐng)域應(yīng)用廣泛易于獲取且簡單分類效果實現(xiàn)較好;完成訓(xùn)練完模型后,用模型遷移的方法將新的實例數(shù)據(jù)完成到相同空間的映射,再通過分類器的使用完成預(yù)測結(jié)果的獲取[5]。缺陷預(yù)測算法歸納如下:
輸出:項目數(shù)據(jù)集的標(biāo)記集合YT;
為了驗證基于遷移學(xué)習(xí)的軟件缺陷預(yù)測算法的有效性,選取兩種基準(zhǔn)算法進行比較:單項目缺陷預(yù)測(singlepred):行訓(xùn)練和預(yù)測對象只針對新的項目,完成某個項目數(shù)據(jù)的選取,用于訓(xùn)練的數(shù)據(jù)和用來測試的數(shù)據(jù)各一半,重復(fù)15次實驗后取平均值;多項目無遷移缺陷預(yù)測(MultiNonTransPred):對已有的項目訓(xùn)練分類器進行充分利用,將其用于新的項目的缺陷預(yù)測中[6];本文多項目遷移缺陷預(yù)測方法(MultiTransPred):在新的空間上完成源項目和目標(biāo)項目的數(shù)據(jù)映射,目標(biāo)項目數(shù)據(jù)的預(yù)測則在新空間上完成。本文的測試數(shù)據(jù)集為在AEEEM(共包括項目5個、度量值26種)數(shù)據(jù)集中選取了3個項目,進行遷移訓(xùn)練時從中選取3個項目,具體項目及其描述如表1所示。
表1 選取的項目介紹
部分屬性度量如表2所示。
表2 部分屬性度量信息
檢測過程中缺陷預(yù)測的分類器選擇常用的Logistic回歸模型,對3種方法分別進行訓(xùn)練,在3個不同項目下對3種方法的分類性能(F—1值)進行對比,預(yù)測性能對比結(jié)果如表3所示。
表3 不同算法的分類性能
檢測結(jié)果表明:采用原有的模型對新項目進行預(yù)測的多項目無遷移缺陷預(yù)測方法的訓(xùn)練效果表現(xiàn)不佳,單項目缺陷預(yù)測方法受到有限的訓(xùn)練樣本的限制,其訓(xùn)練效果相對好些,本文方法的分類效果顯著提升,相比另外兩種方法分類效果始終保持在最佳狀態(tài),證明基于遷移學(xué)習(xí)的軟件缺陷預(yù)測方法的實用性較高,尤其適用于對新項目進行預(yù)測,能夠使軟件缺陷預(yù)測效果得以有效提升。
本文主要研究了軟件缺陷預(yù)測技術(shù),為提高傳統(tǒng)預(yù)測方法對小規(guī)模訓(xùn)練數(shù)據(jù)的利用效率,提出了一種預(yù)測技術(shù)以遷移學(xué)習(xí)為依據(jù),利用降維遷移學(xué)習(xí)的思想,預(yù)測新項目時可對已有的項目進行充分利用,針對源項目和目標(biāo)項目具體通過間二者間公共特征空間的搜索,使數(shù)據(jù)分布距離在兩個項目間最小,模型訓(xùn)練在此公共空間完成從而實現(xiàn)遷移分類的效果,檢測結(jié)果表明該方法在實際軟件缺陷預(yù)測任務(wù)中,對軟件缺陷的預(yù)測性能更好,提高了原始訓(xùn)練數(shù)據(jù)的利用效率,具備較高的實用性。