【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=Tc=T,d=T
test2:a=T,b=Fc=T,d=F
test3:a=F,b=Tc=F,d=T
test4:a=F,b=Fc=F,d=F

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

posted @   Morning枫  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示