2024-03-04 19:04:53 | 来源: 互联网整理
代码克隆是指代码库中存在两个或多个相同或相似的源代码片段。 这是软件开发中的普遍现象。 代码克隆可以提高效率,但也可能意外引入外部漏洞。 下面简单总结一下代码克隆检测技术。
2-克隆的类型
代码克隆的类型主要分为两类,语法克隆( )和语义克隆( )。 语法克隆是指文本上相似的代码片段,而语义克隆是指功能上相似的代码片段。 基于这两个类别,代码克隆可以分为四个子类别,其中前三个是句法克隆,第四个是语义克隆。
目前学术界对Type1、2、3型克隆的检测已经相当成熟,尤其是Java、C++语言的克隆检测; 但Type 4型克隆的检测准确度仍然不高,无法满足工业应用标准。
四个类别的代码示例请参考下图——
其中s1、s2、s3、s4分别与Type-1、2、3、4的代码形式进行比较。 粗体部分为修改部分。 3-克隆检测的一般流程
翻阅代码克隆检测领域的相关论文,我们可以发现代码克隆检测通常分为三个步骤。
将源代码拆分为比较单元(单元,如class、block、),将比较单元转换为中间表达式(IR克隆空间代码,如token、AST、PDG),然后匹配(比较)这些比较单元的IR,通常形成比较单元克隆对的形式:一次比较两个(c1,c2)或多个(c1,c2,c3) 4-克隆检测算法的分类
代码克隆检测发展至今,主要分为五大类检测思路: 、 Token、 、 、 。 具体分类如下图所示。
:主要检测代码片段不同但功能相同的功能(Type4) :通过机器学习和统计分析进行克隆检测
这些类别对应的具体算法如下——
4.1.
图中的oss指的是open
4.2. 代币
4.3. .3.1 树
4.3.2
4.4. .4.1 PDG
4.4.2 其他
4.5. .5.1 机器学习
4.5.2 其他
5-克隆检测的历史趋势
代码克隆检测最早、最具开创性的工作是在 20 世纪 90 年代初完成的,如下表所示。 可以看出,除了近年来出现的ML方法外,代码克隆检测的开创性工作是在20世纪90年代和2000年代完成的。 这就是为什么作者说这个领域已经相当成熟了。
6- 基准
除了工具本身之外,代码克隆检测工具的基准测试和有效性测试领域也有许多发展。 比较有名的是 的 (2007) 和 (2015)
7-开源工具
作者整理了一些学术成果,已经开源。 地址如下。
PS 知乎不支持表格。 如果需要复制粘贴,请前往博客:
[1] A, Cerny T, Song E. Open-tools and for code-clone: Past, , and [J]. ACM,2020,19(4):28-39。
[2] Roy CK,Cordy JR,R.和代码克隆及工具:A[J]. , 2009, 74(7): 470-495。
热门手游排行榜