在SonarQube中,“Lines to Cover”和“Uncovered Lines”指标的含义有何区别?

29

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

SonarQube Coverage Overview

“待覆盖行”和“未覆盖行”指标有何区别?

我查看了SonarQube网站的指标定义页面,但那里的两个条目都没有帮助我。

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

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

从文本中可以看出,我期望未覆盖行数比待覆盖行数更高,因为前者可能包括空行。如果SonarQube在某种程度上理解代码,它也可能将异常处理排除在“可以由单元测试覆盖”的数字之外。

给定的数字显然与此相反,所以我必须没有正确理解含义。


我有一些单元测试在CI系统中运行,它们的代码覆盖率使用lcov和gcov进行编译。这些lcov数据会通过genhtml进行处理,生成单独的覆盖率报告,在某些情况下当前会出现数据问题,因此可能存在部分错误配置问题,增加了混淆的可能性。


@Mureinik,我不确定你的编辑是否正确。如果这是一个美国英语站点而不是英国英语站点,我可能会接受analyzed vs analysed(虽然两种方式在每个国家都是有效和常用的)。然而,Sonarqube似乎大多数时候使用以小写字母s开头的样式。当他们不使用小写字母s时,它们有一个大写字母S和Q:SonarQube。 - TafT
小写字母对我来说看起来很奇怪(这是一个名字,不是吗?),但没关系 - 已恢复。 - Mureinik
这是一个名称,但也是一个品牌/商标。我同意它看起来很奇怪,但在营销环境中可能算是“引人注目”的。感谢您再次花时间查看它。 - TafT
1个回答

29

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

在现实世界中,您的测试只能覆盖其中一部分。被遗漏的行称为“未覆盖行”。

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

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

3
哦,所以“行覆盖率”更类似于代码行数(LOC)计数。我一直误解为它是需要覆盖的行数(因此与未覆盖行非常相似)。感谢你的澄清。我建议进行强调编辑,以使我误读的部分的含义非常明显。 - TafT
2
需要覆盖的行与 ncloc(非注释代码行)类似,但并不完全相同。例如,在 Java 中,注解或接口声明会计入 ncloc,但不计入需要覆盖的行。 - Julien H. - SonarSource Team

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接