商业Java静态分析工具与免费的Java静态分析工具相比如何?

How do commercial Java static analysis tools compare with the free ones?

我熟悉一些可用于Java的免费静态分析工具,例如FindBugs和PMD。 我想知道的是,诸如Klocwork和Coverity之类的商业产品如何与之抗衡。 他们的优缺点是什么?


我们使用一套开源和商业静态分析工具。不同的工具会发现不同类型的错误,并且为降低误报率而对某些错误进行了调整,以可能遗漏一些实际问题为代价。

以我的经验,Findbugs在发现实际问题上做得很好,尤其是如果您按照他们的团队的建议专注于正确性错误时,尤其如此。最近,Findbugs的开发人员还添加了一些基本的安全漏洞检查。 Coverity的误报率很低,尤其是在您不打开其实验检查器的情况下,Coverity Prevent包括一个不错的跟踪数据库,可用于趋势/集群分析。我还不确定他们的线程检查器(静态或动态)是否有效-至少他们没有发现对我们有用的东西。 Klocwork Developer for Java返回的误报率更高,但我们发现它们对这些工具的安全性检查能力最强。因此,这取决于您的优先级是质量检查(Findbug,Coverity)还是安全漏洞分析(Klocwork或Fortify)。我们的一些开发人员还使用PMD支持源代码审查,因为它有助于常规代码清除。

最近与NIST进行的一个名为" SATE:静态分析工具博览会"的项目审查了各种不同的工具及其底层方法。
https://samate.nist.gov/index.php/SATE.html以及对该项目的其他引用,例如在OWASP。
总的发现是,不同的工具各有优缺点,因此,如果您想做一个透彻的工作,请使用多个工具。


我建议您尝试使用SONAR一个开源软件质量管理工具,该工具致力于持续分析和衡量源代码质量。
该软件从代码分析工具获取结果,合并结果并允许您访问用户友好的界面。


我没有使用Findbugs或PMD的直接经验,但是遇到了很多将Klocwork和Coverity进行比较的人。

我对反馈的一般看法是:

Findbugs和PMD更具"工具性"。您将在桌面上运行的事物的类型。它发现了各种各样的潜在问题,但往往很吵,这意味着假阳性和"我不在乎"品种。它确实找到了一些好东西。我听说过有关其长期使用的反馈。有人认为免费工具的投资回报率是无限的,但是误报肯定要付出代价。

毫不奇怪,花钱的Klocwork和Coverity往往更注重解决方案,也可以更好地与团队合作进行扩展,具有更高效,更易于使用的UI,并且噪声较小。他们的分析似乎正在做更深入的检查,因此,如果进行并排比较,将会得出更好的结果。在整个团队中采用某个工具时,您对工具的使用会产生不同程度的热情,而噪声系数是一个阻碍广泛采用的大问题。当然,有些事情需要获得支持以支持您,等等。

通常,由于Findbugs和PMD是免费的,因此您将其视为第一选择。许多公司看到了价值,并选择Coverity或Klocwork作为长期解决方案,尽管我也看到同时运行Findbugs和PMD。他们往往会发现不同的事物,因此,如果您的目标是尽可能地找到并解决问题,则最好将两者结合使用。

披露:我为Coverity的合作伙伴Code Integrity Solutions(codeintegritysolutions.com)工作。


您肯定会在商用静态分析工具中找到一个功能(并且至少在2008年,在运行OP时,您会在免费软件分析工具中不容易找到该功能)是
报告:衡量一段时间内的软件质量趋势

如本问题中有关代码量度的问题所述,任何静态代码分析本身并不总是有意义的,因为您可以:

  • 太多"缺陷"无法修复
  • 报告的缺陷类别过多

您需要能够进行一些分类,并且需要检查特定缺陷是否随着时间的流逝越来越少,以帮助您确定要修复的问题的优先级。

在具有数千个类的旧项目中尤其如此:您没有充分的理由就不能修复许多文件上的缺陷。可以从良好的报告和趋势分析中推断出该原因,而免费软件工具则找不到。

更新:从2012年(4年后)开始,Sonar(现在在2018年命名为" SonarQube")在其4.x和5.x系列中具有"历史信息"(又名"时间机器")。
请注意,这些项目仪表板已在SonarQube 6.1(2016年9月)中删除:请参阅此线程。
这些仪表板需要通过自定义页面手动重新创建。
SonarQube 6.5通过"活动"页面还原了一些仪表板,该页面获取(几个预定义的和一个可自定义的)图表来显示项目的发展。


以下是商业分析工具的列表:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java_2

Coverity有几种工具:
http://www.coverity.com/html/coverity-readiness-manager-java.html:这应该与findbugs和PMD相提并论,但具有更好的呈现方式

预防:http://www.coverity.com/html/prevent-for-java.html:虚假偏低。

线程分析器:http://www.coverity.com/html/coverity-thread-analyzer-java.html:这是大多数开放源代码工具中所没有的。