白盒测试的定义见”了解软件测试之测试分类“一文
白盒测试属于覆盖代码逻辑的测试
白盒测试特点:
(1)优点:代码覆盖率高;
(2)缺点:①覆盖所有的代码路径难度大(if else / for循环需要多个用例)
②业务功能可能覆盖不全(代码实现未将业务功能完全实现)
③测试开销大(手工实现/自动化实现 测试代码量不会比开发代码量小)
白盒测试设计方法:
(1)静态:①桌面检查(一个人检查)
②代码审查(会议每个人讲解代码组成部分,开发与测试,代码规范和需求要求去查看代码是否符合要求)
③代码走查(会议,参加会议的人员提前准备的测试数据,会议中对代码进行输入,人工计算代码走向,更好验证代码实现情况)
④代码扫描工具(根据代码编码规范进行审查检查,提升检查时间,但对功能实现,结构是否合理无法检查)
(2)动态:①逻辑覆盖法
a.语句覆盖
b.判定覆盖
c.条件覆盖
d.判定条件覆盖
e.条件组合覆盖
f.路径覆盖
②基本路径测试法
一、逻辑覆盖法
- 逻辑覆盖法:是通过对程序逻辑结构的遍历实现程序的覆盖。
- 覆盖率:用来度量测试完整性的手段。

例:代码为:


1.语句覆盖
1.1定义:设计测试用例,使得程序中每条语句至少被执行一次。
(尽可能达成100%的覆盖率)

1.2.语句覆盖测试用例
例如:案例代码中共有4条可执行语句,设计测试用例执行了3条,语句覆盖率为3/4=75%。
如上,语句有4条,想要达成100%语句覆盖,则测试用例设计为
| 数据 | 语句 |
| {x=3, y=1, magic=2} | 1、4 |
| {x=-3, y=-1, magic=2} | 2、3、4 |
1.3局限性:语句覆盖不能准确的判断运算中的逻辑关系错误。
在六种逻辑覆盖标准中,语句覆盖标准最弱。
如果开发写代码“if(x>0 && y>0)”写成"if(x>0 || y>0)",使用如上的测试用例同样适用(无法发现开发逻辑语句描写错误)。
2.判定覆盖
2.1定义:判断覆盖也叫分支覆盖,设计测试用例,使得程序中的每个判断的“真”和“假”都至少被执行一次。即:程序中每个分支至少被执行一次。

2.2.判定覆盖测试用例
例:案例代码中有判定2个,判定结果4个,设计测试用例执行3个分支,分支覆盖率为3/4=75%。
判定定义如下:
(1)if(x>0 && y>0)判定:记为P1
(2)if(magic < 0)判定:记为P2
测试用例设计:
| 数据 | P1 | P2 |
| {x=3, y=1, magic=2} | T | F |
| {x=-1, y=0, magic=-2} | F | T |
2.3 判定覆盖局限性:判定覆盖会忽略条件中取 或(or)的情况。
只要满足了判定覆盖标准就一定满足语句覆盖标准。
如果开发写代码“if(x>0 && y>0)”写成"if(x>0 || y>0)",使用如上的测试用例同样使用(无法发现开发逻辑语句描写错误)。
3.条件覆盖
3.1定义:设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。

3.2条件覆盖测试用例设计
例:案例代码中有判定2个,条件3个,条件结果6个,设计测试用例执行了5个条件结果,条件覆盖率为5/6=83%。
判定条件定义如下:
(1)if(x>0 && y>0)判定:记为P1
(2)if(magic < 0)判定:记为P2
(3)x>0:记为C1
(4) y>0:记为C2
(5)magic < 0:记为C3
测试用例设计
| 测试数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
| {x=3,y=0,magic=-2} | T | F | T | F | T | a-c-d-f |
| {x=-3,y=15,magic=2} | F | T | F | F | F | a-c-e-f |
3.3条件覆盖的局限性:条件覆盖不能保证判定覆盖。
条件覆盖比判定覆盖,增加了对判定中所有条件的测试(P1为真,未覆盖)。
4.判定条件覆盖
4.1定义:判定条件覆盖是 设计测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值(真假)至少满足一次,同时,每个逻辑条件的可能值(真假)也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。

4.2判定条件覆盖测试用例
例:案例代码中有判定2个,条件3个,判定结果4个,条件结果6个,设计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率为:(3+5)/(4+6)= 80%
判定条件定义如下:
(1)if(x>0 && y>0)判定:记为P1
(2)if(magic < 0)判定:记为P2
(3)x>0:记为C1
(4) y>0:记为C2
(5)magic < 0:记为C3
测试用例设计
| 测试数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
| {x=3,y=3,magic=2} | T | T | F | T | F | a-b-e-f |
| {x=-3,y=0,magic=-2} | F | F | T | F | T | a-c-d-f |
4.3判定条件覆盖局限性:判定条件覆盖会忽略条件中取 或(or)的情况。
满足判定-条件覆盖标准一定能够满足条件覆盖、判定覆盖和语句覆盖。
如果开发写代码“if(x>0 && y>0)”写成"if(x>0 || y>0)",使用如上的测试用例同样使用(无法发现开发逻辑语句描写错误)。
5.条件组合覆盖
5.1.定义:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。

5.2条件组合覆盖测试用例设计
例:案例代码中有判定2个,条件3个(判定1有2个条件,判定2有1个条件),判定1的条件组合为4个,判定2的条件组合为2个,设计测试用例执行了5个条件组合,条件组合覆盖率为:5/(4+2)= 83%
判定条件定义如下:
(1)if(x>0 && y>0)判定:记为P1
(2)if(magic < 0)判定:记为P2
(3)x>0:记为C1
(4) y>0:记为C2
(5)magic < 0:记为C3
测试用例设计:
| 测试数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
| {x=3, y =0, magic =-2} | T | F | T | F | T | a-c-d-f |
| {x=3, y =15, magic =2} | F | T | F | F | F | a-c-e-f |
| {x=3, y =3, magic =2} | T | T | F | T | F | a-b-e-f |
| {x=3, y =0, magic =-2} | F | F | T | F | T | a-c-e-f |
5.3条件组合覆盖局限性:条件组合覆盖不能保证所有路径被执行。
条件组合覆盖能满足判定覆盖、条件覆盖、判定-条件覆盖、也就包括语句覆盖。
6.路径覆盖
6.1定义:设计测试用例,覆盖程序中所有可能的路径。

6.2 路径覆盖测试用例设计
例:案例代码中共有4条路径,设计测试用例执行了3条路径,路径覆盖率为3/4=75%
判定条件定义如下:
(1)if(x>0 && y>0)判定:记为P1
(2)if(magic < 0)判定:记为P2
(3)x>0:记为C1
(4) y>0:记为C2
(5)magic < 0:记为C3
测试用例设计:
| 测试数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
| {x=3, y =0, magic =-2} | T | T | T | T | T | a-b-d-f |
| {x=3, y =15, magic =2} | F | T | T | F | T | a-c-d-f |
| {x=3, y =3, magic =2} | T | T | F | T | F | a-b-e-f |
| {x=3, y =0, magic =-2} | F | T | F | F | F | a-c-e-f |
6.3路径覆盖的局限性:虽然满足路径覆盖,并不一定能满足条件覆盖,也就不能满足条件组合覆盖。
路径覆盖可以对程序进行彻底的测试,比前面五种覆盖面都广。
(实际工作中,想对路径覆盖完全实现,工作量巨大,成本较高)
二、基本路径测试法
1.定义:在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
2.步骤:
(1)根据代码画出程序控制流图
(2)计算程序的环路复杂度
(3)导出可执行路径
(4)设计测试用例
3.用例:
(1)根据代码画出程序控制流图


(2)计算程序的环路复杂度

方法有3种:
①流图中区域的数量对应于环型的复杂性。
②给定流图G的圈复杂度V(G),定义为V(G)=E-N+2, E是流图中边的数量,N是流图中节点的数量。V(G)=10-8+2
③给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定节点的数量。V(G)=3+1
(3)导出可执行路径
此例子可导出路径为:(所有路都走到即可,无需从头到尾完全覆盖)
①4-14
② 4-6-7-14
③ 4-6-9-10-13-4-14
④ 4-6-9-12-13-4-14
(4)设计测试用例
| 测试数据 | 预期结果 | 覆盖路径 |
| iRecordNum=0 | x = 0 | 4-14 |
| iRecordNum=1,iType=0 | x = 2 | 4-6-7-14 |
| iRecordNum=1, | x = 10 | 4-6-9-10-13-4-14 |
| iRecordNum=1, | x = 20 | 4-6-9-12-13-4-14 |
1613

被折叠的 条评论
为什么被折叠?



