• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種改進的基于文本的重復代碼自動識別方法

    2018-11-17 01:32:18賓航飛胡志剛
    軟件 2018年10期
    關鍵詞:常量精確度代碼

    劉 偉,賓航飛,胡志剛

    ?

    一種改進的基于文本的重復代碼自動識別方法

    劉 偉1,2,賓航飛2,胡志剛2

    (1. 湖南中醫(yī)藥大學信息科學與工程學院,湖南 長沙 410208;2. 中南大學軟件學院,湖南 長沙 410075)

    代碼味道的識別與自動重構是近年來軟件工程的熱點領域之一,而重復代碼是一種在軟件工程中較為常見的代碼味道。本文在基于文本的重復代碼識別方法的基礎上,通過詞法分析對特定的Token作出處理后再對源代碼進行對比,最后通過語法樹的對比來對結果進行過濾以降低誤報率。測試結果表明該方法對于重復代碼有著較好的識別效果。對重復代碼的自動識別算法研究有著借鑒意義,在軟件的質(zhì)量、維護等領域上也具有廣泛的應用需求。

    重復代碼;代碼味道;自動識別;抽象語法樹

    0 引言

    隨著信息技術的高速發(fā)展,人們已開發(fā)越來越多的軟件系統(tǒng),而軟件系統(tǒng)的復雜程度也隨之越來越高,軟件系統(tǒng)的規(guī)模也越來越龐大,軟件系統(tǒng)的健壯性、可維護性、可擴展性等質(zhì)量屬性也越來越重要,軟件質(zhì)量已成為軟件工程的重要研究分支 之一[1-4]。

    隨著軟件系統(tǒng)規(guī)模的擴大、復雜度的提升,即便耗費了大量的人力物力,軟件系統(tǒng)的正確性仍然難以保證,不良的代碼和低劣的設計也隨之出現(xiàn)。在Martin Fowler的《重構——改善既有代碼的設計》中使用“代碼味道(code smells)”來指代軟件系統(tǒng)中的差勁設計和質(zhì)量低下的模塊。在該著作中,將常見的代碼味道進行歸納并提出了22種代碼味道。

    在代碼味道中,重復代碼是一種重要的代碼味道,也是在軟件系統(tǒng)中最為常見的代碼味道之一。重復代碼將導致代碼的冗余,同時降低了軟件系統(tǒng)的健壯性和可維護性,浪費不必要的工作量。

    與其他代碼味道相比較,重復代碼具有更高的客觀性和可度量性,易于使用數(shù)學語言或程序語言進行表達,因此,相比其他代碼味道的識別,重復代碼的識別更加具有可行性。

    國外對于重復代碼的研究始于20世紀90年代[5],而國內(nèi)對這方面的研究起步較晚,且在取得的成果上還有一定的差距,但在重復代碼檢測及重構上仍有一定的成果[6-8]。

    國內(nèi)外已提出許多重復代碼識別方法和技術,并且開發(fā)出了相應的檢測工具。這些方法可大致分為基于文本(context)、基于詞法(token)、基于語法(syntax)、基于語義(semantic)、基于度量(metrics)等,還有一些其他方法。

    (1)基于文本(context)的識別方法

    該方法在對軟件系統(tǒng)的源代碼進行簡單處理后(一般只過濾注釋、空行等),直接進行重復代碼的判斷。在Lingxiao Jing等[9]提出的方法中,先對意義相同的循環(huán)控制語句、條件語句等進行了過濾,再進行比較以查找重復代碼。Johnson[10]首先提出基于文本的識別方法,該方法使用哈希函數(shù)將代碼片段進行哈希計算,通過哈希值的比較來查找重復 代碼。

    (2)基于詞法(token)的識別方法

    該方法可看作基于文本的識別方法的改進。該方法先將源代碼中的內(nèi)容通過詞法分析轉(zhuǎn)換為token序列,再對轉(zhuǎn)換后的token序列進行比較。該方法由Baker[11]首次提出,其采用了后綴樹算法來比較token序列的相似性。

    (3)基于語法(syntax)的識別方法

    該方法將程序解析為語法樹,通過查找其中相似的子樹來查找重復代碼。Baxter等[12]首先將抽象語法樹(AST)技術應用于重復代碼識別。

    (4)基于語義(semantic)的識別方法

    該方法以程序依賴圖(PDG)為代表,先根據(jù)程序的數(shù)據(jù)流和控制流構建程序依賴圖,再通過查找其中的同構子圖來查找重復代碼。郭婧等[8]在基于程序依賴圖的克隆檢測方法上,通過對程序語句進行斷層和分類處理,以加強對重復代碼的識別 能力。

    (5)基于度量(metrics)的識別方法

    該方法先根據(jù)程序的源代碼或者抽象語法樹進行分析,得出度量因子,通過比較度量因子來查找重復代碼。該種方法由Mayrand等人首次提出[13]。

    (6)其他方法

    其他重復代碼識別方法在實際應用中使用較少,如基于低級語言的方法,該方法通過比較編譯后產(chǎn)生的匯編代碼、Java字節(jié)碼[14]來識別重復代碼。由Philipp Schugerl提出的基于描述邏輯的方法[15],該方法綜合了基于語法的方法與基于語義的方法,通過分析程序得到抽象語法樹,再使用語義網(wǎng)推理器(semantic web reasoner)進行語義分析,并結合了Hadoop的Map/Reduce框架,著重于對程序的控制流進行比較來查找重復代碼。Georges Golomingi Koni-N’Sapu提出的基于重構場景的方法[16],該方法通過對重構方法的分類,指出各種重構方法使用重復代碼的情況,根據(jù)這些情況尋找程序中是否出現(xiàn)了對應的重復代碼。

    上述的方法各有其優(yōu)缺點,本文提出了一種基于文本的、結合詞法分析與語法分析的重復代碼識別算法,嘗試對現(xiàn)有的重復代碼查找算法進行改進。

    1 重復代碼查找算法的評估方法

    1.1 重復代碼的分類

    代碼段(Code Fragment)指代任意一段代碼行序列,在不同的重復代碼識別方法中代碼段一般也有著不同的粒度,如類定義、函數(shù)定義、邏輯控制語句等。重復代碼,又稱為克隆代碼,即指相同或相似的兩個及以上的代碼段。其中,一對相似的代碼段稱之為克隆對,兩個及以上的相似代碼段稱之為克隆群。

    在國內(nèi)外的研究中,普遍根據(jù)代碼段的文本相似性和功能相似性將重復代碼分成了四類[17-18]: (1)除空格、注釋、代碼布局之外都相同的代碼段;(2)除了對變量名、類型或函數(shù)名等進行重命名外,代碼片段在語法級別相似;(3)進行了增加、刪除、修改的代碼段;(4)功能相同,但句法上不同的代碼段。

    在一些研究中,將第1類稱為完全克隆,第2、3類稱為近似克?。╪ear-miss clone)[19],而第4類稱之為語義克隆(semantic clone)[20]。

    1.2 發(fā)現(xiàn)率與精確度

    為了對重復代碼識別方法進行評估,一些研究提出如下定義,用于評估重復代碼識別方法的有效性與實用性[21]。

    (1)在將重復代碼識別方法應用于具體的軟件系統(tǒng)時,將軟件系統(tǒng)中真實存在的重復代碼的集合稱之為真實克隆。真實克隆只能通過人工檢查來確定,且具有一定的主觀性。但它仍然是評估一個重復代碼識別方法的基礎。

    (2)通過某種重復代碼識別方法所檢測到的重復代碼的集合稱之為候選克隆。

    (3)既屬于候選克隆,又屬于真實克隆的,即為合理候選克隆。

    發(fā)現(xiàn)率和精確度是用來衡量重復代碼識別方法的主要指標,一個好的方法既要有較高的發(fā)現(xiàn)率也要有較高的精確度,在本文中,將使用這兩個指標來評估各種重復代碼識別方法。

    2 基于文本的重復代碼查找算法設計

    本算法在采用基于文本的重復代碼查找算法的基礎上,結合了詞法分析和語法分析等方法,以提高識別率和精確度。

    代碼之間以代碼行為單位進行比較,兩段代碼之間相同的行數(shù)超過所定閾值即可視為重復代碼。兩個代碼行之間通過字符串匹配判斷是否相同。

    本算法由以下三個步驟組成:

    (1)代碼標準化。移除源文件中的注釋、空白行和其他無效內(nèi)容,并對代碼中的某些Token進行處理以提高發(fā)現(xiàn)率。代碼標準化可以有效提高發(fā)現(xiàn)率,但對精確度有著一定的影響。

    (2)代碼比較。逐行對代碼文件進行比較,記錄兩個代碼片段間重復的行數(shù),結合所定閾值判斷兩個代碼片段是否為克隆對。

    (3)結果優(yōu)化。代碼比較之后的結果可能出現(xiàn)較大誤差,本算法通過抽象語法樹的比較等手段對結果進行過濾,在保證較高發(fā)現(xiàn)率的同時,一定程度上提高精確度。

    2.1 代碼標準化

    傳統(tǒng)的基于文本的重復代碼查找算法有著實現(xiàn)簡單,精確度高的特點,但是發(fā)現(xiàn)率卻很不理想,只對第1類克隆有著較高的發(fā)現(xiàn)率。其原因在于代碼在被復制的過程中,開發(fā)人員可能對代碼做出簡單的修改,例如對注釋、變量名、函數(shù)名進行修改、添加或刪除的操作,從而產(chǎn)生第2類、第3類克隆代碼。簡單的基于文本對比的重復代碼查找算法,只能識別完全相同的兩段文本,因此很難對第2類、第3類克隆代碼進行有效識別。

    代碼標準化可以有效改善上述問題,其作用有如下兩個:

    (1)降噪

    代碼標準化可以對代碼進行“降噪”,即去除對于代碼比較毫無意義且有干擾的元素。

    首先,注釋普遍存在于各種語言的代碼中;同時,開發(fā)人員通過多個換行分隔各段代碼,以提升代碼的可讀性;此外,不同的代碼具有不同縮進格式,而代碼結構層次的不同也會形成不同的縮進。在代碼比較的過程中,注釋和這些多余的換行、空格顯然是要進行消除的。例如,在降噪過程中將去除兩個及以上的連續(xù)空格,僅保留其中一個。

    其次,代碼的大小寫不同也會對代碼比較造成影響,因此在降噪進程中可以統(tǒng)一代碼的大小寫。

    除了注釋、多余換行、空格等干擾元素之外,開發(fā)人員的編程習慣也會對代碼格式造成影響,例如在賦值語句中等號兩邊使用一個空格間隔或者不使用空格,都于開發(fā)人員的代碼書寫習慣有關。因此,在降噪過程中需要去除等號、括號以及比較符等“間隔符”與其它元素之間的空格,以消除開發(fā)人員的代碼書寫習慣的影響。

    針對各種語言特性,可以設計相對應的降噪方法:對于Java語言,可去除意義性不強的聲明包package以及導入包語句import;對于C/C++語言,可以在降噪過程中去除“#include”等對于代碼意義影響不大的代碼行。

    (2)Token處理

    降噪處理可以去除對重復代碼有干擾的元素,對提高算法的發(fā)現(xiàn)率有一定的作用。但降噪處理只能提高對第2類克隆代碼的識別能力,對第3類克隆代碼識別效果的提升并不明顯。

    Token處理即對某些字符串(在代碼中可能是方法名,也可能是參數(shù)名)進行替換,根據(jù)規(guī)則全部替換為指定的Token值。例如,將所有變量名替換為字符“p”,將所有數(shù)字常量替換為數(shù)字0,字符串常量替換為字符串“s”。

    通過Token替換,該算法能夠有效識別經(jīng)過修改變量名、類型以及各種常量的重復代碼段,從而提升了算法對第3類克隆代碼的識別能力。

    在本算法中,Token處理可分為三種程度。

    (1)不進行任何Token處理,算法將直接對降噪后的代碼進行比較。

    (2)只對各種常量進行Token處理,將數(shù)字常量、字符串常量等替換為一個統(tǒng)一的常量。在本算法中,對字符串常量統(tǒng)一替換為字符串“s”,整數(shù)常量統(tǒng)一替換為整數(shù)“0”,實數(shù)常量統(tǒng)一為“0.0”。

    (3)在(2)的基礎上,對所有標識符進行統(tǒng)一的替換。即對類型、變量名、函數(shù)名等統(tǒng)一替換為p。需要指出的是,由于代碼并未進行語法分析,因此在詞法分析中,對象的方法名、屬性同樣會被識別為普通的標識符。如代碼“people.getName()”,經(jīng)過第三種程度的Token替換后會成為代碼“p.p()”。該情況的出現(xiàn)會造成大量的誤報,因此在第三種程度的代碼標準化中,需通過詞法分析將方法名、成員變量標識為不進行替換的Token。因此上文中的代碼“people.getName()”將替換為代碼“p.getName()”,從而在提高發(fā)現(xiàn)率的同時,避免大量的誤報。

    在本算法中,降噪和Token處理都是通過詞法分析來完成的,通過這個標準化的過程,能有效地提高本算法對于第2類克隆的發(fā)現(xiàn)率。

    2.2 代碼比較過程

    代碼經(jīng)過標準化處理后,將對其進行比較,并識別出重復代碼。本算法以代碼行為單位進行文本比較。

    該過程中有兩個重要閾值:重復代碼閾值和不匹配行閾值。

    (1)重復代碼閾值聲明了當兩段代碼之間有多少行代碼匹配時即可被視為重復代碼。該閾值對整個算法至關重要,尤其是代碼標準化過程會使得大量的代碼行在標準化之后成為了匹配的代碼行,因此這個閾值的設定會大幅地影響整個算法的發(fā)現(xiàn)率和精確度。

    (2)在第3類克隆中,代碼片段可能存在某一行或多行代碼進行了修改、增加、刪除操作。針對該情況,在代碼比較過程中設定一個不匹配行閾值,該閾值聲明了兩個重復代碼段之間所允許的不匹配行數(shù)的最大值。通過該閾值,使算法能夠發(fā)現(xiàn)部分第3類克隆。但是,如果將該閾值設定得過大,則會使算法的精確度降低,造成大量的誤報。

    在代碼行的比較過程中,如圖1所示,常見的代碼行匹配情況有三種:連續(xù)匹配、不連續(xù)匹配、錯位匹配。連續(xù)匹配是指兩段代碼段之間每一行都是完全匹配的,不連續(xù)匹配是指兩段代碼行之間有相同行數(shù)的不匹配現(xiàn)象,錯位匹配是指兩段代碼行之間有不匹配現(xiàn)象,但兩段代碼行之間不匹配的行數(shù)不相同。

    圖1 連續(xù)匹配、不連續(xù)匹配和錯位匹配示意圖

    需要指出的是,在本文所提出的算法中,并沒有檢測錯位匹配的重復代碼情況,因為實現(xiàn)錯位匹配檢測需要付出相當程度的時間復雜度,因此未對錯位匹配的情況進行檢測。而對于不連續(xù)匹配,不匹配行閾值即用于發(fā)現(xiàn)不連續(xù)匹配。

    2.3 基于語法樹匹配的結果優(yōu)化過程

    使用在本算法查找重復代碼的過程中,標準化過程、不匹配行閾值在提高發(fā)現(xiàn)率的同時,也會降低精確度,因此,本算法設計了一個基于抽象語法樹匹配的過程,用于去除查找結果中的非重復代碼段,以提高該算法的精確度。在該過程中,將兩段待比較的代碼轉(zhuǎn)換成為抽象語法樹,再比較兩棵樹的匹配程度,計算語法樹之間的相似度,過濾掉相似度較低的識別結果。

    3 算法驗證與結果分析

    在本章中將以本文提出的算法進行實驗,并對結果進行比較和分析,以判斷該算法是否有效,并分析各項參數(shù)對于發(fā)現(xiàn)率和精確度的影響。從上文對算法的描述可知,標準化程度、重復代碼閾值和不匹配行閾值是影響重復代碼查找結果的3個重要因素。本章也將研究這3個因素對于查找結果的影響。

    3.1 實驗數(shù)據(jù)集

    為了對該算法進行實驗,收集了一百個開源Java項目的源代碼作為實驗數(shù)據(jù)集。

    3.2 評價指標

    上文中提出了兩個用于評估重復代碼查找算法的指標:發(fā)現(xiàn)度和精確度。發(fā)現(xiàn)率是指合理候選克隆與真實克隆的比例,比例值越高說明發(fā)現(xiàn)克隆代碼的能力越強;精確度是指合理候選克隆與候選克隆的比例,比例值越高說明識別能力越準確。

    需要指出的是,在本次實驗中,發(fā)現(xiàn)度與精確度是無法進行精確衡量的,因為真實克隆代碼需要通過人工在實驗數(shù)據(jù)集中查找出來,具有極高的主觀性。因此只能先通過較為權威的克隆代碼識別工具找出某個小型項目中的候選克隆代碼,將該結果作為初步篩選,并在此基礎上人工查閱已被標記的克隆代碼片段的上下文代碼,補充遺漏的克隆代碼片段,得到最終的真是克隆代碼,以此算出發(fā)現(xiàn)率和準確率。

    3.3 參考集

    在本實驗中主要使用PMD的檢測結果作為對照集來檢驗本算法的檢測效果(發(fā)現(xiàn)率和準確率)。PMD是一種開源的分析Java代碼錯誤的工具。與其他分析工具不同的是,PMD通過靜態(tài)分析獲知代碼錯誤,即在不運行Java程序的情況下報告錯誤。PMD附帶了許多可以直接使用的規(guī)則,利用這些規(guī)則可以找出Java源程序的許多問題。此外,用戶還可以自己定義規(guī)則,檢查Java代碼是否符合某些特定的編碼規(guī)范。

    3.4 實驗過程與結果分析

    實驗挑選了兩個開源Java項目進行實驗:jManage和freemarker。對這兩個項目進行重復代碼查找。

    上文中提到標準化程度、重復代碼閾值和不匹配行閾值是3個本算法中重要的變量。由于作為參考集的PMD工具只有重復代碼閾值這一設置項,因此只將本算法中的標準化程度、不匹配行閾值作為變量進行實驗,重復代碼閾值設置為固定的常量。

    標準化程度可分為3種程度,用數(shù)字1-3表示。

    程度1表示不進行任何Token處理,算法將直接對降噪后的代碼進行比較。

    程度2只對各種常量進行Token處理,將數(shù)字常量、字符串常量等替換為一個統(tǒng)一的常量。在本算法中,對字符串常量統(tǒng)一替換為字符“s”,整數(shù)常量統(tǒng)一替換為整數(shù)“0”,實數(shù)常量統(tǒng)一為“0.0”。

    程度3是在程度2的基礎上,對所有標識符進行統(tǒng)一的替換。即對類型、變量名、函數(shù)名等統(tǒng)一替換為字符“p”。

    不匹配行閾值只使用0-3這個范圍,因為根據(jù)之前的觀測發(fā)現(xiàn)不匹配行閾值超過3會引起大量的誤報,因此不匹配行閾值是沒有必要超過3的。

    首先實驗了算法的發(fā)現(xiàn)率,對于jManage項目進行重復代碼查找的結果如表1,對freemarker項目進行重復代碼查找的結果如表2。

    表1 jManage項目中的PMD查找結果

    Tab.1 The detection result of PMD for jManage

    表2 jManage項目中的重復代碼查找結果

    Tab.2 The detection result of the proposed approach for jManage

    表3 freemarker項目中的PMD查找結果

    Tab.3 The detection result of PMD for freemarker

    表4 freemarker項目中的重復代碼查找結果

    Tab.4 The detection result of the proposed approach for freemarker

    根據(jù)實驗結果可以得出標準化程度、不匹配行閾值這兩個變量對于重復代碼查找的發(fā)現(xiàn)率和精確度的影響:

    不匹配行閾值一定的情況下,標準化程度越高,算法的發(fā)現(xiàn)率也就越高,但精確度也就隨之降低。

    證明代碼標準化在提高發(fā)現(xiàn)率的同時也導致了精確度的降低,當然在發(fā)現(xiàn)率本來就較高的情況上,再進行標準化對結果也沒有太大的影響。而在標準化程度一定的情況下,不匹配行閾值越高,同樣算法的發(fā)現(xiàn)率也就越高,但精確度也隨之下降。因此不匹配行閾值也在提高發(fā)現(xiàn)率的同時降低了精確度,而且不匹配行閾值的取值不應該過大,否則會造成大量的誤報。但是設置合適的不匹配行閾值,如將其設置為2,對查找第3類克隆是有一定的幫助的。

    可以看出,標準化程度、不匹配行閾值對于本算法是至關重要的兩個變量,在很大程度上可以影響算法的檢測結果。設置合適的標準化程度、不匹配行閾值對于重復代碼查找是相當重要的。freemarker項目重復代碼查找結果中,在標準化程度為2,不匹配行閾值為0的情況與標準化程度為3,不匹配行閾值為0的情況之間,精確率出現(xiàn)大幅度的下降。經(jīng)過人工審查發(fā)現(xiàn)大量相似的構造函數(shù)被識別為克隆代碼,而類似構造函數(shù)、Getter和Setter等特殊方法不適合被識別為克隆代碼。

    4 結語

    本文設計了一種基于文本的重復代碼查找方法,該方法在基于文本的方法的基礎上結合了詞法分析和語法分析,以進一步提升發(fā)現(xiàn)率和精確度。通過實驗發(fā)現(xiàn)該算法的發(fā)現(xiàn)率和精確度在實際項目中都有著不錯的表現(xiàn)。

    但該方法中的比較算法僅僅考慮了文件之間的兩兩比較,沒有考慮查找多個文件中共同的重復代碼,未來的工作將考慮對多個文件中的重復代碼進行查找。

    [1] 翁秀木. 一個通用的軟件質(zhì)量評估指標體系[J]. 軟件, 2015, 36(3): 59-63.

    [2] 印杰, 李千目. 軟件代碼漏洞的電子取證技術綜述[J]. 軟件, 2015, 36(12): 49-59.

    [3] 段明璐, 楊勛姮. 軟件故障樹算法建模的研究[J]. 軟件, 2018, 39(2): 66-74.

    [4] 楊勛姮, 段明璐. 軟件缺陷分析技術的研究[J]. 軟件, 2018, 39(2): 93-101.

    [5] BAKER B S. A program for identifying duplicated code[J]. Computing Science and Statistics, 1992, 24(1): 49-57.

    [6] 于冬琦, 吳毅堅, 彭鑫,等. 基于相似性度量的面向?qū)ο蟪绦蚍椒壙寺蓽y[J]. 電子學報, 2010, 38(2A): 174-181.

    [7] 于冬琦, 彭鑫, 趙文耘. 使用抽象語法樹和靜態(tài)分析的克隆代碼自動重構方法[J]. 小型微型計算機系統(tǒng), 2009, 30(9): 1752-1760.

    [8] 郭婧, 吳軍華. 基于程序依賴圖的克隆檢測及改進[J]. 計算機工程與設計, 2012, 33(2): 595-600.

    [9] Lingxiao Jing, Zhendong Su, Edwin Chiu. Context-Based Detection of Clone-Related Bugs[Z]. Proceedings of the 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE), 2007.

    [10] JOHNSON J H. Identifying redundancy in source code using fingerprints[C]. IBM Press, 1993: 171-183.

    [11] BAKER B S. On finding duplication and near-dulication in large software systems[C]. Washington DC: IEEE Computer Society, 1995: 86-95.

    [12] BAXTER I, YAHIN A, MOURA L, et al. Clone detection using abstract syntax trees[C]. Washington DC: IEEE Computer Society, 1998: 368-377.

    [13] MAYRAND J, LEBLANC C, MERLO E. Experiment on the automatic detection of function clones in a software system using metrics[C]. Washington DC: IEEE Computer Society, 1996: 244-253.

    [14] Ian J. Davis, Michael W. Godfrey. From Whence It Came: Detecting Source Code Clones by Analyzing Assembler[Z]. Reverse Engineering (WCRE), 2010 17th Working Conference on, 2010.

    [15] Philipp Schugerl. Scalable clone detection using description logic--IWSC '11 Proceedings of the 5th International Workshop on Software Clones [C]. ACM: New York, 2011: 47-53.

    [16] Georges Golomingi Koni-N’Sapu. A scenario based approach for refactoring duplicated code in object oriented systems [D]. Switzerland: University of Bern, 2001.

    [17] ROY C K, CORDY J R, KOSCHKE R. Comparison and evaluation of code clone detection techniques and tools: a qualitative approach[J]. Science of Computer Programming, 2009, 74(7): 470-495.

    [18] 史慶慶, 孟繁軍, 張麗萍, 劉東升. 克隆代碼技術研究綜述[J]. 計算機應用研究, 2013, 30(6): 1617-1623.

    [19] ZIBRAN F M, SAHA R, ASADUZZAMAN M, et al. Analyzing and forecasting near-miss clones in evolving software: an empirical study--Proc of the 16th IEEE International Conference on Engineering of Complex Computer Systems[C]. Washington DC: IEEE Computer Society, 2011: 295-304.

    [20] GABEL M, JIANG Ling-xiao, SU Zhen-dong. Scalable detection of semantic clone[C]. New York: ACM Press, 2008: 321-330.

    [21] Stéphane Ducasse, Oscar Nierstrasz, Matthias Rieger. On the effectiveness of clone detection by string matching[J]. Journal of Software Maintenance and Evolution: Research and Practice, 2006, 18: 27-58.

    An Improved Approach for Automatic Detection of Duplicated Code Based on Text

    LIU Wei1,2, BIN Hang-fei2, HU Zhi-gang2

    (1. School of Informatics, Hunan University of Chinese Medicine, Changsha 410208, Hunan, China; 2. School of Software, Central South University, Changsha 410075, Hunan, China)

    In the recent years, detection and automatic refactoring of code smell is one of the focus topic in software engineering, and duplicated code is a kind of common code smell. Based on the duplicated code recognition method of text, the false positives can be reduced through the lexical analysis to compare the source code after handling the specific token and through the comparison with the abstract syntax tree to filter the results. The test results show that the method has better detection effect of duplicated code. This has great significance in the study of automatic detection algorithm of duplicated code, and there is also wild application in software maintenance and software quality.

    Duplicated code; Code smell; Automatic detection; Abstract syntax tree

    TP311.5

    A

    10.3969/j.issn.1003-6970.2018.10.015

    劉偉,男,副教授,高級工程師,博士,研究方向:軟件工程和數(shù)據(jù)挖掘;賓航飛,男,碩士研究生,研究方向:軟件工程;胡志剛,男,教授,博士生導師,博士,研究方向:軟件工程、并行計算和云計算。

    劉偉,賓航飛,胡志剛. 一種改進的基于文本的重復代碼自動識別方法[J]. 軟件,2018,39(10):68-73

    猜你喜歡
    常量精確度代碼
    科學照亮世界
    ——卡文迪什測定萬有引力常量
    研究核心素養(yǎng)呈現(xiàn)特征提高復習教學精確度
    “硬核”定位系統(tǒng)入駐兗礦集團,精確度以厘米計算
    創(chuàng)世代碼
    動漫星空(2018年11期)2018-10-26 02:24:02
    創(chuàng)世代碼
    動漫星空(2018年2期)2018-10-26 02:11:00
    創(chuàng)世代碼
    動漫星空(2018年9期)2018-10-26 01:16:48
    創(chuàng)世代碼
    動漫星空(2018年5期)2018-10-26 01:15:02
    低氧低分壓環(huán)境下泡塑吸附火焰原子吸收光譜法測定常量金
    西藏科技(2015年1期)2015-09-26 12:09:20
    論常量函數(shù)的充分必要條件
    近似數(shù)1.8和1.80相同嗎
    国产精品一二三区在线看| 日本爱情动作片www.在线观看| 久久中文看片网| 亚洲精品日韩av片在线观看| 欧美日韩一区二区视频在线观看视频在线 | 我要搜黄色片| 在线免费十八禁| 欧美成人a在线观看| 日韩强制内射视频| 中国国产av一级| 日韩强制内射视频| 亚洲精品国产av成人精品| 午夜爱爱视频在线播放| 精品日产1卡2卡| 级片在线观看| 久久久久久久久久成人| 欧美日本亚洲视频在线播放| avwww免费| 国产蜜桃级精品一区二区三区| 五月伊人婷婷丁香| 大型黄色视频在线免费观看| 久久久久久久久久黄片| 日本免费a在线| 最后的刺客免费高清国语| 毛片一级片免费看久久久久| 亚洲欧美中文字幕日韩二区| 久久久久性生活片| 亚洲丝袜综合中文字幕| 黄色配什么色好看| 久久久久久九九精品二区国产| 日产精品乱码卡一卡2卡三| 欧美bdsm另类| 久久久久久伊人网av| 91在线精品国自产拍蜜月| 亚洲va在线va天堂va国产| 乱系列少妇在线播放| 干丝袜人妻中文字幕| 亚洲不卡免费看| 精品久久久久久久久久免费视频| 一级毛片aaaaaa免费看小| 亚洲欧美日韩高清在线视频| 色综合色国产| 欧美+亚洲+日韩+国产| 熟女电影av网| 男女啪啪激烈高潮av片| 午夜a级毛片| 亚洲18禁久久av| 婷婷六月久久综合丁香| 日日干狠狠操夜夜爽| 禁无遮挡网站| 色视频www国产| 日本三级黄在线观看| 美女被艹到高潮喷水动态| 黄色欧美视频在线观看| 12—13女人毛片做爰片一| av在线观看视频网站免费| 国产精品久久久久久精品电影| 国产黄a三级三级三级人| 国产黄色小视频在线观看| 一夜夜www| 秋霞在线观看毛片| 国产在线精品亚洲第一网站| 亚洲性久久影院| 成人亚洲欧美一区二区av| 免费观看在线日韩| 91麻豆精品激情在线观看国产| 欧美精品国产亚洲| 国产精品三级大全| 一本久久中文字幕| 亚洲一区高清亚洲精品| 国产 一区 欧美 日韩| 国产高清不卡午夜福利| 3wmmmm亚洲av在线观看| 亚洲最大成人av| 精品久久久久久久末码| 国产精品永久免费网站| 久久久久国产网址| 国产av在哪里看| 我的女老师完整版在线观看| 97在线视频观看| 成人性生交大片免费视频hd| 亚洲不卡免费看| 在线播放无遮挡| av.在线天堂| av在线观看视频网站免费| 国产一区二区三区在线臀色熟女| 国产亚洲精品久久久com| 性欧美人与动物交配| 久久草成人影院| 国产午夜精品论理片| 国产av在哪里看| 亚洲av免费在线观看| 日本免费a在线| 日韩亚洲欧美综合| 国产亚洲av片在线观看秒播厂 | 国产亚洲av片在线观看秒播厂 | 午夜精品国产一区二区电影 | 国产精品久久久久久精品电影小说 | 国产 一区精品| 精品一区二区三区人妻视频| 搞女人的毛片| 国产精品不卡视频一区二区| 亚洲人成网站高清观看| 精品久久久久久成人av| 秋霞在线观看毛片| 青春草视频在线免费观看| 亚洲色图av天堂| 亚洲精品乱码久久久久久按摩| 国产精品,欧美在线| 噜噜噜噜噜久久久久久91| 久久人人爽人人片av| 尤物成人国产欧美一区二区三区| 九草在线视频观看| 久久国产乱子免费精品| 黄色视频,在线免费观看| 偷拍熟女少妇极品色| 青春草国产在线视频 | 一个人看视频在线观看www免费| 国产午夜福利久久久久久| 国产 一区精品| 婷婷色综合大香蕉| 一级毛片久久久久久久久女| 在线免费十八禁| 亚洲精品456在线播放app| 少妇熟女aⅴ在线视频| 日本免费一区二区三区高清不卡| 色吧在线观看| 一边摸一边抽搐一进一小说| 蜜桃亚洲精品一区二区三区| 黄色欧美视频在线观看| 日本-黄色视频高清免费观看| 哪个播放器可以免费观看大片| a级毛片免费高清观看在线播放| 99热全是精品| 成人一区二区视频在线观看| 熟女电影av网| 99久久精品热视频| 免费观看的影片在线观看| 日韩一区二区视频免费看| 亚洲成人av在线免费| 深夜a级毛片| 亚洲欧洲日产国产| 麻豆国产av国片精品| 亚洲最大成人手机在线| 欧美日韩国产亚洲二区| 久久久久久九九精品二区国产| 在线免费观看的www视频| 99国产精品一区二区蜜桃av| 色视频www国产| 亚洲人成网站高清观看| 九九在线视频观看精品| 久久婷婷人人爽人人干人人爱| 18禁在线播放成人免费| 成人鲁丝片一二三区免费| 亚洲国产精品合色在线| 91av网一区二区| 国产一区二区三区在线臀色熟女| 日韩 亚洲 欧美在线| 国产人妻一区二区三区在| 嘟嘟电影网在线观看| 亚洲欧美成人精品一区二区| 久久久久久九九精品二区国产| 在线免费观看的www视频| 亚洲欧美日韩卡通动漫| av女优亚洲男人天堂| 国产成人午夜福利电影在线观看| 边亲边吃奶的免费视频| 国产精品免费一区二区三区在线| 成人无遮挡网站| 如何舔出高潮| 亚洲国产日韩欧美精品在线观看| 国产精品av视频在线免费观看| 欧美一区二区亚洲| 国产亚洲欧美98| 欧美变态另类bdsm刘玥| 午夜福利高清视频| 亚洲精品影视一区二区三区av| 国产单亲对白刺激| 国产伦理片在线播放av一区 | 一区二区三区四区激情视频 | a级毛片免费高清观看在线播放| 能在线免费看毛片的网站| 最近的中文字幕免费完整| 国产精品久久电影中文字幕| 级片在线观看| 国产午夜福利久久久久久| 国产精品一及| 老司机影院成人| 晚上一个人看的免费电影| 久久久久久久久中文| 97人妻精品一区二区三区麻豆| 中文字幕熟女人妻在线| 久久精品国产亚洲网站| 亚洲欧美成人综合另类久久久 | 成年女人看的毛片在线观看| 九九久久精品国产亚洲av麻豆| 国产视频首页在线观看| 午夜激情福利司机影院| 高清午夜精品一区二区三区 | 午夜爱爱视频在线播放| 欧美一级a爱片免费观看看| 精品久久久噜噜| 国产精品乱码一区二三区的特点| 岛国毛片在线播放| 亚洲成a人片在线一区二区| 搡老妇女老女人老熟妇| 国产一区二区激情短视频| 男女视频在线观看网站免费| 精品欧美国产一区二区三| 国产69精品久久久久777片| 在线播放国产精品三级| 免费在线观看成人毛片| 一进一出抽搐动态| 99热6这里只有精品| 人妻系列 视频| 欧美另类亚洲清纯唯美| 日韩视频在线欧美| 国产免费男女视频| 少妇高潮的动态图| 精品一区二区三区人妻视频| 国产精品一区二区性色av| 国产真实伦视频高清在线观看| 久久精品夜夜夜夜夜久久蜜豆| 亚洲乱码一区二区免费版| 长腿黑丝高跟| 高清日韩中文字幕在线| 99久久精品热视频| 亚洲成人中文字幕在线播放| 久久精品人妻少妇| 久久人人精品亚洲av| 久久国产乱子免费精品| 久久99热这里只有精品18| 亚洲av.av天堂| 国产精品人妻久久久影院| 99久久中文字幕三级久久日本| 国产蜜桃级精品一区二区三区| 最新中文字幕久久久久| av天堂在线播放| 精品久久久久久久久亚洲| 久久婷婷人人爽人人干人人爱| 国产高清视频在线观看网站| 国产视频首页在线观看| 97热精品久久久久久| 91在线精品国自产拍蜜月| 亚洲经典国产精华液单| 国产黄片美女视频| 熟女电影av网| 亚洲激情五月婷婷啪啪| 久久这里只有精品中国| 国产精品一区二区三区四区久久| 精品久久国产蜜桃| 欧美性感艳星| 高清毛片免费观看视频网站| 乱系列少妇在线播放| 欧美高清性xxxxhd video| 真实男女啪啪啪动态图| 国产伦理片在线播放av一区 | 最近2019中文字幕mv第一页| 日韩亚洲欧美综合| 在现免费观看毛片| 久久久色成人| 日本免费a在线| 青青草视频在线视频观看| 日韩欧美精品免费久久| 一本久久精品| 男人的好看免费观看在线视频| 在线免费观看不下载黄p国产| 亚洲久久久久久中文字幕| 极品教师在线视频| 国产一级毛片在线| 男人狂女人下面高潮的视频| 国产大屁股一区二区在线视频| 丝袜喷水一区| 日韩欧美在线乱码| 国产免费男女视频| 男的添女的下面高潮视频| 国产三级在线视频| 美女黄网站色视频| 久久久精品94久久精品| 嫩草影院新地址| 午夜精品在线福利| 狂野欧美白嫩少妇大欣赏| 午夜福利成人在线免费观看| 精品久久久久久成人av| 中文字幕av在线有码专区| 黄色一级大片看看| 在线a可以看的网站| 2021天堂中文幕一二区在线观| 99热网站在线观看| 18禁在线无遮挡免费观看视频| 国模一区二区三区四区视频| 国产在视频线在精品| 国产黄片美女视频| 热99在线观看视频| 女人十人毛片免费观看3o分钟| 久久精品国产99精品国产亚洲性色| 亚洲性久久影院| 亚洲第一区二区三区不卡| 国产精品一区二区三区四区久久| 国模一区二区三区四区视频| 高清在线视频一区二区三区 | 久久久久久久久久成人| av福利片在线观看| 欧美+亚洲+日韩+国产| 国产国拍精品亚洲av在线观看| 精品一区二区三区视频在线| 国产精品久久久久久精品电影小说 | 欧美日韩乱码在线| 男人和女人高潮做爰伦理| 人妻久久中文字幕网| 国产精品不卡视频一区二区| 看十八女毛片水多多多| 边亲边吃奶的免费视频| 久久99热这里只有精品18| 日本av手机在线免费观看| 亚洲av熟女| 给我免费播放毛片高清在线观看| 男人狂女人下面高潮的视频| 亚洲欧美成人精品一区二区| 亚洲成人久久性| avwww免费| 少妇裸体淫交视频免费看高清| 午夜老司机福利剧场| 国产美女午夜福利| 午夜福利成人在线免费观看| 国产探花极品一区二区| 国产三级在线视频| 国产一区二区亚洲精品在线观看| 午夜福利在线观看吧| 国产精品蜜桃在线观看 | av在线播放精品| 亚洲最大成人手机在线| 成人鲁丝片一二三区免费| 在线播放国产精品三级| 免费看光身美女| 国产爱豆传媒在线观看| 男女下面进入的视频免费午夜| 久久久久久久久久黄片| 少妇猛男粗大的猛烈进出视频 | 老师上课跳d突然被开到最大视频| 麻豆一二三区av精品| 悠悠久久av| 97超视频在线观看视频| 日日干狠狠操夜夜爽| 女人被狂操c到高潮| 亚洲国产精品久久男人天堂| 亚洲人成网站在线播| 亚洲国产精品成人久久小说 | 精品熟女少妇av免费看| 男人舔女人下体高潮全视频| a级毛片a级免费在线| 午夜老司机福利剧场| 精品人妻一区二区三区麻豆| 亚洲电影在线观看av| 免费电影在线观看免费观看| 亚洲欧美日韩卡通动漫| 99热6这里只有精品| 又黄又爽又刺激的免费视频.| 久久鲁丝午夜福利片| 欧美日韩一区二区视频在线观看视频在线 | 欧美高清性xxxxhd video| 国产精品不卡视频一区二区| 99国产极品粉嫩在线观看| 爱豆传媒免费全集在线观看| av视频在线观看入口| 人妻系列 视频| 小蜜桃在线观看免费完整版高清| 在线a可以看的网站| 此物有八面人人有两片| 波多野结衣高清作品| 六月丁香七月| 国产v大片淫在线免费观看| 在线国产一区二区在线| 国产爱豆传媒在线观看| 国产私拍福利视频在线观看| 99久久无色码亚洲精品果冻| 午夜激情福利司机影院| 99精品在免费线老司机午夜| 国产免费男女视频| 成人毛片a级毛片在线播放| 国产一区二区激情短视频| 一本久久中文字幕| 观看免费一级毛片| 黄色日韩在线| 亚洲美女视频黄频| 久久精品国产清高在天天线| 精品久久国产蜜桃| 国产淫片久久久久久久久| 又黄又爽又刺激的免费视频.| 国产成人精品久久久久久| 哪个播放器可以免费观看大片| 亚洲图色成人| 一个人看的www免费观看视频| 国产精品久久久久久亚洲av鲁大| 欧美日韩乱码在线| 亚洲一区高清亚洲精品| 欧美变态另类bdsm刘玥| 国产精品综合久久久久久久免费| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 青春草视频在线免费观看| 精品不卡国产一区二区三区| 亚洲av男天堂| a级毛片a级免费在线| 亚洲高清免费不卡视频| 日本三级黄在线观看| 欧美人与善性xxx| 国产精品久久久久久久电影| 亚洲精品成人久久久久久| www日本黄色视频网| 成年版毛片免费区| 国产精品无大码| 亚洲最大成人av| 久久99热6这里只有精品| 熟妇人妻久久中文字幕3abv| 午夜福利在线在线| 亚洲精品粉嫩美女一区| 欧美xxxx性猛交bbbb| 天堂网av新在线| 小说图片视频综合网站| eeuss影院久久| 成人午夜高清在线视频| 啦啦啦韩国在线观看视频| 国产伦精品一区二区三区视频9| 在线免费十八禁| 亚洲中文字幕日韩| 91午夜精品亚洲一区二区三区| 午夜福利在线在线| 最近2019中文字幕mv第一页| 一进一出抽搐gif免费好疼| 日本欧美国产在线视频| 一个人看的www免费观看视频| 一区二区三区四区激情视频 | 哪个播放器可以免费观看大片| 精品人妻熟女av久视频| 亚洲三级黄色毛片| 2021天堂中文幕一二区在线观| 久久综合国产亚洲精品| 国产 一区 欧美 日韩| 大香蕉久久网| 99热网站在线观看| 日韩 亚洲 欧美在线| 国产精品不卡视频一区二区| 欧美精品一区二区大全| 亚洲av免费在线观看| 国产片特级美女逼逼视频| 亚洲国产日韩欧美精品在线观看| 深夜a级毛片| 亚洲欧美清纯卡通| 国产黄片美女视频| 亚洲成人av在线免费| 亚州av有码| 51国产日韩欧美| 国产在线男女| 国产成人精品久久久久久| 国产一区二区三区在线臀色熟女| 蜜桃亚洲精品一区二区三区| 中文亚洲av片在线观看爽| 在线免费观看的www视频| 久久久国产成人免费| 成人高潮视频无遮挡免费网站| 亚洲欧洲国产日韩| 国内精品宾馆在线| 国产伦精品一区二区三区四那| 成人毛片a级毛片在线播放| 丰满人妻一区二区三区视频av| 麻豆成人午夜福利视频| 国产午夜精品论理片| 婷婷六月久久综合丁香| 久久国内精品自在自线图片| 亚洲丝袜综合中文字幕| 只有这里有精品99| 日日干狠狠操夜夜爽| 国产中年淑女户外野战色| 久久久欧美国产精品| 精品人妻视频免费看| 长腿黑丝高跟| 国产69精品久久久久777片| 亚洲无线观看免费| 美女大奶头视频| 好男人视频免费观看在线| 国产探花在线观看一区二区| 久久久午夜欧美精品| 亚洲国产精品成人综合色| 国产乱人偷精品视频| 在线a可以看的网站| 久久久久久伊人网av| 成人午夜高清在线视频| 亚洲人成网站高清观看| 国产不卡一卡二| 国模一区二区三区四区视频| 久久久久久久久久成人| 六月丁香七月| 白带黄色成豆腐渣| 日本爱情动作片www.在线观看| 18+在线观看网站| 五月玫瑰六月丁香| 十八禁国产超污无遮挡网站| 国产一区二区在线av高清观看| 国产精品久久电影中文字幕| 日韩av不卡免费在线播放| 好男人在线观看高清免费视频| 在线天堂最新版资源| 亚洲精品久久国产高清桃花| 国产成人午夜福利电影在线观看| 久久婷婷人人爽人人干人人爱| 久久鲁丝午夜福利片| 国产蜜桃级精品一区二区三区| 精品一区二区三区视频在线| 亚洲精华国产精华液的使用体验 | 一进一出抽搐gif免费好疼| 亚洲av第一区精品v没综合| 中文字幕人妻熟人妻熟丝袜美| 精品一区二区三区人妻视频| 午夜亚洲福利在线播放| 九九爱精品视频在线观看| 一进一出抽搐gif免费好疼| 一个人观看的视频www高清免费观看| 欧美一级a爱片免费观看看| 亚洲国产精品sss在线观看| 国产成人影院久久av| 国产精品人妻久久久久久| 高清日韩中文字幕在线| 国产精品久久久久久精品电影小说 | 美女高潮的动态| 欧美激情国产日韩精品一区| 精品午夜福利在线看| 麻豆av噜噜一区二区三区| 精品熟女少妇av免费看| 欧美日韩乱码在线| 黄色欧美视频在线观看| 五月伊人婷婷丁香| 国产黄色视频一区二区在线观看 | 国产精品国产三级国产av玫瑰| 啦啦啦啦在线视频资源| 12—13女人毛片做爰片一| 男女视频在线观看网站免费| 久久久欧美国产精品| 爱豆传媒免费全集在线观看| 亚洲av不卡在线观看| 欧美精品一区二区大全| 美女内射精品一级片tv| 欧美日韩国产亚洲二区| 九九久久精品国产亚洲av麻豆| 亚洲国产色片| 三级经典国产精品| АⅤ资源中文在线天堂| 午夜精品国产一区二区电影 | 精品午夜福利在线看| 欧美丝袜亚洲另类| 国语自产精品视频在线第100页| 九九久久精品国产亚洲av麻豆| 中国美女看黄片| 国产伦精品一区二区三区四那| 国产精品福利在线免费观看| 搡老妇女老女人老熟妇| 美女高潮的动态| 欧美日韩在线观看h| 干丝袜人妻中文字幕| 黄片无遮挡物在线观看| 亚洲av电影不卡..在线观看| 免费av观看视频| 欧美日韩精品成人综合77777| 国产老妇伦熟女老妇高清| 全区人妻精品视频| 亚洲最大成人手机在线| 欧美精品一区二区大全| 一级黄片播放器| 久久精品91蜜桃| av在线播放精品| 黄色配什么色好看| 久久久久九九精品影院| 人妻夜夜爽99麻豆av| 最近2019中文字幕mv第一页| 久久人人精品亚洲av| 欧美极品一区二区三区四区| 美女黄网站色视频| 亚洲人成网站在线观看播放| 69人妻影院| 小说图片视频综合网站| 国产淫片久久久久久久久| 日日啪夜夜撸| 一卡2卡三卡四卡精品乱码亚洲| 日韩中字成人| 嫩草影院新地址| 青春草视频在线免费观看| 一区二区三区高清视频在线| 一级黄片播放器| 亚洲国产精品sss在线观看| 高清毛片免费看| 五月玫瑰六月丁香| 赤兔流量卡办理| 一级毛片久久久久久久久女| 天天一区二区日本电影三级| 91久久精品国产一区二区成人| 人人妻人人澡人人爽人人夜夜 | 久久精品国产亚洲av天美| 国产成人91sexporn| 免费人成在线观看视频色| 激情 狠狠 欧美| 久久精品国产亚洲av涩爱 | 看十八女毛片水多多多| 男插女下体视频免费在线播放| 天天躁夜夜躁狠狠久久av| 欧美3d第一页| 久久这里只有精品中国| 午夜精品一区二区三区免费看| 国产精品爽爽va在线观看网站| 亚洲国产精品合色在线| 亚洲精品国产av成人精品| 亚洲精品自拍成人| 女的被弄到高潮叫床怎么办| 日日撸夜夜添| 波多野结衣巨乳人妻| 亚洲av第一区精品v没综合| 成人毛片a级毛片在线播放|