在 SonarQube 中,"Lines to Cover" 和 "Uncovered Lines" 指标之间的含义有何不同?

In SonarQube what is the difference in meaning between the "Lines to Cover" and "Uncovered Lines" metrics?

我正在 SonarQube 分析的 C++ 项目的“度量”选项卡中查看覆盖率报告。在该页面上,我的摘要信息如下:

"Lines to Cover" 和 "Uncovered Lines" 指标有什么区别?

我看过 the sonarqube website's Metric Definitions page 但那里的两个条目对我没有帮助。

要覆盖的行数 - 单元测试可以覆盖的代码行数(例如,空白行或完整注释行不被视为要覆盖的行数)。

未覆盖行数 - 单元测试未覆盖的代码行数。

按照阅读的方式,我希望未覆盖的行数比覆盖的行数多,因为前者可能包含空行。如果 sonarqube 在某种程度上理解代码,它也可能从 "could be covered by unit tests" 数字中排除异常处理。

给定的数字显然是相反的,所以我一定没有理解正确的意思。


我有一些单元测试 运行 作为 CI 系统的一部分,它们的代码覆盖率是使用 lcov 和 gcov 编译的。 lcov 数据通过 genhtml 传递以制作单独的覆盖率报告,目前在某些情况下会提供数据,因此我可能有部分错误配置问题增加了混乱。

"Lines to Cover" 是您的 "production" 代码中的总行数,在所谓的完美世界中,您应该对其进行测试。这是源代码文件中的每一行,不是注释、空白或类似的非代码行。

在现实世界中,您的测试只会涵盖其中的一部分。遗漏的行是 "Uncovered Lines".

换句话说,您可以将 "Coverage" 表示为:

"Coverage" = 100% - 100 * "Uncovered Lines" / "Lines to Cover"