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

        ?

        代碼克隆檢測(cè)方法研究進(jìn)展

        2019-06-27 00:38:46王婷牟永敏張志華
        現(xiàn)代計(jì)算機(jī) 2019年13期
        關(guān)鍵詞:信息檢索實(shí)驗(yàn)檢測(cè)

        王婷,牟永敏,張志華

        (北京信息科技大學(xué)計(jì)算機(jī)學(xué)院,北京100101)

        0 引言

        在軟件開發(fā)過程中,一些常見的操作會(huì)為代碼庫引入代碼克隆,如通過復(fù)制粘貼并加以修改的方式復(fù)用已有代碼、由IDE 自動(dòng)生成代碼片段等[1]。軟件開發(fā)人員經(jīng)常故意進(jìn)行代碼克隆,因?yàn)榇a克隆具有一些潛在的好處,如可以加快開發(fā)進(jìn)程,使已經(jīng)過良好測(cè)試的代碼的得到重用等。研究顯示,一般的軟件系統(tǒng)中,大約存在7-24%的代碼克隆,在一些軟件中甚至達(dá)到了50%[2]。

        然而,過多的代碼克隆會(huì)給軟件項(xiàng)目維護(hù)帶來一些問題。復(fù)用一段包含未知bug 的代碼會(huì)導(dǎo)致bug 在開發(fā)者沒有意識(shí)到的情況下傳播到軟件系統(tǒng)的其他地方,進(jìn)而為以后的bug 修復(fù)帶來困難。并且,對(duì)于一處代碼的修改可能導(dǎo)致需要修改其他多個(gè)位置的克隆代碼,進(jìn)而增加開發(fā)人員的工作負(fù)擔(dān)。另外,對(duì)多個(gè)克隆片段進(jìn)行了不一致的修改后,還可能導(dǎo)致軟件系統(tǒng)出現(xiàn)意想不到的效果。因此,代碼克隆被認(rèn)為是使得軟件項(xiàng)目維護(hù)成本增加的一項(xiàng)重要因素,在所有軟件開發(fā)成本中占比達(dá)到80%[3]。

        因此,如何高效地檢測(cè)出軟件系統(tǒng)中的代碼克隆片段成為一個(gè)有實(shí)際意義的課題。代碼克隆檢測(cè)是定位軟件系統(tǒng)中相同或相似的代碼片段的過程,一對(duì)相同或相似的代碼片段被稱為“克隆對(duì)”(Clone Pair)[4]。在過去的20 年中,代碼克隆檢測(cè)獲得了越來越多的關(guān)注,已有很多主流方法被提出和實(shí)現(xiàn)。這些代碼克隆檢測(cè)方法的不同之處主要在于它們的檢測(cè)目標(biāo)和檢測(cè)粒度。

        與代碼克隆檢測(cè)相近的研究課題包括代碼相似性檢測(cè)、軟件抄襲檢測(cè)等。熊浩等人[5]在2010 年發(fā)表過一篇代碼相似性檢測(cè)的中文綜述,但已無法涵蓋最近十年取得的最新進(jìn)展。田振洲等人[6]在2016 年發(fā)表過一篇軟件抄襲領(lǐng)域的中文綜述,但論文主要討論二進(jìn)制代碼的克隆檢測(cè),對(duì)源代碼的克隆檢測(cè)未做深入探討。因此本文只關(guān)注源代碼克隆檢測(cè),介紹其基本概念與主流方法,并重點(diǎn)介紹近幾年基于信息檢索、機(jī)器學(xué)習(xí)的代碼克隆檢測(cè)的主要方法。

        1 基本概念

        1.1 基本定義

        (1)代碼片段(Code Fragment)

        一個(gè)代碼片段(CF)是軟件項(xiàng)目源代碼中一段連續(xù)的代碼行。在代碼克隆問題中通常以至少6 行或50個(gè)token 的代碼片段為最小克隆檢測(cè)單位[7]。

        (2)克隆對(duì)(Clone Pair)

        如果兩個(gè)代碼片段CF1 和CF2 在語法或語義上相似,則認(rèn)為這兩個(gè)代碼片段構(gòu)成一組克隆對(duì)(CF1,CF2),二者互為克隆。

        (3)克隆等價(jià)類(Clone Class)

        一個(gè)克隆等價(jià)類是一個(gè)由克隆對(duì)構(gòu)成的集合,其中任意兩個(gè)代碼片段都構(gòu)成一組克隆對(duì)。代碼片段間的克隆關(guān)系是一個(gè)等價(jià)關(guān)系,具有自反性、對(duì)稱性和傳遞性[8]。

        1.2 克隆類型

        目前對(duì)代碼克隆的分類主要有如下四類[8]。

        (1)第一類克?。ㄎ谋緦用娴南嗨疲?/p>

        除了空白符、布局和注釋外,完全相同的代碼片段。第一類克隆又稱為完全克?。‥xact clone)。

        (2)第二類克?。ㄔ~法,或token 層面的相似):

        除了標(biāo)識(shí)符名和字面量外,完全相同的代碼片段。第二類克隆又稱為renamed/parameterized clone。

        (3)第三類克?。ㄕZ法層面的相似):

        對(duì)一份代碼片段做語句級(jí)別的增加、修改、刪除操作得到的克隆代碼。第三類克隆又稱為near-miss clone/gapped clone。

        (4)第四類克?。ㄕZ義層面的相似):

        實(shí)現(xiàn)同一功能的、語法上不相似的代碼片段。第四類克隆又稱為語義克?。╯emantic clone)。

        1.3 數(shù)據(jù)集與評(píng)測(cè)標(biāo)準(zhǔn)

        克隆檢測(cè)工具常采用信息檢索領(lǐng)域的準(zhǔn)確率與召回率以及運(yùn)行時(shí)間對(duì)檢測(cè)效果進(jìn)行評(píng)估。

        Bellon 等人[9]的工作是最早提出的一個(gè)能夠適用于多個(gè)克隆檢測(cè)工具的數(shù)據(jù)集和評(píng)測(cè)標(biāo)準(zhǔn)??寺z測(cè)工具可以Bellon 提供的4,319 個(gè)人工驗(yàn)證過的克隆對(duì)為標(biāo)準(zhǔn)計(jì)算準(zhǔn)確率與召回率。Bellon 的數(shù)據(jù)集已被廣泛用于后續(xù)的各類克隆檢測(cè)工具的評(píng)測(cè),并且已有很多工作對(duì)Bellon 數(shù)據(jù)集進(jìn)行了擴(kuò)展和優(yōu)化。Bellon 數(shù)據(jù)集對(duì)克隆的判斷具有較大的主觀性,且對(duì)新的克隆工具存在較大的誤判可能。而對(duì)真實(shí)系統(tǒng)中的克隆的判定確實(shí)無法找到絕對(duì)權(quán)威的結(jié)果(稱為oracle)[2]。

        C.K.Roy 等人[10]提出的Mutation/injection-based framework 為解決真實(shí)系統(tǒng)中對(duì)克隆的判定存在歧義的問題,提出了人工生成克隆的新思路,并采用變異分析的方法構(gòu)建人工克隆數(shù)據(jù)集和評(píng)測(cè)標(biāo)準(zhǔn)。Mutation/injection-based framework 將特定的編輯操作映射為一組代碼變異操作符,將操作符應(yīng)用于一段代碼即可得到特定類型的克隆代碼。將克隆代碼注入到原始代碼所在的系統(tǒng)中,構(gòu)成克隆對(duì)已知的代碼庫。

        BigCloneBench 是J.Svajlenko 等人[11]在2014 年提出的代碼克隆檢測(cè)數(shù)據(jù)集和評(píng)測(cè)標(biāo)準(zhǔn)。Bellon 的數(shù)據(jù)集不適用于很多現(xiàn)代的克隆檢測(cè)工具,而基于mutation/injection 的框架在大數(shù)據(jù)應(yīng)用的背景下又存在兩個(gè)問題:框架只能通過算法植入克隆,而不能發(fā)現(xiàn)軟件中自然存在的克??;植入一組克隆對(duì)所需的時(shí)間復(fù)雜度較高,因而無法應(yīng)用于超大規(guī)模的軟件系統(tǒng)。Big-CloneBench 為彌補(bǔ)上述不足,采用真實(shí)環(huán)境中的IJaDataset 2.0 數(shù)據(jù)集中的超過25,000 個(gè)Java 軟件項(xiàng)目(365,000,000 行代碼),基于啟發(fā)式搜索的方法發(fā)現(xiàn)項(xiàng)目內(nèi)的實(shí)現(xiàn)特定功能的克隆,生成候選克隆對(duì)集合,并人工對(duì)候選克隆對(duì)集合進(jìn)行校驗(yàn)和標(biāo)注。BigClone-Bench 中的克隆對(duì)涵蓋了所有四個(gè)類型的克隆。

        2 主流方法

        2.1 通用檢測(cè)流程

        通用的克隆檢測(cè)工具讀入一個(gè)或多個(gè)源文件,經(jīng)過克隆檢測(cè)過程,給出克隆片段集合或列表。假設(shè)初始時(shí)認(rèn)為給定源文件集合中存在的所有代碼片段構(gòu)成一個(gè)克隆等價(jià)類,即任意兩個(gè)代碼片段都具有克隆關(guān)系,那么克隆檢測(cè)過程就是利用從源代碼中提取的特征把不可能為克隆對(duì)的元素從集合中去除,不斷過濾克隆對(duì)集合、縮小集合的規(guī)模,得到最終的克隆對(duì)的過程。

        代碼克隆檢測(cè)的通用流程可以劃分為如下四個(gè)階段:

        圖1 代碼克隆檢測(cè)的通用流程

        (1)代碼預(yù)處理:預(yù)處理階段移除對(duì)檢測(cè)結(jié)果無關(guān)的代碼,將源代碼文件切分成代碼片段并確定比較單位。

        (2)代碼形式轉(zhuǎn)換:轉(zhuǎn)換階段將源代碼轉(zhuǎn)換為對(duì)應(yīng)的中間表示,以便后續(xù)的比較。不同的屬性以及中間表示是不同代碼克隆檢測(cè)方法的重要區(qū)別所在。常用的屬性包括:各關(guān)鍵字的出現(xiàn)次數(shù)、圈復(fù)雜度等軟件工程的指標(biāo);常見的中間表示有:詞法分析后的token 流、抽象語法樹、程序依賴圖等。常用的提取中間表示的流程如下:

        ①token 提?。嚎赏ㄟ^編譯前端工具或靜態(tài)分析工具進(jìn)行詞法分析實(shí)現(xiàn)對(duì)token 的提取。源代碼在此階段被轉(zhuǎn)換成由token 構(gòu)成的序列。token 層面相似度較高的代碼可以被判定為第二類克隆。

        ②抽象語法樹(AST)提?。簩?duì)上一步得到的token序列進(jìn)行語法分析,得到抽象語法樹(Abstract Syntax Tree)。

        ③程序依賴圖(PDG)提?。撼绦蛞蕾噲D(Program Dependency Graph)包含代碼中的控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系。程序依賴圖的節(jié)點(diǎn)對(duì)應(yīng)源代碼中的語句或控制條件,邊對(duì)應(yīng)控制依賴或數(shù)據(jù)依賴關(guān)系。

        ④正則化(Normalization)[8]:此步驟為可選步驟,用于去掉注釋、空白符等格式上的差異。經(jīng)過正則化后文本層面完全一致的代碼可以被判定為第一類克隆。

        ⑤屬性提?。捍瞬襟E可對(duì)代碼段的屬性(如代碼規(guī)模、各關(guān)鍵字的數(shù)量、控制結(jié)構(gòu)的數(shù)量、圈復(fù)雜度等)進(jìn)行統(tǒng)計(jì)計(jì)數(shù),得到一系列數(shù)值型的屬性特征。

        (3)匹配檢測(cè)與候選克隆對(duì)生成:此階段利用上一步得到的代碼的中間表示和屬性特征計(jì)算代碼片段的相似度,將相似度高于特定閾值的代碼片段納入候選克隆對(duì)集合。此階段的相似度計(jì)算方法通常采用基于向量、字符串等方法,可基于啟發(fā)式規(guī)則[8],或借助提前構(gòu)建好的索引[12]以及訓(xùn)練好的機(jī)器學(xué)習(xí)模型[1][4]進(jìn)行過濾。通常此階段的算法復(fù)雜度較低、適用于大規(guī)模代碼庫,目的是快速過濾掉相似度低的候選克隆對(duì)。因此此階段也可稱為粗粒度(coarse-grained)的克隆檢測(cè)[12]。

        (4)克隆對(duì)的過濾與聚合:對(duì)于上一階段得到的候選克隆對(duì)集合,進(jìn)行更細(xì)粒度的相似度計(jì)算。此階段的相似度計(jì)算方法可基于更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如抽象語法樹、程序依賴圖),進(jìn)行更加精細(xì)的計(jì)算,目的是發(fā)現(xiàn)更加隱蔽的第三、第四類型的克隆。對(duì)于過濾后的候選克隆對(duì),可進(jìn)行聚合操作,將克隆對(duì)轉(zhuǎn)換為克隆等價(jià)類。

        2.2 基于信息檢索的方法

        近年來,隨著代碼托管平臺(tái)如GitHub、SourceForge的日益流行,越來越多的軟件系統(tǒng)將源代碼公開在互聯(lián)網(wǎng)上,已有不少研究工作基于開源軟件生態(tài)提供的規(guī)模龐大的數(shù)據(jù)集進(jìn)行處理與挖掘分析[13],構(gòu)建支持快速查詢的代碼搜索與代碼推薦系統(tǒng)。基于信息檢索的代碼克隆檢測(cè)框架如圖2 所示。

        圖2 基于信息檢索的代碼克隆檢測(cè)框架

        Seunghak 等人[14]提出的SDD(Similar Data Detection)采用基于文本的克隆檢測(cè)方法,實(shí)現(xiàn)了一個(gè)Eclipse IDE 的插件。SDD 使用了倒排索引來加快相同或相似代碼的查找效率,有效降低克隆檢測(cè)中比較操作的復(fù)雜度。

        H.Jiang 等人[12]在2016 年提出的ROSF(Recommending cOde Snippets with multi-aspect Features)工具基于信息檢索與有監(jiān)督學(xué)習(xí)的方法實(shí)現(xiàn)了代碼片段推薦。ROSF 接收自然語言格式的描述代碼功能的語句,經(jīng)過粗粒度搜索(coarse-grained searching)和細(xì)粒度重排序(fine-grained re-ranking)兩階段的處理,返回前K個(gè)最可能滿足所需功能的代碼片段。ROSF 基于包含921,713 個(gè)代碼片段的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),比原有方法的準(zhǔn)確率提高了20%。

        P.Wang 等人[7]在2017 年提出的CCAligner 工具采用基于e-編輯距離的滑動(dòng)窗口的方法,在large-gap 類型的克隆的檢測(cè)上取得了良好的效果。large-gap 類型克隆指包含大量的語句級(jí)別修改的第三類克隆[7]。CCAligner 以代碼窗口(code window)作為比較單位,q為窗口大小,e 為編輯距離閾值。對(duì)于每個(gè)滑動(dòng)窗口,CCAligner 抽取所有(q-e)-grams 并建立到代碼塊的倒排索引。CCAligner 針對(duì)large-gap 克隆問題設(shè)計(jì)了emismatch 索引,避免了采用動(dòng)態(tài)規(guī)劃策略計(jì)算編輯距離帶來的較高復(fù)雜度。實(shí)驗(yàn)表明,CCAligner 在largegap 類型克隆上的檢測(cè)效果優(yōu)于已有工具,并在前兩類的克隆檢測(cè)任務(wù)上仍能保持較好的效果。

        2.3 基于機(jī)器學(xué)習(xí)的方法

        近年來,人工智能的快速發(fā)展也使得機(jī)器學(xué)習(xí)的方法滲透到軟件工程領(lǐng)域,在代碼克隆檢測(cè)的研究上,已有很多運(yùn)用機(jī)器學(xué)習(xí)的方法取得了比以往更好的效果。機(jī)器學(xué)習(xí)的訓(xùn)練階段與預(yù)測(cè)階段分離的特點(diǎn),使得很多精度高同時(shí)復(fù)雜度較高的方法(如基于AST 和PDG 的方法)可以在機(jī)器學(xué)習(xí)的訓(xùn)練階段使用[4]。圖3展示了一個(gè)分類器的訓(xùn)練與預(yù)測(cè)過程。

        圖3 分類器的訓(xùn)練與預(yù)測(cè)過程

        L.Li 等人[15]在2017 年提出的CCLearner 工具是首個(gè)運(yùn)用深度學(xué)習(xí)進(jìn)行基于token 的代碼克隆檢測(cè)的工具。CCLearner 認(rèn)為代碼中的保留字、方法標(biāo)識(shí)符和變量標(biāo)識(shí)符蘊(yùn)含了代碼實(shí)現(xiàn)細(xì)節(jié)的特征,將代碼克隆檢測(cè)問題轉(zhuǎn)換為判斷代碼對(duì)是否為克隆的分類問題。CCLearner 采用ANTLR 工具抽取不同級(jí)別的token 數(shù)量,構(gòu)成向量作為代碼片段的特征,并利用DeepLearning4j 工具訓(xùn)練一個(gè)具有2 個(gè)隱藏層、每層10 個(gè)節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò)。實(shí)驗(yàn)表明,CCAligner 在前三類克隆的準(zhǔn)確率和召回率上都有較好的效果,而運(yùn)行時(shí)間有所增加。

        V.Saini 等人[4]在2018 年提出的Oreo 工具,采用了Siamese 結(jié)構(gòu)的深度神經(jīng)網(wǎng)絡(luò)的方法,在較難檢測(cè)的部分第三類和第四類克?。ǚQ為Twilight zone)上取得了良好的效果。Oreo 以方法(method)為克隆檢測(cè)單位,首先提取SQO-OSS(Software Quality Observatory for Open Source Software)[16]屬性列表中的屬性,并按照一些啟發(fā)式規(guī)則(如代碼規(guī)模)過濾掉大部分可能性低的候選克隆對(duì)(此過程稱為size similarity sharding)。基于方法調(diào)用信息進(jìn)行代碼的語義和行為上的過濾(action filter)。利用SourcererCC 工具[17]生成訓(xùn)練集,訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型,并基于訓(xùn)練好的模型對(duì)較難判斷的候選克隆對(duì)進(jìn)行預(yù)測(cè)。實(shí)驗(yàn)表明,Oreo 在Twilight zone 類型克隆的檢測(cè)上的準(zhǔn)確率和召回率優(yōu)于已有工具。

        U.Alon 等人[18]在2019 年提出的Code2Vec 工具,借鑒了自然語言處理領(lǐng)域的Word2Vec[19],實(shí)現(xiàn)了根據(jù)代碼片段預(yù)測(cè)代碼功能與方法名。Code2Vec 提出了一種將代碼片段表示成連續(xù)的分布式向量(code embedding)的神經(jīng)網(wǎng)絡(luò)模型,將代碼片段映射為一個(gè)長度固定的向量,以便用來計(jì)算代碼片段的語義屬性。為了實(shí)現(xiàn)代碼片段的分布式表示,首先將代碼轉(zhuǎn)換為抽象語法樹中的路徑,然后利用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)每個(gè)路徑的原子表示(atomic representation)。實(shí)驗(yàn)表明,Code2Vec與以往的技術(shù)相比在同一數(shù)據(jù)集上的表現(xiàn)有75%的效果提升,成為首個(gè)在大型、跨項(xiàng)目語料庫中實(shí)現(xiàn)代碼方法名預(yù)測(cè)的工具。

        3 實(shí)驗(yàn)部分

        3.1 實(shí)驗(yàn)內(nèi)容

        本文在已有研究的基礎(chǔ)上采用基于token 的融合信息檢索和機(jī)器學(xué)習(xí)的方法進(jìn)行了代碼克隆檢測(cè)的實(shí)驗(yàn)。

        實(shí)驗(yàn)數(shù)據(jù)采用BigCloneBench 經(jīng)過約減后的數(shù)據(jù)集bcb_reduced。bcb_reduced 數(shù)據(jù)集包含兩文件:第一類是43 個(gè)功能已知的代碼,每個(gè)源文件中包含一個(gè)功能(如計(jì)算最大公約數(shù)、解析CSV 文件等)的多種實(shí)現(xiàn),每種實(shí)現(xiàn)構(gòu)成一個(gè)方法。因此本實(shí)驗(yàn)以方法為克隆檢測(cè)的粒度。去掉只包含一個(gè)實(shí)現(xiàn)的文件,保留的19 個(gè)文件如表1 所示。

        第二類文件是功能未知的、待檢測(cè)克隆的文件,共有50,491 個(gè)源文件。

        實(shí)驗(yàn)所采用的方法基于這樣的假設(shè):構(gòu)成克隆關(guān)系的代碼傾向于實(shí)現(xiàn)類似的功能,而實(shí)現(xiàn)類似的功能通常按類似的順序調(diào)用特定的函數(shù)。

        實(shí)驗(yàn)所用的克隆檢測(cè)方法的流程如圖4 所示。源文件首先經(jīng)過屬性計(jì)數(shù)器處理,提取每個(gè)方法和它的屬性。然后,將整個(gè)方法集合劃分為區(qū)段(partition),為查詢的方法分配最可能包含克隆方法的區(qū)段。對(duì)于每個(gè)區(qū)段,為所有候選代碼建立倒排索引。對(duì)于每個(gè)查詢方法,倒排索引將返回一個(gè)候選方法列表。利用每個(gè)方法的屬性計(jì)算哈希值,比較查詢方法和候選方法的哈希值,相等則判定為克隆,不相等則送入訓(xùn)練好的模型進(jìn)行預(yù)測(cè)。

        表1 功能已知的代碼文件列表

        圖4 實(shí)驗(yàn)克隆檢測(cè)流程

        預(yù)測(cè)采用的模型是Oreo 工具基于Siamese 神經(jīng)網(wǎng)絡(luò)訓(xùn)練的模型。Siamese 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖5 所示。模型的輸入為一個(gè)48 維的向量,向量的元素由抽取出的屬性構(gòu)成。輸入向量被送入兩個(gè)結(jié)構(gòu)一致的子網(wǎng)絡(luò)中,兩個(gè)子網(wǎng)絡(luò)對(duì)應(yīng)兩個(gè)待比較的方法。經(jīng)過兩個(gè)子網(wǎng)絡(luò)同樣的變換,兩個(gè)子網(wǎng)絡(luò)的輸出結(jié)果被拼接成一個(gè)向量,輸送到比較網(wǎng)絡(luò)中。經(jīng)過比較網(wǎng)絡(luò)的計(jì)算,輸出的結(jié)果再被送入分類器進(jìn)行分類,分類器采用邏輯斯蒂回歸實(shí)現(xiàn)。為防止過擬合,模型為每層加入了20%的dropout 操作。采用相對(duì)熵(relative entropy)作為損失函數(shù)(loss function)。訓(xùn)練過程采用隨機(jī)梯度下降法,學(xué)習(xí)率設(shè)定為0.0001,并在每輪迭代后(epoch)將學(xué)習(xí)率降低3%以加快收斂速度。

        圖5 Siamese神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)

        實(shí)驗(yàn)環(huán)境為一臺(tái)8 核32G 的云服務(wù)器,操作系統(tǒng)為CentOS 6.8。

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

        利用BigCloneBench[11]和BigCloneEval[20]對(duì)克隆的召回率進(jìn)行檢測(cè),結(jié)果如表2 所示。

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

        實(shí)驗(yàn)結(jié)果表明,基于token 與信息檢索和機(jī)器學(xué)習(xí)的方法可以對(duì)前三類克隆實(shí)現(xiàn)較為準(zhǔn)確全面的檢測(cè)。對(duì)于較難檢測(cè)的第三類和第四類克隆,此方法可以達(dá)到比較好的檢測(cè)效果。但是部分第三類克隆的檢測(cè)效果和以往的工具比有所下降,原因可以解釋為預(yù)測(cè)模型所采用的訓(xùn)練數(shù)據(jù)來自SourcererCC[17]工具的檢測(cè)結(jié)果,未經(jīng)過人工校驗(yàn)和標(biāo)注,因此數(shù)據(jù)的準(zhǔn)確性仍有提升的空間。得益于機(jī)器學(xué)習(xí)的訓(xùn)練與預(yù)測(cè)過程分離的模式,后續(xù)可在訓(xùn)練階段利用更能表征代碼語義特征的控制流圖、數(shù)據(jù)流圖等數(shù)據(jù)結(jié)構(gòu)生成特征。

        在實(shí)驗(yàn)中,發(fā)現(xiàn)存在一類假陽性(false positive)代碼片段,如檢測(cè)流程中的行為過濾器在兩段代碼中都檢測(cè)到了toString()函數(shù)和append()函數(shù)的調(diào)用,以及控制語句序列的一致(循環(huán)、if 語句),并且定義的變量的數(shù)目也相同,因此判定兩段代碼為克隆,但兩段代碼實(shí)現(xiàn)了不同的功能。實(shí)際應(yīng)用中,是否判定此類結(jié)構(gòu)相似而功能不同的代碼片段為克隆可根據(jù)具體需求確定;評(píng)測(cè)標(biāo)準(zhǔn)將此類歸為假陽性。分析導(dǎo)致誤判的原因,發(fā)現(xiàn)很多經(jīng)常被調(diào)用的函數(shù)(如toString、append等),對(duì)區(qū)分代碼的不同功能并沒有太大的貢獻(xiàn)。因此,借鑒信息檢索中TD-IDF 的設(shè)計(jì)思路,可以將這些函數(shù)或結(jié)構(gòu)歸納為停用詞,并在屬性計(jì)算前增加去停用詞操作,可在一定程度上減少這類誤判的發(fā)生。

        4 結(jié)語

        代碼克隆檢測(cè)是軟件工程領(lǐng)域具有廣泛應(yīng)用價(jià)值的一個(gè)研究課題。經(jīng)過幾十年的研究,已有較為成熟的對(duì)代碼克隆的定義、分類體系以及數(shù)據(jù)集與評(píng)測(cè)標(biāo)準(zhǔn)被提出。本文介紹了代碼克隆檢測(cè)的基本概念,總結(jié)了代碼克隆檢測(cè)工具的通用檢測(cè)流程與主流檢測(cè)方法,重點(diǎn)介紹了近幾年來基于信息檢索、機(jī)器學(xué)習(xí)的代碼克隆檢測(cè)方法的基本流程和最新研究進(jìn)展。對(duì)基于token 的融合信息檢索與深度學(xué)習(xí)的方法進(jìn)行實(shí)驗(yàn),分析實(shí)驗(yàn)結(jié)果,發(fā)現(xiàn)了采用更能表征代碼語義的復(fù)雜結(jié)構(gòu)與增加停用詞列表兩個(gè)改進(jìn)方向。

        猜你喜歡
        信息檢索實(shí)驗(yàn)檢測(cè)
        記一次有趣的實(shí)驗(yàn)
        “不等式”檢測(cè)題
        “一元一次不等式”檢測(cè)題
        “一元一次不等式組”檢測(cè)題
        做個(gè)怪怪長實(shí)驗(yàn)
        NO與NO2相互轉(zhuǎn)化實(shí)驗(yàn)的改進(jìn)
        醫(yī)學(xué)期刊編輯中文獻(xiàn)信息檢索的應(yīng)用
        新聞傳播(2016年18期)2016-07-19 10:12:06
        實(shí)踐十號(hào)上的19項(xiàng)實(shí)驗(yàn)
        太空探索(2016年5期)2016-07-12 15:17:55
        小波變換在PCB缺陷檢測(cè)中的應(yīng)用
        基于神經(jīng)網(wǎng)絡(luò)的個(gè)性化信息檢索模型研究
        91精品国产91热久久p| 蜜臀色欲av在线播放国产日韩| 国产人与禽zoz0性伦| 91久久精品无码人妻系列| 国产精品成人久久a级片| 亚洲一区二区三区,日本| 4hu四虎永久在线观看| 好爽受不了了要高潮了av| 91九色国产在线观看| 一本色道久久亚洲综合| 国产农村妇女毛片精品久久| 欧美性福利| 黄片午夜免费观看视频国产| 蜜桃传媒免费在线播放| 成人三级a视频在线观看| 男女18禁啪啪无遮挡激烈网站| 狠狠色噜噜狠狠狠888米奇视频| 人妻精品丝袜一区二区无码AV| 日本熟女视频一区二区三区| 国产成人无码精品久久久免费| 亚洲男人的天堂网站| 国产亚洲AV天天夜夜无码| 亚洲人成伊人成综合久久| 深夜福利啪啪片| 国产精品揄拍100视频| 日本视频精品一区二区| 9久久婷婷国产综合精品性色| 国产特级毛片aaaaaa| 人妻丰满av无码中文字幕| 久久中文字幕国产精品| 免费又黄又爽又色的视频| 广东少妇大战黑人34厘米视频| 国产日韩午夜视频在线观看| 国产一区二区三区免费精品| 99久久精品国产一区色| 天天做天天爱夜夜夜爽毛片| 日韩成人极品在线内射3p蜜臀| 亚洲欧洲日产国码无码| 一区二区三区亚洲视频| 亚洲国产av玩弄放荡人妇系列 | 国产伦精品一区二区三区免费|