白盒测试技术基础篇
查看( 270 ) /
评论( 1 )
TAG:
-
Q动人
发布于2008-05-12 14:47:54
-
四. 白盒测试方法-动态测试(即设计测试用例的方法)
1. 白盒测试的动态测试原则-根据程序的控制结构设计测试用例
(1) 保证每个模块的所有独立路径至少被使用一次
(2) 对所有的逻辑值均测试true和false
(3) 上下边界及可操作范围内运行所有循环
(4) 检查内部数据结构以确保其有效性
2. 逻辑覆盖法
(1) 概述
逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖
(2) 分类-依据覆盖源程序语句的详尽程度
- 语句覆盖 SC(Statement Coverage)
- 判定覆盖 DC(Decision coverage)
- 条件覆盖 CC(Condition Coverage)
- 条件判定组合覆盖 CDC(Condition/ Decision Coverage)
- 多条件覆盖 MCC (Multiple Condition Coverage)
- 修改条件判定覆盖 MCDC(Multiple Condition Decision Coverage)
(3) 语句覆盖
选择足够多的测试数据,使被测程序中每条语句至少执行一次
缺点:对程序执行逻辑的覆盖很低
(4) 判定覆盖
- 设计足够多的测试用例,使得程序中的每一个判定至少获得一次‘真’值和‘假’值,或者使得程序中的每一个取‘真’分支或取‘假’分支至少经历一次,因此又称分支覆盖
- 可以满足语句覆盖
- 缺点:主要对整个表达式最终取值进行度量,忽略了表达式内部取值
(5) 条件覆盖
- 设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次
- 不能够满足判定覆盖
(6) 条件判定组合覆盖
- 设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次
- 缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误
(7) 多条件覆盖
- 也称条件组合覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)
- 满足条件覆盖一定满足判定覆盖、条件覆盖、条件判定组合覆盖
- 缺点:判定语句较多时,条件组合值比较多
(8) 修正条件判定覆盖
每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次
程序的判定被分解为通过逻辑操作符(and,or)连接的bool条件,每个条件对于判定的结果值是独立的练习1:采用多条件覆盖方法,对下程序进行白盒测试用例设计
if ((a >1 )&&( b= = 0))
{
x=x/a;
}
if (( a = = 2)|| (x > 1 ))
{
x=x+1;
}
3. 基本路径覆盖
(1) 概述
- 在程序控制流图的基础上,通过分析程序控制流图的环路复杂性,导出基本可执行路径的集合,然后据此设计测试用例
- 设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次
(2) 程序控制流图
- 控制流图是描述程序控制流的一种方式
- 图形符号:圆圈代表一个结点 表示一个或多个无分支的语句或源程序语句
- 边和点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域
- 判断语句中的条件为复合条件时,即条件表达式由一个或多个逻辑运算符连接的逻辑表达式(a and b),则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断
(3) 程序环路复杂性
程序的环路复杂性即McCabe复杂性度量,简单的定义为控制流图的区域数
从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界
独立路径:包括一组以前没有处理的语句或条件的一条路径
通常环路复杂性可用以下三种方法求得:
将环路复杂性定义为控制流图中的区域数。
设E为控制流图的边数,N为图的结点数,则定义环路复杂性为 V(G)=E-N+2。
若设P为控制流图中的判定结点数,则有 V(G)=P+1。
(4) 基本路径测试步骤
- 以详细设计或源代码为基础,导出程序的控制流图
- 计算得到控制流图G的环路复杂性v(g)
- 确定线性无关的路径的基本集
- 生成测试用例,确保基本路径集中每条路径的执行五. 其他白盒测试方法
五. 其他白盒测试方法
1. 域测试
(1) 概述
是一种基于程序结构的测试方法,基于对程序输入空间(域)的分析,选择适的测试点进行测试
(2) Howden错误分类-相对于程序路径分类
- 域错误:程序的控制流存在错误,对于某一特定的输入可能执行的是一条错误路径,这种错误称为路径错误,也叫做域错误
- 计算型错误:对于特定输入执行的路径正确,但赋值语句的错误导致输出结果错误,称为计算型错误
- 丢失路径错误:由于程序中的某处少了一个判定谓词而引起的
(3) 测试理想结果:检验输入空间的每一个输入元素是否都产生正确的结果
(4) 缺点
- 为进行域测试对程序提出的限制过多
- 当程序存在很多路径时,所需的测试点很多
2. 符号测试
(1) 概述
- 基本思想是允许程序的输入不仅仅是具体的数值数据,而且包括符号值,符号值可以是基本的符号变量值,也可以是符号变量值的表达式。
- 符号测试执行的是代数运算,可以作为普通测试的一个扩充
- 符号测试可以看作是程序测试和程序验证的一个折衷办法
(2) 测试理想情况:程序中仅有有限的几条执行路径,如果都完成了符号测试,就可把握的确认程序的正确性了
(3) 缺点
- 分支问题
- 二义性问题
- 大程序问题
3. Z路径覆盖
(1) 概述
对循环机制进行简化,减少路径的数量,使得覆盖所有路径成为可能,简化循环意义下的路径覆盖称为Z路径覆盖
(2) 循环简化:限制循环次数,只考虑循环一次或零次情况
4. 程序变异
(1) 概述
是一种错误驱动测试
错误驱动测试:指该方法是针对某类特定程序错误的,即专门测试某类错误是否存在
错误驱动测试分类:程序强变异和程序弱变异
(2) 优点:便于集中目标对软件危害最大的可能错误,提高测试效率,降低成本
六. 白盒测试综合策略
1. 白盒测试中测试方法的选择策略
(1) 在测试中,首先尽量使用测试工作进行静态结构分析
(2) 采用先静态后动态的组合方式,先进行静态结构分析,代码检查和静态质量度量,然后现进行覆盖测试
(3) 利用静态结构分析的结果,通过代码检查和动态测试的方法对结果进一步确认,使测试工作更为有效
(4) 覆盖率测试是白盒测试的重点,使用基本路径测试达到语句覆盖标准;对于重点模块,应使用多种覆盖标准衡量代码的覆盖率
(5) 不同测试阶段,侧重点不同
- 单元测试:以代码检查、逻辑覆盖
- 集成测试:增加静构结构分析、静态质量度量
- 系统测试:根据黑盒测试结果,采用白盒测试
2. 最少测试用例数计算
- 将构成循环操作的重复型结构用选择结构代替,因此在N-S图中只存在顺序和分支操作
- N-S图按分支结构分层,整个程序的最少测试用例数为每个分层中最少测试用例数的乘积
3. 测试覆盖标准
- Foster的ESTCA覆盖标准
- Woodward等人的层次LCSAJ覆盖标
- 语句覆盖 SC(Statement Coverage)