逻辑覆盖测试法
定义
以程序内部的逻辑结构为基础的用例设计方法,它通过对程序逻辑结构的遍历实现程序的覆盖。
逻辑覆盖测试法分为:语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖六种。
//以下代码用于测试六种逻辑覆盖测试法
IntlogicExample(int x, int y){
int magic=0;
if(x>0&&y>0)
magic=x + y + 10; //语句1
else
magic = x + y - 10; //语句2
if(magic<)
magic=0; //语句3
return magic; //语句4
}
代码流程图如下
语句覆盖
定义
语句覆盖要求设计足够多的测试用例,运行被测程序,使得程序中每条语句至少被执行一次。
实例
测试用例编号 | 输入数据 | 预期输出 | 覆盖语句 |
---|---|---|---|
CASE1 | x=3 y=3 | magic=16 | 语句1、4 |
CASE2 | x=-3 y=0 | magic=0 | 语句2、3 |
(测试用例不唯一)
在这个实例中,无法判断运算中逻辑关系错误。当第一个判断语句if(x>0&&y>0)
被错写成if(x>0||y>0)
也能达到100%的语句覆盖,所以语句覆盖不能发现上述的逻辑错误。
判定覆盖
满足判定覆盖,则满足语句覆盖。
定义
判定覆盖,又称”分支覆盖“;要求设计足够多的测试用例,运行被测程序,使得程序中每个判断的”真“和”假“都至少被执行一次。
实例
在本例共有两个判断条件:if(x>0&&y>)
和if(magic<0)
测试用例编号 | 输入数据 | 预期输出 | 执行路径 |
---|---|---|---|
CASE1 | x=3 y=3 | magic=16 | b–>c–>e |
CASE2 | x=-3 y=0 | magic=0 | a–>c–>d–>e |
通过着两个测试用例,两个判断的真、假分支都已经被执行过,所以满足了判定覆盖的标准。
在这个实例中,无法判断运算中逻辑关系错误。当第一个判断语句if(x>0&&y>0)
被错写成if(x>0||y>0)
也能达到100%的语句覆盖,所以判定覆盖也无法发现上面的逻辑错误。
条件覆盖
定义
条件覆盖要求设计足够多的测试用例,运行被测程序,使得判定中的每个条件获得各种可能的结果;即每个条件至少有一次为真,有一次为假。
实例
本例共有两个判断条件:if(x>0&&y>)
和if(magic<0)
共计三个条件x>0、y>0、magic<0
测试用例编号 | 输入数据 | 预期输出 | 执行路径 |
---|---|---|---|
CASE1 | x=3 y=0 | magic=0 | a–>c–>d–>e |
CASE2 | x=-3 y=15 | magic=2 | a–>c–e |
通过这两个测试用例,三个条件的各种可能取值都满足了一次,达到了100%条件覆盖的标准。
条件覆盖职能保证每个条件至少有一次为真,而不考虑所有的判定结果。因此条件覆盖不能保证满足判定覆盖。
判定-条件覆盖
同时满足判定覆盖和条件覆盖
定义
判定-条件覆盖要求设计足够多的用例,运行被测程序,使得被测程序中的每个判断本身的结果(真、假)至少满足一次,同时,每个逻辑条件的可能值也至少满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。
实例
测试用例编号 | 输入数据 | 预期输出 | 执行路径 |
---|---|---|---|
CASE1 | x=3 y=3 | magic=16 | b–>c–e |
CASE2 | x=-3 y=0 | magic=0 | a–>c–>d–>e |
通过这两个测试用例,所有条件的可能取值都满足了一次,而且所有的判断本身的判定结果也都满足了一次。
判定-条件覆盖满足了判定覆盖准则和条件覆盖准则,弥补了二者的不足。但未考虑条件组合的情况。
条件组合覆盖
条件组合覆盖同时满足语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖
定义
条件组合覆盖要求设计足够多的测试用例,运行被测程序,使得被测程序中每个判定中条件结果的所有可能组合至少执行一次。
其测试用例需要注意三点:
1. 条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合;
2. 不同的判断语句内的条件取值之间无须组合;
3. 对于单条件的判断语句,只需要满足自己所有的取值即可。
实例
测试用例编号 | 输入数据 | 预期输出 | 执行路径 |
---|---|---|---|
CASE1 | x=3 y=3 | magic=16 | b–>c–e |
CASE2 | x=-3 y=0 | magic=0 | a–>c–>d–>e |
CASE3 | x=3 y=0 | magic=0 | a–>c–>d–>e |
CASE4 | x=-3 y=15 | magic=2 | a–>c–>e |
通过这四个测试用例,程序中所有条件取值的组合都被满足了一次。
路径覆盖
100%满足路径测试,一定能100%满足判定覆盖标准,单并不一定能100%满足条件覆盖,也就不能满足100%条件组合覆盖。
定义
路径覆盖要求设计足够的测试用例,运行被测程序,覆盖程序中所有可能的路径。
实例
测试用例编号 | 输入数据 | 预期输出 | 执行路径 |
---|---|---|---|
CASE1 | x=3 y=3 | magic=16 | b–>c–e |
CASE2 | x=-3 y=0 | magic=0 | a–>c–>d–>e |
CASE3 | x=-3 y=15 | magic=2 | a–>c–>e |
本例中共有4条路径,其中路径a-->c-->e
不可能实现,通过这三个测试用例,所有可能的路径都被满足了一次。