【问题标题】:Difference in codecoverage report of VSTS build and SonarQubeVSTS build 和 SonarQube 的代码覆盖率报告差异
【发布时间】:2018-09-02 00:48:20
【问题描述】:

我有一组带有几个测试项目的 .Net 项目。我运行了一个构建,从 VSTS 构建我看到我的 Lines Covered % 是 45.24(8213/18153),但是当我从 SonarQube 看到相同的内容时,它显示了 13.3%(361/2717)。我想知道声纳与 VSTS 相比如何显示不同的指标。此外,在代码覆盖率中分析的二进制文件数量从 VST 到 SonarQube 也不同。这是预期的吗?

  • SonarQube 版本:6.7.1,社区版
  • SonarC# 版本:6.8.2(内部版本 4717)
  • SonarQube VSTS 任务版本:3.2.0(4.1 版本根本不工作)
  • MSBuild 的 SonarScanner:4.1
  • 解决方案版本:VS 2015
  • VSTest Console.exe 版本:14.0.25420.1

如果需要进一步调查,请告诉我。

【问题讨论】:

  • 是什么让您相信他们会给出相同的值?
  • 如果分析的二进制文件的数量不同,那么之后的任何数字都不会相同。建议你专注于此
  • 另外值得注意的是,不同的代码分析工具可能有不同的方法,例如部分覆盖的行,因此即使在分析相同的文件时,它们有时也会有所不同。

标签: c# sonarqube azure-devops sonarqube-msbuild-runner


【解决方案1】:

数字上的差异很可能是由 SonarC# 对可执行行的计算引起的。详细解释in this blog post

简而言之:可执行行数被输入到覆盖率报告中未显示的文件的覆盖率分母中。原生工具在计算该百分比时会简单地忽略它们的存在。您在 SonarQube 中的覆盖率较低,因为它考虑了所有您的文件。

附录:我的回答是(正确且)与语言无关。 duncanp 的答案是特定于 MSDN 的,因此在这种情况下可能更相关。

【讨论】:

  • 感谢 duncanp 和 G. Ann 对此的解释。我还有另一个问题\怀疑,不包括测试项目,源代码中还有 2 个其他项目没有显示数据(文件夹信息未显示在 sonarqube 中)。我们想了解在什么基础上可以排除项目。或者有没有办法强制 SonarQube 分析特定项目。
  • 正如你所说的@sandeepmanthri,这确实是另一个问题。 :)
  • stackoverflow.com/questions/49512297/… 发布了一个新问题 :)
  • @sandeepmanthri 如果原问题已解决,您可以accept it as answer
【解决方案2】:

除了上述建议之外,还有其他几个原因会导致 VSTS 中报告的总体覆盖率数字不同(假设您使用的是标准 VS 代码覆盖率工具并且没有提供任何特殊配置)。

VS 代码覆盖率工具的默认行为是在计算覆盖率时包含测试代码,即 VSTS 中报告的数字是 [测试代码 + 产品代码] 的覆盖率,而SonarQube 中报告的数字仅考虑了产品代码。

因此,如果 VS 报告总体覆盖率,例如 80%,则意味着 80% 的 [test + product] 代码行正在执行。但是,通常情况下几乎所有测试代码都在执行,因此您的测试代码上的代码覆盖率很可能高于 80%,这意味着您的产品代码上的代码覆盖率将低于 80%报告(我上次详细分析解决方案的 VS 代码覆盖率报告时,结果发现产品代码的覆盖率比构建报告的汇总数字低 10%)。

此外,如果 pdb 文件可用,VS 覆盖率数字还将包括不属于您的解决方案的程序集(我正在查看包含第三方 fluentassertions.xml 的覆盖率报告示例)。 core.dllfluentassertions.dll 程序集,它们都显示为 >95% 未覆盖)。

VSTS 使设置收集代码覆盖率变得非常容易 - 您只需单击构建定义中的复选框,数字就会出现在构建摘要页面上。直观地说,您可能希望这个数字是您的产品代码的覆盖范围(SonarQube 显示的内容)。但是,几乎可以肯定情况并非开箱即用。包含测试代码会使数字向上倾斜,而任何包含 pdb 的第三方程序集都会使数字向下倾斜。

如果您想准确查看覆盖报告中包含哪些项目和程序集,最简单的方法是通过单击构建摘要页面下载并在 VS 中打开它。

可以更改默认的 VS 行为以覆盖产品代码,但这并不是特别简单。有关详细信息,请参阅 MSDN 上的 Customize code coverage analysis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多