我们正在从头开始开发一个 Web 项目,并正在研究以下静态代码分析工具。
- 约定(Checkstyle)
- 不良做法 (PMD)
- 潜在错误 (FindBugs)
该项目建立在 Maven 之上。我没有为此目的使用多种工具,而是在寻找一个灵活的解决方案并遇到了 SonarQube。
我们真的可以使用 SonarQube 实现 Checkstyle、PMD 和 Findbugs 的结果吗?
我们正在从头开始开发一个 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 服务器。
……几年后:不,不是!SonarQube 假设能够用自己的分析器覆盖所有规则,但仍然有来自 PMD 或 CheckStyle 的规则没有被 SonarQube 覆盖。例如:PMD ReturnFromFinallyBlock。
声纳远不止这些工具。最大的好处是 gui,它可以让您轻松配置任何东西。它提供的统计数据非常详细(代码行等)。它甚至为测试覆盖率等提供了很好的支持:)
这里可以好好看看: http: //nemo.sonarsource.org/
除了声纳之外,我仍然会使用这些工具,因为当有人违反规则时,它们可能会使 Maven 构建失败。声纳更具追溯性。
好吧,至少从 SonarQube 6.3+ 开始,Findbugs 似乎(目前)不再作为插件支持。Sonarsource 正在努力用自己的 Java 插件替换 Findbugs-rules。
他们甚至在此处列出了每个规则的替换状态列表,但现在已将其删除。
有关更多详细信息,请参阅https://community.sonarsource.com/t/where-is-dist-sonarsource-com-content/5353。