PS:课程笔记(里面有余九九课本里的举例)
首先, 逻辑覆盖是一种基于程序内部逻辑结构的动态白盒测试方法;其次,根据逻辑覆盖的强度由低到高可以分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
语句覆盖(可执行语句)
在使用语句覆盖设计测试用例时,要求程序中可执行的语句必须至少被执行一次。它只关注每个判定表达式的最终结果逻辑值(Y或N),并不关注判定表达式中不同条件的取值情况,所以,某些测试用例是无法检测出错误的(eg:如果判定表达式是“if((x>0)&&(y>0))”错将“&&”写成“||”输入“x=1,y=1”程序结果还是Y,就无法检测出错误)。
设计测试用例:
void test(int x,int A,int B){
if(A>1)&&(B==0) //语句①
x=x/A; //语句②
if(A==2)||(x>1) //语句③
x++; //语句④
}
测试用例 | 输入数据 | (A>1)&&(B==0)① | (A==2)||(x>1)③ | 覆盖语句 | ||
x | A | B | ||||
Test Case1 | 1 | 2 | 0 | Y | Y | ②④ |
判定覆盖(判定表达式)
又称分支覆盖,要求程序中每个判定表达式的Y和N分支至少被执行一次。
设计测试用例:
测试用例 | 输入数据 | (A>1)&&(B==0)① | (A==2)||(x>1)③ | 覆盖语句 | ||
x | A | B | ||||
Test Case1 | 1 | 2 | 0 | Y | Y | ②④ |
Test Case2 | 1 | 3 | 1 | N | N | 无 |
或者
测试用例 | 输入数据 | (A>1)&&(B==0)① | (A==2)||(x>1)③ | 覆盖语句 | ||
x | A | B | ||||
Test Case1 | 1 | 3 | 0 | Y | N | ② |
Test Case2 | 2 | 2 | 2 | N | Y | ④ |
条件覆盖(判定条件)
要求程序中每个判定表达式里的每个判定条件的Y和N都要至少被执行一次。
设计测试用例(只写一组)
测试用例 | 输入数据 | (A>1) | (B==0) | (A==2) | (x>1) | 覆盖语句 | ||
x | A | B | ||||||
Test Case1 | 1 | 2 | 0 | Y | Y | Y | N | ②④ |
Test Case2 | 2 | 1 | 1 | N | N | N | Y | ④ |
判定/条件覆盖(里外)
要求每个判定表达式和每个判定表达式里的每个判定条件的Y和N都需要至少被执行一次。
设计测试用例(只写一组)
测试用例 | 输入数据 | (A>1)&&(B==0)① | (A==2)||(x>1)③ | (A>1) | (B==0) | (A==2) | (x>1) | 覆盖语句 | ||
x | A | B | ||||||||
Test Case1 | 2 | 2 | 2 | N | Y | N | N | Y | Y | ④ |
Test Case2 | 1 | 4 | 0 | Y | N | Y | Y | N | N | ② |
条件组合覆盖(里外组合)
要求每个判定表达式里的判定条件的Y和N的组合(就是1下面有11和12两个条件,那么组合有“YY”,"YN","NY","NN"四种组合)至少被执行一次。
设计测试用例(只写一组)
测试用例 | 输入数据 | (A>1) | (B==0) | (A==2) | (x>1) | 覆盖语句 | ||
x | A | B | ||||||
Test Case1 | 4 | 2 | 0 | Y | Y | Y | Y | ②④ |
Test Case2 | 1 | 1 | 1 | N | Y | N | N | 无 |
Test Case3 | 2 | 2 | 1 | Y | N | Y | N | ④ |
Test Case4 | 2 | 1 | 1 | N | N | N | Y | ④ |
路径覆盖(路径)
要求所有路径至少被执行一次。(对于较复杂的循环结构程序很难做到)
设计测试用例(只写一组)