白盒测试又称为结构测试,是一种基于代码的测试。它一般用来测试程序的内部结构,并判定其结果是否与预期的结果一致。
白盒测试,就如同测试是透明的,我们可以清楚地了解到这项目是如何运行的,知道程序的内部逻辑结构,通过测试代码,来对其进行验证。
白盒测试的方法有很多种,它的特点是依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。所以白盒测试可以检测代码中的每条分支和路径,可以对代码测试的比较彻底。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
课堂上讲了控制流测试和数据流测试,下面是简单的总结介绍:
我们首先用有向图来表示程序的整体架构。
控制流覆盖准则分为四类:
1.语句覆盖准则(Statement Coverage)
2.分支覆盖准则(Branch Coverage 或Decision Coverage)
3.谓词测试
(1)原子谓词覆盖准则(也称 Condition Coverage)
(2)分支-谓词覆盖准则(也称Branch Condition Coverage 或Decision Condition Coverage )
(3)复合谓词覆盖准则(也称Multi Condition Coverage)
4.路径覆盖准则(Path Coverage)
1.语句覆盖准则
是最简单的结构性测试方法之一,它要求测试中,程序中的每条语句都得到运行。控制流图中要求所有语句都被运行的充分必要条件是,覆盖图中的所有节点。
2.分支覆盖准则
(1)分支覆盖要求在软件测试中,每个分支都至少获得一次真/假值,即每个分支都经历一次真/假
(2)分支覆盖的同时,还满足了语句覆盖。
3.谓词测试
(1)原子谓词覆盖准则
一个分支的条件是由谓词组成。单个谓词称为原子谓词。
原子谓词测试要求在软件测试中,每个复合谓词所包含的每一个原子谓词都至少获得一次“真”值和一次“假”值。
(2)分支-谓词覆盖准则
要求在软件测试中,不仅每个复合谓词所包含的每个原子谓词都至少获得一次真/假。每个复合谓词本身也至少获得一次“真”/“假”。
(3)复合谓词覆盖准则
原子谓词通过逻辑运算符的连接构成复合谓词。常见的逻辑运算符 与,或,非。
任意一个分支,对该分支所包含的原子谓词的任意一个可行的真/假值组合,即每个复合谓词内的原子谓词的各种可能的组合都至少出现一次。
4.路径覆盖准则
要求程序覆盖所有完整路径。
数据流测试:
这里的数据流测试,是数据交互功能测试,用作路径测试的“真实性检查”。
它关注的是变量接收值的点和使用(引用)这些值的点的结构性测试形式。
数据流覆盖测试准则:
测试数据集T对测试程序P满足定义覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义性出现,若该定义性出现能够可行地传递到该变量的某一个引用性出现,那么LT中存在一条路径A,它包含一条子路径A’,使得A’将该定义出现传递到某一引用性出现。
要注意的是:因为一个定义可能要传递到多个引用,一个定义要对多个引用都是正确的。而定义覆盖只要求检查一个引用。所以检查的内容是弱充分的。