总体覆盖率指标不反映我的本地结果

Posted

技术标签:

【中文标题】总体覆盖率指标不反映我的本地结果【英文标题】:Overall coverage metrics does not reflect my local results 【发布时间】:2017-06-18 04:50:54 【问题描述】:

我们的项目中混合了 javascript 和 typescript 源,我们的 SonarQube 实例中报告了这些源。

直到最近,我们还在运行纯 JavaScript 代码库,因此我们使用带有 Sonar 的默认 javascript 插件作为我们的指标。

现在已经将我们的大部分代码迁移到 typescript,我们已经配置了 SonarTsPlugin (https://github.com/Pablissimo/SonarTsPlugin) 并生成了两个 lcov 文件(使用 gulp 和 istanbul),一个用于我们的 js 源,另一个用于 ts。

在本地查看结果时,我们的综合覆盖率超过 95%(使用 gulp istanbul-combine),但当 SonarQube 在读取 lcov 文件后应用其计算时,它显示的整体覆盖率略低于 90%。我看过其他解释 Sonar 如何计算其整体数字的帖子 - Sonar-Overall Coverage

我试图弄清楚为什么会有如此大的差异。

我们将 Jenkins 与他们的声纳扫描器插件一起使用,当它连接到我们的声纳实例并发布结果时查看构建日志时,我看到以下内容:

整体覆盖率传感器似乎只有在读取与 javascript 源相关的 lov 文件后才会启动。

当我们的 typsecript 源的 karma-remapped-coverage.json 文件在日志中被进一步读取时,传感器似乎没有再次触发。我想知道这可能是我看到这种差异的原因吗?

【问题讨论】:

【参考方案1】:

您没有列出您的 SonarQube 版本,但 6.2 包含“强制覆盖率为 0”功能(对于分析器提供必要“可执行行”数据的语言)。标准覆盖率报告完全忽略了没有测试的文件。

假设我有 10 个文件,每个文件有 100 行。其中八个是 100% 测试的,其中两个根本没有测试。标准覆盖率报告会说我有 100% 的覆盖率,而实际覆盖率是 80%。

SonarQube 6.2 的“强制覆盖率为 0”功能为您提供更准确的图片,这很可能是您在 SonarQube 中看到较低总覆盖率的原因。

【讨论】:

嗯,好的,我们现在是 5.6 版,我们的基础架构团队在一段时间内不会有任何计划升级。 IIRC 5.6 包含一个错误版本的“强制覆盖为零”,所以这仍然可能是解释 刚刚阅读了文档,我对这个强制零覆盖设置感到困惑,为什么你认为它会在这里帮助我 - docs.sonarqube.org/display/PLUG/… 它说如果指定了 lcov 报告,它将优先于强制零覆盖设置,所以听起来这对我没有帮助,因为我提供 lcov 路径供 Sonar 使用 那我记错了。也许您应该编辑您的问题以包含版本。那我就放弃我的答案了。 好的,谢谢。经过进一步的挖掘,我想我已经找到了一些关于为什么我会看到差异的更多线索,但这需要是一个新问题!

以上是关于总体覆盖率指标不反映我的本地结果的主要内容,如果未能解决你的问题,请参考以下文章

《编码 - 代码分析》代码覆盖检测

对应分析不可以反映哪种关系

《嵌入式 - 嵌入式大杂烩》代码覆盖检测

为仅标头库获取有用的 GCov 结果

TeamCity 质量指标仪表板

分类器性能指标之ROC曲线AUC值