资料
- MOSS (stanford.edu)
- pmd/pmd: An extensible multilanguage static code analyzer.
- jplag/JPlag: State-of-the-Art Software Plagiarism & Collusion Detection
重复类型
最简单明了的是完全一样的代码片段。此外,还有如下类型的重复代码:
- 类型 Ⅰ,代码片段中除了空格、注释以及换行以外的内容完全一致
- 类型 Ⅱ,代码片段中除了空格、注释、换行以及变量名以外的内容完全一致
- 类型 Ⅲ,代码片段中除了空格、注释、换行以及变量名以外的语句可能有增删改,功能不变
- 类型 Ⅳ,两个或更多个代码段执行相同的运算,但通过不同的语法和变量来实现。
检测工具
不同的重复代码检测工具,由于在实现算法上有所不同,其所能检测的重复代码类型也不尽相同,如下表所示。
名称 | Simian | PMD-CPD | CloneDR | CCCD | CCFinder | Bauhaus | CodePro |
检测类型 | Ⅰ | Ⅰ,Ⅱ | Ⅰ,Ⅱ | Ⅰ,Ⅱ | Ⅰ | Ⅰ,Ⅱ,Ⅲ | Ⅰ,Ⅱ,Ⅲ |
支持语言 | C/C++,Java | C/C++,Java | C/C++,Java | C,Java | C/C++,Java | C/C++,Java | Java |
授权类型 | 商用,可免费 | 开源 | 商用,可免费 | 开源 | 开源 | 商用,可免费 | 开源 |
推荐星级 | ** | *** | ** | * | * | ** | *** |
试试
准备
把两个目录映射出来
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
- 可以比较出文件及行数,暂时没有找到百分比之类的统计数据