|
Insure++有一个附加的覆盖性分析模块TCA。在查找程序中的错误时,Insure++记录下程序中的那些部分已被检测过。运行结束后,TCA利用保存的覆盖性信息,显示那部分代码已经检测过,多少代码被检测过,以及不同的代码块被执行多少次。
覆盖性分析的目的
测试覆盖性分析就是要确定那些程序、函数和语句已经被执行过,便于在整个开发和测试过程中,了解测试状态,提高测试质量。
Insure++检查错误的质量不完全依赖于开发和测试人员所付出的努力大小,它对执行过的任何代码进行完整而彻底的检查。目标应该是100%的覆盖性,以期达到更高的测试质量。TCA提供下列代码覆盖性信息:
- 应用级的覆盖性百分数。
- 函数级覆盖性。
- 代码块-不同程序语句块的覆盖性。
与Insure一起使用
Insure++覆盖性分析模块使您能够看到程序中的那些部分实际检测过及其执行次数。将运行时调试器和综合的测试数据集结合在一起,能够极大地改善测试效率并更快地提交可靠的程序。
与其它一些基于代码行的覆盖性分析工具方法不同,TCA能够将代码划分成逻辑块。块是一组连续的、顺序执行的语句(逻辑分支)的更简练的表示。
例如下列代码有三条语句,但只算一块:
i = 3;
j = i+3;
return i+j;
又如,下列代码只有一条语句:
if (x>0) y=1; else y=0;
但有三块:if
(x>0)、y=1和y=0。
因此以代码块为基础比以行为基础有更大的好处:
- 具有多个块的语句行可以分别对待(而非将整个语句作为一个单位计算),从而消除行覆盖性信息的不正确性。
- 消除了多余的信息量(块中的所有语句具有相同的覆盖性信息)。
- 将标号作为单独的组,能够实际检测那些路径(不仅是语句)已经被执行过了。
下图显示了经过几次测试后的结果。可以看到那些路径或分支已执行过,那些还没有。其中计数只给出在每块的开始,而非块中每条语句。
Insure++加TCA是一个强大的组合。Insure++只能对被执行的代码进行检查,而TCA能告诉程序员那些语句被执行过了。将运行时调试器和覆盖性分析工具一起使用,能够确定在测试过程中每一代码块已经被检查过,从而显著改善测试代码的质量。
BLOCK
COUNTS - by file
===================
FILE test.c 87% covered: 2 untested / 14 tested
#include
<ctype.h>
main(int argc, char **argv) {
int flag;
6
-> if (argc < 2 || !isdigit(argv[1][0]))
{
1 -> printf("Bad argument(s)n");
exit(1);
}
5 -> switch(atoi(argv[1]))
{
0,2,1 -> case 1: case 2: case 3:
3 -> flag = 1;
break;
1 -> case 4:
0 -> case 5:
1 -> flag = 2;
break;
1 -> default:
1 -> flag = 0;
break;
}
5,4,1 -> if (flag > 0) flag = 1; else flag = 0;
5 -> printf("Flag is %sn",
flag ? "1" : "0");
exit(0);
}
|