我熟悉一些可用于Java的免费静态分析工具,例如FindBugs和PMD。我想知道的是Klocwork和Coverity等商业产品如何与这些产品相抗衡。他们的优点和缺点是什么?
答案 0 :(得分:18)
我们使用一套开源和商业静态分析工具。不同的工具会发现不同类型的错误,有些会针对较低的误报率进行调整,但可能会遗漏一些实际问题。
根据我的经验,Findbugs可以很好地发现真正的问题,特别是如果你专注于团队建议的正确性错误。最近,Findbugs的开发人员也添加了一些基本的安全漏洞检查。 Coverity具有较低的误报率,特别是如果您不打开实验检查器,Coverity Prevent包含一个良好的趋势/聚类分析跟踪数据库。我不相信他们的线程检查器(静态或动态)工作 - 至少他们没有找到任何有趣的东西给我们。 Klocwork Developer for Java返回更高的误报,但我们发现他们对这些工具进行了最强大的安全检查。因此,这取决于您的优先级是质量检查(Findbugs,Coverity)还是安全漏洞分析(Klocwork或Fortify)。我们的一些开发人员也使用PMD来支持源代码审查,因为它有助于清理常规代码。
最近与NIST进行的名为“SATE:静态分析工具博览会”的项目回顾了各种不同的工具及其基本方法。 https://samate.nist.gov/index.php/SATE.html和其他对该项目的引用,例如OWASP。 一般的发现是,不同的工具有不同的优点和缺点,所以如果你想做一个彻底的工作,使用不止一个。
答案 1 :(得分:6)
我建议您尝试使用SONAR开源软件质量管理工具,专门用于持续分析和衡量源代码质量。 该软件采用代码分析工具的结果,整合结果并使您可以访问用户友好的界面。
答案 2 :(得分:4)
我没有直接使用Findbugs或PMD的经验,但遇到了很多人将他们与Klocwork和Coverity进行了比较。
我对反馈的一般看法是:
Findbugs和PMD更像是“工具”。您在桌面上运行的类型。它发现了广泛的潜在问题,但往往是嘈杂,意味着误报和“我不关心”的品种。它找到了一些好东西。我听到长期使用的反馈不一。有些人认为免费工具的投资回报率是无限的,但误报的确有成本。
毫不奇怪,Klocwork和Coverity,它们需要花钱,往往更加面向解决方案,可以更好地扩展到与团队合作,具有更高效,更易于使用的UI,并且往往不那么嘈杂。看起来他们的分析正在进行更深入的检查,因此如果你进行并排比较,会得到更好的结果。在整个团队中采用工具时,您对使用工具会有不同程度的热情,噪音因素是一个阻碍广泛采用的重大问题。当然有些东西可以支持你,等等。
一般来说,因为Findbugs和PMD是免费的,所以你会看到它是第一选择。许多公司看到价值并选择Coverity或Klocwork作为长期解决方案,尽管我也看到运行Findbugs和PMD。他们倾向于找到不同的东西,所以如果你的目标是尽可能多地找到并修复,那么将两者结合起来是件好事。
披露:我在代码完整性解决方案(codeintegritysolutions.com)工作,这是Coverity的合作伙伴。
答案 3 :(得分:3)
您肯定会在商业静态分析工具中找到的一个功能(并且您将无法在免费软件分析工具中轻松找到,至少在2008年,在OP时)是
报告:衡量软件质量趋势 随着时间的推移
正如本question about code metrics中所解释的那样,任何静态代码分析本身并不总是有意义的,因为你可以拥有:
您需要能够进行一些分类,并且需要检查特定缺陷是否随着时间的推移而越来越少,以帮助您确定要修复的内容的优先顺序。
在具有数千个类的遗留项目中尤其如此:您没有像这样修复许多文件上的缺陷,而没有良好的原因。这个原因可以通过免费软件工具找不到的良好报告和趋势分析推断出来。
更新:从2012年(4年后)起,声纳(现在2018年命名为“SonarQube”)"Historical Information" (aka "Time Machine") in its 4.x and 5.x series。
请注意project dashboards were dropped中的SonarQube 6.1(2016年9月):this thread
这些仪表板需要手动重新创建through a custom page
SonarQube 6.5使用“活动”页面恢复了一些仪表板,该页面获得(若干预定义和一个可自定义的)图表以显示项目的演变。
答案 4 :(得分:0)
这是商业分析工具列表:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java_2
覆盖率有几个工具:
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:这是大多数开源工具中没有的。