快速解决软件测试的逻辑方法运用

白盒测试逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)

逻辑覆盖测试:

  • 语句覆盖:每条语句至少执行一次
  • 判定覆盖:每一判定的每个分支至少执行一次
  • 条件覆盖:每一判定中的每个条件,分别按真、假至少各执行一次
  • 判定/条件覆盖:同时满足判定覆盖和条件覆盖的要求
  • 条件组合覆盖:求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次

注: 上述逻辑覆盖测试的5种标准从上至下发现错误的能力由弱变强

接下来详细介绍每一种覆盖的条件

一、语句覆盖:

61869ab345a44c5aa267f2f75a8cc346.png
只需要遍历路径ace,便将程序中的所有语句便都执行了一次。生成的用例及其遍历路径如下:

A=2,B=0,X=4 ace

缺点:语句覆盖是“最弱的覆盖”,它难以发现程序中的错误。①程序中存在一条x的值未发生改变的路径abd没有测试。②它无法发现判定的错误,比如第一个判定条件也许应该是“或”,而不是“与”。③无法发现条件的错误,比如第二个判断中的条件X>1,也许事实上应该是X>0。

二、判定覆盖

49b41e4f8d7d4707bdffdbd2ea234e5b.png

只需要涵盖路径ace和abd,或涵盖路径acd和abe,就可以使得两个判定为“真”和为“假”的分支都执行一次。如果选择后一种情况,生成的用例及其遍历的路径如下:

A=3,B=0,X=3 acd
A=2,B=1,X=1 abe

我们仅有50%的可能性遍历到X值未发生改变的路径,即,只有我们选择涵盖路径ace和abd的情况,而不是涵盖路径acd和abe时。对应的测试用例如下:

A=2,B=0,X=2 ace
A=3,B=1,X=1 abd

缺点:这两组测试用例都存在同一个问题:当判定由多个条件组合构成时,它未必能发现每个条件的错误。如果第二个判定把条件X>1错误的写成了X<1,我们设计的测试用例仍然无法找出这个错误。

三、条件覆盖

f20df0c75d6a4bc28c36b8a2759d1b0f.png

第一个判断的所有条件的可能取值情况是A>1或A≤1,B=0或B≠0。第二个判断的所有条件可能的取值情况为A=2或A≠2,X>1或X≤1。生成的用例及其遍历的路径如下所示:

A=1,B=0,X=3 abe
A=2,B=1,X=1 abe

缺点:条件覆盖并不一定总能覆盖全部分支。测试用例虽然满足了条件覆盖准则,但是只涵盖了程序的路径abe。但是,条件覆盖还是要比判定覆盖强一些,因为条件覆盖可能会使判断中各个条件的结果都取“真”或着取“假”,而判定覆盖却做不到这一点。

四、判定/条件覆盖

判定/条件覆盖
bbe373a794a34ae7be2493de106eda85.png

判定/条件覆盖,既要考虑到单个判定中每个条件的可能情况(A>1或A≤1,B=0或B≠0,A=2或A≠2,X>1或X≤1),也要考虑到每个判定的可能情况(路径ace和abd,或路径acd和abe)。用例及其遍历的路径如下所示:

1.A=2,B=0,X=4,ace

2.A=1,B=1,X=1,abd

缺点:条件覆盖和判定/条件覆盖不一定会发现逻辑表达式中的错误。尽管看上去所有条件的所有结果似乎都执行到了,但由于有些条件会屏蔽掉后面的条件,并不一定能全部执行得到。例如,上述测试用例①满足了条件A=2后,就不再执行对条件X>1的判断;测试用例②中不满足条件A>1后,就不再执行对条件B=0的判断。

五、条件组合覆盖

386157f015d94ebfabd45b3cd0b0fc7d.png

满足多重条件覆盖准则的测试用例,必须覆盖以下8种组合:
第一个判定的取值情况 第二个判定的取值情况

  1. A>1,B=0 5. A=2,X>1
  2. A>1,B≠0 6. A=2,X≤1
  3. A≤1,B=0 7. A≠2,X>1
  4. A≤1,B≠0 8. A≠2,X≤1

生成的测试用例,以及它们遍历的路径和覆盖的组合如下:

A=2,B=0,X=4 ace 覆盖组合1,5
A=2,B=1,X=1 abe 覆盖组合2,6
A=1,B=0,X=2 abe 覆盖组合3,7
A=1,B=1,X=1 abd 覆盖组合4,8

缺点:多重条件覆盖不一定能覆盖到每条路径,路径acd就被遗漏掉了。

猜你喜欢

转载自blog.csdn.net/qq_51053042/article/details/129776657