在 SonarQube 中,“覆盖线”和“未覆盖线”指标之间的含义有什么区别?

问题描述 投票:0回答:2

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

“覆盖线路”和“未覆盖线路”指标有何区别?

我查看了sonarqube 网站的度量定义页面,但那里的两个条目对我没有帮助。

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

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

按照阅读的方式,我预计未覆盖的行数将比覆盖的行数更高,因为前者可能包含空白行。如果 sonarqube 在某种程度上理解了代码,它也可能从“可以被单元测试覆盖”号码中排除异常处理。

给出的数字显然是相反的,所以我一定没有正确理解其含义。


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

unit-testing sonarqube code-coverage gcov lcov
2个回答
29
投票

“要覆盖的行数”是“生产”代码中的总行数,在所谓的完美世界中,您应该对其进行测试。这是源代码文件中的每一行,不是注释、空白或类似的非代码行。

在现实世界中,您的测试只会涵盖其中的一些。错过的线路是“未覆盖的线路”。

换句话说,您可以将“覆盖范围”表示为:

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

0
投票

我今天摸索到同样的问题,只是在这里添加我的答案,以防我需要刷新我的记忆:P

要覆盖的行数:存储库中可以用测试用例覆盖的合格行数。

Uncovered Lines:仍未覆盖的行总数。

© www.soinside.com 2019 - 2024. All rights reserved.