检测重复代码的工具(Java)

时间:2010-06-21 02:04:21

标签: java refactoring code-analysis

我在一个项目中,以前的程序员一直在复制粘贴代码。这些代码实际上是相同的(或非常相似),它们可以重构为一个。

我花了无数个小时手动重构这些代码,但我认为必须有更好的方法。有些是非常简单的静态方法,可以转移到祖先类中(但是被以前的初级程序员复制粘贴)。

是否有可以检测到此情况并提供报告/建议的代码分析工具?如果可能的话,我更喜欢免费/开源工具。

6 个答案:

答案 0 :(得分:25)

我使用以下工具:

这两个工具都支持代码重复检测。但是他们都缺乏建议你如何重构代码的能力。

JetBrains IntelliJ IDEA Ultimate具有良好的静态代码分析和代码复制支持,但它不是免费的。

答案 1 :(得分:5)

Duplicate Code Tools上维基百科文章中列出的大多数工具都会检测许多不同语言的重复项,包括Java。

答案 2 :(得分:5)

SonarQube可以检测重复的代码,但不建议消除它们。它是免费的 - 虽然使用默认设置它只能检测词法上相同的克隆

答案 3 :(得分:1)

Simian或PMD CPD。前者支持更广泛的语言,但对商业项目不是免费的。

答案 4 :(得分:0)

http://checkstyle.sourceforge.net/支持查找重复项

答案 5 :(得分:0)

请参阅我们的SD Java CloneDR,这是一种用于在大型Java系统中检测精确和接近错过重复代码的工具。

CloneDR将发现代码克隆,尽管有空格更改,换行符,注释插入删除,常量或标识符的修改,以及在许多情况下,甚至用一个或一个语句块替换一个语句。

它显示了每个克隆集的位置,每个单独的克隆,克隆的抽象,它们具有共享的共性和抽象的参数化,以显示每个克隆实例如何从抽象中派生。

它在大多数Java系统中找到10-20%的克隆。