国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

LightGBM融合CFS的開(kāi)發(fā)者感知代碼異味強(qiáng)度預(yù)測(cè)模型研究

2022-12-06 11:06:04高建華
關(guān)鍵詞:異味開(kāi)發(fā)者度量

宇 通,高建華

(上海師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,上海 200234)

1 引 言

代碼異味是程序源代碼中任何可能表明問(wèn)題更深層次的特征,通常由不合理的代碼設(shè)計(jì)和不恰當(dāng)?shù)拈_(kāi)發(fā)操作引起,即如果軟件系統(tǒng)包含代碼異味,則通常表明代碼質(zhì)量存在問(wèn)題.傳統(tǒng)的代碼異味識(shí)別方法帶有極大的主觀性,并且因開(kāi)發(fā)者、開(kāi)發(fā)語(yǔ)言、開(kāi)發(fā)方法的不同而異.

相關(guān)研究人員將常見(jiàn)的代碼異味按照其不同特點(diǎn)進(jìn)行了分類.Fowler等人[1]定義了22種發(fā)現(xiàn)的代碼異味,針對(duì)如何檢測(cè)代碼異味,Moha等人[2]提出DéCOR的檢測(cè)方法以及DETEX一種實(shí)例化該方法的檢測(cè)技術(shù),但該方法不能檢測(cè)代碼異味的強(qiáng)度.

代碼異味作為軟件技術(shù)債務(wù)[3]的直接體現(xiàn),會(huì)隨時(shí)間推移而在軟件系統(tǒng)中堆積[4],因?yàn)檐浖陂_(kāi)發(fā)與使用階段經(jīng)常會(huì)因需求變更而進(jìn)行擴(kuò)展[5],增加新需求或修改原有需求.在此過(guò)程中由于開(kāi)發(fā)時(shí)間或其他條件限制或通常會(huì)使源代碼復(fù)雜度提高[6],從而降低了軟件質(zhì)量與可維護(hù)性.代碼異味問(wèn)題應(yīng)盡快得到解決,正如Macia[7]在實(shí)證分析中得出的結(jié)論,如果開(kāi)發(fā)早期階段在代碼中引入了異味,如不盡快消除便可能在代碼和體系結(jié)構(gòu)級(jí)別上導(dǎo)致更為嚴(yán)重的問(wèn)題.

為了解決異味問(wèn)題引入了重構(gòu)[1],重構(gòu)是在不改變軟件外部行為的條件下,改善代碼內(nèi)部結(jié)構(gòu)的技術(shù).進(jìn)行代碼重構(gòu)是提升軟件質(zhì)量的常用做法.

Zhang等人[8]對(duì)代碼異味與重構(gòu)相關(guān)的研究現(xiàn)狀做了系統(tǒng)的闡述,他們發(fā)現(xiàn)現(xiàn)有的大多數(shù)研究集中于開(kāi)發(fā)自動(dòng)檢測(cè)代碼異味的工具或方法,而少有關(guān)于代碼異味的實(shí)證性研究.

Basili等人[9]提出使用面向?qū)ο蟮囊幌盗卸攘恐笜?biāo)(CK)來(lái)預(yù)測(cè)軟件項(xiàng)目是否存在缺陷,但并未對(duì)軟件中存在的代碼異味進(jìn)行預(yù)測(cè).

選擇重構(gòu)代碼的順序至關(guān)重要,Yamashita等人[10]發(fā)現(xiàn)并非所有代碼異味的危害程度都相同.有些異味程度較輕而不會(huì)對(duì)軟件質(zhì)量造成缺陷,因此應(yīng)優(yōu)先重構(gòu)異味較嚴(yán)重即異味強(qiáng)度大的代碼.選擇合適的方法對(duì)代碼異味強(qiáng)度進(jìn)行預(yù)測(cè)有利于對(duì)代碼異味的處理進(jìn)行優(yōu)先級(jí)排序,可使異味強(qiáng)度大的代碼得到優(yōu)先處理,以節(jié)省人力物力成本.

在重構(gòu)的先后順序上,Zhang等人[11]提出重構(gòu)優(yōu)先級(jí)概念,即根據(jù)不同代碼異味的嚴(yán)重性確定重構(gòu)的先后次序,但只定性分析了軟件缺陷與代碼異味的關(guān)系,沒(méi)有進(jìn)行深入研究.

Ouni等人[12]利用軟件開(kāi)發(fā)歷史信息,運(yùn)用多目標(biāo)優(yōu)化的方法確定重構(gòu)操作的最佳順序以減少系統(tǒng)中的異味數(shù)量,提高了重構(gòu)效率.Vidal等人[13]開(kāi)發(fā)了SPIRIT工具,根據(jù)代碼異味類型、過(guò)去做出的修改、系統(tǒng)修改可能性的評(píng)估,3個(gè)重要度量標(biāo)準(zhǔn)對(duì)代碼異味進(jìn)行排序.但此類方法均未綜合考慮代碼的各項(xiàng)度量指標(biāo).

在異味嚴(yán)重性檢測(cè)方法上,F(xiàn)ontana等人[14]提出使用機(jī)器學(xué)習(xí)技術(shù)對(duì)代碼異味嚴(yán)重性進(jìn)行檢測(cè),運(yùn)用了機(jī)器學(xué)習(xí)分類與回歸模型,使用軟件多種度量指標(biāo)作為模型輸入進(jìn)行預(yù)測(cè).

Pecorelli等人[15]在進(jìn)行代碼異味處理優(yōu)先級(jí)排序時(shí)比較了RF、LR(邏輯回歸)、樸素貝葉斯等機(jī)器學(xué)習(xí)算法,并驗(yàn)證了RF具有最佳效果,但未經(jīng)特征篩選過(guò)程且模型精度與運(yùn)行效率都有待提高.

在特征選擇方面,通常原始數(shù)據(jù)集中存在著冗余和不相關(guān)特征,不經(jīng)過(guò)處理可能會(huì)導(dǎo)致過(guò)擬合,引發(fā)“維度災(zāi)難”[16],Hall[17]提出使用相關(guān)性分析研究機(jī)器學(xué)習(xí)中的特征選擇問(wèn)題,以提高機(jī)器學(xué)習(xí)模型性能,取得了良好的效果.

Ke等人[18]提出了LightGBM,一種實(shí)現(xiàn)GBDT(梯度提升決策樹(shù))算法的框架,在保證高精度的同時(shí)具有更快的訓(xùn)練速度,也實(shí)現(xiàn)了更低的內(nèi)存消耗.LightGBM已被運(yùn)用在金融領(lǐng)域如加密貨幣價(jià)格趨勢(shì)預(yù)測(cè)[19]以及醫(yī)學(xué)領(lǐng)域如針對(duì)乳腺癌患者的miRNA分類[20],均取得了良好的效果,但目前還沒(méi)有使用LightGBM進(jìn)行代碼異味強(qiáng)度預(yù)測(cè)的相關(guān)研究.

對(duì)此,本文提出了一種基于LightGBM融合CFS的開(kāi)發(fā)者感知代碼異味強(qiáng)度預(yù)測(cè)模型,該模型綜合考慮代碼產(chǎn)品與過(guò)程度量指標(biāo),使用經(jīng)相關(guān)性分析篩選后的高相關(guān)特征,運(yùn)用LightGBM算法對(duì)數(shù)據(jù)集中所考慮的4種代碼異味實(shí)例進(jìn)行異味強(qiáng)度預(yù)測(cè).

本文的主要貢獻(xiàn)有如下3個(gè)方面:

1)在統(tǒng)計(jì)層面分析了選取的代碼度量指標(biāo)與異味強(qiáng)度的相關(guān)關(guān)系,并選用軟件代碼的多個(gè)不同層面的度量指標(biāo),綜合構(gòu)建代碼異味強(qiáng)度預(yù)測(cè)模型.

2)提出了一種基于LightGBM融合CFS的代碼異味強(qiáng)度預(yù)測(cè)模型,結(jié)合相關(guān)性分析進(jìn)行特征選擇,并對(duì)LightGBM模型參數(shù)進(jìn)行調(diào)整,根據(jù)模型評(píng)價(jià)指標(biāo)對(duì)模型進(jìn)行優(yōu)化.

3)基于開(kāi)發(fā)者感知的代碼異味數(shù)據(jù)集,分別對(duì)軟件項(xiàng)目中4種不同類型代碼異味進(jìn)行研究并將本文提出的基于LightGBM融合CFS模型與RF模型進(jìn)行多方面對(duì)比,驗(yàn)證了本文提出的模型相比RF模型在預(yù)測(cè)精度以及效率等各方面性能上均有較大提升.

2 相關(guān)術(shù)語(yǔ)

2.1 代碼異味

代碼異味也稱設(shè)計(jì)缺陷或設(shè)計(jì)異常,是代碼在次優(yōu)設(shè)計(jì)下的產(chǎn)物,其存在嚴(yán)重影響了軟件系統(tǒng)的可靠性與可維護(hù)性,同一段代碼可能會(huì)受多種代碼異味影響.代碼重構(gòu)可以解決異味問(wèn)題.本文聚焦以下4種代碼異味,如表1所示.

表1 代碼異味及其特征

選擇以上4種類級(jí)別的代碼異味進(jìn)行研究,原因?yàn)椋?/p>

Blob Class是內(nèi)聚性較差的類所存在的代碼異味,對(duì)代碼質(zhì)量造成了嚴(yán)重影響,且根據(jù)最近的研究,此種氣味對(duì)軟件項(xiàng)目及開(kāi)發(fā)人員來(lái)說(shuō)最為關(guān)鍵.

Complex Class表明類結(jié)構(gòu)過(guò)于復(fù)雜,由此導(dǎo)致對(duì)這些類的測(cè)試工作較為困難,開(kāi)發(fā)者通常能識(shí)別此種異味并對(duì)其嚴(yán)重性進(jìn)行評(píng)估.

Spaghetti Code在過(guò)去研究中被深入調(diào)查,此種異味導(dǎo)致開(kāi)發(fā)人員對(duì)源代碼理解能力的下降,從而增加了代碼維護(hù)工作量,開(kāi)發(fā)人員也能對(duì)其關(guān)鍵性進(jìn)行準(zhǔn)確評(píng)估.

Shotgun Surgery是對(duì)某類進(jìn)行修改時(shí)需要一并修改其他類,開(kāi)發(fā)人員可根據(jù)觸發(fā)其他類修改的數(shù)量來(lái)評(píng)估此種代碼異味的強(qiáng)度.

以上4種代碼異味已被證明在研究軟件項(xiàng)目中大范圍分布,其存在會(huì)對(duì)軟件系統(tǒng)的可維護(hù)性、可理解性、可測(cè)試性造成嚴(yán)重的負(fù)面影響,且由于異味檢測(cè)工具的限制,需在針對(duì)Java語(yǔ)言編寫(xiě)的程序中進(jìn)行異味研究.綜上所述,本文聚焦以上4種類級(jí)別的代碼異味,對(duì)這4種代碼異味進(jìn)行分析研究也有助于更好地解決軟件開(kāi)發(fā)中的潛在問(wèn)題.

2.2 代碼異味強(qiáng)度

根據(jù)異味嚴(yán)重性數(shù)值劃分不同等級(jí)得到代碼異味強(qiáng)度,其可用于衡量異味的嚴(yán)重程度.準(zhǔn)確地對(duì)代碼異味強(qiáng)度進(jìn)行預(yù)測(cè)可使高危險(xiǎn)性的代碼問(wèn)題得到優(yōu)先處理,從而在極大程度上減少軟件項(xiàng)目的維護(hù)開(kāi)銷.本文考慮基于開(kāi)發(fā)者感知的代碼異味嚴(yán)重性Criticality,該指標(biāo)是開(kāi)發(fā)者對(duì)代碼異味嚴(yán)重程度的直接評(píng)價(jià),并按程度不同分為1~5,1為最輕微,5為最嚴(yán)重.代碼異味強(qiáng)度相應(yīng)地分為3個(gè)不同等級(jí):NON-SEVERE(輕微)、MEDIUM(中度)、SEVERE(嚴(yán)重),以表征代碼異味的嚴(yán)重程度,如表2所示.

表2 代碼異味強(qiáng)度等級(jí)劃分

輕微等級(jí)代表代碼中存在較弱的代碼異味強(qiáng)度,危害較弱且不易被察覺(jué).中度等級(jí)代表代碼中已有較明顯的異味,通常可被開(kāi)發(fā)者直接感知.嚴(yán)重等級(jí)代表代碼中已存在危害性較高的代碼異味,需要開(kāi)發(fā)者盡快處理,防止后續(xù)發(fā)展為更嚴(yán)重的代碼問(wèn)題.

2.3 LightGBM算法

LightGBM,全稱為L(zhǎng)ight Gradient Boosting Machine,該算法基于梯度增強(qiáng)的機(jī)器學(xué)習(xí)框架,利用了決策樹(shù)算法.LightGBM與其他樹(shù)類算法不同,不逐行增長(zhǎng)樹(shù),而按葉增長(zhǎng)樹(shù),其選擇它認(rèn)為將產(chǎn)生最大損失減少的葉子.LightGBM與XGBoost或其他模型所使用基于排序的決策樹(shù)算法不同,LightGBM實(shí)現(xiàn)了一種高度優(yōu)化的基于直方圖的決策樹(shù)學(xué)習(xí)算法,這種算法與傳統(tǒng)算法相比在效率與內(nèi)存消耗方面具有巨大優(yōu)勢(shì),LightGBM算法采用兩種新技術(shù)GOSS(基于梯度的單邊采樣)與EFB(互斥特征捆綁),使得算法運(yùn)行速度更快且能保持極高的準(zhǔn)確度[18].LightGBM具有許多XGBoost的優(yōu)點(diǎn),包括稀疏優(yōu)化、并行訓(xùn)練等方面.

LightGBM的基于梯度的單邊采樣方法如算法1所示.

算法1.GOSS(基于梯度的單邊采樣)

輸入:訓(xùn)練數(shù)據(jù)M、迭代次數(shù)I、大梯度數(shù)據(jù)采樣率a、小梯度數(shù)據(jù)采樣率b、損失函數(shù)loss、弱學(xué)習(xí)器L.

輸出:訓(xùn)練完成的強(qiáng)學(xué)習(xí)器

2.topN←len(M)*a/*提取大梯度樣本*/;

3.randN←len(M)*b/*從剩余數(shù)據(jù)隨機(jī)選取b×100%小梯度樣本*/;

4.fori=1 toIdo /*迭代循環(huán)直到達(dá)到規(guī)定迭代次數(shù)*/;

5. preds←models.predict(M) /*模型預(yù)測(cè)得到樣本預(yù)測(cè)值preds*/;

6.k←loss(M,preds),s←{1,1,…} /*由preds計(jì)算loss,再計(jì)算得樣本梯度,樣本初始權(quán)重s均為1*/;

7. sorted←SortedData(abs(k)) /*由梯度絕對(duì)值降序排序得到樣本索引數(shù)組sorted*/;

8. topSet←sorted[1:topN] /*在大梯度樣本中選擇topN數(shù)據(jù)得到索引數(shù)組topset*/;

9. randSet←RandPick(sorted[topN:len(M)],randN) /*從剩余數(shù)據(jù)中隨機(jī)選取b*100%的數(shù)據(jù),生成小梯度樣本randSet*/;

10. usedSet←topset+randSet /*大梯度樣本與小梯度樣本進(jìn)行合并*/;

12. newmodel←L(M[usedSet],-k[usedSet],s[used Set]) /*由usedSet中的樣本M、梯度k與權(quán)重s得到新的弱學(xué)習(xí)器*/;

13. models.append(newModel) /*將新的弱學(xué)習(xí)器加入模型*/;

LightGBM中的互斥特征捆綁方法(EFB)包括兩項(xiàng)內(nèi)容:特征捆綁和互斥特征合并,如算法2與算法3所示.

算法2.特征捆綁

輸入:特征F、最大沖突數(shù)C、圖G;

輸出:特征捆綁集合bundles;

1.searchOrder←G.sortByDegree() /*構(gòu)造具有加權(quán)邊的圖G,圖的頂點(diǎn)為特征,將不互斥的特征頂點(diǎn)相連,邊的權(quán)值對(duì)應(yīng)特征同時(shí)不為0的樣本數(shù),按照頂點(diǎn)的度按降序排序特征*/;

2.bundles←{},bundlesConflict←{}

3.foriin searchOrder do

4. needNew←True

5. forj=1 tolen(bundles) do /*對(duì)有序表中每個(gè)特征,在特征捆綁簇中進(jìn)行遍歷*/;

6. cnt←ConflictCnt(bundles[j],F(xiàn)[i])

7. ifcnt+bundlesConflict[i] ≤Cthen /*C為設(shè)置的最大沖突閾值,若該特征加入特征簇中后沖突數(shù)不超過(guò)C,則加入該特征到這個(gè)簇中*/;

8. bundles[j].add(F[i]),needNew←False /*將特征分配給具有小沖突的現(xiàn)有bundle*/;

9. break

10. ifneedNewthen

11. AddF[i] as a new bundle tobundles/*否則創(chuàng)建新特征簇,并將該特征加入*/;

算法3.合并互斥特征

輸入:數(shù)據(jù)數(shù)量numData、一個(gè)互斥特征簇F;

輸出:newBin、binRanges;

1.binRanges←{0},totalBin←0 /*LightGBM中直方圖算法對(duì)特征值進(jìn)行了分桶(bin)*/;

2.forfinFdo /*binRanges為偏移常數(shù)數(shù)組*/;

3. totalBin += f.numBin

4. binRanges.append(totalBin)

5.newBin←new Bin(numData)

6.fori=1 tonumDatado

7. newBin[i]←0

8. forj=1 tolen(F) do

9. ifF[j].bin[i]≠ 0 then

10. newBin[i]←F[j].bin[i] + binRanges[j]

2.4 CFS

基于相關(guān)性的特征選擇(Correlation-based feature selection,CFS).從源代碼中提取到的代碼度量部分可能與異味強(qiáng)度無(wú)關(guān),即特征與異味強(qiáng)度之間的相關(guān)性較小,直接使用原始數(shù)據(jù)集中高維的數(shù)據(jù)特征通常會(huì)導(dǎo)致算法模型運(yùn)算速度變慢,還可能降低識(shí)別精度.因此提出CFS根據(jù)相關(guān)性分析對(duì)代碼度量指標(biāo)進(jìn)行篩選,計(jì)算各度量指標(biāo)與基于開(kāi)發(fā)者感知的代碼異味嚴(yán)重性數(shù)值間的相關(guān)系數(shù),衡量其之間的相關(guān)關(guān)系.采取過(guò)濾的方法,將相關(guān)性較低的度量指標(biāo)濾去,保留高相關(guān)度量指標(biāo)來(lái)作為后續(xù)代碼異味強(qiáng)度預(yù)測(cè)模型的輸入,如圖1所示.

圖1 代碼度量指標(biāo)CFS過(guò)程

3 代碼異味強(qiáng)度預(yù)測(cè)模型

實(shí)際情況下代碼之中存在的異味問(wèn)題按危害程度有輕重之分,而現(xiàn)有的異味檢測(cè)方法仍存在較大的局限性,或只依靠手動(dòng)設(shè)置代碼的單一結(jié)構(gòu)度量閾值檢測(cè)指標(biāo),如設(shè)置行數(shù)閾值范圍來(lái)檢測(cè)長(zhǎng)方法,但缺點(diǎn)首先是指標(biāo)的選取較為靈活,缺乏開(kāi)發(fā)經(jīng)驗(yàn)的人員往往不能準(zhǔn)確定位某種代碼異味的外在度量指標(biāo),其次是單一某種或簡(jiǎn)單幾種綜合的代碼度量指標(biāo)并不能充分反映代碼質(zhì)量.

基于此,本文考慮基于LightGBM融合CFS模型進(jìn)行代碼異味強(qiáng)度預(yù)測(cè),先進(jìn)行數(shù)據(jù)篩選過(guò)程,再提取相應(yīng)代碼度量指標(biāo)并通過(guò)CFS進(jìn)行特征選擇,最后運(yùn)用LightGBM進(jìn)行預(yù)測(cè)并對(duì)預(yù)測(cè)效果及模型進(jìn)行評(píng)價(jià),如圖2所示.

圖2 基于LightGBM融合CFS的代碼異味強(qiáng)度預(yù)測(cè)模型

3.1 數(shù)據(jù)統(tǒng)計(jì)

本文考慮所研究的4種類級(jí)別代碼異味,挖掘Apache與Eclipse系統(tǒng)中9個(gè)開(kāi)源項(xiàng)目中存在異味的代碼,使用Décor[2]和HIST[21]進(jìn)行異味檢測(cè),提取分別包含4種異味的代碼.數(shù)據(jù)集中包含的代碼異味數(shù)量情況如表3所示.

表3 代碼異味數(shù)量統(tǒng)計(jì)

3.2 代碼度量指標(biāo)

選取產(chǎn)品度量、過(guò)程度量結(jié)合開(kāi)發(fā)者度量,綜合構(gòu)建代碼異味強(qiáng)度預(yù)測(cè)模型.本文研究所考慮的度量指標(biāo)如表4所示.

表4 代碼度量指標(biāo)

3.3 模型預(yù)測(cè)與評(píng)價(jià)

本文采用基于LightGBM融合CFS模型,運(yùn)用10折交叉驗(yàn)證方式對(duì)數(shù)據(jù)集中代碼的異味強(qiáng)度進(jìn)行預(yù)測(cè),如圖3所示,依次將每折數(shù)據(jù)作為測(cè)試集,其余數(shù)據(jù)作為訓(xùn)練集,合并每折預(yù)測(cè)結(jié)果從而得到全體樣本的代碼異味強(qiáng)度預(yù)測(cè)結(jié)果.共選取6個(gè)評(píng)價(jià)指標(biāo)對(duì)實(shí)驗(yàn)進(jìn)行評(píng)估,其中,基于實(shí)例的評(píng)價(jià)指標(biāo)共5個(gè),包括Precision,Recall,F(xiàn)1,MCC,AUC.基于模型效率的評(píng)價(jià)指標(biāo)1個(gè),分析基于LightGBM融合CFS模型的性能表現(xiàn),并與Pecorelli[15]等人提出的RF模型方法進(jìn)行對(duì)比.

圖3 10折交叉驗(yàn)證示意圖

4 實(shí)驗(yàn)研究

本文設(shè)計(jì)3個(gè)實(shí)驗(yàn),主要尋求解決以下3個(gè)問(wèn)題:

Q1:代碼相關(guān)度量指標(biāo)是否和基于開(kāi)發(fā)者感知的代碼異味強(qiáng)度間存在相關(guān)關(guān)系?

Q2:本文所提出的基于LightGBM融合CFS模型與文獻(xiàn)[15]的RF模型相比精度表現(xiàn)如何,是否有了提升?

Q3:本文所提出的基于LightGBM融合CFS模型是否比文獻(xiàn)[15]的RF模型速度更快,效率更高?

4.1 實(shí)驗(yàn)環(huán)境和數(shù)據(jù)集

本文實(shí)驗(yàn)環(huán)境如下:操作系統(tǒng)為Windows 10,處理器為Intel(R) Core i5-6300HQ CPU @ 2.30GHz,內(nèi)存12GB,所用軟件為SPSS和PyCharm,開(kāi)發(fā)語(yǔ)言為Python.

為了評(píng)估本文模型的性能,實(shí)驗(yàn)使用基于開(kāi)發(fā)者感知的代碼異味數(shù)據(jù)集,該數(shù)據(jù)集由開(kāi)發(fā)者對(duì)代碼氣味實(shí)例進(jìn)行評(píng)價(jià)得出,其中包含了開(kāi)發(fā)者對(duì)感知到的代碼異味嚴(yán)重程度的度量值.

數(shù)據(jù)集包含9個(gè)開(kāi)源Java項(xiàng)目,它們屬于兩個(gè)軟件生態(tài)系統(tǒng),分別為Apache與Eclipse.數(shù)據(jù)集中項(xiàng)目在代碼量、作用領(lǐng)域等方面各不相同,具有一定的代表性.所選項(xiàng)目的類數(shù)都超過(guò)了500個(gè),變更歷史超過(guò)5年,提交次數(shù)大于1000次,參與開(kāi)發(fā)者數(shù)量都超過(guò)20人,可提供相應(yīng)代碼異味的實(shí)例以供研究.表5總結(jié)了所選項(xiàng)目的基本信息與統(tǒng)計(jì)數(shù)據(jù).

表5 實(shí)驗(yàn)所涉項(xiàng)目

4.2 代碼異味檢測(cè)方法

數(shù)據(jù)集中包含從實(shí)驗(yàn)項(xiàng)目中篩選出的含4種代碼異味的代碼實(shí)例,其中DéCOR[2]用來(lái)檢測(cè)項(xiàng)目存在的Blob Class、Complex Class和Spaghetti Code異味,HIST[21]用來(lái)檢測(cè)Shotgun Surgery異味.這兩種工具已被代碼異味研究學(xué)者廣泛使用,能準(zhǔn)確地識(shí)別出代碼中的代碼異味.使用這兩種工具進(jìn)行檢測(cè)從而避免了重新構(gòu)造檢測(cè)工具而帶來(lái)的結(jié)果有效性威脅.從備選實(shí)驗(yàn)項(xiàng)目中提取的含4種異味的數(shù)據(jù)集,均經(jīng)過(guò)了以上兩種方法的檢驗(yàn),并證實(shí)了各自所含的代碼異味的存在.用于實(shí)驗(yàn)的數(shù)據(jù)集中異味強(qiáng)度分布情況如表6所示.

表6 數(shù)據(jù)集代碼異味強(qiáng)度分布

4.3 相關(guān)性分析

從實(shí)驗(yàn)項(xiàng)目中選取代碼度量指標(biāo),分別驗(yàn)證其是否與代碼異味嚴(yán)重程度存在相關(guān)關(guān)系.用SPSS統(tǒng)計(jì)軟件進(jìn)行實(shí)驗(yàn).這里引入Spearman相關(guān)系數(shù).

(1)

其中ρ代表Spearman相關(guān)系數(shù),它是衡量?jī)蓚€(gè)變量的依賴性的非參數(shù)指標(biāo),表明了x(獨(dú)立變量)與y(依賴變量)的相關(guān)方向,這里x表示所考慮的各項(xiàng)代碼度量指標(biāo),y表示代碼異味嚴(yán)重性.Spearman相關(guān)系數(shù)取值范圍為-1~1,0代表變量間無(wú)相關(guān)性,即該代碼度量指標(biāo)和代碼異味嚴(yán)重性不存在相關(guān)關(guān)系,Spearman相關(guān)系數(shù)絕對(duì)值越接近1代表相關(guān)性越強(qiáng),即該代碼度量指標(biāo)和代碼異味嚴(yán)重性存在程度較強(qiáng)的相關(guān)關(guān)系,負(fù)值代表負(fù)相關(guān),正值代表正相關(guān).

由表7的統(tǒng)計(jì)結(jié)果表明,絕大多數(shù)考慮的度量指標(biāo)和異味嚴(yán)重程度均有較強(qiáng)的相關(guān)性,Criti.為基于開(kāi)發(fā)者感知的代碼異味強(qiáng)度值,Sig意為顯著性,在這里Sig代表判斷異味嚴(yán)重程度和所考慮的代碼度量指標(biāo)之間具有相關(guān)關(guān)系的犯錯(cuò)幾率,一般地在統(tǒng)計(jì)學(xué)中,若Sig<0.05則說(shuō)明所考慮變量間存在顯著相關(guān)關(guān)系.(回答Q1)

表7 Criti.與代碼度量指標(biāo)的相關(guān)性分析

值得注意的是,由表7可觀察到涉及表示代碼變更的指標(biāo)(如NC、NF)均與開(kāi)發(fā)者感知的代碼異味嚴(yán)重性數(shù)值有著較強(qiáng)的相關(guān)性,且對(duì)代碼修改的越頻繁,代碼異味嚴(yán)重程度也隨之增加,呈明顯正相關(guān)關(guān)系.(回答Q1)

另外,MPC的Sig值為0.804,即判斷MPC與Criti.相關(guān)的犯錯(cuò)概率高達(dá)80.4%,且Spearman相關(guān)系數(shù)接近0,說(shuō)明MPC與Criti.無(wú)明顯相關(guān)關(guān)系,故根據(jù)CFS的特征過(guò)濾方法,應(yīng)將其刪去.本文所構(gòu)建的異味強(qiáng)度預(yù)測(cè)模型具有一定通用性,若待測(cè)數(shù)據(jù)集中未提供Criticality值,通過(guò)本文CFS分析已篩選出與異味強(qiáng)度高度相關(guān)的代碼度量指標(biāo),且高相關(guān)性的代碼度量指標(biāo)的選擇一般不受不同代碼數(shù)據(jù)集的影響,故只需采集待測(cè)數(shù)據(jù)集中相應(yīng)代碼度量指標(biāo)代入模型即可進(jìn)行代碼異味強(qiáng)度的預(yù)測(cè).

4.4 實(shí)驗(yàn)?zāi)P?/h3>

4.4.1 RF模型構(gòu)建

在Pecorelli等人[15]的代碼異味嚴(yán)重性預(yù)測(cè)實(shí)現(xiàn)上,其方法是在比較了多種經(jīng)典機(jī)器學(xué)習(xí)算法包括隨機(jī)森林、邏輯回歸、空間向量機(jī)、樸素貝葉斯和多層感知器后,選擇了效果最優(yōu)的隨機(jī)森林作為最后的預(yù)測(cè)模型.

隨機(jī)森林是一種基于集成學(xué)習(xí)的監(jiān)督式機(jī)器學(xué)習(xí)算法[22],用隨機(jī)方式建立一個(gè)森林模型,該森林結(jié)合了多個(gè)相同類型的算法,由許多決策樹(shù)組成.決策樹(shù)之間相互獨(dú)立無(wú)關(guān)聯(lián),輸入新樣本時(shí),該樣本的取值為所有決策樹(shù)共同決策得出.

隨機(jī)森林隨機(jī)性主要體現(xiàn)在了兩方面,樣本抽樣隨機(jī)性和特征抽樣隨機(jī)性.在訓(xùn)練集中隨機(jī)地抽取一定數(shù)量的樣本,作為樹(shù)的根節(jié)點(diǎn)樣本建立每棵子樹(shù).這兩點(diǎn)隨機(jī)性使得隨機(jī)森林不容易陷入過(guò)擬合.

由于隨機(jī)森林引入了兩個(gè)隨機(jī)性,也使得其具有了良好的抗噪能力.基于樹(shù)模型的樹(shù)狀結(jié)構(gòu)與其他線性模型的區(qū)別,數(shù)值縮放不影響分裂點(diǎn)位置,因而無(wú)需對(duì)數(shù)據(jù)集進(jìn)行標(biāo)準(zhǔn)化處理.

4.4.2 LightGBM模型構(gòu)建

LightGBM是基于GBDT算法的一個(gè)具體實(shí)現(xiàn)框架,GBDT(Gradient Boosting Decision Tree)為了使模型的效果達(dá)到最優(yōu)化,利用弱分類器(決策樹(shù))進(jìn)行迭代訓(xùn)練,GBDT廣泛應(yīng)用于多分類任務(wù)和點(diǎn)擊率預(yù)估問(wèn)題(CTR)的解決[23].

LightGBM采用基于Histogram的決策樹(shù)算法,特點(diǎn)是引入了單邊梯度采樣(GOSS)與互斥特征捆綁(EFB)[18].GOSS的使用能有效降低小梯度數(shù)據(jù)在數(shù)據(jù)實(shí)例中所占比例,因此在計(jì)算信息增益時(shí)只利用剩余的高梯度數(shù)據(jù)即可,大大節(jié)省了在時(shí)間和空間上的消耗.EFB可將許多互斥的特征進(jìn)行捆綁,從而有效減少了特征維度.

另外,傳統(tǒng)的決策樹(shù)模型生長(zhǎng)采用Depth-wise策略,即是按層進(jìn)行的[24].而LightGBM決策樹(shù)采取Leaf-wise生長(zhǎng)策略,即是按葉進(jìn)行的.每次分裂時(shí)從目前所有葉子之中尋找分裂增益最大的葉子進(jìn)行分裂,如此循環(huán).LightGBM采用這種分裂方式的優(yōu)點(diǎn)是使誤差得到了有效的降低,有利于精度的提高,同時(shí)為了防止Leaf-wise生長(zhǎng)策略帶來(lái)的過(guò)擬合問(wèn)題,LightGBM在參數(shù)設(shè)置中引入了max_depth最大深度限制,有效地解決了該問(wèn)題.

LightGBM算法模型需要對(duì)參數(shù)進(jìn)行調(diào)整已達(dá)到更好的訓(xùn)練與測(cè)試效果,LightGBM在所考慮的4種代碼異味數(shù)據(jù)集上表現(xiàn)出良好性能的關(guān)鍵優(yōu)化參數(shù)及含義如表8所示.

表8 LightGBM模型參數(shù)表

4.5 實(shí)驗(yàn)結(jié)果

根據(jù)Pecorelli等人[15]的RF模型與本文模型在4種代碼異味數(shù)據(jù)集上的預(yù)測(cè)結(jié)果,分別構(gòu)建混淆矩陣進(jìn)行對(duì)比,如表9所示.

表9 本文模型與RF模型的混淆矩陣對(duì)比

從表9中可看出,運(yùn)用本文模型對(duì)4種代碼異味強(qiáng)度進(jìn)行預(yù)測(cè),在BC、CC、SC、SS所有4種異味上預(yù)測(cè)效果均優(yōu)于RF模型,在預(yù)測(cè)Non-severe、Medium、Severe 3個(gè)異味級(jí)別中被錯(cuò)誤預(yù)測(cè)的數(shù)量明顯減少.采用本文模型預(yù)測(cè)效果可以在RF模型的基礎(chǔ)之上再獲得較大提升.(回答Q2)

4.6 模型評(píng)價(jià)

本文選取6個(gè)評(píng)價(jià)指標(biāo)對(duì)實(shí)驗(yàn)進(jìn)行評(píng)估,其中,基于實(shí)例的評(píng)價(jià)指標(biāo)共5個(gè),基于模型效率的評(píng)價(jià)指標(biāo)1個(gè).

4.6.1 基于實(shí)例的評(píng)價(jià)指標(biāo)

基于實(shí)例的評(píng)價(jià)指標(biāo)是對(duì)模型在每種代碼異味數(shù)據(jù)集上進(jìn)行預(yù)測(cè)的結(jié)果進(jìn)行評(píng)估,以驗(yàn)證模型區(qū)分正負(fù)樣本的能力,相關(guān)指標(biāo)如下:

1)精確率.

真正正確占預(yù)測(cè)為正確的比例.計(jì)算公式如下:

(2)

其中,TP表示實(shí)際為正例且被分類器判定為正例的樣本數(shù);FP表示實(shí)際為負(fù)例且被分類器判定為正例的樣本數(shù);FN表示實(shí)際為正例但被分類器判定為負(fù)例的樣本數(shù);TN表示實(shí)際為負(fù)例且被分類器判定為負(fù)例的樣本數(shù).

2)召回率.

真正正確占所有實(shí)際為正的比例.計(jì)算公式如下:

(3)

3)F1值.

F-Measure計(jì)算公式如下.

(4)

這里β取為1,即為F1值.

(5)

4)MCC值(馬修斯相關(guān)系數(shù)).

MCC的本質(zhì)描述了預(yù)測(cè)結(jié)果與實(shí)際結(jié)果間的相關(guān)系數(shù).計(jì)算公式如下:

(6)

MCC取值范圍為[-1,1],MCC值為1表示預(yù)測(cè)結(jié)果與實(shí)際結(jié)果完全一致,-1表示完全不一致.

5)AUC值.

ROC曲線下方的面積大小,其取值范圍為[0,1],該值越大的分類器,表示分類的正確率越高.

以上基于實(shí)例的評(píng)價(jià)指標(biāo)原是基于二分類問(wèn)題所討論的,但都根據(jù)本文所研究的多分類問(wèn)題進(jìn)行了重新調(diào)整,均利用基于Python的Scikit-Learn進(jìn)行自動(dòng)化計(jì)算.精確率高表示模型要盡量在更有把握的情況下才會(huì)將樣本預(yù)測(cè)為正樣本,意味著精確率越高,模型對(duì)負(fù)樣本區(qū)分能力越強(qiáng).召回率體現(xiàn)模型對(duì)于正樣本的區(qū)分能力,召回率越高則模型對(duì)正樣本的區(qū)分能力越強(qiáng).因此,對(duì)同一個(gè)模型來(lái)說(shuō),高精確率和高召回率通常不能同時(shí)達(dá)到,具有較高的精確率的模型往往具有較低的召回率.選取精確率和召回率作為評(píng)價(jià)指標(biāo)具有不同的參考意義.

另外,本文選取相應(yīng)算法模型的程序運(yùn)行時(shí)間作為基于模型效率的評(píng)價(jià)指標(biāo),即計(jì)算模型從開(kāi)始訓(xùn)練到預(yù)測(cè)完畢的時(shí)間,以衡量模型運(yùn)行效率的高低.

將RF模型與本文模型在4種異味數(shù)據(jù)集上分別進(jìn)行實(shí)驗(yàn),將5種基于實(shí)例的評(píng)價(jià)指標(biāo)進(jìn)行匯總?cè)绫?0所示.

表10 本文模型與RF模型的評(píng)價(jià)指標(biāo)對(duì)比

由表10可知,Pecorelli等人[15]所使用的RF模型的F1值在70.4%到89.4%之間,而采用本文的代碼異味強(qiáng)度預(yù)測(cè)模型,其精確率、召回率、F1值、MCC和AUC在所有4種代碼異味數(shù)據(jù)集上均較RF模型有了較大提升,其中預(yù)測(cè)精確率最高達(dá)90.2%,相比RF模型最多提升了3.9%;召回率最高達(dá)90.1%,最多提升了4.0%;F1值最高達(dá)90.0%,最多提升了3.7%;MCC值最高達(dá)83.8%,最多提升了6.6%;AUC值最高達(dá)94.2%,最多提升了3.8%.實(shí)驗(yàn)證明,采用基于LightGBM融合CFS的代碼異味強(qiáng)度預(yù)測(cè)模型較RF模型優(yōu)化效果明顯.(回答Q2)

4.6.2 基于模型效率的評(píng)價(jià)指標(biāo)

為了比較兩種模型運(yùn)行效率的差異,運(yùn)用本文基于LightGBM融合CFS的代碼異味強(qiáng)度預(yù)測(cè)模型與RF模型對(duì)4種代碼異味數(shù)據(jù)集進(jìn)行異味強(qiáng)度預(yù)測(cè)并統(tǒng)計(jì)模型從開(kāi)始訓(xùn)練至預(yù)測(cè)完畢的時(shí)間,作為衡量模型運(yùn)行效率的指標(biāo).每個(gè)模型在每種異味數(shù)據(jù)集上分別運(yùn)行3次,記錄每次所需時(shí)間如表11所示,表中數(shù)值單位均為毫秒(MS).

表11 本文模型與RF模型運(yùn)行時(shí)間對(duì)比

取兩種模型分別在4種異味數(shù)據(jù)集上進(jìn)行3次異味強(qiáng)度預(yù)測(cè)的運(yùn)行時(shí)間平均值作為最終運(yùn)行時(shí)間,得出兩種模型的平均耗時(shí)對(duì)比圖如圖4所示.

圖4 RF模型與本文模型平均耗時(shí)對(duì)比圖

如圖4所示,本文所使用的基于LightGBM算法融合CFS模型在4種代碼異味數(shù)據(jù)集上,運(yùn)行耗時(shí)均遠(yuǎn)低于RF模型,運(yùn)行時(shí)間縮短76.1%.相較于原模型,采用本文模型可使運(yùn)行效率得到極大提升.(回答Q3)

5 總結(jié)與期望

本文提出了一種基于LightGBM融合CFS的開(kāi)發(fā)者感知代碼異味強(qiáng)度預(yù)測(cè)模型,與文獻(xiàn)[15]采用的RF預(yù)測(cè)模型相比,性能在考慮的全部6個(gè)評(píng)價(jià)指標(biāo)上均得到了較大提升.在提高了異味預(yù)測(cè)精度的同時(shí)加快了預(yù)測(cè)速度,降低了運(yùn)行成本.說(shuō)明本文基于LightGBM融合CFS的開(kāi)發(fā)者感知代碼異味強(qiáng)度預(yù)測(cè)模型能較好地幫助開(kāi)發(fā)者確定代碼中存在異味的優(yōu)先級(jí),以便于優(yōu)先解決異味嚴(yán)重程度高的代碼,有助于降低軟件開(kāi)發(fā)與維護(hù)成本.

后續(xù)的相關(guān)工作有兩個(gè)方向:1)本文所選項(xiàng)目均基于Java語(yǔ)言,后續(xù)可以擴(kuò)展到研究其他編程語(yǔ)言中的異味問(wèn)題;2)本文只聚焦4種常見(jiàn)的代碼異味,且均屬類級(jí)別,可以擴(kuò)展到其他種類的代碼異味或研究粒度更高的方法級(jí)別代碼異味問(wèn)題.

猜你喜歡
異味開(kāi)發(fā)者度量
有趣的度量
模糊度量空間的強(qiáng)嵌入
迷向表示分為6個(gè)不可約直和的旗流形上不變愛(ài)因斯坦度量
基于4G技術(shù)的VOCs及異味檢測(cè)系統(tǒng)
用這些告別異味吧!夏天就要清清爽爽過(guò)!
PIC-408系列采用育種技術(shù)控制公豬異味
16%游戲開(kāi)發(fā)者看好VR
CHIP新電腦(2016年3期)2016-03-10 13:06:42
地質(zhì)異常的奇異性度量與隱伏源致礦異常識(shí)別
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年8期)2015-05-30 12:27:10
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年4期)2015-05-30 05:24:09
蓬溪县| 桂平市| 桃园县| 秦皇岛市| 吐鲁番市| 都江堰市| 海门市| 苗栗县| 汶上县| 库尔勒市| 台山市| 酒泉市| 桦甸市| 青河县| 唐海县| 兴城市| 满洲里市| 平顶山市| 镇安县| 双柏县| 文山县| 丰都县| 尖扎县| 商南县| 丹巴县| 汨罗市| 潜江市| 凌海市| 类乌齐县| 赤水市| 广昌县| 抚顺市| 大竹县| 泰州市| 柯坪县| 屏南县| 靖州| 昔阳县| 斗六市| 五峰| 乌鲁木齐县|