基于结构的动态测试用例设计方式可分为基于控制流和数据流两大类。上一篇介绍了基于控制流的测试设计,本篇将介绍基于数据流的测试设计。
1、基于数据流设计用例是通过选择的定义-使用的覆盖率来导出测试用例集,以覆盖测试项中变量定义和使用间的路径。不同的数据流覆盖准则要求执行不同定义-使用对和子路径。
2、“使用”可以进一步划分为“P-use”(谓词使用)和“C-use”(计算使用)。谓词使用是指使用变量来确定判定条件(谓词)的结果;计算使用是指一个变量作为其他变量定义或输出的计算输入。
3、在基于数据流的测试中,测试特征集都是被测的代码段,测试条件则是代码中的定义-使用对,不同的用例设计方法体现在测试覆盖项的不同上,导致后续测试用例的不同。。
下面,通过举例来演示上述不同测试覆盖标准 所对应的测试设计:
分析代码,列出测试项中所使用的变量,并为其分配一个类别(定义、谓词使用或计算使用),如下图
识别定义列中的每个条目到该变量的谓词使用或计算使用列的每个条目之间的路径,如下图,每个定义-使用对就是一个测试条件
(1)全定义测试——所有变量定义都覆盖从定义到其谓词使用或计算使用的至少一个定义到任意类型使用的子路径。
(2)全计算使用测试——所有相关变量定义都覆盖从定义到其每个计算使用的至少一个自由定义子路径。
(3)全谓词使用测试——所有相关变量定义都覆盖从定义到其每个谓词使用的至少一个自由定义子路径。
方法同全计算使用测试
(4)全使用测试——要求包括从每个变量定义到它的每个使用的至少一条子路径(不包括变量的中间定义)。
(5)全定义-使用路径测试——要求包括从每个变量定义到它的每个使用的所有子路径(不包括变量的中间定义)。
全定义-使用路径测试不同于全使用测试,后者只需要从每个变量定义到其使用的一条路径进行测试。