Jenkins Cobertura(与gcov一起) - 覆盖统计数据意味着什么?

时间:2018-01-29 15:23:03

标签: c++ testing jenkins gcov test-coverage

我目前正在为Qt项目编写单元测试。我想通过 Cobertura 插件使用Jenkins提供的统计信息(gcov下方用于获取统计信息)。

:~$ gcov -v
gcov 5.4.0 20160609

:~$ gcc -v
gcc version 5.4.0

然而,在我看了看桌子后(见下文),我真的很惊讶地发现特别是条件差的覆盖范围。对于第一个(参见按文件覆盖细分)我认为我实际上已经完成了,因为代码只有三个if s(每个都有一个条件),我的测试涵盖所有(也通过调试检查这一点,以确保)。所以我真的很困惑这些数字实际意味着什么以及如何解释它们以使我的单元测试更好。

enter image description here

我甚至开始认为一些糟糕的结果可能是由于使用了Qt,因为它并不完全是纯粹的C ++和所有"额外的" (插槽,信号,MOC文件等)可能是gcov无法正常处理的内容。

1 个答案:

答案 0 :(得分:0)

检查带有显示的红色/绿色覆盖标记的带注释的源清单应该有所帮助。

彩色条内的数字是行数,因此47/108表示由条件控制的108行中的47行代码具有覆盖率。

对于每个条件,您至少需要两个单元测试:每个分支一个。

如果有&&或||在条件下-或其他任何条件(例如逻辑表达式)下,则必须使用每种组合以达到100%。

也不要忘记

a = (j == 0) ? c : d; 

(至少)需要两次测试!

此外,如果使用C ++,请参见Why gcc 4.1 + gcov reports 100% branch coverage and newer (4.4, 4.6, 4.8) reports 50% for "p = new class;" line?