白盒测试用例设计
白盒测试方法
静态白盒测试
检查设计和代码
静态测试是指测试非运行部分——检查和审查。白盒测试是指访问代码,能够查看和审查。静态白盒测试实在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。有时也称为结构分析。
进行静态白盒子测试的首要原因就是尽早发现软件缺陷,以找出动态黑盒子测试难以揭示或遇到的软件缺陷;另一个好处是为接受该软件测试的黑盒测试员的测试案例提供思路,他们不必了解代码细节,但是根据审查备注,可以确定似乎有问题或者存在软件缺陷的特性范围。
正式审查
正式审查就是进行静态白盒子测试的过程。正式审查含义广泛,从程序员之间的交谈,到代码的严格检查均属于此过程。
有4个基本要素:
- 确定问题。审查的目标是找出软件的问题,不仅是出错的项目,还包括遗漏的项目。全部的批评应直指代码,而不是其创建者。合作者不应该互相指责。个人情绪化感觉要保留。
- 遵守规则。 审查要遵守一套固定的规则,规则可能设定要审查的代码量、花费多少时间、哪些内容要做备注等等。其重要性在于合作者了解自己的作用和目标,这有助于使审查进展的更加顺利。
- 准备。每个合作者需要了解自己的责任和义务,并积极参与审查。在审查过程中找出问题大部分的缺陷是在准备期间发现的,而不是实际审查期间。
- 编写报告。审查小组必须做出总结审查结果的书面报告,并使报告便于开发小组使用。审查结果必须尽快告诉别人,比如发现多少问题,在哪发现的。
动态白盒测试
用一句话来概括,动态白盒测试是指利用查看代码功能和实现方式得到的信息来确定哪些要测试,哪些不要测试,如何开展测试。动态白盒测试的另一个常用名称是结构化测试,因为软件测试员可以查看并使用代码的内部结构,从而设计和执行测试。
动态白盒测试不仅仅是查看代码,还包括直接参数和控制软件。它包括四部分:
1.直接测试底层功能、过程、子程序和库。即应用程序接口(API)
2.以完整程序的方式从顶层测试软件,但是要根据对软件运行的了解调整测试案例。
3.从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行。
4. 估算执行测试时“命中”的代码量和具体代码,然后调整测试,去掉多余的,补充遗漏的。
代码检查法
代码检查方法
桌面检查
变量的交叉引用表
标号的交叉引用表
子程序、宏、函数
等价性检查
常量检查
代码审查
标准检查
风格检查
走查
对照程序的规格说明,详细阅读源代码,逐字逐句进行分析和思考,比较实际的代码和期望的代码,从它们的差异中发现程序的问题和错误。
补充文档。
逻辑覆盖法
逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称 ,这组测试过程逐渐进行越来越完整的通路测试
逻辑覆盖法又可分为
语句覆盖
设计足够的测试用例,运行被测程序,使得程序中每一个可执行语句至少执行一次。
执行路径:abd 测试数据:[x=4,y=5,z=9]
判断覆盖
设计足够的测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少执行一次.
执行路径:abe,acd 测试数据:[x=5,y=5,z=9]、[x=4,y=5,z=10]
条件覆盖
设计足够多的测试用例,运行被测程序,使得每一判定语句中每 个逻辑条件的可能取值至少执行一次。
执行路径: (t1, t2,t3,-t4)acd、(-t1,t2,-t3,t4)acd
测试数据: [x=4,y=5,z=10]、 [x=3,y=6,z=9]
判断-条件覆盖
设计足够多的测试用例,使得判定中的每个条件的所有可能(真假分支)至少执行-次,并且每个判定本身的判定结果也至少执行次。
执行路径:(t1, t2,t3,t4)abd、(-t1, -t2,-t3,-t4)ace
测试数据:[x=4,y=6,z=9]、[x=3,y=5,z=10]
条件组合覆盖
设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少执行次。
执行路径:(t1,t2,t3,t4)abd、(-t1,-t2,-t3,-t4)ace、 (t1,-t2,t3, t4)acd、(-t1,t2,-t3,t4)acd
测试数据:[x=4,y=6,z=9]、[x=3,y=5,z=10]、 [x=4,y=5,z=10]、 [x=3,y=6,z=9]
路径补充覆盖
针对条件组合覆盖,如果发现丢失路径的情况存在,则补充丢失的路径。
执行路径:abe
测试数据:[x=5,y=5,z=9]
基本路径测试法
程序的控制流程图如下:
例子:
程序环路复杂性
McCabe复杂性度量
有以下两种方法计算圈复杂度:
控制流程图:
基本路径测试法步骤
以详细设计或源代码作为基础,导出程序的控制流图。
计算得到的控制流图G的环路复杂性V(G)。
确定线性无关的路径的基本集。
生成测试用例,确保基本路径集中每条路径的执行。
循环覆盖
简单覆盖
其中n是允许通过循环的最大次数
整个跳过循环;
只有一次通过循环;
两次通过循环;
m次通过循环,其中m<n ;
n-1 , n次通过循环。
嵌套覆盖
从最内层循环开始,将其它循环设置为最小值。
对最内层循环使用简单循环,而使外层循环的叠代参数(即循环计数) 最小,并为范围外或排除的值增加其它测试。
由内向外构造下一个循环的测试,但其它的外层循环为最小值,并使其它的嵌套循环为"典型”值。
继续直到测试所有的循环。
串接循环
如果串接循环的循环都彼此独立,可是使用简单循环策略测试。
如果第一个循环是第 个循环的初始值,则这两个循环并不是独立的则推荐使用的嵌套循环的方法进行测试。
不规则循环
不能测试,尽量重新设计成结构化的程序结构后再进行测试。