【发布时间】:2010-05-13 14:51:03
【问题描述】:
我已经尝试了几种不同的 Java 静态分析器,特别是 Findbugs 和 PMD。
我正在寻找可能值得在 Java 代码上运行的其他静态分析器的示例。
【问题讨论】:
-
我现在有两个建议 Findbugs 的答案,我必须承认它看起来确实不错。这是普遍共识吗?
标签: java static-analysis
我已经尝试了几种不同的 Java 静态分析器,特别是 Findbugs 和 PMD。
我正在寻找可能值得在 Java 代码上运行的其他静态分析器的示例。
【问题讨论】:
标签: java static-analysis
在FindBugs和PMD旁边,还有Bandera、ESC/Java和JLint。您可以找到它们的比较here (PDF)。以下是相关性摘录:
错误类别 - 示例 |电调 |查找错误 |林特 | PMD -------------------------------------------------- +-----+----------+--------+------ 常规 - Null 取消引用 |五 |五 |五 |五 并发 - 可能的死锁 |五 |五 |五 |五 异常 - 可能的意外异常 |五 | | | 数组 - 长度可能小于零 |五 | |五 | 数学- 除以零|五 | |五 | 条件,循环 - 无法访问的代码 | |五 | |五 字符串 - 使用 == 或 != | 检查相等性|五 |五 |五 对象覆盖 - 相等对象/相等哈希码 | |五 |五 |五 I/O 流 - 流未在所有路径上关闭 | |五 | | 未使用或重复的语句 - 未使用的本地 | |五 | |五 设计——应该是一个静态内部类| |五 | | 不必要的声明 - 不必要的退货 | | | |五注意:文章是2004年的文章,工具可能同时改进了。
如您所见,FindBugs 和 PMD 的发现非常多,也是最流行的静态分析器工具。但是,现在智能 IDE 也涵盖了某些方面,例如 null 尊重、未使用的本地和无法访问的代码。例如 Eclipse 可以对它们发出警告。
【讨论】:
Findbugs 几乎是标准,因为它非常健壮(对于从研究开始的工具)、定期维护,并且最新版本确实涵盖了大部分基础。它还具有出色的 Eclipse 集成以及各种过滤和排序选项,可让您获得首选的信噪比。
我唯一的愿望是它可以提供建议的工作流程,因此我可以选择忽略特定实例(例如,对于我无法控制的代码)而只查看更改。当我有备用核心时,持续分析也很好。
我熟悉一些非常有前途的研究工具,它们使用静态分析来检查 API 一致性或线程分析。不幸的是,它们都不是真正的生产质量,它们需要开发商方面的一些投资。
【讨论】:
这里有java静态分析工具列表:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java
Findbugs 是我个人的最爱,因为它易于使用的界面和全面的分析,另外还有 eclipse 和 idea 的插件。
【讨论】:
我建议您使用 IntelliJ 中的代码分析器。它有 600 多项易于打开和关闭的检查,但主要原因是许多检查都有快速修复。
如果您只是生成报告,您可能会发现 1000 或 10,000 多个已标记的问题。当每个问题通常没有什么价值但存在引入错误的真正风险时,解决这个问题可能会很乏味。不过,IntelliJ 可让您在几分钟内选择并修复 1000 多个问题,同时大大降低了引入错误的风险。
IntelliJ CE 是开源和免费的,并且具有此功能。
【讨论】:
This page 有一些开源代码分析器的列表(带有小描述)。
【讨论】: