Java静态分析的覆盖范围

Coverity for Java static analysis

我想从使用或评估Coverity来静态分析Java代码的人那里获得评论。 我知道它在C / C ++世界中很流行,但是值得花钱进行Java分析吗?还是我最好使用PMD,Findbugs和其他开放源代码工具?


如果您今天不使用任何东西,那么我将从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 ++代码中的许多错误,这比我以前所有在寻找错误的职业中所发现的要多。) Java代码上的出色工作,而且您无法超越价格。但是重要的一点已经提出:在购买之前,请在真实代码中对它们进行尝试。不能替代现实,静态分析中的传统观点是,这些工具发现的东西几乎没有重叠。


正如其他人所说,最好的决定方法是尝试所有这些工具。

Coverity最近宣布了一种托管的静态分析即服务产品,称为Code Spotter(https://code-spotter.com/),目前处于测试阶段。它使用与Coverity企业产品相同的分析引擎,但它包装在不同的(简化的)用户界面中。由于这是一项托管服务,因此很容易使用它来了解Coverity分析功能。

在撰写本文时,Code Spotter仅适用于Java,但其他即将支持Coverity的语言也将很快推出。