两个重要的测试技术:逻辑覆盖、控制结构测试
1.逻辑覆盖
测试数据在程序执行过程中覆盖的路径。
1.1语句覆盖
选择测试数据,使被测程序中每个语句至少执行一次

输入语句:a, b, x

1.2判定覆盖
每个语句至少执行一次,每个判定的真假分支至少执行一次。

比语句覆盖强,但只覆盖一半路径
1.3条件覆盖
每个语句至少执行一次,判定表达式每个条件取各种可能结果

1.4判定/条件覆盖
取足够多测试数据,使判定表达式每个条件都取各种可能值,且每个判定表达式也都取到各种可能结果。

有时判定/条件覆盖不比判定覆盖更强
1.5条件组合覆盖
选足够多的数据,是每个判定表达式中条件的各种组合都至少执行一次


2.控制结构测试
2.1 基本路径测试
Tom McCabe提出的一种白盒测试技术
(1)根据过程设计结果画出相应流图
(2)计算流图的环形复杂度

- e=10, n=7
- V=e-n+2=5
- V=区域数=5
- V=判定节点数+1=5
(3)确定线性独立路径的基本集合
独立路径:至少包含一条在定义该路径之前不曾用过的边。
环形复杂度为独立路径基本集的上界。
上图的独立路径为:
- 路径1:1-2-4-6-7
- 路径2:1-2-4-2-5-7
- 路径3:1-2-5-7
- 路径4:1-3-7
- 路径5:1-3-5-7
(4)设计测试用例覆盖基本集合的路径
2.2基本路径测试示例
(0)示例
计算不超过100个在规定值域内有效数的平均值;同时计算有效数字的综合和个数。
用PDL描述的如图。

(1)画出流图

(2)计算环形复杂度
- V=区域数=6
- V=17(e)-13(n)+2=6
- V=5(判定节点)+1=6
(3)确定线性独立路径基本集合
- path1: 1-2-10-11-13
- path2: 1-2-10-12-13
- path3: 1-2-3-10-11-13
- path4: 1-2-3-4-5-8-9-2-…
- path5: 1-2-3-4-5-6-8-9-2-…
- path6: 1-2-3-4-5-6-7-8-9-2-…
(4)设计测试用例执行基本集合中的路径






2.3循环测试
分为四种:

(1)简单循环
- 零次循环:从循环入口直接跳到循环出口。
- 一次循环:查找循环初始值方面的错误。
- 二次循环:检查在多次循环时才能暴露的错误。
- m次循环:此时的m<n。
- 最大次数循环、比最大次数多一次循环、比最大次数少一次的循环。
示例:


(2)嵌套循环
- 从最内层循环开始,置所有其它层循环为最小值
- 对最内层循环做简单循环的全部测试。
- 逐步外推,测试时保持所有外层循环变量取最小值,其它嵌套内层循环变量取“典型”值。
- 反复进行,直到所有各层循环测试完毕。
(3)连锁循环
- 各个循环互相独立,可用与简单循环相同方法进行测试。
- 几个循环不是互相独立,需要使用测试嵌套循环。
(4)非结构化循环
使用结构化程序设计方法重新设计