PMD和FindBugs有什么区别?


Answers:


151

我同时使用。我认为他们是相辅相成的。

如您所说,PMD在源代码上工作,因此会发现诸如以下问题:违反命名约定,缺少花括号,放错位置的空检查,长参数列表,不必要的构造函数,缺少换行符等。PMD还向您介绍了Cyclomatic复杂的代码,我觉得非常有帮助的(FindBugs的不告诉你的圈复杂度)。

FindBugs适用于字节码。以下是一些问题,FindBugs会发现哪些PMD不会发现:equals()方法在子类型上失败,clone方法可能返回null,对布尔值进行引用比较,无法转换,将32bit int移位了一个不在0-31范围内的值,包含自身的集合,equals方法始终返回true,无限循环等。

通常每个人都会发现不同的问题。同时使用。这些工具教会了我很多关于如何编写好的Java代码的知识。


当集合包含自身时,您看到的特定错误代码是什么?为什么FindBugs将其标记为可能的错误?
极客

很好,因为Sonarqube 6.3不再... Sonarqube现在需要Java 8,而Findbugs仅支持Java 7
Markus

22

PMD的最佳功能是XPath Rules,它与Rule Designer捆绑在一起,使您可以轻松地从代码示例构造新规则(类似于RegEx和XPath GUI构建器)。FindBugs具有更强大的功能,但是构造项目特定的规则和模式非常重要。

例如,我遇到一个涉及2个嵌套的for循环的性能问题,导致运行时间为O(n ^ 2),可以很容易地避免这种情况。我使用PMD构造了一个即席查询,以查看嵌套的for循环的其他实例-// ForStatement / Statement // ForStatement。这指出了该问题的另外2个实例。这不是通用规则。


2

PMD是

  • 著名
  • 在工业上广泛使用
  • 您可以在xml中添加规则
  • 为您提供有关错误级别和警告级别的详细分析
  • 您还可以扫描代码中的“复制和粘贴行”。重复的代码。这为实现Java oops提供了一个好主意。

不与FindBugs通话;它们是互补的,因为它们的问题集并不相同。
Stevers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.