我想从使用或评估过 Coverity 以静态分析 Java 代码的人那里获得评论。我知道它在 C/C++ 世界中很流行,但是否值得花钱进行 Java 分析,还是我最好使用 PMD、Findbugs 和其他开源工具?
4 回答
如果您今天不使用任何东西,我将从 Findbugs 和 PMD 开始。它们易于安装和使用。首先使用 Findbugs 专注于检查和修复正确性错误 - 他们建议从高和中等严重性正确性错误开始,因为检查器的误报率非常低,您将获得良好的时间回报。让开发人员使用 PMD 清理代码,并使用 Eclipse 中的 Findbugs 插件来审查新代码。渐进式工作将使开发人员了解并认同这些工具的有用性。
与 C/C++ 检查器相比,Coverity 的 Java 检查器仍然很弱。我们使用 Findbugs、PMD、Coverity 和 Klocwork,因为它们都有不同的优势,而且我们很偏执。如果你不是偏执狂,你可以坚持使用开源工具并获得很多价值。或者,如果您需要安全检查:那么 Klocwork 或特别是 Fortify 应该为您做更彻底的工作。
我会提供一个有点相关的答案。我已经将 Klocwork 用于 Java 和 C 代码。Klocwork 是 Coverity 的紧密竞争对手……在成本方面它们大致相同(仔细看,在你真正购买所需的东西之前,Klocwork 看起来更便宜),而在功能方面它们来回竞争。
对于 C/C++,这很棒。对于 Java.... 嗯,它帮助找到了很多资源泄漏(#$@^#ing Java 开发人员似乎忘记了文件句柄等资源不是垃圾收集的),但它似乎并没有找到很多“关键”错误。这可能是因为语言本身确实有助于防止一些更基本但难以发现的错误(数组溢出、指针损坏等)。
让 Coverity 运行演示,他们非常乐意。看看他们找到了什么样的东西。
我将在前面的答案中添加一个有限的我,在某种程度上受到我所约束的 Coverity NDA 的限制。Coverity Prevent 在发现开源 C/C++ 代码中的错误方面有着令人印象深刻的公开记录,但他们的 Java 产品要更新得多。(Coverity 有一份关于我的前雇主的新闻稿,所以我可以说它确实帮助发现并修复了我们 C/C++ 代码中的许多错误,比我在之前的所有错误搜寻职业中发现的要多。) FindBugs 确实Java 代码方面令人印象深刻的工作,而且您无法击败价格。但重要的一点已经提出:在购买之前在您的真实代码上试用它们。现实是无可替代的,静态分析中的传统观点是,工具发现的内容几乎没有重叠。
正如其他人所说,最好的决定方法是尝试所有这些工具。
Coverity 最近宣布了一个名为 Code Spotter ( https://code-spotter.com/ ) 的托管静态分析即服务产品,目前处于测试阶段。它使用与 Coverity 企业产品相同的分析引擎,但封装在不同的(简化的)用户界面中。由于这是一项托管服务,因此很容易使用它来了解 Coverity 分析功能。
在撰写本文时,Code Spotter 仅支持 Java,但其他 Coverity 支持的语言应该很快就会推出。