×

代码克隆检测技术和工具的比较和评估:定性方法。 (英语) Zbl 1183.68205号

摘要:在过去的十年中,提出了许多用于软件克隆检测的技术和工具。在本文中,我们对当前克隆检测技术和工具的最新进展进行了定性比较和评估,并将大量信息组织到一个连贯的概念框架中。我们从背景概念、通用克隆检测过程和当前技术和工具总体分类开始。然后,我们从两个不同的维度对技术和工具进行分类、比较和评估。首先,我们基于许多方面对方法进行分类和比较,每个方面都有一组(可能重叠)属性。其次,我们对分类技术和工具进行了定性评估,这些技术和工具与编辑场景的分类有关,这些场景旨在为1型、2型、3型和4型克隆的创建建模。最后,我们提供了一些示例,说明如何根据特定的目标和约束条件,利用本研究的结果来选择最合适的克隆检测工具或技术。本文的主要贡献是:(1)对克隆检测技术和工具进行分类的模式,以及基于该模式的当前克隆检测器的分类,(2)对产生不同克隆类型的编辑场景进行分类,并基于该分类对当前克隆检测器进行定性评估。

MSC公司:

68N99型 软件理论
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] G.Antoniol,G.Casazza,M.Di Penta,E.Merlo,通过时间序列模拟克隆进化,摘自:第17届IEEE软件维护国际会议论文集,ICSM 2001年,2001年,第273-280页
[2] 安东尼奥,G。;美国维拉诺。;Merlo,E。;Penta,M.D.:《分析Linux内核中的克隆进化》,《信息与软件技术》44,第13期,755-765(2002)
[3] L.Aversano,L.Cerulo,M.Di Penta,《如何维护克隆:一项实证研究》,载于《第11届欧洲软件维护和重组会议论文集》,CSMR 2007,2007,第81–90页
[4] 贝克,B.:《用重复数据发现克隆:实验分析》,IEEE软件工程事务33,第9期,608-621(2007)
[5] B.Baker,U.Manber,《从字节码中推断Java源代码的相似性》,载于《USENIX年度技术会议论文集》,1998年,第179-190页
[6] Baker,B.:识别重复代码的程序,《计算科学与统计学报:第24届界面研讨会24,49-57》(1992)
[7] Baker,B.:参数化模式匹配:算法与应用,计算机系统科学杂志52,第1期,28-42(1996)·Zbl 0849.68019号 ·doi:10.1006/jcss.1996.0003
[8] B.Baker,《关于在大型软件系统中发现重复和近重复》,载于:《第二届逆向工程工作会议论文集》,WCRE 1995年,1995年,第86–95页
[9] 贝克,B。;Giancarlo,R.:片段最长公共子序列的稀疏动态规划,《期刊算法》42,第2期,231-254(2002)·Zbl 1002.68193号 ·doi:10.1006/jagm.2002.1214
[10] M.Balazinska,E.Merlo,M.Dagenais,B.Lague,K.Kontogiannis,《衡量基于克隆的再工程机会》,摘自:IEEE软件度量研讨会论文集,Metrics 1999年,1999年,第292–303页
[11] M.Balint,T.Girba,R.Marinescu,《开发人员如何复制》,摘自:第14届IEEE程序理解国际会议记录,ICPC 2006年,2006年,第56–68页
[12] H.Basit,S.Pugliesi,W.Smyth,A.Turpin,S.Jarzabek,《灵活标记化的高效基于标记的克隆检测》,载于《第六届欧洲软件工程会议论文集和软件工程基础》,ESEC/FSE 2007年,2007年,第513–515页
[13] I.D.Baxter、C.Pidgeon、M.Mehlich,《DMS:实用可扩展软件演化的程序转换》,摘自:《第26届国际软件工程会议论文集》,ICSE 2004年,2004年,第625–634页
[14] 包豪斯项目。上次访问时间:2008年11月。统一资源定位地址http://www.bauhaus-stuttgart.de
[15] I.Baxter,A.Yahin,L.Moura,M.Anna,使用抽象语法树进行克隆检测,摘自:《第十四届国际软件维护会议论文集》,ICSM 1998年,1998年,第368–377页
[16] S.Bellon,Vergleich von techniken zur erkennung duplizierten quellcodes,斯图加特大学文凭论文,2002年
[17] S.Bellon,R.Koschke,《软件克隆的检测:工具比较实验》,2007年12月。http://www.bauhaus-stuttgart.de/clones网站/
[18] 贝隆,S。;科希克,R。;安东尼奥,G。;Krinke,J。;Merlo,E.:克隆检测工具的比较与评估,《软件工程学报》33,第9期,577-591(2007)
[19] 布鲁廷克,M。;德乌森,A。;Engelen,R。;Tourwe,T.:《关于使用克隆检测识别横切关注点代码》,《软件工程学报》31,第10期,804-818(2005)
[20] P.Bulychev,M.Minea,使用反统一进行重复代码检测,收录于:Spring Young Research Collocium on Software Engineering,SYRCoSE 2008,2008,第4页
[21] P.Bulychev,CloneDigger结果。上次访问时间:2009年2月。http://clonedigger.sourceforge.net/
[22] E.Burd,J.Bailey,评估预防性维护期间使用的克隆检测工具,摘自:第二届IEEE源代码分析和操作国际研讨会论文集,SCAM 2002年,2002年,第36-43页
[23] Calefato,F。;拉努比莱,F。;Mallardo,T.:网络应用程序中的功能克隆检测:一种半自动方法,网络工程杂志3,第1期,3-21(2004)
[24] G.Casazza,G.Antoniol,U.Villano,E.Merlo,M.Penta,识别linux内核中的克隆,摘自:IEEE第一届源代码分析和操作国际研讨会论文集,SCAM 2001年,2001年,第90–97页
[25] Church,K。;Helfman,J.:《点图:探索数百万行文本和代码自相似性的程序》,《美国统计协会杂志》第2期,第153-174页(1993年)
[26] K.Cooper,N.McIntosh,嵌入式risc处理器的增强型代码压缩,载于:美国计算机学会SIGPLAN 1999编程语言设计与实现会议论文集,SIGPLAN PLDI 19991999,第139–149页
[27] Cordy,J.R.:TXL源转换语言,《计算机编程科学》61,第3期,190-210(2006)·兹比尔1102.68434 ·doi:10.1016/j.scico.2006.04.002
[28] J.R.Cordy、T.R.Dean、N.Synytskyy,《近缺失克隆的实用语言无关检测》,载《第14届IBM高级研究中心会议论文集》,CASCON,2004年,第29–40页
[29] PMD的CPD。上次访问时间:2008年11月。统一资源定位地址http://pmd.sourceforge.net/cpd.html
[30] M.Dagenais,E.Merlo,B.Lagué,Daniel Proulx,大型面向对象软件包中出现的克隆,收录于:《第八届IBM高级研究中心会议论文集》,CASCON 1998年,1998年,第192-200页
[31] 戴维,N。;巴森,P。;菲尔德,S。;Frank,R.:《软件克隆检测器的开发》,《国际应用软件技术杂志》1,第3/4期,219-236(1995)
[32] 德布雷,S.K。;Evans,W。;穆特,R。;De Sutter,B.:代码压缩的编译器技术,编程语言和系统上的ACM事务22,第2期,378-415(2000)
[33] F.Deissenboeck、B.Hummel、E.Juergens、B.Schaetz、S.Wagner、S.Teuchert、J.Girard,《基于汽车模型的开发中的克隆检测》,摘自:《第三十届国际软件工程会议论文集》,ICSE 2008年,2008年,第603-612页
[34] B.De Sutter、B.De Bus、K.De Bosschere,《筛选出泥巴:低级C++代码重用》,摘自:《第17届ACM SIGPLAN面向对象编程、系统、语言和应用会议论文集》,OOPSLA 2002年,2002年,第275-291页
[35] A.De Lucia,R.Francese,G.Scanniello,G.Tortora,理解网络应用程序中的克隆模式,摘自:第13届程序理解国际研讨会论文集,IWPC 2005年,2005年,第333–336页
[36] G.A.Di Lucca,M.Di Penta,A.R.Fasolino,P.Granato,《网络时代的克隆分析:识别克隆网页的方法》,收录于:第七届IEEE软件维护实证研究研讨会论文集,WESS 2009年,2001年,第107–113页
[37] 工具克隆侦探(ConQAT的一部分)。上次访问时间:2008年11月。统一资源定位地址http://conqat.in.tum.de/index.php/Main_Page
[38] G.Di Lucca,M.Penta,A.Fasolino,《识别重复网页的方法》,载于:《第26届国际计算机软件和应用会议论文集》,COMPSAC 2002年,2002年,第481-486页
[39] 工具Dupman。上次访问时间:2008年11月。统一资源定位地址http://sourceforge.net/projects/dupman
[40] 杜卡斯,S。;O.尼尔斯特拉斯。;Rieger,M.:《通过字符串匹配检测克隆的有效性》,《国际软件维护与进化杂志:研究与实践》18,第1期,37-58(2006)
[41] S.Ducasse,M.Rieger,S.Demeyer,《检测重复代码的一种独立于语言的方法》,载于:《第十五届软件维护国际会议论文集》,ICSM 1999年,1999年,第109–118页
[42] W.Evans,C.Fraser,M.Fei,通过结构抽象进行克隆检测,摘自:第14届逆向工程工作会议论文集,WCRE 2007年,2007年,第150–159页
[43] 福克,R。;科希克,R。;Frenzel,P.:使用语法后缀树对克隆检测进行实证评估,《实证软件工程》13,601-643(2008)
[44] Fowler,M.:重构:改进现有代码的设计,(2000)·Zbl 1020.68632号
[45] C.Fraser,E.Myers,A.Wendt,分析和压缩汇编代码,载于:ACM SIGPLAN’84编译器构建研讨会论文集,1984年,第117–121页
[46] M.Gabel,L.Jiang,Z.Su,语义克隆的可伸缩检测,摘自:《第30届国际软件工程会议论文集》,ICSE 2008年,2008年,第321-330页
[47] Gitchell,D。;Tran,N.:Sim:计算机程序中检测相似性的实用程序,SIGCSE公告31,第1期,266-270(1999)
[48] N.Göde,增量克隆检测,德国不来梅大学数学与计算机科学系文凭论文,2008年
[49] 郭勇军,邹勇军,《商业应用中的克隆检测》,载《第十五届逆向工程工作会议论文集》,WCRE 2008年,2008年,第91–100页
[50] Y.Higo,Y.Ueda,T.Kamiya,S.Kusumoto,K.Inoue,《基于代码克隆分析的软件维护过程改进》,载于:《第四届以产品为中心的软件过程改进国际会议论文集》,PROFES 2002年,2002年,第185-197页
[51] P.Jablonski,D.Hou,CReN:一种用于跟踪复制粘贴代码克隆和在IDE中一致重命名标识符的工具,收录于:2007年OOPSLA Eclipse技术交换研讨会论文集,第16–20页
[52] L.Jiang,G.Misherghi,Z.Su,S.Glondu,DECKARD:代码克隆的可扩展和准确的基于树的检测,摘自:第29届国际软件工程会议论文集,ICSE 2007年,2007年,第96-105页
[53] J.Johnson,使用指纹识别源代码中的冗余,摘自:《协作研究高级研究中心1993年会议记录》,CASCON 1993年,1993年,第171-183页
[54] J.Johnson,可视化遗产来源中的文本冗余,摘自:1994年合作研究高级研究中心会议记录,CASCON 2004年,1994年,第171–183页
[55] J.Johnson,用于克隆检测和变化跟踪的子串匹配,摘自:《第十届软件维护国际会议论文集》,ICSM 1994年,1994年,第120–126页
[56] E.Juergens、F.Deissenboeck、B.Hummel、S.Wagner,《代码克隆重要吗?》?,摘自:《第31届国际软件工程会议论文集》,2009年ICSE,第11页(出版中)
[57] N.Juillerat,B.Hirsbrunner,《检测和删除java代码中克隆的算法》,摘自:《通过转换实现软件进化:拥抱变化的第三次研讨会论文集》,SeTra,2006年,第63–74页
[58] T.Kamiya,CCFinderX官方网站。上次访问时间:2008年11月。统一资源定位地址http://www.ccfinder.net/ccfinderx.html
[59] 神谷,T。;Kusumoto,S。;Inoue,K.:Ccfinder:基于多语言标记的大规模源代码代码克隆检测系统,IEEE软件工程事务28,第7期,654-670(2002)
[60] C.Kapser,M.Godfrey,通过分类帮助理解克隆,摘自:第七届软件进化原理国际研讨会论文集,IWPSE 2004年,2004年,第85–94页
[61] 科里·卡普尔;迈克尔·戈弗雷(Michael W.Godfrey):《被认为有害的克隆被认为有害:软件中的克隆模式》,《实证软件工程》13,第6期,645-692(2008)
[62] H.M.Kienle,H.A.Müller,A.Weber,在生成克隆的网络中,摘自:第二届软件克隆检测国际研讨会论文集,IWDSC 2003年,2003年,第2页
[63] M.Kim,L.Bergman,T.Lau,D.Notkin,《OOPL中复制和粘贴编程实践的人种学研究》,载于:第三届国际ACM–IEEE经验软件工程研讨会论文集,ISESE 2004年,2004年,第83–92页
[64] M.Kim,G.Murphy,《代码克隆谱系的实证研究》,载于:第十届欧洲软件工程会议论文集,与第十三届ACM SIGSOFT国际软件工程基础研讨会联合召开,ESEC/SIGSOFT FSE 2005年,2005年,第187-196页
[65] R.Komondoor,S.Horwitz,使用切片识别源代码中的重复,摘自:第八届静态分析国际研讨会论文集,SAS 2001年,2001年,第40-56页·Zbl 0997.68644号
[66] Kontogiannis,K。;Demori,R。;Merlo,E。;加勒,M。;Bernstein,M.:《克隆和概念检测的模式匹配》,《自动化软件工程杂志》3,第1-2期,77-108(1996)
[67] K.Kontogiannis,《使用软件度量检测编程模式的评估实验》,载于《第三届逆向工程工作会议论文集》,WCRE 1997年,1997年,第44–54页
[68] S.Rao Kosaraju,参数化后缀树构造的更快算法,摘自:第36届计算机科学基础年度研讨会论文集,FOCS 1995年,1995年,第631–638页·Zbl 0938.68918号
[69] R.Koschke,软件克隆管理的前沿,摘自:《软件维护前沿学报》,第24届IEEE软件维护国际会议,ICSM 2008年,2008年,第119-128页
[70] Koschke,R.:《识别和删除软件克隆》,《软件进化》,15-39(2008)
[71] R.Koschke,J.-F.Girard,M.Wrthner,《逆向工程分析的中间表示法》,载于:《第五届逆向工程工作会议论文集》,WCRE 1998年,1998年,第241-250页
[72] R.Koschke,R.Falke,P.Frenzel,使用抽象语法后缀树进行克隆检测,摘自:《第13届逆向工程工作会议论文集》,WCRE 2006年,2006年,第253-262页
[73] R.Koschke,软件克隆研究综述,载于:Dagstuhl研讨会论文集06301:软件中的重复、冗余和相似性,2006年,第24页
[74] N.Kraft,B.Bonds,R.Smith,《跨语言克隆检测》,摘自:《第20届软件工程和知识工程国际会议论文集》,SEKE 2008年,2008年,第6页
[75] J.Krinke,《用程序依赖图识别类似代码》,载于:《第八届逆向工程工作会议论文集》,WCRE 2001年,2001年,第301–309页
[76] I.Landwerth,克隆侦探。上次访问时间:2008年11月。统一资源定位地址http://www.codeplex.com/CloneDetectiveVS
[77] F.Lanubile,T.Mallardo,《在web应用程序中寻找功能克隆》,摘自:《第七届欧洲软件维护与再工程会议论文集》,CSMR 2003年,2003年,第379–386页
[78] S.Lee,I.Jeong,SDD:大规模源代码的高性能代码克隆检测系统,摘自:面向对象编程系统语言和应用程序会议录,第20届ACM SIGPLAN面向对象编程、系统、语言和应用年会,OOPSLA Companion 20052005,第140–141页
[79] Leitáo,A.:使用R2D2检测冗余代码,软件质量期刊12,第4期,361-382(2004)
[80] H.Li,S.Thompson,重构环境中erlang/OTP的克隆检测和删除,摘自:ACM/SIGPLAN Workshop Partial Evaluation and Semantics-Based Program Manipulation,2009年ACM SIGPLAN研讨会论文集,部分评估和程序操作,2009年,第169-178页
[81] C.Liu,C.Chen,J.Han,P.Yu,GPLAG:通过程序依赖图分析检测软件剽窃,摘自:《第十二届ACM SIGKDD知识发现和数据挖掘国际会议论文集》,KDD 2006年,2006年,第872–881页
[82] H.Liu,Z.Ma,L.Zhang,W.Shao,基于后缀树检测序列图中的重复,摘自:第13届亚太软件工程会议论文集,APSEC 2006年,2006年,第269-276页
[83] S.Livieri,Y.Higo,M.Matsushita,K.Inoue,使用分布式CCFinder对开源程序进行大规模代码克隆分析和可视化,收录于:第29届国际软件工程会议论文集,ICSE 2007年,2007年,第106–115页
[84] 李,Z。;卢,S。;迈格玛,S。;周瑜:《CP-miner:发现大规模软件代码中的复制和相关错误》,IEEE软件工程事务32,第3期,176-192(2006)
[85] U.Manber,在大型文件系统中查找类似文件,见:1994年冬季Usenix技术会议论文集,1994年,第1-10页
[86] A.Marcus,J.Maletic,源代码中高级概念克隆的识别,载于:第16届IEEE自动化软件工程国际会议论文集,ASE 2001,2001,第107–114页
[87] J.Mayrand,C.Leblanc,E.Merlo,《使用量度自动检测软件系统中功能克隆的实验》,摘自:《第十二届国际软件维护会议论文集》,ICSM 1996年,1996年,第244–253页
[88] Mccreight,E.:空间经济后缀树构造算法,《ACM杂志》32,第2期,262-272(1976)·Zbl 0329.68042号 ·数字对象标识代码:10.1145/321941.321946
[89] E.Merlo,M.Dagenais,P.Bachand,J.S.Sormani,S.Gradara,G.Antoniol,《大型软件系统演化研究:linux内核》,收录于:《第26届国际计算机软件和应用会议论文集》,COMPSAC 2002年,2002年,第421-426页
[90] E.Merlo,G.Antoniol,M.Penta,V.Rollo,用于克隆检测和软件进化分析的线性复杂度面向对象相似性,摘自:第20届软件维护国际会议论文集,ICSM 2004年,2004年,第412-416页
[91] L.Moonen,使用岛文法生成健壮的解析器,摘自:第八届逆向工程工作会议论文集,WCRE 2001年,2001年,第13–22页
[92] S.Nasehi,G.Sotudeh,M.Gomrokchi,使用减少重复代码增强源代码,摘自:IASTED国际多会议第25届会议论文集:软件工程,IASTED SE 2007年,2007年,第192-197页
[93] J.Patenaude,E.Merlo,M.Dagenais,B.Lague,《将软件质量评估技术扩展到java系统》,摘自:《第七届程序理解国际研讨会论文集》,IWPC 1999年,1999年,第49–56页
[94] D.Rajapakse,S.Jarzabek,《使用服务器页面统一web应用程序中的克隆:权衡分析》,摘自:《第29届国际软件工程会议论文集》,ICSE 2007年,2007年,第116-126页
[95] F.Ricca,P.Tonella,《使用集群支持从静态页面迁移到动态页面》,载于:《第11届程序理解国际研讨会论文集》,IWPC 2003年,2003年,第207-216页
[96] M.Rieger,《无语言障碍的有效克隆检测》,博士论文,瑞士伯尔尼大学,2005年
[97] C.K.Roy,J.R.Cordy,《开源软件中的Near-Miss函数克隆:一项实证研究》,《软件维护与进化杂志:研究与实践》(2009)23(WCRE’08特刊)(提交出版)
[98] C.K.Roy,J.R.Cordy,用于评估克隆检测工具的基于突变/注射的自动框架,摘自:第四届突变分析国际研讨会论文集,突变2009年,2009年,第10页(出版中)
[99] C.K.Roy,J.R.Cordy,《开源软件系统中功能克隆的实证研究》,摘自:《第十五届逆向工程工作会议论文集》,WCRE 2008年,2008年,第81–90页
[100] C.K.Roy,J.R.Cordy,WCRE’08克隆。上次访问时间:2008年11月。http://www.cs.queensu.ca/home/stl/download/NICAD输出/
[101] C.K.Roy,J.R.Cordy,《迈向基于变异的克隆检测工具评估自动框架》,载于《加拿大计算机科学和软件工程会议论文集》,C3S2E 2008年,2008年,第137-140页
[102] C.K.Roy,J.R.Cordy,《软件克隆检测研究调查》,《女王技术报告:5412007》,第115页
[103] C.K.Roy,J.R.Cordy,基于场景的克隆检测技术比较,载于:第16届IEEE国际程序理解会议论文集,ICPC 20082008,第153–162页
[104] C.K.Roy,J.R.Cordy,NICAD:使用灵活的预打印和代码规范化准确检测近距离有意克隆,摘自:第16届IEEE国际程序理解会议论文集,ICPC 2008,2008,第172-181页
[105] F.Rysselberghe,S.Demeyer,评估克隆检测技术,摘自:大规模工业应用进化国际研讨会论文集,ELISA 2003年,2003年,第12页
[106] F.Rysselberghe,S.Demeyer,《从重构的角度评估克隆检测技术》,载于《第九届IEEE国际自动化软件工程会议论文集》,ASE 2004年,2004年,第336–339页
[107] 工具Simian。上次访问时间:2008年11月。统一资源定位地址http://www.redhillconsulting.com.au/products/simian/
[108] 工具SimScan。上次访问时间:2008年11月。统一资源定位地址http://www.blue-edge.bg/simscan/
[109] T.Sager,A.Bernstein,M.Pinzger,C.Keifer,使用树算法检测类似的Java类,摘自:2006年挖掘软件库国际研讨会论文集,MSR 2006年,2006年,第65–71页
[110] N.Synytskyy,J.R.Cordy,T.R.Dean,动态网页中静态克隆的解析,收录于:第五届IEEE网站演变国际研讨会论文集,WSE 2003年,2003年,第49–58页
[111] R.Tairas,J.Gray,使用后缀树进行基于Phoenix的克隆检测,摘自:第44届东南地区年会论文集,ACM-SE,2006年,第679–684页
[112] Y.Ueda,T.Kamiya,S.Kusumoto,K.Inoue,《利用间隙位置检测间隙代码克隆》,载于《第九届亚太软件工程会议论文集》,APSEC 2002年,2002年,第327–336页
[113] V.Wahler,D.Seipel,J.Gudenberg,G.Fischer,通过频繁项集技术在源代码中进行克隆检测,摘自:第四届IEEE国际源代码分析与操作研讨会论文集,SCAM 2004年,2004年,第128–135页
[114] R.Wettel,R.Marinescu,《代码复制考古学:从小型复制片段中恢复复制链》,摘自:第七届科学计算符号和数字算法国际研讨会论文集,SYNASC 2005年,2005年,第8页
[115] T.Yamashina,H.Uwano,K.Fushida,Y.Kamei,M.Nagura,S.Kawaguchi,H.Iida,SHINOBI:用于软件维护的实时代码克隆检测工具,技术报告:NAIST-IS-TR2007011,奈良理工学院信息科学研究生院,2008
[116] Yang,W.:《识别两个程序之间的句法差异》,《软件实践与经验》21,第7期,739-755(1991)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。