王繼娜 陳軍華 高建華
(上海師范大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系 上海 200234)(wjn_wy1108@163.com)
隨著產(chǎn)品需求的不斷更迭,為了實(shí)現(xiàn)其不斷變更的功能,原設(shè)計(jì)好的代碼框架需要不斷調(diào)整,程序會(huì)逐漸偏離原設(shè)計(jì)的框架,從而難以進(jìn)行擴(kuò)展和維護(hù).Fowler[1]定義了22種代碼異味,以說明軟件系統(tǒng)的質(zhì)量設(shè)計(jì)問題.多種代碼異味檢測方法被提出,Kessentini等人[2]將現(xiàn)有的代碼異味檢測方法分為7類,即手動(dòng)方法[3]、基于度量的方法[4]、基于癥狀的檢測方法[5]、基于概率的方法[6]、基于可視化的檢測方法[7]、基于搜索的方法[8]和基于協(xié)作的方法[2,9].Rasool等人[10]對現(xiàn)有的代碼異味檢測技術(shù)進(jìn)行了比較和評價(jià),結(jié)果出現(xiàn)了同一軟件系統(tǒng)檢測到的代碼異味數(shù)量不一致的情況.研究表明3個(gè)原因?qū)е缕洳町愋裕?)開發(fā)人員可以主觀地解釋現(xiàn)有方法檢測到的代碼異味[11];2)檢測器之間的一致性很低[12];3)大多數(shù)檢測器都需要指定閾值,以使其能夠區(qū)分代碼異味,并且閾值的選擇會(huì)極大地影響檢測器的性能[13].
為了克服這些限制,機(jī)器學(xué)習(xí)(machine learning, ML)技術(shù)被應(yīng)用于代碼異味檢測.Fontana等人[14]進(jìn)行了一項(xiàng)大規(guī)模研究,采用32種不同的ML算法及其組合檢測4種代碼異味即數(shù)據(jù)類、大類、長方法(long method, LM)和特征依戀,以評估ML技術(shù)在代碼異味檢測中的性能,結(jié)果表明大多數(shù)分類器的準(zhǔn)確性和F-Measure都超過了95%,其中J48和random forest獲得了最佳性能.
Fontana等人的方法只考慮了受單個(gè)類型氣味影響的實(shí)例情況,但軟件中類或方法通常包含不同類型的代碼異味,因此Di Nucci等人[15]合并數(shù)據(jù)集以模擬更現(xiàn)實(shí)的場景,構(gòu)建了4個(gè)包含多種氣味實(shí)例的數(shù)據(jù)集,該數(shù)據(jù)集包含更多無異味的實(shí)例,例如,若長方法數(shù)據(jù)集有異味實(shí)例,且同一實(shí)例也在特征依戀數(shù)據(jù)集中,則長方法中的該實(shí)例作為無異味實(shí)例合并至特征依戀數(shù)據(jù)集,作者部署了與Fontana等人相同的ML方法,所有模型僅獲得了76%的平均準(zhǔn)確度,該方法無法檢測到有多種類型代碼異味的實(shí)例.
為了解決此問題,Guggulothu等人[16]將上述長方法和特征依戀數(shù)據(jù)集合并成多標(biāo)簽數(shù)據(jù)集,使用5種基于樹的單標(biāo)簽分類器實(shí)現(xiàn)2種多標(biāo)簽分類方法:多標(biāo)簽分類器鏈(multi-label classifier chains, MLCC)和標(biāo)簽組合(label combination, LC),檢測同一實(shí)例的多種代碼異味,MLCC在5種分類器上的效果均優(yōu)于LC,并且隨機(jī)森林效果最好,平均精度達(dá)91%,但該方法沒有考慮同一代碼元素代碼異味檢測順序的影響.
為此,本文結(jié)合集成分類器鏈(ensemble of classifier chains, ECC)[17],提出了一種基于排序損失的ECC多標(biāo)簽代碼異味檢測方法,該方法適應(yīng)受多種異味影響的代碼元素,將共現(xiàn)的多個(gè)代碼異味置于同一標(biāo)簽組,其中MLCC可以很好地考慮其相關(guān)性[16],而本文考慮代碼異味檢測順序也可以在一定程度上模擬代碼異味的生存機(jī)理,進(jìn)一步提升檢測效果.
本文的主要貢獻(xiàn)有3方面:
1) 選取隨機(jī)森林(random forest, RF)作為基礎(chǔ)分類器,實(shí)現(xiàn)ECC多標(biāo)簽分類方法.
2) 以排序損失(ranking loss)最小化為目標(biāo),采取多次迭代ECC的方法,確定一個(gè)較優(yōu)的標(biāo)簽序列集,優(yōu)化同一代碼元素中代碼異味的檢測順序問題.
3) 將9個(gè)多標(biāo)簽方法的評價(jià)指標(biāo)應(yīng)用于實(shí)驗(yàn)結(jié)果評估,驗(yàn)證所提方法的有效性.
代碼異味是一種由糟糕的代碼或設(shè)計(jì)問題而引起的一種軟件特征.由表1中代碼異味的支持度和置信度可知,長方法-長參數(shù)列表和復(fù)雜類-消息鏈頻繁共現(xiàn)[18],而消息鏈-過大類是文獻(xiàn)[19]所挖掘的共現(xiàn)代碼異味對,所以本文重點(diǎn)考慮這5種代碼異味.
1) 長方法(LM).一種代碼行數(shù)較多的方法,其使用了大量的變量和參數(shù).
2) 長參數(shù)列表(long parameter list, LPL).類中至少1個(gè)方法的參數(shù)數(shù)量多于該類所有方法的平均參數(shù)數(shù)量.
3) 復(fù)雜類(complex class, CC).類中至少1個(gè)方法有較高的圈復(fù)雜度.
4) 消息鏈(message chain, MC).在不同類對象之間執(zhí)行一長串的方法調(diào)用以實(shí)現(xiàn)類功能.
5) 過大類(blob, BL).實(shí)現(xiàn)了系統(tǒng)中的多種職責(zé),體積大且復(fù)雜,類間的耦合度高.

Table 1 Co-occurrence Between Code Smell: Association Rule
開源系統(tǒng)Argouml 0.26版本[20]是由Java編寫的UML建模工具,如圖1所示,方法UMLAdd-Dialog的代碼行數(shù)約為105,參數(shù)列表較長,含6個(gè)參數(shù),所以該方法同時(shí)存在長方法和長參數(shù)列表2種異味.

Fig. 1 Code segment of long method and long parameter list

Fig.2 Code segment of complex class and message chain
本文即是對圖1和圖2所示的一段代碼元素中至少存在2種代碼異味的情況進(jìn)行檢測.
源代碼度量項(xiàng)可用于衡量軟件系統(tǒng)中源代碼的設(shè)計(jì)質(zhì)量,是代碼異味檢測中常用的判斷依據(jù),其涵蓋了代碼結(jié)構(gòu)特征的多種質(zhì)量維度,比如代碼規(guī)模、復(fù)雜性、內(nèi)聚和耦合等.研究人員可以根據(jù)代碼異味的特征和定義選擇不同的源代碼度量項(xiàng),并通過預(yù)設(shè)閾值的方式將其組合以確定代碼異味的檢測方案,如表2所示:

Table 2 Code Smell Detection Rules
傳統(tǒng)的監(jiān)督學(xué)習(xí)是由特征空間x∈Rm×d得到標(biāo)簽空間y∈{0,1}m×1的映射f:x→y,即根據(jù)實(shí)例x得到對應(yīng)的預(yù)測標(biāo)簽y,其基本假設(shè)是每個(gè)實(shí)例僅屬于1個(gè)類別標(biāo)簽.而多標(biāo)簽分類是一個(gè)實(shí)例與多個(gè)標(biāo)簽相關(guān)聯(lián)的監(jiān)督學(xué)習(xí)問題[24],假定x∈Rm×d是包含m個(gè)實(shí)例的d維特征空間,y∈{0,1}m×l=(y1,y2,…,yl)是包含m個(gè)實(shí)例的l維標(biāo)簽空間,其任務(wù)是由多標(biāo)簽數(shù)據(jù)集D得到映射f:x→y,其中,xi是d維的特征向量(xi1,xi2,…,xid),且yi是與xi關(guān)聯(lián)的一組標(biāo)簽(yi1,yi2,…,yil),即第i個(gè)實(shí)例被分類到l個(gè)類別標(biāo)簽.
本文使用文獻(xiàn)[25]的數(shù)據(jù)集,選擇其中5種代碼異味,構(gòu)造3個(gè)多標(biāo)簽數(shù)據(jù)集(multi-label dataset, MLD),即長方法和長參數(shù)列表(LM-LPL)、復(fù)雜類和消息鏈(CC-MC)以及消息鏈和過大類(MC-BL),多標(biāo)簽數(shù)據(jù)集對應(yīng)的基本架構(gòu)如圖3所示,將開源系統(tǒng)的類名作為每個(gè)實(shí)例的唯一標(biāo)識,每個(gè)MLD均包含61個(gè)源代碼度量項(xiàng),即特征向量xi=R61,對應(yīng)的特征依次為(LOC,NOP,…,WMC),3個(gè)MLD的標(biāo)簽分別為(LM,LPL),(CC,MC),(MC,BL).

Fig. 3 Schema of the multi-label dataset
MLCC是常見的多標(biāo)簽分類方法,對于標(biāo)簽空間y=(y1,y2,…,yl),算法分配l個(gè)分類器h1,h2,…,hl,并且每個(gè)分類器的特征向量用之前分類器的01標(biāo)簽進(jìn)行擴(kuò)展,即對于分類器hj:
訓(xùn)練階段的特征向量為
xi=(xi,yi1,yi2,…,yi(j-1));
(1)
預(yù)測階段的特征向量為

(2)

ECC是MLCC的集成,其訓(xùn)練n個(gè)MLCC,對于l個(gè)標(biāo)簽,每個(gè)MLCC隨機(jī)生成標(biāo)簽順序,最終,ECC生成1個(gè)置信輸出向量Wi=(wi1,wi2,…,wil),其中wij是第i個(gè)實(shí)例的第j個(gè)標(biāo)簽的置信輸出值,即每個(gè)標(biāo)簽在多個(gè)MLCC上的平均預(yù)測值,公式為
(3)

最終預(yù)測標(biāo)簽值為
y′=ft=0.5(W),
(4)

本文針對同一代碼元素同時(shí)存在多種代碼異味的情況,提出了一種基于排序損失的ECC多標(biāo)簽代碼異味檢測方法,如圖4所示.
1) 數(shù)據(jù)集預(yù)處理.最小-最大歸一化,將x中的數(shù)據(jù)以特征列的方式映射到0~1范圍,以消除度量項(xiàng)數(shù)值不在同一數(shù)量級別對結(jié)果的影響,其公式為

(5)
2) 多標(biāo)簽代碼異味檢測方法.選取RF作為分類器,以排序損失最小化為目標(biāo),通過10折交叉驗(yàn)證,實(shí)現(xiàn)基于排序損失的ECC多標(biāo)簽代碼異味檢測方法.
3) 實(shí)驗(yàn)評估.采用基于實(shí)例和基于標(biāo)簽的9個(gè)評價(jià)指標(biāo)對本文提出的方法進(jìn)行有效性評估.

Fig. 4 Overview of ECC multi-label code smell detection based on ranking loss
多標(biāo)簽分類中,由于每個(gè)分類器的特征向量需要用之前分類器的01標(biāo)簽進(jìn)行擴(kuò)展,所以標(biāo)簽的檢測順序極其重要,即同一代碼元素中多種代碼異味的檢測順序,而文獻(xiàn)[16]采用的MLCC并未考慮此問題,ECC雖然能在一定程度上減少標(biāo)簽順序?qū)Χ鄻?biāo)簽分類的影響,但ECC中每個(gè)MLCC的標(biāo)簽順序是隨機(jī)生成的,預(yù)測結(jié)果會(huì)隨著標(biāo)簽順序不同而存在偶然性.對此,本文采用排序損失來評估多標(biāo)簽分類中預(yù)測值與真實(shí)值的不一致程度,并以其最小化為目標(biāo)獲得較優(yōu)的標(biāo)簽序列集,Zhang等人[24]將排序損失定義為:
給定標(biāo)簽空間y∈{0,1}m×l,置信輸出c∈Rm×l,其計(jì)算公式為

(6)

本文結(jié)合ECC的步驟與排序損失給出了多標(biāo)簽代碼異味檢測方法,如圖5所示.首先,由10折交叉驗(yàn)證獲得訓(xùn)練集和測試集.然后,在訓(xùn)練階段采用RF實(shí)現(xiàn)MLCC算法,由訓(xùn)練的多個(gè)MLCC計(jì)算得到均值,即ECC的排序損失,多次迭代ECC,獲取ECC最小排序損失對應(yīng)的較優(yōu)標(biāo)簽序列集以及分類器.最后,在預(yù)測階段利用訓(xùn)練好的分類器按照標(biāo)簽序列集中的標(biāo)簽順序進(jìn)行預(yù)測,得到置信輸出W,將其與閾值函數(shù)ft=0.5(W)比較得到01預(yù)測值.

Fig. 5 ECC multi-label code smell detection flow based on ranking loss
本文基于ECC算法,在訓(xùn)練階段增加了排序損失,優(yōu)化同一代碼元素多種代碼異味檢測順序問題,具體的代碼異味檢測方法如算法1所示:
算法1.RF實(shí)現(xiàn)基于排序損失的ECC多標(biāo)簽代碼異味檢測算法.
輸入:數(shù)據(jù)集D={(x,y)}、ECC迭代次數(shù)NECC、ECC訓(xùn)練的MLCC數(shù)量NMLCC;
輸出:預(yù)測標(biāo)簽值y′.
訓(xùn)練階段:獲取最優(yōu)標(biāo)簽序列集以及分類器.
①xtrain,xtest,ytrain,ytest←D;
② 初始化空列表R,Lclf,Lorder;
③ for eachido*0≤i≤NECC*
④ 初始化空列表RMLCC,Lchain;
⑤ for eachjdo*0≤j≤NMLCC*
⑥ 隨機(jī)生成標(biāo)簽序列L;
⑦ RF實(shí)現(xiàn)MLCC算法,根據(jù)生成的L,獲得對應(yīng)分類器hj和預(yù)測值ypred;
⑧RMLCC←getRankingLoss(ytrain,ypred);
⑨Lchain←hj;
⑩ end for
預(yù)測階段:根據(jù)最優(yōu)標(biāo)簽序列集及訓(xùn)練好的分類器進(jìn)行預(yù)測.
① 置信輸出W;
② for eachLorderdo
③ 獲取標(biāo)簽序列Lorder對應(yīng)訓(xùn)練好的MLCC分類器h;


⑥ end for
⑦y′←ft=0.5(W).
為了驗(yàn)證基于排序損失的ECC多標(biāo)簽代碼異味檢測方法的有效性,本文尋求6個(gè)問題的解答.
1) Q1. 多標(biāo)簽數(shù)據(jù)集LM-LPL和CC-MC在設(shè)定不同的代碼異味檢測順序時(shí),即標(biāo)簽分別為(LM,LPL),(LPL,LM),(CC,MC),(MC,CC),(MC,BL),(BL,MC)時(shí),代碼異味檢測效果如何變化?
2) Q2. 本文所提方法通過多次迭代ECC的方法優(yōu)化標(biāo)簽順序,其代碼異味檢測效果與ECC迭代次數(shù)有何關(guān)系?
3) Q3. 與其他多標(biāo)簽代碼異味檢測方法相比,本文提出的基于排序損失的ECC多標(biāo)簽代碼異味檢測方法是否更具有效性?
4) Q4. 利用其他分類器替代RF,能否進(jìn)一步提升代碼異味檢測效果?
5) Q5. 相較于單獨(dú)類型的代碼異味檢測,采用多標(biāo)簽代碼異味檢測方法時(shí)代碼異味檢測效果如何?
6) Q6. 對于多標(biāo)簽集中代碼異味較多的情況本文提出的方法是否同樣適用?
本文基于PyCharm軟件環(huán)境,采用10次10折交叉驗(yàn)證的方法,設(shè)計(jì)了6個(gè)實(shí)驗(yàn).
實(shí)驗(yàn)1. 采用RF實(shí)現(xiàn)文獻(xiàn)[16]的多標(biāo)簽分類方法,比較其在代碼異味不同檢測順序下的子集準(zhǔn)確率、宏F1和微F1,驗(yàn)證本文考慮標(biāo)簽順序的合理性.
實(shí)驗(yàn)2. 比較本文所提方法在ECC不同迭代次數(shù)的子集準(zhǔn)確率、宏F1和微F1,分析指標(biāo)值與ECC迭代次數(shù)的變化關(guān)系.
實(shí)驗(yàn)3. 將基于排序損失的ECC多標(biāo)簽代碼異味檢測方法與文獻(xiàn)[16]的多標(biāo)簽分類方法對比,驗(yàn)證本文所提方法的有效性.
實(shí)驗(yàn)4. 在本文提出的多標(biāo)簽方法架構(gòu)下,選擇代碼異味檢測效果較好的2種基于樹的分類器,比較其在同一數(shù)據(jù)集上的代碼異味檢測效果,驗(yàn)證本文所選分類器的有效性.
實(shí)驗(yàn)5. 在本文提出的多標(biāo)簽方法架構(gòu)下,采用RF,CART,C4.5這3種分類器實(shí)現(xiàn)多標(biāo)簽方法,計(jì)算每種代碼異味的查準(zhǔn)率、查全率和F1,并與同樣的分類器直接對單個(gè)代碼異味的檢測進(jìn)行比較,驗(yàn)證多標(biāo)簽方法下代碼異味檢測效果的有效性.
實(shí)驗(yàn)6. 對代碼異味的共現(xiàn)研究中,一段代碼元素大多同時(shí)受2種或3種代碼異味影響[19],所以本文通過構(gòu)造多標(biāo)簽數(shù)據(jù)集復(fù)雜類-消息鏈-過大類(CC-MC-BL),對單個(gè)多標(biāo)簽集中存在3種代碼異味的情況進(jìn)行檢測,驗(yàn)證本文方法在多標(biāo)簽數(shù)據(jù)集中代碼異味較多的情況下的有效性.
實(shí)驗(yàn)將在LM-LPL,CC-MC,MC-BL這3個(gè)多標(biāo)簽數(shù)據(jù)集上對本文提出的方法進(jìn)行評估,數(shù)據(jù)集涉及4個(gè)開源系統(tǒng),分別為Argouml,Eclipse,Mylyn,Rhino,其中,類的數(shù)量(NOC)和代碼行數(shù)(LOC)等信息如表3所示:

Table 3 Projects for Experiment
表4分別為多標(biāo)簽數(shù)據(jù)集LM-LPL,CC-MC,MC-BL同時(shí)受2種代碼異味影響的實(shí)例數(shù)分布情況,其中無異味(No)和異味(Yes)的具體實(shí)例數(shù)分布具體如下:

Table 4 Code Smell Distribution of Multi-label Dataset

Continued (Table 4)
本文選取9個(gè)多標(biāo)簽方法評價(jià)指標(biāo)[24]對實(shí)驗(yàn)進(jìn)行評估,其中,基于實(shí)例的評價(jià)指標(biāo)共3個(gè),基于標(biāo)簽的評價(jià)指標(biāo)共6個(gè).
3.3.1 基于實(shí)例的評價(jià)指標(biāo)
基于實(shí)例的評價(jià)指標(biāo)是對每個(gè)實(shí)例的預(yù)測結(jié)果進(jìn)行評估,相關(guān)指標(biāo)如下.
1) 漢明損失.分類錯(cuò)誤的標(biāo)簽個(gè)數(shù)比率.
(7)

2) 準(zhǔn)確率.預(yù)測標(biāo)簽與真實(shí)標(biāo)簽Jaccard相似系數(shù)均值.
(8)
3) 子集準(zhǔn)確率.預(yù)測標(biāo)簽和真實(shí)標(biāo)簽一致的比率.
(9)
其中,≡表示預(yù)測標(biāo)簽與真實(shí)標(biāo)簽完全匹配;[[*]]表示*成立時(shí)為1,否則為0.
3.3.2 基于標(biāo)簽的評價(jià)指標(biāo)
基于標(biāo)簽的評價(jià)指標(biāo)是對單個(gè)標(biāo)簽在所有實(shí)例上表現(xiàn)的評價(jià),其中宏指標(biāo)是分別計(jì)算每個(gè)標(biāo)簽的查準(zhǔn)率和查全率后的均值,公式如下.
1) 宏查準(zhǔn)率:
(10)
2) 宏查全率:
(11)
3) 宏F1. 假定每個(gè)標(biāo)簽的權(quán)重相等,反映所有標(biāo)簽的平均分類效果[26].

(12)
微指標(biāo)首先計(jì)算所有標(biāo)簽的TP(真正例)、FP(假正例)、TN(真反例)、FN(假反例)的均值,由此得出各個(gè)指標(biāo)的公式如下.
1) 微查準(zhǔn)率:

(13)
2) 微查全率:
(14)
3) 微F1. 假定每個(gè)實(shí)例的權(quán)重相等,強(qiáng)調(diào)所有標(biāo)簽中某一類別密度的重要性[26].

(15)
根據(jù)實(shí)驗(yàn)結(jié)果,可逐一回答問題Q1~Q6.
1) Q1. 圖6分別為多標(biāo)簽數(shù)據(jù)集LM-LPL,CC-MC,MC-BL在設(shè)定不同的標(biāo)簽順序時(shí)代碼異味的檢測情況.圖6表明,數(shù)據(jù)集的標(biāo)簽順序不同時(shí),代碼異味檢測結(jié)果不一致,其中,數(shù)據(jù)集標(biāo)簽順序分別為(LPL,LM),(MC,CC),(MC,BL)時(shí),效果較優(yōu),說明本文考慮代碼異味檢測順序的合理性.
2) Q2. 本文采取多次迭代ECC的方法優(yōu)化代碼異味檢測順序問題,如圖7所示.可以看出,代碼異味檢測效果開始呈上升趨勢,當(dāng)ECC迭代次數(shù)為1時(shí),代碼異味檢測效果與文獻(xiàn)[16]方法基本一致,6次迭代后,子集準(zhǔn)確率、宏F1和微F1趨于平緩,本文綜合考慮檢測效果以及時(shí)間復(fù)雜度,接下來實(shí)驗(yàn)的結(jié)果均建立于ECC迭代次數(shù)為8的基礎(chǔ)上.

Fig. 6 Code smell detection results with different label order
3) Q3. 從表5可以看出,所提方法在優(yōu)化了標(biāo)簽順序?qū)Υa異味檢測的影響后,9個(gè)多標(biāo)簽評價(jià)指標(biāo)均有提升,其中,F(xiàn)1值最高提升了32.99%,因此基于排序損失的ECC多標(biāo)簽代碼異味檢測方法更有效.另外,同一方法下多標(biāo)簽數(shù)據(jù)集LM-LPL的F1值最高,而MC-BL的F1值最低.
4) Q4. 由表6可以看出,在本文提出的多標(biāo)簽方法框架下,RF在LM-LPL,CC-MC,MC-BL的代碼異味檢測效果均高于CART和C4.5算法,宏F1和微F1值分別高出了0.41%~1.84%和1.21%~2.43%,因此采用RF實(shí)現(xiàn)多標(biāo)簽代碼異味檢測方法效果更好.3個(gè)多標(biāo)簽數(shù)據(jù)集中,MC-BL的F1值最低,另外, C4.5相比于CART有略微的優(yōu)勢,F(xiàn)1值最高提升了1.43%.
5) Q5. 由表7可以看出,單標(biāo)簽分類時(shí),5種代碼異味中,LPL在采用C4.5檢測時(shí)F1值最高,且效果優(yōu)于RF和CART,BL的F1值最低.在本文提出的多標(biāo)簽方法框架下,相同分類器下每種代碼異味的F1值均高于單獨(dú)類型的代碼異味檢測結(jié)果,所以本文提出的方法在考慮代碼異味間的相關(guān)性及檢測順序后,單個(gè)代碼異味的檢測效果有很大提升.
6) Q6. 表8為單個(gè)多標(biāo)簽數(shù)據(jù)集中存在3種代碼異味情況的檢測結(jié)果,由表8可以看出,在本文提出的多標(biāo)簽方法框架下,RF的F1值均高于CART和C4.5算法,雖然相較于表6對于單個(gè)標(biāo)簽集中存在2種代碼異味的情況,檢測效果略低,但F1值與MC-BL接近,因此本文提出的多標(biāo)簽代碼異味檢測方法適用于單個(gè)多標(biāo)簽集中代碼異味較多的情況.

Fig. 7 Code smell detection results with different iterations

Table 5 Comparison of Code Smell Detection Results

Table 6 Code Smell Detection Results with Different Classifiers

Table 7 Single Code Smell Detection Results

Table 8 Detection Results of Multi-label Dataset CC-MC-BL
多標(biāo)簽代碼異味檢測方法適應(yīng)受多種異味影響的代碼元素,可以識別出遭遇更多與代碼異味相關(guān)設(shè)計(jì)問題的關(guān)鍵代碼元素,將高共現(xiàn)的多個(gè)代碼異味視為1個(gè)標(biāo)簽組,更好地考慮其相關(guān)性.本文提出的基于排序損失的ECC多標(biāo)簽代碼異味檢測方法,選取隨機(jī)森林作為分類器,以排序損失最小化為目標(biāo),采取多次迭代ECC的方法,確定一個(gè)最優(yōu)的標(biāo)簽序列集,優(yōu)化代碼異味檢測順序問題,模擬代碼異味生成機(jī)理,檢測多種代碼異味是否同時(shí)存在一段代碼元素中.但是本文提出的方法時(shí)間代價(jià)大,并且主要考慮一段代碼元素同時(shí)存在2種代碼異味的情況,在未來研究中可以擴(kuò)大多標(biāo)簽數(shù)據(jù)集以檢測更多方法級或類級的代碼異味,進(jìn)一步分析深度學(xué)習(xí)和多標(biāo)簽方法結(jié)合下的代碼異味檢測效果[27].