前述: 白盒测试 可以理解为代码级别测试,黑盒测试,可以理解为功能测试。
本文整理来源于:哔哩哔哩 的 71969467
主讲老师 :Tricy
一、白盒测试
也称结构测试或者逻辑驱动测试,是把测试对象看做一个透明的合资,测试人员依据程序内部逻辑结构相关 信息,设计或选择测试用例,对程序所有逻辑路径进行测试
所以白盒测是一种基于代码的测试,测试这必须检测程序的内部结构,从检测程序的逻辑开始,得出测试数据。
白盒测试一般开发人员做的单元测试,或者开发人员之间的代码review,都算是。也可以借助一些工具进行测试,如testbed 。
二 白盒测试六中方法
测试强度由低到高:语句覆盖(Statement Coverage)、分支覆盖(Branch Coverage)、条件覆盖(Clause Coverage)、判定条件覆盖(Branch/Clause Coverage)、条件组合覆盖(Combinatory Coverage)、路径覆盖(Path Coverage)。
以下讲解以案例为例:
- 语句1: if A and B then Action1
(含义:A 、B条件都为真时,执行动作Action1) - 语句2: if C or D then Action2
(含义:C 、D 条件 有一个为真时,执行动作Action2)
1.语句覆盖
含义:设计的测试用例要满足,每个语句最少执行一次;
大白话就是:每行代码都要执行最少一次;
用例:case1: A = true ,B=true
case2: C =true ,D = false
此用例就满足了,每条语句执行了一次。但是没有考虑条件的组合情况。
2.分支覆盖(判定覆盖)
含义:是的程序中的每个判断的取值:真 和假 只是经历一次,即:判断的真假都要被测试到。
用例:
语句 | 用例 | 条件判断结果 | 结果 |
---|---|---|---|
if A and B then Action1 | A=true B=true | true(真) | 执行Action1 |
if A and B then Action1 | A=true B=false | false(假) | 不执行Action1 |
if C or D then Action2 | C=true D=false | true(真) | 执行Action2 |
if C or D then Action2 | C=false D=false | false(假) | 不执行Action2 |
以上用例:执行了语句中的真假 逻辑,但是,没有完全判断所有条件组合情况,如:A=false ,B=false;C=fasle ,D=true 等情况
3.条件覆盖
含义:要求测试用例满足:每个判定中的每一个条件都获得可能的取值,即:每个条件掷筛有一次真和假指。
说明: 判定指的是: A and B 这个语句的结果
每一个条件:指的是:A 或者 B 这两个条件。
也就是说,在条件覆盖中,A 和B 这两个条件,最少要每个条件分别取一次真 和假。
对用案例2 同样 。不再赘述。
语句 | 用例 | 条件判断结果 | 结果 |
---|---|---|---|
if A and B then Action1 | A=true B=true | true(真) | 执行Action1 |
if A and B then Action1(新增) | A=false B=false | false(假) | 不执行Action1 |
if C or D then Action2 | C=true D=false | true(真) | 执行Action2 |
if C or D then Action2 (新增) | C=false D=true | true(真 | 执行Action2 |
4.判定条件覆盖
含义:用例需满足:判定中的每个条件所有的可能取值至少执行一次(也就是条件覆盖),同时每个判定本身所有的结果也要执行一次(判定覆盖)。
说明:判定条件就是:既要满足条件覆盖,同时也要满足判定覆盖;也就是满足(上面的 2.分支覆盖(判定覆盖),3.条件覆盖)。
优点:弥补了 两者(2.分支覆盖(判定覆盖),3.条件覆盖)各自的不足,但是判定条件覆盖并为考虑条件的组合情况。
缺点:
条件覆盖:
A=ture,A=false,B=true,B=false
C=true,C=fasle,D=true,D=false
判定覆盖:
A and B =true ,A and B = false
C or D = true, C or D = false
测试用例:
TestCase1: A=true ,B=true ,C=true ,D=true (条件都为True:A and B =true ,C or D =true)
TestCase2: A=false,B=false,C=false,D=false(条件都为false:A and B =false,C or D =false)
5.组合覆盖 也叫 条件组合覆盖
含义:设计的测试用例,应该使得每个判定中的各个条件的各种组合至少出现一次。很显然:满足条件组合覆盖的测试用例,一定满足:语句覆盖,判定覆盖,条件覆盖和判定条件覆盖;也就是肯定满足 以上四种的用例设计方法。
语句 | 用例 | 条件判断结果 | 结果 |
---|---|---|---|
if A and B then Action1 | A=true B=true | true(真) | 执行Action1 |
if A and B then Action1 | A=true B=false | false(假) | 不执行Action1 |
if A and B then Action1 | A=false B=false | false(假) | 不执行Action1 |
if A and B then Action1 | A=false B=true | false(假) | 不执行Action1 |
if C or D then Action2 | C=true D=false | true(真) | 执行Action2 |
if C or D then Action2 | C=true D=true | true(真) | 执行Action2 |
if C or D then Action2 | C=false D=false | false(假) | 不执行Action2 |
if C or D then Action2 | C=false D=true | true(真 | 执行Action2 |
这种方法:会让测试用例成成倍增长;
说明:A 有两个可以取得值 true 或者false
B有两个可以取得值 true 或者false
那么 A and B 组合后,就是有 2 的2次方 = 4 种用例
C 有两个可以取得值 true 或者false
D有两个可以取得值 true 或者false
那么 C or D 组合后,就是有 2 的2次方 = 4 种用例
所以:总共有8个测试用例。
6.路径覆盖
含义:要求覆盖程序中的所有可能的路径,可以对程序彻底的测试用例覆盖。但是用例数量会成倍增长。所有是最彻底的测试用例覆盖。但是实际上可操作性不强。
所有可以设计出满足条件的测试用例如下:
1)A=true B=true C=true D=true
2)A=false B=false C=false D=false
3)A=true B=true C=false D=false
4)A=false B=false C=false D=true
5)A=true B=true C=false D=false
…
总结
白盒测试的优劣性:
优点:
A.迫使测试人员咨询思考软件的实现
B.帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。
缺点
A.昂贵:系统庞大是,测试开销大,对测试人员要求较高 (要求会写代码,做过实际开发的人员)。
B.测试基于代码,只能测试开发人员做的对不对,而不知道设计是否正确,可能会遗漏掉一些功能需求。