白盒测试方法
针对程序的代码进行测试,代码覆盖率高;缺点:覆盖所有代码路径大、业务功能可能覆盖不全、测试开销大
- 静态方法:1)桌面检查(一个人检查);2)代码审查(开会议检查,卡法人员说明功能;主要是代码规范);3)代码走查(开会,与会人员提前准备测试数据,人工计算逻辑走向;主要是功能实现);4)代码扫描工具
- 动态方法:
-
- 逻辑覆盖法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖
-
- 基本路径测试法
逻辑覆盖法
- 是通过对程序逻辑结构的遍历实现程序的覆盖
- 覆盖率 = 至少被执行一次的item数 / item总数
1.语句覆盖法
- 语句覆盖率 = 至少被执行一次的语句数量 / 可执行的语句总数
- 以下语句覆盖率 = 4/4 = 100%
数据 | 语句 |
---|---|
x=3,y=1,magic=2 | 1,4 |
x=-3,y=-1,magic=-2 | 2,3,4 |
- 局限:语句覆盖不能准确的判断运算中的逻辑关系错误;【如果语句a中的 && 变成 || ,以上两个用例仍正确通过】
2.判定覆盖法
- 判定覆盖也称为分支覆盖;使得程序中的每个判断执行的”真“”假“都至少被执行一次
- 判定覆盖率 = 每个判定的真假值至少出现一次 / 判定结果的总数
- 以下判定覆盖率 = 4/4 = 100%
数据 | P1 | P2 |
---|---|---|
x=3,y=1,magic=2 | T | F |
x=-1,y=0,magic=-2 | F | T |
- 判定覆盖能满足语句覆盖
- 局限:判定覆盖不能准确的判断运算中的逻辑关系错误;【如果语句a中的 && 变成 || ,以上两个用例仍正确通过】
3.条件覆盖法
- 设计测试用例,使得每个判定中的每个条件至少有一次取真值,有一次取假值
- 条件覆盖率 = 每个条件的真假值至少出现一次 / 条件结果的总数
- 以下条件覆盖率 = 6/(2*3) = 100%
数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
---|---|---|---|---|---|---|
x=3,y=0,magic=-2 | T | F | T | F | T | a-c-d-f |
x=-1,y=3,magic=2 | F | T | F | F | F | a-c-e-f |
- 局限:100%条件覆盖并不能完全覆盖判定覆盖;
4.判定条件覆盖法
-
设计测试用例,使得每个判定以及每个判定中的每个条件至少有一次取真值,有一次取假值;即同时满足判定覆盖和条件覆盖
-
判定条件覆盖率 = 每个判定和每个条件的真假值至少出现一次 / (判定结果总数+条件结果总数)
-
以下数据判定条件覆盖率 = 6/(2*3) = 100%
数据 | 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 |
- 判定条件覆盖能满足判定覆盖、语句覆盖和条件覆盖
- 局限:判定条件覆盖可能不能准确的判断运算中的逻辑关系错误(or);【如果语句a中的 && 变成 || ,以上两个用例仍正确通过;】
5.条件组合覆盖法
-
设计测试用例,使得每个判定中的每个条件所有可能组合至少进行一次
-
判定条件覆盖率 = 条件组合至少出现一定的数量 / (条件组合总数)
-
案例中判定2个-》条件2+1个-》条件组合2*2+2=4+2=6
-
以下数据条件组合覆盖率 = 6/(2*3) = 100%
数据 | 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 |
- 条件组合覆盖能满足判定条件覆盖、判定覆盖、语句覆盖和条件覆盖
- 局限:不能保证所有路径都覆盖【以上差a-b-d-f】
5.路径覆盖法
-
设计测试用例,覆盖程序
-
路径覆盖率 = 至少被执行一次的路径数 / 总路径数
-
案例中两个分支 2*2 = 4条路经
-
以下数据条件组合覆盖率 = 6/(2*3) = 100%
数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
---|---|---|---|---|---|---|
x=3,y=3,magic=-2 | T | T | T | T | T | a-c-d-f |
x=-3,y=3,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=15,magic=-2 | F | T | F | F | F | a-c-e-f |
- 路径覆盖并不能满足条件覆盖也就不能满足条件组合覆盖以及判定条件覆盖【C2为假没有】
- 局限:逻辑循环覆盖工作量巨大
基本路径覆盖法
- 在程序控制流图的基础上,通过分析程序的环路复杂性,导出可执行路径集合,从而设计测试用例。
- 案例:数字代表代码行数
流图G的圈复杂度为V(G)=路径总数,E为边的数量,N为节点的数量,P为判定节点的数量
1)V(G) = E-N+2 = 10-8+2 = 4;
2)V(G) = P+1 = 3+1 = 4
数据 | 结果 | 路径 |
---|---|---|
iRecodNum=0, | x=0 | 4-14 |
iRecodNum=1,iTtype=0 | x=2 | 4-6-7-14 |
iRecodNum=1,iTtype=1 | x=10 | 4-6-9-10-13-4-14 |
iRecodNum=1,iTtype=2 | x=20 | 4-6-9-12-13-4-14 |
总结
- 主要用于单元测试
- 先静态,后动态
- 设计用例一般使用基本路径测试,重点模块使用多种逻辑覆盖率标准
逻辑覆盖方法间的覆盖关系 and 发现错误能力排序
弱 | 强 | ||||
---|---|---|---|---|---|
语句覆盖 | 判定覆盖 | 判定条件覆盖 | 条件组合覆盖 | ||
语句覆盖 | 条件覆盖 | 判定条件覆盖 | 条件组合覆盖 | ||
语句覆盖 | 判定覆盖 | 路径覆盖 |