亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        結(jié)合遺傳規(guī)劃和遺傳算法的代碼異味檢測方法

        2020-12-11 01:49:52高建華
        關(guān)鍵詞:并行算法謂詞異味

        趙 敏,高建華

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

        1 引 言

        代碼異味是由于設(shè)計(jì)缺陷或不良編碼習(xí)慣導(dǎo)致深層次質(zhì)量問題的代碼癥狀,不一定直接地導(dǎo)致軟件的錯(cuò)誤,但會引起后續(xù)的一些可讀性差、效率低等系統(tǒng)問題,加大軟件維護(hù)的難度[1].相關(guān)研究報(bào)告顯示,大型系統(tǒng)的改進(jìn)、更新以及重組等一系列維護(hù)活動占用了軟件項(xiàng)目總成本的90%,提前檢測并清理這些代碼異味,可以幫助程序員很好地理解源代碼的同時(shí)也節(jié)約了項(xiàng)目的成本.

        Marinescu、Moha以及Khomh[2-4]等人使用度量、結(jié)構(gòu)和詞匯信息的組合來表示代碼異味的特征,定義規(guī)則來識別代碼異味的關(guān)鍵特征.但是在檢測特征不明顯的代碼異味時(shí),精確度不高.在大型的應(yīng)用場景中,也需要花很多時(shí)間對規(guī)則做大量的校準(zhǔn)工作.

        Fokaefs[5]提出了移動重構(gòu)的方法,這是一種基于度量的代碼異味檢測方法.該方法用Eclipse插件將問題量化,先通過插件對系統(tǒng)質(zhì)量進(jìn)行評估,再重構(gòu).此方法僅適用于單一的代碼異味.

        Fontana[6]等人提出了基于關(guān)聯(lián)的代碼異味檢測方法,通過代碼異味之間的直接關(guān)系和傳遞關(guān)系來檢測代碼異味,但這一方法只能檢測一些可量化的代碼異味.

        Emerson[7]等人提出來一種基于可視化的代碼異味檢測方法.這一方法將可交互的檢測工具和手工識別代碼異味相結(jié)合,快速地認(rèn)識和理解代碼異味.但此方法涉及到手動標(biāo)識代碼異味的特征,在效率和精確性上沒有很大的保證.

        對此,本文提出了一種基于協(xié)同并行算法優(yōu)化的代碼異味檢測方法,即將遺傳規(guī)劃和遺傳算法相結(jié)合,把代碼異味的檢測問題看作一個(gè)分布式搜索最優(yōu)解問題.本文又通過Jaccard系數(shù)對算法進(jìn)行優(yōu)化,降低了檢測器的成本,提高了搜索效率.

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

        2.1 代碼異味

        代碼異味也稱設(shè)計(jì)異?;蛟O(shè)計(jì)缺陷,是指對軟件維護(hù)產(chǎn)生不利影響的設(shè)計(jì)情況,它常常標(biāo)志著代碼應(yīng)該被重構(gòu)[8].本文關(guān)注以下8種代碼異味,如表1所示.

        表1 代碼異味及其描述Table 1 Code smells and its descriptions

        2.2 遺傳規(guī)劃

        遺傳規(guī)劃的基本思想是演化候選的程序種群來解決一個(gè)特定的問題[9].隨機(jī)生成候選種群,通過適應(yīng)度函數(shù)對這些種群的質(zhì)量進(jìn)行評,如果符合標(biāo)準(zhǔn)則為最優(yōu)解,反之,則對這些種群進(jìn)行一系列的交叉、變異等基因操作生成新的種群,迭代至符合標(biāo)準(zhǔn)輸出.

        2.2.1 檢測規(guī)則的生成

        在評估大量與代碼異味檢測相關(guān)的參數(shù)后,確定了檢測規(guī)則的終端集和函數(shù)集,終端集包含不同的質(zhì)量度量以及閾值,函數(shù)集包含不同的邏輯運(yùn)算符.檢測規(guī)則是基于抽象語法樹從范例中生成的,多用二叉樹的形式來表示[10].

        1)終端節(jié)點(diǎn)A是度量及其閾值的集合.度量包括一些代碼的行數(shù)、方法的數(shù)量、屬性的數(shù)量、加權(quán)方法的數(shù)量以及接口數(shù)量等.

        2)內(nèi)部節(jié)點(diǎn)B是一個(gè)邏輯運(yùn)算符的集合C{AND,OR}.

        如圖1所示,規(guī)則由一個(gè)AND-OR樹組成.其中,一條候選檢測規(guī)則對應(yīng)一條特定的代碼異味.

        圖1 檢測規(guī)則的表示Fig.1 Representation of detection rules

        規(guī)則1(R1).如果Locclass≥1500且(AND)Locmethod≥129或(OR)Nmd≥100,代碼異味為Lager Class(LC);

        規(guī)則2(R2).如果Locmethod≥151,代碼異味為Long Method(LM);

        規(guī)則3(R3).如果Locmethod≥7且(AND)Nmd=16,代碼異味為Data Clumps(DC).

        2.2.2 最優(yōu)檢測規(guī)則的生成

        遺傳規(guī)劃通過其進(jìn)化算子(選擇、交叉和變異)迭代得到最優(yōu)檢測規(guī)則.

        1)選擇:以保留良好解決方案的基因和提供更好的解決方案為兩大原則進(jìn)行選擇.通過適應(yīng)度函數(shù)對檢測規(guī)則池P進(jìn)行評估,根據(jù)適應(yīng)度值的高低排序,在池P中挑選出1/2適應(yīng)度高的檢測規(guī)則,形成新的檢測規(guī)則池S(大小為|S|,|S|=1/2|P|);再將池S經(jīng)過隨機(jī)的交叉、變異形成新的子代檢測規(guī)則池E,從子代池E中選出大小跟池P一樣的檢測規(guī)則池O(大小為|O|,|O|=|P|),新的檢測規(guī)則池U由池P和池O組成,大小為|U|=|P|+|O|=2|P|.

        2)交叉:在兩個(gè)父節(jié)點(diǎn)上隨機(jī)選取他們的子節(jié)點(diǎn)及其子樹進(jìn)行交叉,生成的新樹結(jié)合雙方的信息,但僅限于同種代碼異味的檢測規(guī)則.

        3)變異:變異通常分為三種情況:當(dāng)變異算子應(yīng)用在終端節(jié)點(diǎn)時(shí),則將它替換為新的終端節(jié)點(diǎn)(質(zhì)量度量以及閾值);當(dāng)變異算子應(yīng)用在功能節(jié)點(diǎn)時(shí),則用新的函數(shù)來替換;如果是樹的變異,則將節(jié)點(diǎn)及其子樹一并替換為新生成的子樹.

        2.3 遺傳算法

        選擇、交叉以及變異是遺傳算法的三個(gè)基本操作.選擇,根據(jù)定義的適應(yīng)度函數(shù)對種群中個(gè)體進(jìn)行評估,適應(yīng)度高的種群個(gè)體被選擇;交叉,根據(jù)自然遺傳學(xué)對被選擇的種群個(gè)體進(jìn)行交叉,形成新的個(gè)體;變異,在個(gè)體基因的基礎(chǔ)上按照一定的規(guī)則進(jìn)行變異繼而形成新的最優(yōu)種群個(gè)體[11].

        2.3.1 檢測器的生成

        所謂的檢測器是指與良好范例代碼(幾乎沒有代碼異味的范例代碼)的偏差[12].由于本文只對代碼的結(jié)構(gòu)感興趣,所以可將檢測器表示為一組謂詞序列,謂詞序列的每個(gè)維度都是一個(gè)代碼元素,對應(yīng)面向?qū)ο笙到y(tǒng)中的類(C)、屬性(A)、方法(M)、參數(shù)(P)、泛型(G)和類之間的方法調(diào)用關(guān)系(R).

        為了方便謂詞序列之間的比較,降低相似性計(jì)算的復(fù)雜度,謂詞序列的順序必須嚴(yán)格按照類、屬性、方法、參數(shù)、泛型、類之間調(diào)用關(guān)系的順序排列.例如,謂詞序列CGAAMPPM表示一個(gè)具有泛型的類,謂詞序列中包含兩個(gè)屬性、兩種方法,第一種方法有兩個(gè)參數(shù),如圖2所示.

        圖2 檢測器A的表示Fig.2 Representation of detection A

        謂詞序列還包含一些相關(guān)結(jié)構(gòu)的詳細(xì)信息,如類型、可見性等.在檢測器A中,謂詞C是一個(gè)類,類名為C12,可見性為public.

        2.3.2 最優(yōu)檢測器的生成

        遺傳算法通過其三個(gè)基本操作選擇、交叉以及變異,不斷迭代搜索得到最優(yōu)的檢測器.

        1)選擇:檢測器的選擇算子與檢測規(guī)則的選擇算子相同.

        2)交叉:兩個(gè)父代謂詞序列L1、L2,兩個(gè)子代謂詞序列S1、S2.隨機(jī)選擇一個(gè)位置p;L1的前p個(gè)元素放入S1的前p個(gè)元素,L2進(jìn)行同樣的操作;L1剩下的元素放入S2,L2進(jìn)行同樣的操作.例如謂詞序列L1:CGAAMPPM和謂詞序列L2:CGAMPPR在1/5處進(jìn)行交叉,得到的新謂詞序列S1:CGAAMPR和S2:CGAMPPPM.

        3)變異:變異應(yīng)用在隨機(jī)改變檢測器中元素的參數(shù).例如,圖2中檢測器A的第一個(gè)類的可見性為public,將其可見性變異成private.

        2.4 遺傳算法與遺傳規(guī)則的區(qū)別

        遺傳規(guī)劃是遺傳算法的一個(gè)分支.由于遺傳算法是按照一定字長的字符串形式來描述問題,而遺傳規(guī)劃是以非定長層次結(jié)構(gòu)反映特定的問題.檢測器是以謂詞序列(字符串)形式呈現(xiàn),檢測規(guī)則是用二叉樹表示,所以本文將遺傳規(guī)則和遺傳算法分別應(yīng)用在搜索最優(yōu)檢測規(guī)則和最優(yōu)檢測器的問題中.

        3 檢測規(guī)則和檢測器的評估

        3.1 代碼異味范例的覆蓋率

        設(shè)定一個(gè)目標(biāo)函數(shù)C,計(jì)算實(shí)際檢測到的代碼異味與范例中的代碼異味的重疊,覆蓋率如公式(1)所示.

        (1)

        其中:e是范例代碼中代碼異味的數(shù)量,r是執(zhí)行檢測規(guī)則后檢測到的實(shí)際代碼異味數(shù)量,對于ai(C),如果第i次檢測到有code smell存在,ai(C)為1,否則為0,如表2、表3所示.

        表2 范例代碼中的代碼異味Table 2 Code-smells in the base of examples

        表3 實(shí)際檢測的代碼異味Table 3 Detected code smells

        將表3中檢測到的代碼異味與表2中代碼異味相比,類Senior、Primary以及Junior不是代碼異味.類Bachelor是代碼異味但代碼異味的類型不對.只有類Doctor是真正的代碼異味.所以,代碼異味范例的覆蓋率為(1/3+1/5)/2=0.26.

        3.2 檢測器的成本

        設(shè)定一個(gè)成本函數(shù)Cost來評估檢測器的質(zhì)量.其中,S為檢測器組,檢測器Si的成本是其通用性和重疊的缺失的加權(quán)平均數(shù),如公式(2)所示.

        (2)

        通用性的缺失是通過計(jì)算檢測器Si的謂詞序列與良好范例代碼中類Cj的謂詞序列相似性而來,如公式(3)所示.

        (3)

        重疊的缺失是通過計(jì)算檢測器Si的謂詞序列與檢測器組S中所有其他檢測器Sj的謂詞序列的相似性而來,如公式(4)和式(5)所示.

        (4)

        其中,sim()如公式(5)所示.

        (5)

        a,b為謂詞序列A和B的長度,Sa,b為A和B的公共最長子序列.

        為了計(jì)算兩個(gè)謂詞序列之間的相似性,本文將Needleman-Wunsch算法應(yīng)用到全文,并使用Jaccard系數(shù)對其進(jìn)行優(yōu)化.

        Needleman-Wunsch算法是一種動態(tài)編程方法,它是在允許加入空隙的情況下,找到兩個(gè)序列之間的最優(yōu)全局對齊[13].對齊序列(a1,…,an)和序列(b1,…,bn)時(shí),根據(jù)下面的式(6)計(jì)算出Needleman-Wunsch算法矩陣LCS,并通過回溯寫出匹配字符串.其中,LCS矩陣第一行和第一列都為0;

        ai=bj;

        LCS(i,j)=LCS(i-1,j-1)+Sim(A,B)

        ai≠bj;

        (6)

        Jaccard系數(shù)是計(jì)算兩個(gè)樣本集合之間的相似性[15,16],如公式(7)所示.

        (7)

        如圖3所示,檢測器A的第一個(gè)方法Method(C12,m154,void,Y,public)與范例代碼34中的第一個(gè)方法Method(Options,isFractionalMetrics,boolean,Y,public)相比,N、Y都為變量名,public是可見性,所以用Jaccard系數(shù)計(jì)算為2/(5+5-2)=0.2.

        本文設(shè)定了一個(gè)風(fēng)險(xiǎn)評估適應(yīng)度函數(shù),將風(fēng)險(xiǎn)評分超過0.75的片段認(rèn)為是代碼異味,如式(8)所示.

        (8)

        其中,ei是待評估的代碼片段.

        3.3 檢測規(guī)則和檢測器的交叉函數(shù)

        如果一個(gè)類被檢測規(guī)則和檢測器同時(shí)檢測到,那么該類是代碼異味的幾率就會很大.因此,本文將檢測規(guī)則和檢測器組合來檢測代碼異味.

        圖3 Jaccard系數(shù)計(jì)算圖Fig.3 Calculation figure of the Jaccard index

        在每一次的迭代中,從最優(yōu)檢測規(guī)則和最優(yōu)檢測器中選出一組檢測規(guī)則和檢測器,應(yīng)用在新的系統(tǒng)N中.本文構(gòu)造了一個(gè)最優(yōu)解決方案矩陣M,行是最優(yōu)檢測規(guī)則MPi,列是最優(yōu)檢測器MAj,最優(yōu)檢測規(guī)則和最優(yōu)檢測器的交叉點(diǎn)得分,如公式(9)所示.

        (9)

        對于新系統(tǒng)N中,由最優(yōu)檢測規(guī)則檢測出含有代碼異味類的集合為Cr={c1,c2,…,ci};由最優(yōu)檢測器檢測出含有代碼異味類的集合為Cd={c1,c2,…,cj};實(shí)際檢測出含有代碼異味類的個(gè)數(shù)為T.

        圖4 交叉點(diǎn)得分的說明Fig.4 Illustration of the intersection score

        如圖4所示,待評估系統(tǒng)有5個(gè)類,其中有2個(gè)類存在代碼異味.將4個(gè)最優(yōu)檢測規(guī)則和4個(gè)最優(yōu)檢測器在待評估系統(tǒng)上運(yùn)行,并得到一個(gè)4×4的矩陣,檢測規(guī)則R18檢測出2個(gè)類存在代碼異味,檢測器檢S11測出3個(gè)類的risk值都高于0.75,所以3個(gè)類都存在代碼異味.計(jì)算兩種解決方案的交叉點(diǎn)得分依據(jù)式(9)為:(2/3+2/2)/2=0.83.

        檢測器S11與4種檢測規(guī)則的交叉得分點(diǎn)分別為:0.43、0.83、0.59以及0.64.分析交叉得分點(diǎn)可知S11與R18的交叉得分點(diǎn)最高,在檢測代碼異味時(shí),將其視作一組可能的最優(yōu)解決方案.

        其中,每一種解決方案的交叉適應(yīng)度函數(shù)如公式(10)所示.

        finter(MPi)=Min{finter(MPi,MA?j)}
        finter(MPj)=Min{finter(MP?i,MAj)}

        (10)

        3.4 檢測規(guī)則質(zhì)量的評估

        檢測規(guī)則的適應(yīng)度函數(shù)基于:

        1)最大概率地覆蓋代碼異味的范例;

        2)使用與檢測器并行執(zhí)行的交叉函數(shù),使得一致性達(dá)到最大.

        基于以上兩點(diǎn),檢測規(guī)則質(zhì)量的適應(yīng)度函數(shù)如公式(11)所示.

        (11)

        3.5 檢測器質(zhì)量的評估

        檢測器的適應(yīng)度函數(shù)基于:

        1)減小范例代碼與檢測器之間的相似性,從而提高檢測器的通用性;

        2)減小檢測器之間的重疊,即兩個(gè)檢測器的相似性.

        基于以上兩點(diǎn),檢測器質(zhì)量的適應(yīng)度函數(shù)如公式(12)所示.

        (12)

        4 基于協(xié)同并行算法優(yōu)化的代碼異味檢測方法

        4.1 改進(jìn)的Needleman-Wunsch算法

        在文獻(xiàn)[16]中提出了一種改進(jìn)的Needleman-Wunsch算法,普通的Needleman-Wunsch算法只比較謂詞的相似度,改進(jìn)的Needleman-Wunsch算法通過式(13)進(jìn)一步計(jì)算謂詞的參數(shù)的相似性,精確了最長公共子序列的長度,如公式(13)所示.

        (13)

        其中,ai、bj是兩個(gè)謂詞的參數(shù)集,p、q是兩個(gè)謂詞的參數(shù).

        以檢測器A中謂詞Method參數(shù)集(C12,m154,void,Y,public)和范例代碼34的謂詞Method參數(shù)集(Options,isFractionalMetrics,boolean,Y,public)為例,式(13)計(jì)算得出兩種方法的相似性為:2/5=0.4.改進(jìn)后的LCS矩陣如公式(6)所示,其中Sim(A,B)=PMij.

        4.2 基于Jaccard系數(shù)的Needleman-Wunsch算法

        為了更進(jìn)一步地提高檢測器的通用性和降低檢測器之間的重疊,本文在改進(jìn)的Needleman-Wunsch算法基礎(chǔ)上,提出基于Jaccard系數(shù)的Needleman-Wunsch算法,用于對比計(jì)算兩個(gè)謂詞的參數(shù)集.

        以檢測器A中謂詞Method參數(shù)集(C12,m154,void,Y,public)和范例代碼34中的謂詞Method參數(shù)集(Options,isFractionalMetrics,boolean,Y,public)為例,由Jaccard系數(shù)計(jì)算出來兩個(gè)謂詞參數(shù)集的相似度0.2.改進(jìn)后得到計(jì)算LCS矩陣如公式(6)所示,其中Sim(A,B)=J(A,B).兩種方法的對比如圖5所示.

        圖5 兩種方法的對比圖Fig.5 Comparisonfigureof two methods

        根據(jù)以上兩個(gè)公式計(jì)算出來的最長公共子序列分別為2.4和2.2,將結(jié)果帶入式(5),可得到檢測器A和代碼范例34的相似度Sim()分別為0.4和0.2.由式(3)可得,檢測器和范例代碼之間相似度的精確可以提高檢測器的通用性;由式(4)可見,檢測器間相似度的精確可以降低檢測器之間的重疊;由式(2)可得,隨著檢測器通用性的提高和檢測器間重疊的降低,檢測器的成本也隨之減少.后續(xù)本文對這兩種方法在同一數(shù)據(jù)集上進(jìn)行驗(yàn)證,以說明基于Jaccard系數(shù)的Needleman-Wunsch算法要優(yōu)于改進(jìn)的的Needleman-Wunsch算法.

        4.3 協(xié)同并行算法優(yōu)化

        為了減少搜索時(shí)間、精確檢測結(jié)果,本文提出將最優(yōu)檢測規(guī)則和最優(yōu)檢測器并行應(yīng)用在檢測過程中,該并行算法的具體實(shí)現(xiàn)過程如算法1和算法2所示.

        算法1.基于遺傳規(guī)劃的最優(yōu)檢測規(guī)則獲取算法

        輸入:代碼質(zhì)量度量集合M

        手工評估的系統(tǒng)集合S(異味示例)

        新系統(tǒng)A

        輸出:最優(yōu)檢測規(guī)則

        1.Max_size=100;

        2.gen=0;%Counter

        3.NBS=100;%number of best Soulution

        4.MaxGen=500;%maximum no.fo generation

        5.R1=rules(M,Smell_type);

        6.P1=set_of(R1);

        7.Initial_population_GP(P1,Max_size);

        8.While gen

        9. for each R1∈P1 do

        10. detected_smells_GP(S)=excute_rules(R1,S);

        11. fitness(R1)=compare(detected_smells,smells_examples);

        12. end for

        13. best_sol_P1=select(P1,NBS);

        14. send(best_sol_P1);

        15. best_sol_P2=receive(best_sol_P2);

        16. for each R1∈best_sol_P1 do

        17. detected_smells_GP(A)=excute_rules(R1,A);

        18. fitness_intersection(R1)=Max_intersection(detected_smells_GP(A,R1)∩detected_smells_GA(A,best_sol_P2)

        19. fitness(R1):=update fitness(R1,fitness_intersection);

        20. end for

        21. gen=gen+1;

        22.end

        23.retum best solution rules;

        算法2.基于遺傳算法的最優(yōu)檢測器獲取算法

        輸入:良好示例代碼的集合GES

        新系統(tǒng)A

        輸出:最優(yōu)檢測器

        1.Max_size=100;

        2.gen=0;%Counter

        3.NBS=100;%number of best Soulution

        4.MaxGen=500;%maximum no.fo generation

        5.R2=detectors(GES);

        6.P2=set_of(R2);

        7.Initial_population_GP(P2,Max_size);

        8.While gen

        9. for each R2∈P2 do

        10. fitness(R2)=cost(R2);

        12. end for

        13. best_sol_P2=select(P2,NBS);

        14. send(best_sol_P2);

        15. best_sol_P1=receive(best_sol_P1);

        16. for each R2∈best_sol_P2 do

        17. detected_smells_GA(A)=excute_rules(R2,A);

        18. fitness_intersection(R2)=Max_intersection(detected_smells_GA(A,R2)∩detected_smells_GP(A,best_sol_P1)

        19. fitness(R2):=update fitness(R2,fitness_intersection);

        20. end for

        21. gen=gen+1;

        22.end

        23.retum best solution rules;

        算法1和算法2并行執(zhí)行,并在每一代中使用適應(yīng)度函數(shù)進(jìn)行交互.第1-3行構(gòu)造一個(gè)初始檢測規(guī)則種群和檢測器種群;第4-15行是搜索最優(yōu)檢測規(guī)則和檢測器的循環(huán)過程;第16-20行是兩種算法的交互.

        在每次迭代中,本文使用適應(yīng)度函數(shù)對每個(gè)個(gè)體進(jìn)行質(zhì)量評估.在評估檢測器時(shí)(算法2的第10行),對原先的適應(yīng)度函數(shù)進(jìn)行了改進(jìn).本文使用Jaccard系數(shù)對Needleman-Wunsch算法進(jìn)行改進(jìn),從而增加了檢測器的通用性和檢測器之間的重疊,減小了檢測器的成本.5.2中的實(shí)驗(yàn)結(jié)果表明,這種改進(jìn)不僅增加了代碼異味的精度和召回率,還減少了搜索時(shí)間.

        圖6 方法的概圖Fig.6 Overviewof the proposed approach

        如圖6所示,協(xié)同并行算法優(yōu)化可以理解為以下4個(gè)步驟:

        1)通過遺傳規(guī)則和遺傳算法并行搜索最優(yōu)檢測規(guī)則和最優(yōu)檢測器;

        2)將搜索得到的最優(yōu)檢測規(guī)則和最優(yōu)檢測器應(yīng)用在新系統(tǒng)上;

        3)根據(jù)交叉點(diǎn)得分更改最優(yōu)檢測規(guī)則和最優(yōu)檢測器的適應(yīng)度函數(shù),生成最優(yōu)解決方案.

        4)達(dá)到先前設(shè)定的固定迭代次數(shù)后,停止.

        5 實(shí) 驗(yàn)

        5.1 實(shí)驗(yàn)環(huán)境

        為了評估基于協(xié)同并行算法優(yōu)化的代碼異味檢測的方法,本實(shí)驗(yàn)從大型開源系統(tǒng)中提取8個(gè)開源項(xiàng)目對8種代碼異味進(jìn)行實(shí)驗(yàn),并與基于單一種群的算法以及文獻(xiàn)[16]中的協(xié)同并行算法進(jìn)行比較.

        本實(shí)驗(yàn)從現(xiàn)有的數(shù)據(jù)集[17]中挑選出類大小不的開源項(xiàng)目,其包含了近800種手動識別的代碼異味,如表4所示.

        在過去的十多年中,這些項(xiàng)目一直保持著活躍的狀態(tài),并包含了大量的代碼異味.此外,這些項(xiàng)目被諸多研究引用,分布于不同的應(yīng)用領(lǐng)域,其包含的代碼異味已被大量相關(guān)研究明確檢測和分析[16].

        表4 實(shí)驗(yàn)項(xiàng)目Table 4 Systems for experiment

        5.2 實(shí)驗(yàn)配置

        本實(shí)驗(yàn)將剩余的項(xiàng)目作為代碼異味范例來生成檢測規(guī)則,例如檢測GanttProject3,則選擇剩余的項(xiàng)目作為代碼異味范例來生成規(guī)則.從范例中可以生成特定項(xiàng)目的特定的規(guī)則,所以在同一軟件項(xiàng)目內(nèi),規(guī)則是適用的[10].

        對于檢測規(guī)則的充分性,范例庫中包含了研究的所有代碼異味類型,所以范例具有充分性.規(guī)則是從范例中生成,范例的充分性從一定程度上也保證了規(guī)則的充分性[10].

        對于檢測規(guī)則的一般性,Decor[3]是公認(rèn)的可用于生產(chǎn)環(huán)境的經(jīng)典代碼異味檢測工具.在參考文獻(xiàn)[10]中,將從范例中生成規(guī)則的方法與Decor行對比,實(shí)驗(yàn)表明前者的精度與召回都要優(yōu)于后者.

        本實(shí)驗(yàn)選擇JHotdraw[18]作為良好的代碼異味范例,并通過與JHotdraw之間的偏差來生成檢測器,因?yàn)镴Hotdraw包含很少的已知代碼異味.

        本文根據(jù)文獻(xiàn)[19]提出的種群數(shù)和迭代數(shù),將遺傳規(guī)則和遺傳算法的種群數(shù)固定在100,迭代數(shù)固定在1000.協(xié)同并行算法優(yōu)化的種群數(shù)固定在100,迭代數(shù)固定在500.并將基于遺傳規(guī)劃、遺傳算法、協(xié)同并行算法以及協(xié)同并行算法優(yōu)化的方法執(zhí)行500次進(jìn)行比較.

        為了強(qiáng)調(diào)種群的多樣性,本實(shí)驗(yàn)將進(jìn)化算子中交叉概率設(shè)為0.9,變異概率設(shè)為0.5.

        為了評估本文方法的準(zhǔn)確性,本實(shí)驗(yàn)計(jì)算了兩種度量:精度(PMV)和召回(RMV).在實(shí)驗(yàn)中,精度表示所有檢測到的代碼異味中檢測到正確的代碼異味的概率,召回表示所有手動識別的代碼異味中正確檢測到的代碼異味的概率.

        實(shí)驗(yàn)主要尋求以下幾個(gè)問題的解答:

        Q1:基于協(xié)同并行算法優(yōu)化,什么類型的代碼異味可以被正確的檢測?

        Q2:協(xié)同并行算法優(yōu)化在多大程度上優(yōu)于基于單一種群的方法以及原來的協(xié)同并行算法?

        5.3 實(shí)驗(yàn)結(jié)果與分析

        本實(shí)驗(yàn)記錄了不同項(xiàng)目中基于協(xié)同并行優(yōu)化方法下8種代碼異味的精度值和召回率,如表5所示.在不同的項(xiàng)目中,8種代碼氣味的精度值和召回率都超過了85%.表5結(jié)果表明協(xié)同并行算法優(yōu)化的方法沒有偏向于檢測特定的代碼異味.在所有項(xiàng)目中,每個(gè)代碼異味類型的分布幾乎相等.這種不偏向于識別某種特定代碼異味的能力是本文方法的一個(gè)關(guān)鍵優(yōu)勢.大多數(shù)現(xiàn)有的工具和技術(shù)在很大程度上依賴于度量的方法,對于FE、SS這些代碼異味,度量的方法并不奏效[20,21].從這一方面來看,協(xié)同并行算法優(yōu)化結(jié)合了多種不同的檢測方法,在代碼異味的檢測上具有一定的準(zhǔn)確性.(Q1)

        表5 不同項(xiàng)目下代碼異味的精度值和召回率Table 5 Precision median values and recall median values of different projects

        實(shí)驗(yàn)將4種方法分別應(yīng)用在不同的項(xiàng)目上,每種方法運(yùn)行51次,并計(jì)算精度值和召回率.

        表6 不同方法下的精度值和召回率Table 6 Precision median values and recall median values of different methods

        如表6所示,基于遺傳規(guī)劃方法下得到的精度值大約在82%、召回率大約在80%;基于遺傳算法方法下得到的精度值大約在82%、召率大約在81%;基于協(xié)同并行算法方法下得到的精度值大約在89%、召回率大約在87%;基于協(xié)同并行算法優(yōu)化方法下得到的精度值大約在91%、召回率大約在88%;從縱向來看,隨著項(xiàng)目大小的改變,精度值和召回率并沒有很大的浮動,可以表明精度值以及召回率與項(xiàng)目大小無關(guān).從整體來看,基于單一種群的算法的精度和召回率低于基于協(xié)同并行算法,基于協(xié)同并行算法優(yōu)化方法的精度值和召回率最高,可以表明基于協(xié)同并行算法優(yōu)化的方法優(yōu)于其余兩種基于單一種群以及基于協(xié)調(diào)并行算法的方法.(Q1)

        將基于協(xié)同并行算法優(yōu)化的代碼異味檢測方法和兩個(gè)基于單一種群以及基于協(xié)同并行算法的代碼異味檢測方法,分別應(yīng)用在不同的項(xiàng)目上.

        圖7 不同項(xiàng)目上的平均執(zhí)行時(shí)間比較Fig.7 Average execution time comparison on the different project

        如圖7所示,從CUP時(shí)間來看,基于協(xié)同并行算法優(yōu)化的執(zhí)行時(shí)間是基于單一種群的一半.因此,在代碼異味檢測的問題上,并行執(zhí)行比單一執(zhí)行耗時(shí)更少,基于協(xié)同算法優(yōu)化的執(zhí)行時(shí)間也少于基于協(xié)同并行算法.這是因?yàn)樵趦?yōu)化研究領(lǐng)域中,評估階段通常是最耗時(shí)的,在本實(shí)驗(yàn)中,用Jaccard算法優(yōu)化了用于評估檢測器的Needleman-Wuncsh算法,增大了檢測器的通用性并減小了檢測器之間的重疊,減少搜索時(shí)間的同時(shí)也減少了評估階段的耗時(shí).(Q2)

        6 期 望

        本文提出了基于并行協(xié)同算法優(yōu)化的方法來檢測代碼異味,降低了檢測器的成本,加快了搜索速度.由遺傳規(guī)劃搜索得到最優(yōu)檢測規(guī)則,由遺傳算法搜索得到最優(yōu)檢測器,再將兩種方法在同一項(xiàng)目上運(yùn)行,找到兩種解決方案的交集,其結(jié)果是令人信服的.不足之處在于,本文只關(guān)注8種代碼異味,相對局限,未來將擴(kuò)大實(shí)驗(yàn)規(guī)模,以檢測更多的代碼異味,提高方法的一般適用性.此外,還準(zhǔn)備增加并行的算法個(gè)數(shù),求證3個(gè)及3個(gè)以上的算法檢測出來的結(jié)果會不會更加精確.

        猜你喜歡
        并行算法謂詞異味
        地圖線要素綜合化的簡遞歸并行算法
        被遮蔽的邏輯謂詞
        ——論胡好對邏輯謂詞的誤讀
        黨項(xiàng)語謂詞前綴的分裂式
        西夏研究(2020年2期)2020-06-01 05:19:12
        基于4G技術(shù)的VOCs及異味檢測系統(tǒng)
        用這些告別異味吧!夏天就要清清爽爽過!
        PIC-408系列采用育種技術(shù)控制公豬異味
        基于GPU的GaBP并行算法研究
        也談“語言是存在的家”——從語言的主詞與謂詞看存在的殊相與共相
        基于GPU的分類并行算法的研究與實(shí)現(xiàn)
        去除鞋柜異味等
        三年片在线观看免费大全电影| 国产精品成人亚洲一区| 五月天中文字幕mv在线| 精品国产乱码久久久软件下载| 粗大挺进尤物人妻一区二区| 日韩亚洲在线一区二区| 漂亮人妻洗澡被公强 日日躁| 国产精品v欧美精品v日韩精品| 午夜毛片午夜女人喷潮视频| 亚洲春色视频在线观看| 一区二区三区天堂在线| 无码不卡av东京热毛片| 专区亚洲欧洲日产国码AV| 一区二区三区手机看片日本韩国| 在线一区二区三区国产精品| 女人下面毛多水多视频| 成人片99久久精品国产桃花岛| 亚洲av手机在线一区| 久久天堂av综合合色| 久久精品中文字幕一区| 久久久久久AV无码成人| 日本a爱视频二区三区| 亚洲国产天堂久久综合| 国产91网址| 国产激情免费观看视频| 永久免费毛片在线播放| 制服丝袜人妻中文字幕在线| 久久午夜无码鲁丝片直播午夜精品| 最新69国产精品视频| 国内女人喷潮完整视频| 欧美自拍区| 日日噜噜夜夜久久密挑| 加勒比色老久久爱综合网| 国产人妻久久精品二区三区| 欧美日本国产亚洲网站免费一区二区| 日韩av水蜜桃一区二区三区| 日本一本之道高清不卡免费| 老男人久久青草AV高清| 国产精品午夜福利天堂| 国产97色在线 | 国产| 少妇太爽了在线观看|