Skip to main content

代码查重调研

· 3分钟阅读
xkyii

资料

重复类型

最简单明了的是完全一样的代码片段。此外,还有如下类型的重复代码:

  1. 类型 Ⅰ,代码片段中除了空格、注释以及换行以外的内容完全一致
  2. 类型 Ⅱ,代码片段中除了空格、注释、换行以及变量名以外的内容完全一致
  3. 类型 Ⅲ,代码片段中除了空格、注释、换行以及变量名以外的语句可能有增删改,功能不变
  4. 类型 Ⅳ,两个或更多个代码段执行相同的运算,但通过不同的语法和变量来实现。

检测工具

不同的重复代码检测工具,由于在实现算法上有所不同,其所能检测的重复代码类型也不尽相同,如下表所示。

名称SimianPMD-CPDCloneDRCCCDCCFinderBauhausCodePro
检测类型Ⅰ,ⅡⅠ,ⅡⅠ,ⅡⅠ,Ⅱ,ⅢⅠ,Ⅱ,Ⅲ
支持语言C/C++,JavaC/C++,JavaC/C++,JavaC,JavaC/C++,JavaC/C++,JavaJava
授权类型商用,可免费开源商用,可免费开源开源商用,可免费开源
推荐星级**************

试试

准备

把两个目录映射出来

cmd
mklink /J mlcache-anno D:\Code\thzt\mlcache\mlcache-anno
mklink /J jetcache-anno D:\Code\xkrof\jetcache-2.7.5\jetcache-anno

automoss

jplag

# jdk依赖
scoop install openjdk21

pmd

  • Releases · pmd/pmd (github.com)下载版本
  • 解压,进入bin目录
  • 启动GUI pmd cpdgui
  • 选择目录,GO
  • 可以比较出文件及行数,暂时没有找到百分比之类的统计数据