【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 -->满足⑥,②,④
如此,只需要两个案例就实现了这个覆盖
路径覆盖
把程序流程都走一次,换个说法其实就是判定覆盖
我们为例子做一个流程图:
黑科技:删掉开始和结束相连的两条链路,那么图片就剩下五条链路了,一共四个节点(两个判断两个过程),代入公式:链路数-节点数+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
这样四个测试就实现了程序的多条件组合覆盖!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!