有没有办法在 SonarQube 中添加额外的代码指标而无需编写我自己的插件?

Is there a way to add additional code metrics in SonarQube without having to write my own plugin?

我想开始在我的团队的代码库中随时间跟踪代码指标。我们决定我们主要关注的五个指标是对象之间的耦合、Halstead 的努力、方法缺乏凝聚力、加权方法复杂性和 Class 的响应。有很多工具可以一次性通过我们的代码测量这些指标,但我想跟踪它。一位同事提到了 Sonar(现在显然称为 SonarQube)。

我设置了一个实例,看起来它有我需要的时间线支持,但除了代码复杂性和代码覆盖率之外,它缺乏任何好的代码指标。大量的搜索结果告诉我一些事情,比如缺乏凝聚力的方法实际上过去是如何被弃用和删除的。我需要这些指标,无论它们是否得到官方支持或通过社区插件,但我还没有找到添加它们的未弃用的指标。​​

存在手动指标,但我们有数百个 class,我不想每周都对每个 class 进行手动测量。这将成为一份全职工作。我宁愿避免编写自己的插件。如果我走那条路,我还不如写一个每周运行一次的 cron 作业来获取最新信息,使用本地工具(当前使用 MetricsReloaded)获取我需要的分析,然后将本地分析转储到本地数据库中我以后可以用它做任何事。这些方法看起来很糟糕,必须存在更好的方法,对吗?

如何让 SonarQube 跟踪这些指标?

如果我理解正确的话,您想在 SonarQube 中导入一个工具的结果,以随时间跟踪某些指标。

我认为最好的做法是编写一个插件,而不是计算指标,而是导入您的工具生成的报告。这可能是最好的可重复使用选项,您不必重新发明轮子并从 SonarQube 功能中受益。 这就是通常编写覆盖插件的方式(java)。您可以查看 Cobertura 或 Clover 插件,甚至是 Generic Coverage 插件,了解我们如何在 SonarSource 编写此类插件。

您似乎没有为您的用例使用正确的工具。声纳并不意味着增量工作。 Teamscale 正是您要找的。它是一种增量分析工具,可以随着时间的推移跟踪指标和质量缺陷。 你可以

  • 从种类繁多的内置指标和分析
  • 中进行选择
  • 为 Teamscale 或
  • 实施您自己的自定义检查
  • 自动从外部工具上传指标和发现。 Teamscale 还将像任何其他发现一样随着时间的推移跟踪这些。

我认为第三个选项是您的用例所需要的。

附带说明:如果您真的想提高代码质量,您可能需要重新考虑您对指标的选择。您应该阅读以下 blog post,它解释了为什么 McCabe 是一个糟糕的选择。同样的论点也适用于您提到的指标。

让我们试试 SourceMeter - 一个源代码分析器工具。 它有很多源代码指标。 还有一个SonarQube的插件。