abstract:
代码克隆的综述
S1 INTRODUCTION AND MOTIVATION
代码克隆的利弊:
利:可以有效地去耦合,避免其他一些可能的错误;
弊:当被复制的那段code中带有bug的话,他的复制版本中都会含有bug。
但是代码克隆操作又是不可避免的,因此,代码克隆应该得到有效的检测和管理。
S2 A SYSTEMATIC REVIEW OF CLONE LITERATURE
Robert Tiras搜集了一个从1994~2013的论文库,主要分为以下几类:
1、克隆检测;(主要是一些检测技术和工具)
2、克隆分析;(主要是分析克隆的性质,如原因,存在性和影响,克隆重组的影响)
3、克隆管理;
4、克隆检测技术和工具的评价;
研究情况:
四个分类的研究情况:可以发现,克隆的分析和克隆的检测论文比较多
4个类别的发表的数量:未来在克隆的管理上,研究更有潜力,同时,对于克隆工具的评估的论文也相对较少。
S3 CLONE MANAGEMENT
克隆管理包含克隆检测,克隆避免和消除克隆,追踪克隆代码,克隆代码的重构。
A. 代码克隆的定义
Ira Baxter给出一种比较模糊的定义:“Clones are segments of code that are similar according to some definition of similarity"。每个研究者可能因为他们的检测工具对于代码的表现形式和检测机制的不同,他们对于相似的定义也不同。主要分为一下以下几类克隆:
1——相同的代码片段,除了代码的空格数和注释不同;
2——相同结构的代码片段,除了变量名,常量名,类型名,顺序和注释不同;( near-miss clones)
3——同第二种相似,但还进一步允许有不同的操作符,如加减等;( near-miss clones)
4——实现相同的功能,但是实现的方法不同;
检测目的的不同,导致对克隆的定义也不同。我们并不希望能够有一个对“克隆”的统一定义,而是希望基于特定任务的相似性分类可以在未来出现,以及可以进一步区分上下文和克隆的目的。
对于代码克隆的研究不应该仅仅只局限于源代码,还应该扩展到基于模型,甚至是在电子表格中的克隆。
B 克隆管理
S4 克隆检测
不同的克隆检测技术:
1、追踪剪切板的操作;
2、相似性度量比较;
3、文本比较;
4、基于token的比较;
5、句法比较;
6、基于PDG(程序依赖图)的比较;
7、基于hash的比较;
8、基于低级代码的比较(如汇编、java字节码)
9、其他。
S5 集成克隆检测
把克隆检测与IDE或版本控制工具结合起来。
文中列举了大量的工具,但是极少数可以处理第三类clone。
S6 克隆检测报告
为了最小化克隆的信息, Harder and Göde提出了一种可扩展的模式——Rich Clone Format (RCF),包括克隆数据的存储,交换和一致性。但是,它也没有解决所有问题。因为没有一个统一的概念模型,所以需要多个研究团队在一起讨论后才能得出结论。
S7 克隆追踪
源码的改变可能使得之前的克隆信息失效,因此,要更新克隆信息,有两种方法:
1、重新检测:每一次代码改变,都可能触发克隆检测机制,重新检测一遍,这种方法开销太大;
2、增量式检测:检测仅在源码被修改的位置进行,在原有的基础之上加以改动,
S8 克隆演化分析
克隆的稳定性,克隆演化与软件的缺陷。克隆的可视化。
克隆演化的“家族系谱图”
S9 克隆注释
便于其他编程人员的阅读
S10 克隆再造/重构技术
克隆的泛型,设计模式,软件重构模式,同步修改。
1、泛型和模版:可以减少冗余的代码;
2、一致性重命名;
3、重构模式;
S11 分析和识别潜在的克隆重构
1、代码克隆分布和属性的可视化
散点图,hasse图,html等等。
2、成本效益分析和重构步骤
成本效益分析困难
S12 代码重复的根本原因
1、开发策略:当有相似的需求时,重用现有的代码通过拷贝的方式比较简便;
2、维护成本:现有的代码已经被测试过,复制的话可以节约成本;
3、克服潜在的局限性:开发者为了追求效率,并未遵循正确的开发策略,相似问题找相似代码解决;
4、无意中进行克隆:相同的API,写的代码高度的一致性。
S13 克隆管理策略
分三类:
1、克隆纠正:删掉代码中所有的克隆;
2、克隆预防:组织新的克隆活动;
3、克隆补救:删掉一些不好的克隆;
S14 克隆管理系统的设计
A 集成架构方案:
1、架构中心;
2、集成架构;
3、分散架构;
B 克隆管理触发事件:
1、主动触发;
2、系统触发;
3、克隆范围;
C 克隆管理的范围和时间点;
S15 克隆管理的工业应用
目前应用的程度还不高
S16 总结