[超详细有案例]理解白盒测试的5种逻辑覆盖

       白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖判定覆盖条件覆盖判定/条件覆盖组合覆盖路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。

(1)语句覆盖

        语句覆盖是最起码的结构覆盖要求,语句覆盖用覆盖率最强的测试用例,使得程序中每一条语句至少被执行一次

实例:

序号

输入数据

预期

覆盖语句

路径

1

x=1,y=7

X=8

X=x+y

OBCE

2

X=11,y=-3

X=14

X=x-y

OBDE

        由上可知,语句覆盖中第一个判定每次都会运行,如果第一次判定正确会直接结束本次运行,覆盖率不强,因此我们只需第一次错误的情况下跳到第二个测试去测试。

优点:不用细分每条判定表达式

缺点:只能针对程序逻辑中显示存在的语句,隐式逻辑分支无法测试,比如上面的例子加一个else

if,语句覆盖就不会考虑这种情况。

(2)判定覆盖

        判定覆盖也叫分支覆盖,它要求每次判定都要测试真或假。

序号

输入数据

预期输出

覆盖判定

路径

1

x=-1,y=1

X=0

Y1

OAE

2

x=1,y=7

X=8

N1Y2

OBCE

3

X=11,y=-3

X=14

N1N2

OBDE

        由上可知,每个真值或假值都至少执行一次

优点:判定覆盖具有和语句覆盖一样的简单性,无须细分,只要每个判定的T和F判定一次就行。

缺点:实际项目中,大部分判断语句都不会是简单的对与错,通常与多个语句相结合,如“case”,“else if”等。如果仅仅只测试最终结果,忽略每个条件的取值,肯定会有遗漏部分。

(3)条件覆盖

        条件覆盖的要求是判定中的每一个判定条件都获得一次结果,即每个条件至少有一次真值一次假值。

序号

输入数据

预期

条件取值

路径

1

x=1,y=7

X=8

T1T2T3T4

OBCE

2

X=11,y=-3

X=14

F1F2F3F4

OBDE

优点:比判定覆盖增加了对符合判定情况的测试,增加了测试路径。

缺点:需要足够多的测试用例,但条件覆盖不能保证判定覆盖,它只能保证每个条件至少有一次真值,考虑不了所有判定结果。

(4)判定/条件覆盖

        设计足够多的测试用例,使判定中每个条件结果可能至少出现一次,每个判定本身的所有可能结果也至少出现一次。

序号

输入数据

预期

条件取值

判定取值

路径

1

x=1,y=7

X=8

N1Y2

T1T2T3T4

OBCE

2

X=11,y=-3

X=14

N1N2

F1F2F3F4

OBDE

3

x=-1,y=1

X=0

Y1

T1T2

OAE

优点:是判定和条件的结合,弥补了两者的不足

缺点:没考虑条件的组合情况

(5)组合覆盖

        组合覆盖就是设计足够多的测试用例,让每个判定中的条件结果的所有组合可能至少出现一次

序号

输入数据

预期结果

条件取值

路径

1

X=-1,Y=9

X=0

T1T2T3T4

OAE

2

X=?,Y=?

?

T1T2T3F4

OAE

3

X=-1,Y=1

X=0

T1T2F3T4

OAE

4

X=?,Y=?

?

T1F2F3F4

OAE

5

X=?,Y=?

?

T1F2T3T4

OBCE

6

X=?,Y=?

?

T1F2T3F4

OBDE

7

X=-1,Y=-2

X=1

T1F2F3T4

OBDE

8

X=-1,Y=-3

X=2

T1F2F3F4

OBDE

9

X=10,Y=1

X=11

F1T2T3T4

OBCE

10

X=?,Y=?

?

F1T2T3F4

OBDE

11

X=?,Y=?

?

F1T2F3T4

OBDE

12

X=?,Y=?

?

F1T2F3F4

OBDE

13

X=10,Y=-1

X=9

F1F2T3T4

OBCE

14

X=11,Y=-3

X=14

F1F2T3F4

OBDE

15

X=10,Y=-3

X=13

F1F2F3T4

OBDE

16

X=9,Y=-3

X=12

F1F2F3F4

OBDE

优点:满足前面的判定覆盖、条件覆盖和判定/条件覆盖准则,判定每个条件所有可能都至少出现一次,覆盖率强。

缺点:线性的增加了测试用例的数量。

(6)路径覆盖

        路径覆盖是设计足够的测试用例,覆盖程序中的所有可能的路径

序号

输入数据

预期输出

路径

1

X=-1,Y=1

X=0

OAE

2

X=-1,Y=-2

X=1

OBDE

3

X=10,Y=1

X=11

OBCE

优点:可以对程序进行彻底的测试,比以上5种的覆盖面都广。

缺点:因为要对所以可能的路径都进行测试,那么会使的工作量指数级增长,有些情况下一些执行路径是无法执行的,比如:

if(!A)B++;
    else D--;

这两个语句只包括两条执行路径(A为真或假对B和D的处理)。真或假不可能都不可能存在,路径覆盖则认为包含了真或假的4条执行路径,这样很大程度上降低了测试效率,大量的测试结果累计也为排错带来了麻烦。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐