白盒测试学习笔记
白盒测试主要是逻辑覆盖,逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、(修正)判定/条件覆盖、条件组合覆盖
语句覆盖
语句覆盖使程序中每个语句至少都能被执行一次
判定覆盖(分支覆盖)
判定覆盖使得程序中每个判断的取真分支和取假分支至少执行一次,即判断的真价值均被满足过。
条件覆盖
在程序中,一个判定语句可能是由多个条件组合而成的符合判定。如(x>3&&z<7)
条件覆盖使得程序中的每一判定语句中的每一个逻辑条件的可能值至少满足一次 ,如设计{x=4, z=5}和{x=2, z=8},满足x>3和z<7这两个逻辑条件的两个可能值。
条件判定组合覆盖
条件判定组合覆盖使得程序中每个条件的所有可能真假值至少出现一次,并且每个判定本身的判定结果也至少出现一次。即测试用例同时满足条件覆盖和判定覆盖。
有时某些条件会被其他条件所掩盖,如if (x>3 && z<7) 若取 x = 2,则编译器将不会判断z<7这个条件。
修正的条件判定组合覆盖
该覆盖需要体现条件对整个表达式的独立影响,如表:
| ID | A | B | A && b |
|---|---|---|---|
| 1 | T | T | T |
| 2 | F | T | F |
| 3 | T | F | F |
上表所述,当逻辑运算为and时,要体现某一条件的独立影响,则需要使其他条件为真;同理当逻辑运算为or时,需要使其他条件为假。该覆盖设计较为困难。
条件组合覆盖
设计足够多的测试用例,使得每一个判定中条件的各种可能组合都至少出现一次。
如if (x > 3 && z < 7) ,其中有两个条件,这两个条件的可能组合有:
- x > 3, z < 7 . 满足其的测试用例为:x = 4, z = 6
- x < 3, z < 7 . 满足其的测试用例为:x = 2, z = 6
- x < 3, z > 7 . 满足其的测试用例为:x = 2, z = 8
- x > 3, z > 7 . 满足其的测试用例为:x = 4, z = 8
结:做题时需要有详细的标号,覆盖列表步骤。
路径测试
程序图
有向的程序图是由代码得到的,可以体现原代码的结构复杂度,程序图的组成:
- 圆圈(节点):执行语句
- 有向线段:程序的执行方向
生成流程图:
- 忽略数据声明
- 忽略注释语句
- 压缩穿行语句
- 忽略循环次数,只考虑是否执行循环体,即当作一个判断节点
确定环复杂度(McCabe)
直观观察法
观察程序图将二维平面分割成封闭区域和开放区域的个数,如图:

该区域划分为:
- 绿:A-B-D-E
- 黄:B-C
- 蓝:B-E-F-G-C
- 红:D-F-E
- 一个外部开放区域
区域共计为5,因此环复杂度为5,记:V = 5。
公式计算法
利用程序图包含的 边( e ) 和 顶点( n ) 的 数量来计算环复杂度:
使用该公式拥有前提条件:
- 程序图中无孤立节点
- 程序图是强连通图。(所谓强连通,是节点间双向连通)
一般程序由入口节点单向执行到出口节点,因此像上图是不满足强连通图的,需要进行图的改造才能够使用该公式,改造如下:
改造方法:构建死循环, 连接G -> A
判定节点法
利用程序图中的判定节点数量 ( P ) 计算环复杂度
确定独立路径集合
独立路径集合的规模 = 程序的环复杂度
寻找独立路径
1、确定主路径
主路径是包含判定节点最多的路径,以前述为例,如图:
主路径为:A, B, C, G
2、抽取其他独立路径
依次覆盖判定节点的执行分支
- P1 : A,B,C,G
- P2 : A,D,F,G
- P3 : A,B,E,F,G
- P4 : A,B,C,B,C,G
- P5 : A,D,E,F,G
结:先确定主路径,然后随着主路径上的判定节点顺序寻找还未执行的分支,当一个判定节点的所有分支都执行完成则开始查找主路径上的下一个节点,当主路径中的节点都寻完后,再寻找不在主路径上的节点。
局限
在源代码中的判定节点之间往往存在相互关联,使得部分判定节点分支的执行具有一定的条件概率。具有不可行路径的问题。
解决方式:结合源代码寻找独立路径等。
注意
- 在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充或修改用例以达到路径覆盖的测试标准
- 满足路径覆盖的测试用例不一定满足条件组合覆盖
- 由判定节点发出的边必须终止于某一个节点(画程序图时增加空的节点)如下图
- 画程序图时注意压缩串行语句,如下图
- 对于组合条件,将其分解为多个的单个条件,通过 or 和 and 的条件独立影响来分解,如图:

浙公网安备 33010602011771号