陳桌 張麗萍 王歡 張久杰 王春暉
摘要:針對Type3克隆代碼映射方法少且效率低等問題,提出了一種基于改進(jìn)向量空間模型(VSM)的映射方法。該方法將改進(jìn)的VSM引入到克隆代碼分析中,從而得到一種可有效映射Type1、Type2以及Type3克隆代碼的克隆群映射方法。首先,將克隆群文檔預(yù)處理得到去除無用詞的代碼文檔,同時提取克隆群文檔的文件名、函數(shù)名等特征項;其次,提取并構(gòu)建克隆群詞頻向量空間,利用余弦算法計算出克隆群相似度;然后,通過克隆群相似度和特征項的匹配構(gòu)建克隆群映射,最終得到克隆群映射結(jié)果。對5款開源軟件進(jìn)行實驗并人工驗證,所提方法能在低時耗的前提下,保證查全率和查準(zhǔn)率均不低于96.1%和97.1%。實驗結(jié)果表明了所提方法的可行性,為后期軟件演化分析提供數(shù)據(jù)支撐。
關(guān)鍵詞:
克隆代碼;克隆群映射;向量空間模型;特征項;詞頻
中圖分類號: TP311.5 文獻(xiàn)標(biāo)志碼:A
0引言
在軟件開發(fā)和維護(hù)過程中,開發(fā)人員經(jīng)常采用復(fù)制粘貼的方式修改代碼,導(dǎo)致重復(fù)的代碼片段出現(xiàn),即克隆代碼[1]。以前的研究[2]已經(jīng)表明,一個軟件系統(tǒng)中會有9%~15%的克隆代碼,有時甚至高達(dá)50%以上,相同或相似的代碼會增加軟件的維護(hù)費用。例如,如果一個bug在代碼片段中被檢測出來,所有和它相似的片段都應(yīng)該被調(diào)查,檢查相同的錯誤,加強或調(diào)整這些代碼。所以對系統(tǒng)版本中的克隆進(jìn)行追蹤非常有意義。
相鄰版本間的克隆群映射是研究克隆代碼演化[3]工作的關(guān)鍵步驟,克隆演化研究關(guān)注的是一段克隆代碼在軟件多個版本中的變化情況,而克隆群映射是整個演化過程的紐帶。本文提出的克隆群映射方法是根據(jù)自然語言領(lǐng)域中計算文章相似度的向量空間模型(Vector Space Model, VSM)改進(jìn)的。向量空間模型[4]就是把對文本內(nèi)容的處理簡化為向量空間中的向量運算,并且以空間上的相似度表達(dá)文本的相似度,直觀易懂。當(dāng)文檔被表示為文檔空間的向量,就可以通過計算向量之間的相似性來度量文檔間的相似性。
在克隆代碼方面,改進(jìn)的向量空間模型的基本思想是把每個版本中的克隆群簡化為以特征項(關(guān)鍵詞)的權(quán)重為分量的N維向量,結(jié)果用十分簡單的向量表示,使得模型具備了可計算性,有效衡量克隆群之間的相似性,并建立版本間的映射。
1相關(guān)工作
1.1克隆定義與分類
克隆代碼的定義目前廣受采納的是將具有相似語法及語義特征[5]的代碼段稱為克隆代碼。系統(tǒng)同一版本中的兩段相似代碼片段稱為克隆對。兩個或多個相似代碼片段組成一個克隆群。追蹤從前一版本到當(dāng)前版本克隆群的變化過程稱為克隆群映射。現(xiàn)有研究中,克隆主要有以下兩種分類方法[6]:一是相似程度,二是代碼段的粒度。按源代碼文本相似性將克隆分為Type1型至Type4型克隆(定義見表1),其中Type1至Type3體現(xiàn)了語法上的相似程度,Type4體現(xiàn)了語義上的相似程度。按克隆關(guān)系中代碼段的粒度分為文件、塊、函數(shù)、類及語句等類型。
1.2克隆映射
克隆映射(Clone mapping)是對軟件版本間的兩個克隆建立映射關(guān)系,其映射條件是具有映射關(guān)系的兩個克隆具有同源性。如何計算這些相似關(guān)系,并找出最大相似的克隆實例對它們建立映射關(guān)系,是克隆映射過程需要解決的問題。
目前構(gòu)建克隆映射的方法主要有7類[6]。
1)先檢測軟件第一個版本中的克隆,然后根據(jù)并發(fā)版本系統(tǒng)(Concurrent Version System, CVS)代碼庫中提供的修改日志,計算版本間的變化,最終得到映射關(guān)系[7]。由于以第一個版本中的克隆為映射源,因而無法研究在后期版本中引入的克隆。
2)檢測所有版本中的克隆,然后基于文本相似性及位置關(guān)系追溯映射[8-9]。此方法適用于多種不同的克隆演化研究,但時間復(fù)雜度高,且映射的最小閾值是經(jīng)驗值,易受克隆中大變化的影響。
3)對所有版本進(jìn)行克隆檢測,將檢測到的克隆代碼抽象成克隆區(qū)域描述符(Clone Region Descriptor, CRD),然后在不同版本中跟蹤CRD,通過檢測CRD中的文本區(qū)別構(gòu)建映射關(guān)系[10]。此方法映射的建立不受克隆位置信息的影響,易實現(xiàn)克隆的一致修改,但映射誤報率偏高。
4)使用增量的算法將克隆檢測與映射結(jié)合在一起[11]。該方法時間復(fù)雜度低,適合處理給定版本的軟件,但添加新版本時整個檢測與映射需重新執(zhí)行,空間復(fù)雜度高。
5)先映射相鄰版本間的函數(shù),在此基礎(chǔ)上實現(xiàn)克隆映射[12]。該方法減少了運行時間,但易受重載函數(shù)與覆蓋的函數(shù)影響。
6)利用源代碼的文本和結(jié)構(gòu)信息,將映射問題由高維的代碼空間轉(zhuǎn)化到低維的主題空間[13]上,通過映射主題來準(zhǔn)確地構(gòu)建相鄰版本克隆群的映射關(guān)系,但沒有考慮每個主題詞所占的整體比例。
7)先將克隆群源代碼Token化[14],得到克隆群的Token序列,然后比較其Token串之間的相似度,并最終得到克隆群的映射關(guān)系,但無法準(zhǔn)確映射Type3類型的克隆代碼,且演化過程中文件被重命名,可能無法準(zhǔn)確追蹤。
1.3向量空間模型
向量空間模型(VSM)是由Salton等[15]于20世紀(jì)年代提出的一種文本表示模型,并應(yīng)用于文本檢索系統(tǒng)。其基本思想就是將文本文檔以關(guān)鍵詞向量的形式表示,每個文本文檔可以表示成一個關(guān)鍵詞的特征向量,再計算得到關(guān)鍵詞的權(quán)重向量;最后計算權(quán)重向量中間的余弦相似度,并返回結(jié)果。
權(quán)重向量為:V(d)=(t1,w1(d);t2,w2(d);…;tn,wn(d)),其中:V(d)是文檔d的向量表示,ti表示文檔中的特征項,wi(d)表示特征項ti在文檔d中的權(quán)值,ti在文檔d中出現(xiàn)的頻率,即wi(d)=ψ(tfi(d))。
計算方法中每一個特征項的權(quán)重取決于兩個元素:特征項ti在文檔d中的詞頻(Term Frequency, TF)和在整個文檔集的逆向文件頻率(Inverse Document Frequency, IDF)。信息檢索中最常用到權(quán)重計算方法是TFIDF(Term FrequencyInverse Document Frequency)函數(shù),此計算公式為:
ψ=tfi(d)×lb (N/ni)(1)
其中:N表示原文檔的數(shù)目,ni表示含有詞條ti的所有文檔的數(shù)目。計算公式:
wi(d)=tfi(d) lb (N/ni+0.1)∑ni=1(tfi(d))2×lb2(N/ni+0.1)(2)log的底是多少?是2吧?那么縮寫為lb?其上面的2是上標(biāo)嗎?請明確。
一方面,在整個文檔集中包含文檔中某一詞的數(shù)量越多,則說明其重要程度代表性越低,其重要程度也就越小;另一方面,某一詞在文檔中出現(xiàn)的頻率越高,則說明其重要程度的代表性越強,其重要程度也就越大。一種常見的相似度測量是著名的余弦測量,當(dāng)文檔向量與查詢向量被表示成向量時,它決定了兩者之間的角度,如式(3):
Sim(di,dj)=cos θ=[∑nk=1ωk(di)×ωk(dj)]/(∑ni=1ω2k(di))(∑nj=1ω2k(dj))(3)
特征項的權(quán)重被確定以后,需要一個排名函數(shù)來測量查詢和文檔向量之間的相似度。一個文檔Di和一個查詢Q之間的相似度定義為:
1.4改進(jìn)向量空間模型
基于TFIDF算法思想,本文將自然語言領(lǐng)域中的向量空間模型應(yīng)用于代碼克隆領(lǐng)域,提出了一種新的克隆群映射方法。然而現(xiàn)有的向量空間模型并不完全適用于克隆代碼,TFIDF的核心思想為:某一特征項權(quán)重的高低依據(jù)的是在文檔中出現(xiàn)的頻率,出現(xiàn)頻率越高,并且包含此項的文檔數(shù)越少,表示其權(quán)重越高,關(guān)聯(lián)程度更強,但這些僅僅是經(jīng)驗公式,并不能真實反映出每個特征項的重要程度。這種思想并沒有考慮每一個特征項的整體比例,所以在確定每一個特征項權(quán)重時存在缺陷。另外,和形式語言不同,代碼文檔中的詞在整個文檔集中的出現(xiàn)比例并不能反映其重要程度,所以IDF的計算在軟件代碼文檔中并不適用,因此在代碼克隆領(lǐng)域中,須引入其他能表示克隆代碼重要程度的度量值。
基于向量空間模型的思想,利用TF概念以及代碼中的文件名、函數(shù)名等特征項,來表征克隆代碼的相似性。一方面,首先通過表示一個詞出現(xiàn)在文檔中的次數(shù),統(tǒng)計詞頻建立詞頻向量,然后對其進(jìn)行規(guī)范化,最終利用cosine定理得到兩個權(quán)重向量的相似度;另一方面,利用文件名以及函數(shù)名等特征項來匹配代碼片段的相似性權(quán)重。
2基于改進(jìn)向量空間模型的克隆群映射方法
2.1算法框架
本文使用的是改進(jìn)的向量空間模型克隆群映射方法,從檢測結(jié)果中提取克隆群文檔,再從克隆群文檔中抽取詞頻向量進(jìn)行相似度計算,并匹配特征項,從而實現(xiàn)對版本間克隆群的映射??寺∪河成涞牧鞒倘鐖D1所示。
本文映射算法的思路為:首先對軟件的前一版本和后一版本中的每一個克隆群計算詞頻,得到每個克隆群的詞頻字典,然后構(gòu)建權(quán)重向量,得到克隆群相似度。同時提取克隆群中的特征項(文件名、函數(shù)名、起始行、結(jié)束行、代碼行數(shù)),通過特征項匹配得到特征相似度,最終得到克隆群映射結(jié)果,實現(xiàn)了從高維度的代碼文檔空間到低維度的向量空間的轉(zhuǎn)換??寺∪河成渌惴ㄈ缦滤尽?/p>
有序號的程序——————————Shift+Alt+Y
程序前
輸入:FClones檢測結(jié)果。
輸出:克隆群映射結(jié)果。
1)
對后一版本Vn+1中的每一個克隆群CGn+1,i
2)
統(tǒng)計CGn+1,i中每個詞的詞頻,存入字典Dn+1,i
3)
提取每個CGn+1,i的特征項,存入特征字典Tn+1,i
4)
對詞頻字典規(guī)范化
5)
對前一版本Vn中的每一個克隆群CGn, j
6)
統(tǒng)計CGn, j中每個詞的詞頻,存入字典Dn, j
7)
提取每個CGn,i的特征項,存入特征字典Tn,i
8)
對詞頻字典規(guī)范化
9)
遍歷比較Dn+1,i和Dn, j之間相似度,存儲到數(shù)組cosin[]中
10)
遍歷匹配Tn+1,i和Tn, j,并存儲到數(shù)組T[]中
11)
IF cosin[k]>=t && T[k]==True
12)
THEN CGn+1,i映射到CGn, j
13)
即CGn+1,i → CGn, j
14)
ELSE
15)
CGn+1,i → NULL
16)
返回映射結(jié)果
程序后
2.2克隆群向量空間
2.2.1克隆群文檔預(yù)處理
預(yù)處理是克隆群映射的基礎(chǔ)工作。相比自然語言文本信息,形式語言中代碼不僅包括與其功能相關(guān)的信息,也包括大量的程序語言信息。與編程相關(guān)的信息在其領(lǐng)域內(nèi)大多是相對獨立的,幾乎不包含代碼以及軟件的功能信息。為保證克隆群映射更加準(zhǔn)確,須將源代碼中的編程相關(guān)信息進(jìn)行過濾。
本文使用檢測結(jié)果是由本團(tuán)隊開發(fā)的檢測工具Fclones[16]檢測得到,檢測結(jié)果存儲在可擴展標(biāo)記語言(Extensible Markup Language, XML)文件中,存儲方式如圖2所示。
static void done_state_str ()
{
str_list_destroy (on_list);
str_list_destroy (off_list);
str_list_destroy (on_off_list);
}
2.2.3構(gòu)建詞頻向量空間并規(guī)范化
經(jīng)過研究之后發(fā)現(xiàn),假設(shè)版本中克隆群有i個詞頻:D=[D1,D2,…,Di],每個目標(biāo)都有相應(yīng)的關(guān)鍵字。不同關(guān)鍵字之間的數(shù)量級差異可能很大,如果直接用詞頻計算余弦距離,就不能很好地平均反映出每個關(guān)鍵字的特性,所以必須對詞頻進(jìn)行規(guī)范化。
詞頻規(guī)范化的方法如下:
ωi=Di/(∑ni=0Di)(5)
其中:Di是克隆群向量中詞頻的實際值;ωi為規(guī)范化后得到的權(quán)重值。
獲得克隆群目標(biāo)權(quán)重向量:
ω=[ω1,ω2,…,ωi]
2.2.4計算向量空間相似度
目前,克隆代碼領(lǐng)域內(nèi)判斷相似程度的方法主要有基于文本和位置的映射方法?;谖谋镜南嗨贫扔嬎惴椒òǎ鹤铋L公共子序列(Longest common subsequence)、杰卡德距離(Jaccard distance)、編輯距離(Levenshtein distance)等?;谖恢玫南嗨贫扔嬎惴椒ㄊ俏恢弥丿B率(Location overlapping rate)的計算,其原理就是將克隆代碼的起止行號表示為克隆粒度的相對行號,然后依據(jù)特定的公式計算其重疊率。
本文使用的相似性計算方式是余弦距離。計算兩個文本相似度時采用的相似度計算公式如下:
CosSimilarity(ωi,ωj)=(∑ni, j=1(ωi*ωj))/∑ni=1ω2i∑nj=1ω2j(6)
其中:ωi*ωj指的是克隆群詞頻向量的內(nèi)積;CosSimilarity(ωi*ωj)的取值范圍是[0,1]。當(dāng)克隆群中的克隆片段在演化過程中發(fā)生了變化,CosSimilarity的值小于等于1,本文啟發(fā)式地設(shè)置一個閾值,把所有CosSimilarity≥t的克隆群對當(dāng)作候選的具有映射關(guān)系的克隆群對。如果一個克隆群在相鄰版本中有多個克隆群可能與其具有映射關(guān)系,則分別計算源代碼的相似性,選取源代碼相似性符合閾值條件的那些克隆群作為具有映射關(guān)系的候選克隆群。
2.3克隆群特征項
2.3.1選取克隆群特征項
為了保證克隆群映射的準(zhǔn)確度,須匹配克隆群中的函數(shù)名等多個特征項,本文選取了文件名、函數(shù)名、起始行、結(jié)束行以及代碼行數(shù)5個特征項來衡量一個克隆群的屬性信息。具體特征項如表3所示。
2.3.2提取特征項
確定克隆群特征項之后,需提取出所需的克隆群特征項,并放入特征項字典中。文件名的屬性字典表示為:File={“文件名”:FileName},函數(shù)名屬性字典表示為:Fun={“函數(shù)名i”:FunName[i]},每一個克隆群可能包含多個函數(shù),所以字典中包含多個函數(shù)名,克隆群特征項提取算法如下所示。
有序號的程序——————————Shift+Alt+Y
程序前
輸入:XML文件。
輸出:文件名、開始行、結(jié)束行、函數(shù)名。
1)
定義函數(shù)getFeatures(XMLpath)
2)
ElementTree ← 將XML文件解析為元素樹
3)
root ← 獲取ElementTree的根節(jié)點
4)
遍歷查找根節(jié)點root下節(jié)點為source的所有內(nèi)容
5)
查找并返回id、clones、sourcecode
6)
遍歷查找根節(jié)點root下節(jié)點為sourcecode的所有內(nèi)容
7)
查找并返回FunName
程序后
將已提取的特征項字典存儲為XML文件,某克隆群的特征項字典如圖4所示。
3.2評價方法
從源代碼中映射克隆群可以看作一個分類問題,將相鄰版本的克隆群代碼之間進(jìn)行分類,即分為有映射關(guān)系和無映射關(guān)系兩類。本文選取分類中的經(jīng)典評價方法:從查準(zhǔn)率(precision)、查全率(recall)以及F值三方面來評估映射方法的效果,定義如下。
1)準(zhǔn)確率:
precision=|TP|/(|TP|+|FP|)(8)
2)查全率:
recall=|TP|/(|TP|+|FN|)(9)
3)F值:
F=2*precision*recall/(precision+recall)(10)
其中:TP表示發(fā)現(xiàn)的真映射克隆群個數(shù);FP表示發(fā)現(xiàn)的假映射克隆群個數(shù);FN表示未發(fā)現(xiàn)的真映射克隆群個數(shù)。
3.3實驗過程
3.3.1閾值選取實驗
閾值選取的好壞直接影響到克隆群映射的效果,本文選取并驗證閾值設(shè)置為0.6,0.65,0.7,0.75,0.8,0.85,0.9和0.95時映射結(jié)果的查全率和查準(zhǔn)率。設(shè)置為不同閾值時查準(zhǔn)率和查全率如圖5所示,其中:X軸表示選取的不同閾值t,Y軸表示不同閾值下的查全率和查準(zhǔn)率。
從圖5可以看出,當(dāng)閾值取0.85時克隆群相似度結(jié)果的查全率和查準(zhǔn)率最高,即相似度在區(qū)間[0.85,1]范圍內(nèi)并且特征項匹配成功后則認(rèn)為具有映射關(guān)系。
3.3.2克隆群映射實驗
實驗以版本號為時間線,往后追溯映射關(guān)系,查找克隆變化。為使得實驗結(jié)果更加有效,本文進(jìn)行了大量的對比實驗并選取了bluefish1.0.5版本和bluefish1.0.6版本進(jìn)行結(jié)果展示,圖6顯示了bluefish1.0.5版本和bluefish1.0.6兩個相鄰版本的克隆群映射結(jié)果。
圖6中第1行表示版本的名稱以及所對應(yīng)的版本號;第一列表示當(dāng)前版本中的克隆群id號,前一版本bluefish1.0.5中含有32個克隆群,后一版本bluefish1.0.6中含有32個克隆群;第2列的箭頭表示具有映射關(guān)系;第3列的數(shù)據(jù)表示下一版本克隆群中與當(dāng)前版本具有映射關(guān)系的克隆群以及相似度。例如,bluefish1.0.5版本中13號克隆群和bluefish1.0.6版本中13號和15號克隆群具有映射關(guān)系,在代碼維護(hù)中可能作了一致性的修改。bluefish1.0.5版本中4號克隆群沒有找到與其具有映射關(guān)系的克隆群,可能是因為從上一版本到下一版本的演化過程發(fā)生了較大的變化而未達(dá)到閾值的范圍,或者被去除。
另外,從圖6中也可以看出,絕大多數(shù)具有映射關(guān)系的克隆群的相似度為1.0,這說明版本中的克隆群在演化過程中沒有發(fā)生變化,很少一部分的相似度值接近1.0,這說明克隆群中的克隆代碼在演化過程中只是作了一定程度上的微調(diào),即語句的修改和增刪。
3.4實驗結(jié)果與分析
本文對5款開源軟件中的471個克隆群進(jìn)行實驗,這些克隆群為已知映射關(guān)系的克隆群,將映射結(jié)果和已知數(shù)據(jù)進(jìn)行人工比對,找出實驗中的誤檢數(shù)和漏檢數(shù)。表6展示了目標(biāo)軟件中的471個克隆群映射結(jié)果(誤檢數(shù)和漏檢數(shù))。
在進(jìn)行大量的實驗之后,進(jìn)行了人工驗證,得到了克隆群映射的查全率和查準(zhǔn)率。針對實驗映射結(jié)果,本實驗查準(zhǔn)率為471/484=0.973,查全率為471/490=0.961。在實驗中查準(zhǔn)率相對較高的原因是克隆群特征項匹配時函數(shù)名匹配不成功,導(dǎo)致原本具有映射關(guān)系的部分克隆群被過濾掉,具體驗證結(jié)果見表7。
從表7可以看到,本文提出的映射方法整體查準(zhǔn)率以及查準(zhǔn)率都能達(dá)到96%以上,而且F值也達(dá)到了96%以上。說明本文克隆群映射方法能達(dá)到預(yù)期效果。上述實驗在5款開源軟件的62個版本上進(jìn)行了對比實驗以及人工驗證,證明本文提出的基于改進(jìn)的向量空間模型克隆群映射方法有效可行。
經(jīng)過進(jìn)一步的分析發(fā)現(xiàn),影響本文映射方法的有以下3方面原因。
1)克隆檢測工具的選取。
克隆檢測結(jié)果是進(jìn)行克隆映射的基礎(chǔ)數(shù)據(jù),克隆檢測工具的性能直接影響克隆群映射的結(jié)果,因此,選取準(zhǔn)確高效的克隆檢測工具是本文研究的重要前提。
2)映射方法閾值的界定。
本文的映射方法閾值的選取是通過人工驗證得到的,所以在一定程度上會影響映射的準(zhǔn)確率。另外,軟件的開發(fā)語言不同,版本間的差異程度也不同,相同的閾值不能很好地表示不同的軟件,可能會影響映射效果。
3)版本開發(fā)方式的差異。
本文分析的是連續(xù)多版本軟件的映射信息,若版本經(jīng)過較大變動,會導(dǎo)致映射結(jié)果超過閾值,從而影響映射準(zhǔn)確度,因此選擇穩(wěn)定更新的連續(xù)版本進(jìn)行克隆群映射效果最佳。
4結(jié)語
針對當(dāng)前Type3克隆代碼映射存在的問題,本文提出了基于改進(jìn)向量空間模型的克隆群映射方法,通過相鄰版本間克隆群詞頻向量的計算,將映射內(nèi)容由高維度的代碼空間簡化為向量空間中的向量運算;同時提取克隆群的特征項,匹配計算特征項,進(jìn)而實現(xiàn)連續(xù)版本間克隆群的映射,實現(xiàn)原型克隆群映射工具,該工具能高效映射Type1、Type2以及Type3克隆代碼。最后對5款開源軟件進(jìn)行對比實驗,并進(jìn)行人工驗證,發(fā)現(xiàn)本文提出的克隆群映射方法的查全率和查準(zhǔn)率都能達(dá)到0.96以上,充分驗證了本文映射方法的有效性。
本文研究工作依然存在一定的缺陷和不足,例如設(shè)置閾值參數(shù)時是人工進(jìn)行驗證設(shè)置,無法自動根據(jù)軟件自動調(diào)整。另外匹配規(guī)則仍需改善,比如當(dāng)函數(shù)名發(fā)生變化時可能影響匹配準(zhǔn)確度。這些問題將是下一步研究工作中的重點。
參考文獻(xiàn):
[1]
NGUYEN H A, NGUYEN T T, PHAM N H, et al. Clone management for evolving software [J]. IEEE Transactions on Software Engineering, 2012, 38(5): 1008-1026.
[2]
ZIBRAN M F, ROY C K. The road to software clone management: a survey [R]. Saskatoon, SK: The University of Saskatchewan, 2012: 1-66.
[3]
ROY C K, ZIBRAN M F, KOSCHKE R. The vision of software clone management: past, present, and future [C]// Proceedings of the 2014 IEEE Conference on Software Maintenance, Reengineering & Reverse Engineering. Piscataway, NJ: IEEE, 2014: 18-33.
[4]
SIDOROV G, GELBUKH A, GóMEZADORNO H, et al. Soft similarity and soft cosine measure: similarity of features in vector space model [J]. Computación Y Sistemas, 2014, 18(3):491-504.
[5]
BETTENBURG N, SHANG W, IBRAHIM W, et al. An empirical study on inconsistent changes to code clones at release level [J]. Science of Computer Programming, 2009, 77(6): 85-94.
[6]
史慶慶,孟繁軍,張麗萍,等.克隆代碼技術(shù)研究綜述[J].計算機應(yīng)用研究,2013,30(6):1617-1623.(SHI Q Q, MENG F J, ZHANG L P, et al. Survey of research on code clone technique [J]. Application Research of Computers, 2013, 30(6): 1617-1623.)
[7]
THUMMALAPENTA S, CERULO L, AVERSANO L, et al. An empirical study on the maintenance of source code clones [J]. Empirical Software Engineering, 2010, 15(1): 1-34.
[8]
DUALAEKOKO E, ROBILLARD M P. Tracking code clones in evolving software [C]// Proceedings of the 2007 International Conference on Software Engineering. Washington, DC: IEEE Computer Society, 2007: 158-167.
[9]
CANFORA G, CERULO L, PENTA M D. Identifying changed source code lines from version repositories [C]// Proceedings of the Fourth International Workshop on Mining Software Repositories. Washington, DC: IEEE Computer Society, 2007: 14-14.
[10]
DUALAEKOKO E, ROBILLARD M P. Clone region descriptors: Representing and tracking duplication in source code [J]. ACM Transactions on Software Engineering and Methodology, 2010, 20(1): 483-496.
[11]
GDE N, KOSCHKE R. Incremental clone detection [C]// Proceedings of the 13th European Conference on Software Maintenance and Reengineering. Piscataway, NJ: IEEE, 2009: 219-228.
[12]
KAMIYA T, KUSUMOTO S, INOUE K. CCFinder: a multilinguistic tokenbased code clone detection system for large scale source code [J]. IEEE Transactions on Software Engineering, 2002, 28(7): 654-670.
[13]
張瑞霞,張麗萍,王春暉,等.基于主題建模技術(shù)的克隆群映射方法[J].計算機工程與設(shè)計,2015,36(6): 1524-1529.(ZHANG R X, ZHANG L P, WANG C H, et al. Clone group mapping method based on topic modeling [J]. Computer Engineering and Design, 2015, 36(6): 1524-1529.)
[14]
涂穎,張麗萍,劉東升,等.基于軟件多版本演化提取克隆譜系[J].計算機應(yīng)用,2015,35(4):1169-1173.(TU Y, ZHANG L P, LIU D S, et al. Clone genealogies extraction base on software evolution over multiple versions [J]. Journal of Computer Applications, 2015, 35(4): 1169-1173.)
[15]
SALTON G, WONG A, YANG C S. A vector space model for automatic indexing [J]. Communications of the ACM, 1975, 18(11): 613-620.
[16]
張久杰,王春暉,劉東升,等.基于Token編輯距離檢測克隆代碼[J].計算機應(yīng)用,2015,35(12):3536-3543.(ZHANG J J, WANG C H, LIU D S, et al. Code clone detection based on Levenshtein distance of token [J]. Journal of Computer Applications, 2015, 35(12): 3536-3543.)