> 攻略 > 手游攻略 > 详情

克隆检测的通用流程和分类代码克隆技术的简单整理

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。

热门手游排行榜