白盒测试是一种非常常用的测试方法。白盒测试又称结构测试、透明盒测试、逻辑驱动测试、基于代码的测试。白盒测试是把测试对象看作一个打开的盒子,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
白盒测试的主要测试方法有:代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法(应用最广泛)、域测试、符号测试、Z路径覆盖、程序变异。
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。
在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可
执行路径集合,从而设计测试用例。包括以下4 个步骤和一个工具方法:
1. 程序的控制流图:描述程序控制流的一种图示方法。
2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本
路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次
所必须的测试用例数目的上界。
3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
4. 准备测试用例:确保基本路径集中的每一条路径的执行。
白盒测试流图只有二种图形符号:
1.图中的每一个圆称为流图的结点,代表一条或多条语句。
2.流图中的箭头称为边或连接,代表控制流,任何过程设计都要被翻译成控制流图。
基本语句对应的控制流图:
程序流程图->控制流图
独立路径( 基本路径) :一条程序执行的路径 , 至少包含一条在定义该
路径之前的其他基本路径中所不曾用过的边( 即:至少引入程序的一个
新处理语句集合或一个新条件)
计算圈复杂度:圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。
注意:独立路径不应该经过同一个判定结点的左右两侧,否则这条路径如果出现错误,则不知道是哪一侧出现错误。
三种计算方法:
1. 流图中区域的数量
2. V(G)=E-N+2,E是边数,N是结点数
3. V(G)=P+1,P是判定结点的数量
测试用例={ 测试数据+ 期望结果}
– 测试数据是由路径和程序推论出来的;
– 预期结果是从函数说明中导出,不能根据程序结构中导出!
四种循环:
– 简单循环
– 串接循环
– 嵌套循环
– 无结构循环
对于简单循环,测试应包括以下几种,其中的n 表示循环允许的最大
次数。
– 零次循环:从循环入口直接跳到循环出口。
– 一次循环:查找循环初始值方面的错误。
– 二次循环:检查在多次循环时才能暴露的错误。
– m次循环:此时的m<n,也是检查在多次循环时才能暴露的错误。
– n(最大)次数循环、n+1(比最大次数多一)次的循环、n-1(比最大次数少一)次的循环。
对于嵌套循环:
– 从最内层循环开始,设置所有其他层的循环为最小值;
– 对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外,对越界值和非法值做类似的测试。
– 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。
– 反复进行,直到所有各层循环测试完毕。
– 对全部各层循环同时取最小循环次数,或者同时取最大循环次数。对于后一种测试,由于测试量太大,需人为指定最大循环次数。
对于串接循环,要区别两种情况。
– 如果各个循环互相独立,则串接循环可以用与简单循环相同的方法进行测试。
– 如果有两个循环处于串接状态,而前一个循环的循环变量的值是后一个循环
的初值。则这几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。
对于非结构循环,不能测试, 应重新设计循环结构,使之成为其它循环方式,然后再进行测试。