白盒测试及其用例的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
h
5
测试用例的设计
白盒技术
在测试阶段穷举测试不可行,必须要从 数量极大的可用测试用例中精心地挑选少量的 测试数据,使得采用这些测试数据能够达到最 佳的测试效果,能够高效率地把隐藏的错误揭 露出来。下面介绍几种白盒测试设计测试用例 的方法。
h
6
白盒测试的主要方法
逻辑驱动测试 基本路径测试
主要用于软件验证。 使用程序设计的控制结构导出测试用例。
x=4 同时 z=9
h
18
如下的C函数:
void DoWork2(int x)
1{
2 int k=0,j=0;
3 if(x>3)
//语句1
4 k=x-1;
5 else
6 k=sqrt(x);
}
双分支语句
Q1:本函数中起作用的变量 有哪几个? Q2:用最简单的输入,使函 数中的每个语句都得到执行
教学目标
理论环节
➢ 学习理解白盒测试方法的基本概念 ➢ 学习理解白盒测试的覆盖理论 ➢ 学习掌握白盒测试的路径表达 ➢ 学习掌握白盒测试的基本路径测试法
实践环节
➢ 通过案例运用学习掌握覆盖问题的解决方法 ➢ 运用基本路径测试方法进行实际程序测试
h
1
白盒测试也称结构测试或逻辑驱动测试, 是针对被测单元内部是如何进行工作的测试。 白盒法把测试对象看做是一个打开的盒子,允 许测试人员利用程序内部的逻辑结构及有关信 息,设计或选择测试用例,对程序所有逻辑路 径进行测试。通过在不同点检查程序的状态, 确定实际的状态是否与预期的状态一致。
令判断条件A成立,分支之一被执行 令判断条件A不成立,但B成立,那么分支之二被执行 令判断条件AB均不成立,则分支之三被执行
以上三种取值,均能使这个分支语句得以执行
h
14
➢ for(i=0;i<10;i++) s=s+a[i];
令 i 取零到9闭区间内的任意值,循环体就会被执行
可见:越复杂、影响最终结果的变量的可能值越多的语句, 只要取其任一个分支或任一种可能,整条语句就算被执行
7}
h
17
如下的C函数:
判断条件较复杂的单分支语句
void DoWork(int x,int y,int z) 1{ 2 int k=0,j=0; 3 if((x>3)&&(z<10)) //语句1 4{ 5 k=x*y-1; 6 j=sqrt(k); 7} 8 j=j%3; //语句2 9}
Q1:本函数中起作用的 变量有哪几个?x、y、z Q2:用最简单的输入, 使函数中的每个语句都 得到执行
s=s+a[i];
对以上语句,请思考:如何让它们都被执行?
h
10
Q:什么叫做“语句被执行”?
– 简单的赋值语句
• 使赋值号左侧的变量得到一个值
– 分支语句
• 使各个分支语句中至少一个被执行
– 循环语句
• 使循环体被执行至少一次
h
11
给出测试数据,使各语句均被执行
➢ y=abs(x);
令x任取一值即可使本语句被执行
➢ if (x>=0) y=sqrt(x);
令x任取一非负数值即可保证判断条件成立,语句被执行
➢ if (x>=0) y=x; 令x任取一值 else y=abs(x);
因为此二分支覆盖了全部的取值范围,x无论取 什么值,都能使其中的一个分支被执行
hwk.baidu.com
12
➢ if ((x>=0)||(z>=0)) y=x*z;
最粗略的测试,是仅仅考虑到其中的一种可能 最彻底的测试,是考虑到每一种可能
h
15
逻辑驱动测试
是以程序内在逻辑结构为基础的测试,即测试覆盖率。共 包括以下 6 种类型(强弱程度逐渐递增): ➢ 语句覆盖 仅考虑一种可能,最粗略 ➢ 判定覆盖 ➢ 条件覆盖 ➢ 判定-条件覆盖 ➢ 条件组合覆盖 ➢ 路径覆盖 考虑到每一种可能,最彻底
令判断条件成立,语句即被执行
不管z,令x任取一非负数值 不管x,令z任取一非负数值 令x、z同时任取一非负数值
这三种取值均能 使判断条件成立
h
13
➢ if ((x<0)or(x>100)) printf("ERROR!");
else
A
if(x>=60) printf("OK!");
else B
printf("FAIL!");
h
16
如下的C函数:
单分支语句
void DoWork1(int x) Q1:本函数中起作用的变
1{
量有哪几个? x
2 int k=0,j=0;
3 if(x>3)
//语句1
4 k=x^3-1;
5 j=sqrt(k); //语句2
Q2:用最简单的输入,使 函数中的每个语句都得到 执行:令x为4
6 printf("%d,%5.2d\n",k,j);
h
7
六种逻辑覆盖
全部例子均为C语言编制
h
8
一个显而易见的问题:一个完整的语句,未必是一行语句
➢ y=abs(x); 简单的赋值语句 ➢ if (x>=0) y=sqrt(x); 单分支语句 ➢ if (x>=0) y=x; 双分支语句
else y=abs(x); ➢ if ((x>=0)&&(z>=0)) y=x*z;
h
2
白盒法也不可能进行穷举测试,企图遍历 所有的路径,往往是做不到的。
左图所示的一个小程 序的控制流程,其中每个 圆圈代表一段源程序(或 语句块),图中的曲线代 表执行次数不超过20的循 环,循环体中共有5条通路。 这样,可能执行的路径有 520条,近似为1014条可能 的路径。如果完成一个路 径的测试需要1毫秒,那么 整个测试过程需要3170年。 显然,这也是不能接受的。
判断条件较复杂的单分支语句
h
9
一些更复杂的语句
➢ if ((x<0)or(x>100)) printf("ERROR!");
else
判断条件较复杂的多分支语句
if(x>=60) printf("OK!");
else
printf("FAIL!");
➢ for(i=0;i<10;i++) 简单的循环语句
h
3
白盒法需要了解程序的内部结构和详细的处 理过程,它按照程序内部逻辑测试程序,检 验程序中每条通路是否按预定要求正确工作。
h
4
对于白盒测试,即使每条路径都测试了,程序仍 可能有错。再如由于疏忽漏写了路径,白盒测试也发 现不了。
所以,白盒法不能使测试达到彻底。为了用有限 的测试发现更多的错误,需精心设计测试用例。黑盒 法、白盒法是设计测试用例的基本策略,每一种方法 对应着多种设计测试用例的技术,每种技术可达到一 定的软件质量标准要求。