我们正在从头开始研究一个Web项目,并且正在研究以下静态代码分析工具。
该项目建立在Maven之上。我没有使用多种工具来实现这一目的,而是在寻找一个灵活的解决方案并且遇到了SonarQube。
我们是否可以通过SonarQube实现Checkstyle,PMD和Findbugs的结果?
Sonar将默认为Java项目运行CheckStyle,FindBugs和PMD,以及其他一些“插件”,例如Cobertura(代码覆盖)。然而,主要的附加值是它将历史记录存储在数据库中。然后,您可以看到趋势。您是在改进代码库还是反其道而行之?只有带内存的工具才能告诉你。
您应该在CI系统中运行Sonar,以便即使需要一些时间来执行(例如CPD - 复制粘贴检测器)也可以运行。你会有你的历史。例如,使用Eclipse插件,您可以更快地检测到违规行为 - 这很好 - 但是如果开始耗时太长,或者运行较少的“高质量插件”(例如跳过CPD或跳过代码覆盖率分析)。你不会有历史。
此外,Sonar还生成视觉报告“仪表板”样式。这使得它很容易掌握。借助Jenkins中的Sonar,您将能够向开发人员和管理人员展示过去几周和几个月内对代码库质量所做工作的影响。
Sonar使用这3个工具作为插件,并通过显示这些工具中的图表等来汇总来自所有三个数据的数据。所以他们是声纳的补充。
Sonar很棒,但是如果你想单独使用上面提到的工具并且仍然有很好的图形,你可以使用Analysis Collector Plugin作为Jenkins CI构建的一部分。这样做的一个小优点是,您可以将PMD / Findbugs / Checkstyle配置签入SCM并将其集成到Maven构建中,而不是依赖于单独的Sonar服务器。
声纳不仅仅是这些工具。最大的好处是gui,它可以让你轻松配置任何东西。它提供的统计数据非常详细(代码行等)。它甚至为测试覆盖等提供了很好的支持:)
在这里你可以看一看:http://nemo.sonarsource.org/
除了声纳之外,我仍然会使用这些工具,因为当有人违反规则时,他们可能会失败maven构建。声纳更具回顾性。
......几年后:不,不是! SonarQube假设能够使用自己的分析仪覆盖所有规则,但仍然存在SonarQube未涵盖的PMD或CheckStyle规则。请参阅例如:PMD ReturnFromFinallyBlock。
至少从SonarQube 6.3+开始,似乎Findbugs(目前)不再支持插件。 Sonarsource正致力于用自己的Java插件替换Findbugs规则。
他们甚至在这里列出了每条规则的替换状态:http://dist.sonarsource.com/reports/coverage/findbugs.html