代码之家  ›  专栏  ›  技术社区  ›  Thomas Owens

PMD和findbugs有什么区别?

  •  103
  • Thomas Owens  · 技术社区  · 14 年前

    有一个 question comparing PMD and CheckStyle . 但是,我找不到关于PMD和findbugs之间的差异/相似性的很好的细分。我相信一个关键的区别是PMD在源代码上工作,而findbugs在编译的字节码文件上工作。但就能力而言,它应该是一个要么/要么选择,还是它们相互补充?

    3 回复  |  直到 9 年前
        1
  •  141
  •   snakile    14 年前

    我两者都用。我认为它们是相辅相成的。

    正如你所说的, PMD 在源代码上工作,因此会发现以下问题:违反命名约定、缺少大括号、错误放置的空检查、长参数列表、不必要的构造函数、缺少切入开关等。PMD还告诉您 Cyclomatic complexity 对于您的代码,我觉得非常有用(findbugs没有告诉您有关圈复杂度的信息)。

    FindBugs 处理字节码。以下是findbugs发现PMD不存在的一些问题:equals()方法在子类型上失败,clone方法可能返回空值,布尔值的引用比较,不可能的强制转换,32位in t被不在0-31范围内的值移位,包含自身的集合,equals方法始终返回true,无限循环等。

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

        2
  •  22
  •   Dekel    13 年前

    PMD最好的特点是 XPath规则 与规则设计器捆绑在一起,使您可以轻松地从代码示例(类似于regex和xpath gui构建器)构建新规则。findbugs具有更强的现成性,但是构建特定于项目的规则和模式非常重要。

    例如,我遇到了一个涉及2个嵌套for循环的性能问题,导致了O(n^2)运行时间,这很容易避免。我用PMD构造了一个 即席查询 ,以查看嵌套for循环的其他实例-//for statement/statement//forstatement。这又指出了问题的两个实例。这不是一般规则。

        3
  •  3
  •   kunal saxena    9 年前

    偏振模色散

    • 著名的
    • 广泛应用于工业
    • 可以在XML中添加规则
    • 提供错误级别和警告级别的详细分析
    • 您还可以扫描代码中的“复制和粘贴行”。重复代码。这为实现Java OOP提供了很好的思路。