【正确答案】由于白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。白盒技术有以下三种。
(1)逻辑覆盖。追求程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是 不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面是几种常用的覆盖技术:
①语句覆盖。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。语句覆盖是比较弱的覆盖标准。
②判定覆盖。判定覆盖是指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称为“分支覆盖”。
判定覆盖较语句覆盖严格,因为如果通过了各个分支,则各个语句也就执行了。
③条件覆盖。条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
满足条件覆盖不一定满足判定覆盖,为了解决此问题,需要兼顾条件与分支。
④判定/条件覆盖。该覆盖标准是指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
⑤条件组合覆盖。条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。
显然,满足条件组合覆盖的测试一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”,因为每个判定表达式、每个条件都不止一次地取到过“真”、“假”值。但不能保证覆盖程序可能执行的全部路径。
⑥路径覆盖。路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。
表17-2列出了这6种覆盖标准的对比。
17-2 6种覆盖标准的对比 | 发现错误能力 | 覆盖标准 | 说明 | 弱 强 | 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖 路径覆盖 | 每条语句至少执行一次 每个判定的每个分支至少执行一次 每个判定的每个条件应取到各种可能的值 同时满足判定覆盖和条件覆盖 每个判定中各条件的每一种组合至少出现一次 使程序中每一条可能的路径至少执行一次 | |
(2)循环覆盖。在逻辑覆盖的测试技术中,只讨论了程序内部有判定存在的逻辑结构的测试用例设计技术,而循环也是程序的主要结构,要覆盖含有循环结构的所有逻辑是不可能的,但可通过限制循环次数来测试,下面给出设计原则:
①单循环。其中,n为可允许执行循环的最大次数。设计以下情况的测试用例:
A.跳过循环。
B.只执行一次循环。
C.执行循环m次,其中m<n。
D.执行循环m-1次,n次,n+1次。
②嵌套循环。
A.值外循环处于最小循环计数值,对于内层进行单循环测试。
B.由里向外,进行下一层的循环测试。
(3)基本路径测试。基本路径测试是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。
基本路径测试的步骤为:
①以详细设计或源程序为基础,导出控制流程图的拓扑结构______程序图。
②计算程序图G的环路复杂性V(G)McCabe定义程序图的环路复杂性为此平面图中区域的个数。
③确定只包含独立路径的基本路径集。环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个执行语句至少执行一次所必需的测试用例数目的上界。独立路径是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,一条独立路径是至少包含有一条在其他独立路径中未有过的边的路径,对于给定的程序图,可以得到不同的基本路径集。
④设计测试用例,确保基本路径集合中每条路径的执行。