《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Hadoop集群下的并行克隆代碼檢測
Hadoop集群下的并行克隆代碼檢測
來源:微型機與應用2014年第2期
葉 林,姚國祥
(暨南大學 信息科學技術學院,廣東 廣州510632)
摘要: 克隆代碼會導致項目的維護困難,削弱項目的健壯性,并且克隆代碼中所包含的bug會破壞整個項目。當前克隆代碼檢測技術或者拘泥于只能檢測少數幾種克隆代碼,或者需要極高的檢測時間。而且如果需要檢測大量的源代碼,一臺機器的主存也許無法存儲所有的信息。對克隆代碼檢測技術的并行運行進行了可能性研究,使用基于程序依賴圖的克隆代碼檢測技術,這種技術不僅可以檢測出語法上的克隆,也可以檢測出語義上的克隆,提出了一個并行子圖同構檢測方法并使用MapReduce并行實現,實驗結果極大地提高了該方法的運行速度。
Abstract:
Key words :

摘  要: 克隆代碼會導致項目的維護困難,削弱項目的健壯性,并且克隆代碼中所包含的bug會破壞整個項目。當前克隆代碼檢測技術或者拘泥于只能檢測少數幾種克隆代碼,或者需要極高的檢測時間。而且如果需要檢測大量的源代碼,一臺機器的主存也許無法存儲所有的信息。對克隆代碼檢測技術的并行運行進行了可能性研究,使用基于程序依賴圖的克隆代碼檢測技術,這種技術不僅可以檢測出語法上的克隆,也可以檢測出語義上的克隆,提出了一個并行子圖同構檢測方法并使用MapReduce并行實現,實驗結果極大地提高了該方法的運行速度。
關鍵詞: 克隆代碼;程序依賴圖;同構匹配檢測;Hadoop

    在軟件項目的開發過程中,由于能夠降低開發者的工作量,“復制粘貼”也許是最常使用的操作。但這也帶來了克隆代碼的問題。
    克隆代碼的存在給軟件維護帶來了困難,當開發者試圖修改代碼時,他們很可能修改了克隆代碼中的一處而忘記了別的地方,這顯然會帶來代碼的不一致。為了避免這個難題,大量的克隆代碼檢測技術被提出。但問題在于克隆代碼的精確定義本身就不明確,現有的每一種方法都有其對于克隆代碼自己的定義。因此,同樣的源代碼,如果用不同的克隆代碼檢測方法檢測,可能會得到完全不同的結果。
    基于程序依賴圖的方法能夠探測語義克隆代碼,而且它還具有一個其他方法所不具有的能力:能夠探測非連續性的克隆代碼[1]。非連續性的克隆代碼是被其他代碼或文件所分割開來的克隆代碼,克隆代碼中的代碼并不是連續的。而開發者往往會在粘貼克隆代碼后做一些修改,這樣,基于程序依賴圖的檢測方法就能夠檢測出這種克隆代碼。
    但是基于程序依賴圖的方法有一個很大的缺點,即運行非常緩慢。程序依賴圖的同構檢測是著名的圖同構匹配問題,該問題為NP完全問題,需要指數級的時間復雜度,這導致了運行時間呈指數級增長。
    本文提出了一種并行執行程序依賴圖同構匹配的方法。通過使用這種方法,減少了這一特定問題的圖同構匹配算法所需要的時間。并使用MapReduce這一流行的并行框架來并行該方法。
1 背景知識
1.1 程序依賴圖

    程序依賴圖是一個有向圖,該圖的頂點代表了源代碼中的代碼,而邊代表了兩個頂點之間的依賴。在程序依賴圖中只有兩種邊:代表控制依賴的邊和代表數據依賴的邊。以下展示了一個源代碼的例子,圖1為該源代碼所產生的程序依賴圖。

    #include <stdio.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define BUFFER_SIZE     1024
    #define DELIM   "\t"
    
    int main(int argc, char *argv[]){
        char strLastKey[BUFFER_SIZE];
        char strLine[BUFFER_SIZE];
        int count = 0;
    
        *strLastKey = '\0';
        *strLine = '\0';
    
        while( fgets(strLine, BUFFER_SIZE - 1, stdin) ){
            char *strCurrKey = NULL;
            char *strCurrNum = NULL;
    
            strCurrKey  = strtok(strLine, DELIM);
            strCurrNum = strtok(NULL, DELIM);
/* necessary to check error but.... */
    
            if( strLastKey[0] == '\0'){
                strcpy(strLastKey, strCurrKey);
            }
    
            if(strcmp(strCurrKey, strLastKey)){
                printf("%s\t%d\n", strLastKey, count);
                count = atoi(strCurrNum);
            }else{
                count += atoi(strCurrNum);
            }
            strcpy(strLastKey, strCurrKey);
    
        }
        printf("%s\t%d\n", strLastKey, count);
/* flush the count */
        return 0;
    }
1.2 MapReduce
    MapReduce[2]是一個流行的編程模型,該模型能夠通過一個運行在集群上的并行的、分布式的算法對大數據集進行處理。它提供了一個簡單易用的并行算法編程框架,使用該框架的開發者只需要定義兩個函數:Map和Reduce。原始數據被該框架轉換成鍵值對,每一個Map進程每一次處理一個鍵值對(key,value):
    Map:  <k1, v1> → <k2, v2>
    Map函數在集群中并行執行,MapReduce框架將所有相同的key的鍵值對傳遞給一個Reduce函數。Reduce函數產生最終的結果:
    Reduce: <k2,v2> → <k3,v3>
2 程序設計算法
    首先把源代碼轉換成以靜態形式表示數據流和控制流的程序依賴圖,將其記為s-PDG。程序依賴圖的節點代表了源代碼中的語句(聲明、賦值、表達式、控制邏輯等),同時記錄所有節點對應源代碼的類別以便在后面的比對中使用。然后選擇一段程序塊所對應的s-PDG的子圖,作為查找與圖同構的樣本,將這個子圖記為b-PDG。隨后對s-PDG和b-PDG進行比對,以檢測除了b-PDG本身以外是否還有別的s-PDG的子圖與b-PDG同構。如果有,則這個子圖所對應的代碼就與b-PDG對應的程序塊為克隆代碼。
    經典的算法在檢測子圖同構時只能順序執行,本文所要做的是將s-PDG切分成多個小圖,然后并行子圖同構檢測。在論述切分s-PDG的方法之前,先給出會在切分中使用的偽圓的定義。
    在圖G=(V,E)中,任給A∈V,以A為圓心,以一個正數為半徑,對于任意節點B∈V,如果AB之間的最短路徑長度(對于邊無權值的圖,最短路徑長度為最短路徑所經過的節點的個數)小于半徑,則B位于該偽圓中。當計算最短路徑時忽略邊的方向。
    按照參考文獻[3]中提出的方法切割s-PDG:
    (1)根據s-PDG節點的種類分別計數。

 


    (2)取出s-PDG中數量最少的節點的種類,將其記為種類l。然后選取出b-PDG中屬于種類l的節點。如果b-PDG中沒有種類l的節點,則變更種類l為s-PDG中第二少種類的節點。如果種類l仍然在b-PDG中沒有節點,則繼續變更種類l為s-PDG中第三少種類的節點,直到b-PDG中存在種類l的節點。
    (3)計算s-PDG中所有這些種類l的節點與其他節點的距離,將最大值定為偽半徑。
    (4)以上面計算出的偽半徑,以s-PDG中種類為l的節點為圓心,可以得到一些偽圓。這些偽圓就是切割s-PDG的最終結果。將它們記為c-PDG的集合。
    在查找同構子圖的過程中必須檢查節點的種類,對應的節點必須有同樣的種類。所以同構子圖必須有種類為l的節點。考慮到b-PDG的尺寸大小,在s-PDG中的節點如果距步驟(4)中選取的圓心距離過大,則這些節點不可能處于同構子圖中,因此可以把這些節點切除不再考慮。
    該算法的基本流程如圖2所示。

3 算法的實現
    使用JavaPDG[4]生成整個項目的程序依賴圖。JavaPDG是一個靜態的Java字節碼分析器。這個工具能夠產生各種不同的對源代碼的圖形展示,例如系統依賴圖、程序依賴圖、控制流圖和函數調用圖。
    使用Hadoop[5](一個MapReduce框架的開源實現)來并行這個子圖集的同構匹配。
    使用Igraph[6]來檢測子圖同構匹配。Igraph是一個針對圖的操作的開源軟件包,由于Igraph是用C語言寫成的,必須通過Hadoop流來將這個軟件包用于并行同構檢測。
4 實驗與評價
    通過對兩個開源項目的檢測來評價本文的算法,結果如表1所示。通過代碼行數和對應程序依賴圖的節點和邊的個數來對比項目的大小。將經典PDG匹配算法與以3臺機器組成的集群上并行為例的本文算法所消耗的時間進行了比較。

    結果顯示,本文算法極大地提高了同構匹配的性能,經典的程序依賴圖同構匹配算法需要花費幾個小時,而本文并行算法僅僅花費幾分鐘。這是因為并行算法移除了程序依賴圖中的部分節點,而且并行了同構匹配的過程。
    本文提出了一種提高基于程序依賴圖的克隆代碼檢測性能的方法。把程序依賴圖分割成若干個小圖并使用Hadoop并行執行子圖同構檢測,使得算法的性能得到了提高。使用兩個得到廣泛使用的開源項目來測試本文算法,測試結果顯示該算法顯著地提高了克隆代碼檢測的性能。
參考文獻
[1] BELLON S,KOSCHKE R,ANTONIOL G,et al.Comparison  and evaluation of clone detection tools[J].IEEE Transactions on Software Engineering,2007,33(9):577-591.
[2] DEAN J,GHEMAWAT S.MapReduce:simplified data processing on large clusters[J].Communications of the ACM, 2008,51(1):107-113.
[3] LI J,ERNST M D.CBCD:cloned buggy code detector[C].  ICSE 34th International Conference on Software Engineering, 2012:310-320.
[4] SHU G,SUN B, HENDERSON T A,et al.JavaPDG:a new  platform for program dependence analysis[C].In Proceedings  of the 6th IEEE International Conference on Software Testing,Verification and Validation, Testing Tools Track,Luxembourg,2013:18-22.
[5] Hadoop.The apache software foundation[EB/OL].[2013-09-10].http://hadoop.apache.org/.
[6] CSARDI G,NEPUSZ T.The igraph software package for complex network research[C].InterJournal,Complex Systems, 1695.2006.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          性欧美xxxx视频在线观看| 欧美专区18| 在线日韩一区二区| 激情欧美国产欧美| 国产三级欧美三级日产三级99| 在线观看亚洲一区| 99国产精品视频免费观看一公开| 欧美三区美女| 伊人成人开心激情综合网| 亚洲欧美日韩国产另类专区| 久久电影一区| 久久这里有精品15一区二区三区| 亚洲精品乱码久久久久| 国产精品久久久久久久久久妞妞| 在线日韩视频| 亚洲欧美一区二区视频| 欧美色偷偷大香| 欧美日韩a区| 免费观看30秒视频久久| 亚洲国产日韩在线一区模特| 亚洲视频电影在线| 久久人体大胆视频| 国产日韩在线一区二区三区| 欧美伦理影院| 午夜精品理论片| 国产欧美日韩亚洲| 久久色在线观看| 亚洲精品视频啊美女在线直播| 久久一区欧美| 99视频精品在线| 亚洲欧洲日夜超级视频| 欧美精品18videos性欧美| 亚洲欧美日韩一区二区三区在线观看| 欧美成人精品高清在线播放| 亚洲性夜色噜噜噜7777| 精品91久久久久| 亚洲国产欧美在线| 在线不卡亚洲| 久久亚洲私人国产精品va| 久久黄色影院| 在线成人av| 羞羞答答国产精品www一本| 小黄鸭精品密入口导航| 亚洲精品影视| 亚洲欧美99| 99国内精品| 99在线精品视频在线观看| 国产日韩欧美制服另类| 亚洲视频999| 国产一区二区高清不卡| 国产精品久久久久久久久久久久久久| 欧美高清在线精品一区| 免费成人小视频| 最新国产成人av网站网址麻豆| 国产日韩欧美在线一区| 午夜免费电影一区在线观看| 久久综合色综合88| 国产欧美日本一区视频| 国产精品香蕉在线观看| 国产精品美女久久久久久免费| 欧美日韩国产一区精品一区| 欧美自拍偷拍| 欧美日韩不卡视频| 国产精品va| 免费av成人在线| 亚洲神马久久| 亚洲欧美区自拍先锋| 国产精品高清在线| 卡一卡二国产精品| 欧美刺激性大交免费视频| 久久精品成人欧美大片古装| 激情视频一区二区| 亚洲伦理久久| 伊人成人网在线看| 在线免费一区三区| 在线观看欧美成人| 亚洲高清在线观看一区| 亚洲国产高清一区二区三区| 久久精品天堂| 久久精品1区| 亚洲资源在线观看| 伊人久久大香线| 欧美午夜精品久久久久久浪潮| 欧美电影免费观看大全| 久久精品国产欧美亚洲人人爽| 欧美国产日韩精品免费观看| 99精品福利视频| 韩国成人理伦片免费播放| 欧美资源在线观看| 欧美色偷偷大香| 可以免费看不卡的av网站| 国产一区二区日韩精品欧美精品| 宅男精品导航| 亚洲一区二区三区精品视频| 国外成人在线视频| 亚洲欧美色婷婷| 欧美顶级大胆免费视频| 欧美激情一区二区三区蜜桃视频| 欧美激情第10页| 欧美一级黄色录像| 欧美日韩精品是欧美日韩精品| 国产精品视频yy9299一区| 国产一区二区三区在线观看视频| 久久一区二区精品| 狠狠入ady亚洲精品经典电影| 在线观看国产一区二区| 久久高清国产| 欧美午夜不卡影院在线观看完整版免费| 亚洲国产精品一区在线观看不卡| 久久久久久久综合狠狠综合| 91久久一区二区| 日韩一区二区精品| 国产女人精品视频| 亚洲激情六月丁香| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久先锋影音| 欧美一区二区三区电影在线观看| 国产视频在线观看一区二区| 欧美日韩国产成人在线91| 国产欧美精品一区aⅴ影院| 欧美激情视频在线免费观看 欧美视频免费一| 美女视频黄免费的久久| 午夜精品一区二区三区电影天堂| 亚洲精品一区二区网址| 狠狠色狠狠色综合日日91app| 欧美一区二区在线观看| 国产精品久久久久久久久婷婷| 久久久国产精品亚洲一区| 欧美一级二级三级蜜桃| 香蕉免费一区二区三区在线观看| 欧美三级免费| 99成人免费视频| 一区二区不卡在线视频 午夜欧美不卡在| 一本久久a久久免费精品不卡| 亚洲欧美日本精品| 性xx色xx综合久久久xx| 国产一区二区三区久久久久久久久| 国产日韩在线不卡| 亚洲乱码日产精品bd| 久久婷婷一区| 欧美日韩综合| 一区二区在线免费观看| 欧美三级在线播放| 亚洲永久免费观看| 亚洲精品综合久久中文字幕| 国产欧美视频一区二区| aa国产精品| 亚洲一区二区三区精品动漫| 欧美激情国产日韩精品一区18| 在线观看一区欧美| 久久精品人人做人人爽| 99国产成+人+综合+亚洲欧美| 樱桃视频在线观看一区| 欧美午夜国产| 久久av一区二区| 一区二区精品在线| 久久久久久久999精品视频| 篠田优中文在线播放第一区| 亚洲国产精品视频| 欧美天堂亚洲电影院在线观看| 久久日韩粉嫩一区二区三区| 欧美亚洲一区三区| 99精品热视频只有精品10| 欧美三区在线观看| 欧美日韩国产区一| 国内精品久久久久久久果冻传媒| 亚洲电影欧美电影有声小说| 国产日韩一区二区| 国内精品视频在线观看| 欧美日韩中国免费专区在线看| 国产精品九九久久久久久久| 国产精品一香蕉国产线看观看| 欧美激情久久久久| 欧美www视频| 亚洲国产精品久久91精品| 亚洲一区二区三区高清不卡| 在线亚洲一区观看| 国产精品乱码人人做人人爱| 欧美在线视频观看免费网站| 亚洲精品一区二区三区蜜桃久| 久久手机精品视频| 久久精品噜噜噜成人av农村| 亚洲电影激情视频网站| 在线日本高清免费不卡| 国产精品自拍视频| 国产精品久久久久久户外露出| 欧美一区二区三区在线| 国产精品v欧美精品v日本精品动漫| 免费在线观看一区二区| 国产精品视频免费一区| 欧美三日本三级三级在线播放| 亚洲精品国产精品乱码不99| 国产啪精品视频| 六月天综合网| 亚洲麻豆视频| 免费观看成人| 曰本成人黄色| 亚洲日本电影在线| 久久久久久久久久久久久女国产乱| 999亚洲国产精| 午夜一区二区三区在线观看| 国产精品乱码妇女bbbb| 亚洲另类一区二区| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲视频一区二区免费在线观看| 欧美在线精品一区| 亚洲国产欧美一区二区三区丁香婷| 久久er精品视频| 麻豆亚洲精品| 久久亚洲免费| 中文av一区二区| 亚洲人精品午夜| 亚洲成人在线网站| 国产在线精品成人一区二区三区| 亚洲国产精品第一区二区| 免费成人高清在线视频| 中国成人黄色视屏| 亚洲黄色在线看| 欧美本精品男人aⅴ天堂| 国产美女扒开尿口久久久| 午夜精品亚洲| 久久国产精品99国产精| 欧美日本韩国在线| 久久www成人_看片免费不卡| 欧美日韩国产欧| 亚洲国产精品久久91精品| 欧美在线观看天堂一区二区三区| 久久久久久久一区二区| 欧美喷潮久久久xxxxx| 性色av一区二区怡红| 欧美一级在线亚洲天堂| 欧美日韩精品一区二区天天拍小说| 欧美日韩国产一区二区三区地区| 亚洲自拍另类| 欧美另类在线播放| 亚洲黄页一区| 欧美18av| 亚洲高清久久网| 午夜视频一区| 亚洲精品系列| 亚洲大片免费看| 亚洲午夜一区| 在线观看一区欧美| 国产欧美在线视频| 欧美一区不卡| 国产精品久久一区二区三区| 羞羞视频在线观看欧美| 在线观看国产精品淫| 欧美日韩国产成人在线免费| 中文精品99久久国产香蕉| 国产精品久在线观看| 国产欧美一区二区白浆黑人| 欧美亚洲在线| 亚洲精品欧美专区| 亚洲午夜小视频| 伊甸园精品99久久久久久| 国产精品九九久久久久久久| 最新日韩在线视频| 一区二区三区视频在线| 亚洲天堂久久| 国产欧美日韩一区二区三区在线观看| 亚洲激情校园春色| 亚洲欧美美女| 久久久久一区二区三区四区| 久久久国产一区二区| 国产一区二区欧美日韩| 在线亚洲欧美| 免费成人黄色| 蜜桃av一区二区三区| 国产精品日韩精品欧美精品| 亚洲欧美日韩一区在线| 小嫩嫩精品导航| 久久精品天堂| 一区二区三区国产在线观看| 国产精品亚洲网站| 国产精品国产三级国产aⅴ无密码| 亚洲精品少妇30p| 亚洲一区久久| 亚洲黄色一区二区三区| 狠色狠色综合久久| 亚洲国产天堂网精品网站| 欧美成人情趣视频| 欧美一级一区| 亚洲午夜视频在线| 欧美成人a∨高清免费观看| 狠狠色综合日日| 玖玖综合伊人| 欧美日韩一级视频| 日韩小视频在线观看专区| 亚洲国产日韩欧美在线99| 亚洲欧美国产毛片在线| 国产亚洲精品一区二555| 国产欧美韩日| 亚洲无线观看| 久久久久国色av免费观看性色| 精东粉嫩av免费一区二区三区| 午夜日韩激情| 久久综合伊人77777| 亚洲国产成人av好男人在线观看| 国产美女一区二区| 欧美深夜福利| 在线亚洲电影| 欧美中文字幕第一页| 午夜免费电影一区在线观看| 亚洲国产精品小视频| 国模私拍一区二区三区| 亚洲国产日韩欧美在线99| 亚洲欧美日韩人成在线播放| 亚洲色图在线视频| 欧美一级片在线播放| 欧美日韩国产一区精品一区| 欧美一区二区观看视频| 久久人人超碰| 欧美大胆人体视频| 免费不卡在线视频| 欧美一区在线视频| 国产一区二区三区日韩欧美| 亚洲一区在线看| 狼狼综合久久久久综合网| 国产精品久久久久久久久久久久久| 久久久久久久网站| 亚洲免费视频中文字幕| 欧美一区二区观看视频| 亚洲卡通欧美制服中文| 99精品福利视频| 亚洲看片一区| 国产精品久久久久999| 国产日韩欧美不卡在线|