基于数据流设计用例是通过选择的定义-使用的覆盖率来导出测试用例集,以覆盖测试项中变量定义和使用之间的路径。不同的数据流覆盖准则要求执行不同定义-使用对和子路径。
拿到代码之后,首先识别代码中的控制流子路径,在该子路径中,给定变量的每个定义与该变量的后续使用相关,并且后续使用没有重新定义变量的值。
“定义”可能给变量赋了新的值(有时定义将变量保持与之前相同的值)。“使用”是变量出现,但不是赋新的值。“使用”可以进一步划分为“P-use”(谓词使用)和“C-use”(计算使用)。谓词使用是指使用变量来确定判定条件(谓词)的结果,例如while循环、if-else等判定中。计算使用是指一个变量作为其他变量定义或输出的计算输入。
基于数据流的测试中,编写测试用例同样要经历特征集→测试条件→测试覆盖项→测试用例这样一个逐步推演的过程。其中,测试特征集都是被测的代码段,测试条件则是代码中的定义-使用对。不同的用例设计方法体现在测试覆盖项的不同上,从而导致后续导出的测试用例也随之变化。基于数据流设计用例的测试覆盖项如下表所示: