【FAQ】白盒与黑盒测试

黑盒测试

不管你里面有什么东西,我输入东西进去程序里面,只看输出的结果是不是我想要的就行。
用于确保程序的输出符合预期,同时检测功能性错误(软件操作,数据结构处理,UI初始化/终止等问题)

白盒测试/透明盒测试

常用的典型代码覆盖标准通常分为下面六种:
语句覆盖
判定覆盖
条件覆盖
判定+条件覆盖
路径覆盖
多条件/组合覆盖

总例子

我们以下面这个例子来了解六种覆盖标准,以T为true,F为false,abcd为判断条件,a and b和c or d为判定过程:

if a and b
  then act1

if c or d
  then act2

语句覆盖

要求每个语句都要执行一次
从上面例子看,也就是要求act1和act2都要执行一次,那么由此我们可以推断出:

a和b必须为T,就能执行act1
c或者d有一个为T,就执行act2

因此我们可以这样写测试例子就能满足语句覆盖:

test:a=T,b=T,c=T
或者a=T,b=T,d=T

判定覆盖

每个判定过程的结果至少要真和假一次
从例子看,有两个判定过程,一个是a and b,另一个是c or d,因此可以抽象为下面的过程:

① a and b = T --> a=T b=T
② a and b = F --> a=F b=T (a和b有一个是F就行,这里我们以a为F)
③ c or d = T --> c=T或者d=T
④ c or d = F --> c=F d=F

接下来就可以写测试例子来满足判定覆盖了:

test1:a=T b=T c=T d=F -->满足过程①和③
test2:a=T b=F c=F d=F -->满足过程②和④

条件覆盖

每个条件至少要取一次真和假
从例子看,有四个条件,a,b,c,d,因此实现条件覆盖也就是:

a	T	F
b	T	F
c	T	F
d	T	F
 	⑤	⑥

我们简单地理解一下目标,要把每个条件的真和假都取一次,那么我们把全条件为真作为目标⑤,全为假为目⑥
那么我们组合一下就行:

test1:a=T,b=T,c=T,d=T -->满足⑤
test2:a=F,b=F,c=F,d=F -->满足⑥

判定+条件覆盖

其实就是判断覆盖加条件覆盖,也就是要每个判定过程至少要取一次真和假,且每个条件都要取一次真和假
我们直接取上面的六个目标(①到⑥),例子可以这样写:

test1:a=T,b=T,c=T,d=T -->满足⑤,①,③
test2:a=F,b=F,c=F,d=F -->满足⑥,②,④

如此,只需要两个案例就实现了这个覆盖

路径覆盖

把程序流程都走一次,换个说法其实就是判定覆盖
我们为例子做一个流程图:
image
黑科技:删掉开始和结束相连的两条链路,那么图片就剩下五条链路了,一共四个节点(两个判断两个过程),代入公式:链路数-节点数+2=路径数,比如此处就是:5-4+2=3
看着图片,我们可以梳理出三条路:

路1:开始-->A and B--为T-->Act1---->C or D--为T-->Act2---->结束
路2:开始-->A and B--为F-->C or D--为T-->Act2---->结束
路3:开始-->A and B--为T-->Act1---->C or D--为F-->结束

简单分析:
路1是把全部方法执行了,每个判断过程都是T
路2是跳过了act1,只执行了act2
路3执行了act1,跳过了act2
也就是说我们把每一条连接线走完他就行了,所以例子可以这样写:

test1:A=T,B=T,C=T
test2:A=F,C=T
test3:A=T,B=T,C=F,D=F

如此,我们就实现了路径覆盖

多条件/组合覆盖

每个判定过程中的条件各种可能存在的组合都出现至少一次
我们以例子来说明,看a and b这个判定过程,他有两个条件:a和b,这两个条件各自又有两种情况,分别是T和F,因此我们可以得出来这个判断过程的多条件组合覆盖是:

a	b
T	T
T	F
F	T
F	F

同理,把c or d也放进来,那就是:

a	b	|	c	d
T	T	|	T	T
T	F	|	T	F
F	T	|	F	T
F	F	|	F	F

那么整个程序的多条件组合覆盖的用例就可以这样写:

test1:a=T,b=T,c=T,d=T
test2:a=T,b=F,c=T,d=F
test3:a=F,b=T,c=F,d=T
test4:a=F,b=F,c=F,d=F

这样四个测试就实现了程序的多条件组合覆盖!

posted @ 2024-03-03 21:31  Morning枫  阅读(4)  评论(0编辑  收藏  举报