代码覆盖率分析(gcov)(转)
上一篇 /
下一篇 2008-08-11 12:48:40
/ 个人分类:SoftTest
为什么需要代码覆盖率分析?51Testing软件测试网&` \?2K#ZzU5KC
@ KF
j ^6{$TT4ARcX0在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些测试工具(test suite)来模拟或者重建执行脚本。如果测试程序组是彻底的,那么程序的各个功能都将被测试到并且都可以证明是可以工作的。51Testing软件测试网C&cyd*G)l~0@
51Testing软件测试网kC$|1W/s!v)?^#H{
但是怎样才算彻底呢?简单点说就是测试程序的每一条路径,验证每一个结果,执行每一条语句,证明没一句语句是没用的。gcov就是一个用来检验你的每一句语句是否都执行了的工具。51Testing软件测试网w\
]'sl5A
!b{o"|]w+g&D(q0什么是代码覆盖率分析?51Testing软件测试网V0Z]8B~)Re5w/z
代码覆盖率分析就是找到定位没用的或者不执行的代码的过程。没用的代码不会存在什么问题,但是他们会影响程序的可读性;不执行的代码则可能是未来bug的所在。所以找到他们,把他们从你的程序中移处是大有裨益的。51Testing软件测试网AtK [7V'`0\e
覆盖率分析主要有下面的几个过程:
phXK:M2f
@j7EP0 通过测试程序组找到不执行的程序段;51Testing软件测试网(nJ.u[ n4u*W2d ~L
添加额外测试程序组,以便增加代码覆盖率;
&FF$V [C \o8T4Gc0 决定代码覆盖率的定量测度,他也是程序质量的间接测度。
gpo ~:F1?@E0
代码覆盖率分析的缺陷
,t a BCy0c0代码覆盖率分析不能找出程序的逻辑错误。考虑一下下面的代码
2B3Ro!P h1BF,c)TW010: rc = call_to_xx ();51Testing软件测试网,vw,n"k}P
p3M
11: if (rc == ERROR_FATAL)51Testing软件测试网d R6Z'qS;Wm/D+g
12: exit(2); /* exit with error code 2 */
4hcE5iE#`+E013: else51Testing软件测试网7nO&WTgB D
14: /* continue on */51Testing软件测试网&TE{t4~v
当测试程序段运行到11行时,11行始终都不能为真。call_to_xx返回了另外的一个错误比如ERROR_HANDLE,除非我们加入这种错误的处理方式的代码。
l%QS a Mior2cz0代码覆盖测试工具不会告诉你什么是必须的,他们只能显示已经存在的代码的覆盖率。
'r
m\$gOi*]0
代码覆盖率的类型51Testing软件测试网j/{)}N%h6Ff^0E
gcov可以用来测量各种形式的代码覆盖率。最常见最有用的两种是分支覆盖(branch coverage)和循环覆盖(loop coverage)
:YLA/e7q0i0分支覆盖证明各个方向的每一条分支都被执行到了。循环覆盖试图证明循环内部的每一条路径都被测试到了。循环覆盖似乎非常的复杂,但基本上只要满足下面的三个状况,就可以作了。51Testing软件测试网7b2w
WW.dDq
1。循环条件不满足,循环没有内部没有执行;
;`r0wuQh0 2。循环条件就满足了一次,循环内部就执行了一次;51Testing软件测试网,o!nSc}k
3。循环条件至少满足了两次,循环至少执行了两次。