白盒测试–数据流测试
基础定义
- 数据流测试主要用于优化代码,早期的数据流分析常常集中于定义/引用异常的缺陷。
- 变量被定义,但从来没有使用(未使用)
- 所使用的变量没有被定义(未定义)
- 变量在使用之前被定义了两次(重复定义)
- 数据流测试按照程序中的变量定义和使用的位置来选择程序的测试路径。
- 数据流测试关注
- 一种简单的数据流测试策略
- 定义1:定义节点
- 节点n∈G(P)是变量v ∈V的定义节点,记做DEF(v,n),当且仅当变量的值由对应节点n的语句片断处定义。
- 定义节点语句
- 定义2: 使用节点
- 节点n∈G(P)是变量v ∈V的使用节点,记做USE(v,n),当且仅当变量v的值在对应节点n的语句片断处使用。
- 使用节点语句
- 输出语句
- 赋值语句
- 条件语句
- 循环控制语句
- 过程调用
- 定义3: 谓词使用、计算使用
- 使用节点USE(v,n)是一个谓词使用(记做P-use),当且仅当语句n是谓词语句;否则,USE(v,n)是计算使用(记做C-use)
- 对应于谓词使用的节点,其外度≥2
- 对应于计算使用的节点,其外度≤1
- 定义4: 定义-引用对
- 如果某个变量v ∈V在语句n中被定义DEF(v,n),在语句m中被引用USE(v, m ),那么就称语句n和m为变量v的一个定义—引用对,简称du。
- 定义5: 定义-使用路径
- 定义-使用路径(记做du-path):是Path(P)中的路径,使得对某个v ∈V,存在定义和使用节点DEF(v,m)和USE(v,n),使得m和n是该路径的最初和最终节点。
- 定义6: 定义 - 清除路径
- 定义清除路径(记做dc-path):是具有最初和最终节点DEF(v,m)和USE(v,n)的Path(P)中的路径,使得该路径中没有其他节点是v的定义节点。
- 定义7
- 如果定义-引用路径中存在一条定义-清除路径,那么定义-引用路径是可测试的,否则就不可测试。
- 产生测试用例
在实践中,除了前面给出的各种方法外,通常还可以采用以下三种方法来补充设计测试用例
- 通过非路径分析得到测试用例
- 这种方法得到的测试用例是在应用系统本身的实践中提供的,基本上是测试人员凭工作经验的得到,甚至是猜测得到的。
- 寻找尚未测试过的路径并生成相应的测试用例
- 这种方法需要穷举被测程序的所有路径,并与前面已测试路径进行对比。
- 通过指定特定路径并生成相应的测试用例。
最少测试用例数计算
- 对于某个具体的程序来说,至少需要设计多少个测试用例才能实现逻辑覆盖。这里提供一种估算最少测试用例数的方法。
- 结构化程序是由 3 种基本控制结构组成:顺序型(构成串行操作)、选择型(构成分支操作)和重复型(构成循环操作)。
- 为了把问题化简,避免出现测试用例极多的组合爆炸,把构成循环操作的重复型结构用选择结构代替。这样,任一循环便改造成进入循环体或不进入循环体的分支操作了。
- 用N-S图表示程序的3种基本控制结构
- 例子
- 对于一般的、更为复杂的问题,估算最少测试用例个数的原则也是同样的
- 如果在N-S图中存在有并列的层次A1、A2,A1和A2的最少测试用例个数分别为a1、a2,则由 A1、A2 两层所组合的 N-S图对应的最少测试用例数为a1×a2。
- 如果在N-S图中不存在有并列的层次,则对应的最少测试用例数由并列的操作数决定,即N-S图中除谓词之外的操作框的个数。
- 举例