目录
前言
1. 一个程序模块的例子
2. 语句覆盖
3. 判断覆盖
4. 条件覆盖
5. 判断-条件覆盖
6. 条件组合覆盖
7. 路径覆盖
8. 测试用例的组合和优化
结语
前言白盒测试主要是检查程序的内部结构、逻辑、循环和路径。白盒测试的常用用例设计方法有逻辑覆盖和基本路径测试。
根据覆盖测试的目标不同,逻辑覆盖又可分为语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖及路径覆盖。
1. 一个程序模块的例子
图1 一个程序模块的例图
从图中可知,该程序模块有4条不同的路径、4个可执行语句。这4条路径可分别表示为:
L1(a→c→e)简化为ace;
L2(a→b→d)简化为abd;
L3(a→b→e)简化为abe;
L4(a→c→d)简化为acd;
4条路径应该满足的逻辑表达式分别为:
记M={(A>1)and(B=0)},N={(A=2)or(X>1)}
L1(a→c→e)= M and N
L2(a→b→d)= /M and /N
L3(a→b→e)= /M and N
L4(a→c→d)= M and /N
其中,“/M”表示M的反,“/N”表示N的反,或者将4条路径应该满足的逻辑表达式写为:
L1(a→c→e)= {(A>1)and(B=0)} and {(A=2)or(X/A>1)} ;
L2(a→b→d)= / {(A>1)and(B=0)} and / {(A=2)or(X>1)} ;
L3(a→b→e)=/ {(A>1)and(B=0)} and {(A=2)or(X>1)} ;
L4(a→c→d)= {(A>1)and(B=0)} and / {(A=2)or(X/A>1)};
其中,由符号“and”连接起来的语句是为了遍历这条路径各个输入变量应取值的范围,而由“or”划分了几组可选的取值。根据上面导出的逻辑表达式,就可以用来设计测试用例。
2. 语句覆盖语句覆盖就是设计若干个测试用例,运行所测程序,使得每一条可执行语句至少执行一次。对上面的例子,所有的可执行语句都在路径L1上,所以选择路径L1来设计测试用例,就要覆盖所有的可执行语句。
测试用例设计的格式如下:
[输入的(A,B,X),输出的(A,B,X)]为覆盖路径:L1(a→c→e)= M and N,{(A>1)and(B=0)} and {(A=2)or(X/A>1)}。可设计出满足语句覆盖的测试用例是:
[(2,0,4),(2,0,3)],覆盖ace[L1]。
从每个执行语句都得到执行这一点来看,语句覆盖的方法似乎能能够比较全面地检验每个可执行语句,但实际上并非如此。
语句覆盖的不足之处是:假如该程序段中的两个逻辑运算有问题,例如,第一个判断中的逻辑运算符“&&”写成了“||”,或者第二个判断中的逻辑运算符“||”错写成了“&&”,利用上面的测试用例,仍然可覆盖所有4个可执行语句,这说明虽然做到了语句覆盖测试,但可能发现不了判断时逻辑运算中出现的错误。语句覆盖是最弱的逻辑覆盖准则。
3. 判断覆盖判断覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取TRUE分支和取FALSE分支至少经历一次。判断覆盖又称为分支覆盖。
根据定义,可分别选择路径L1和L2或者路径L3和L4设计测试用例。
如果选择路径L1和L2,则可得到满足要求的测试用例:
[(2,0,4),(2,0,3)],覆盖ace[L1]
[(1,1,1),(1,2,1)],覆盖abd[L2]
如果选择路径L3和L4,则可设计另一组测试用例:
[(2,1,1),(2,1,2)],覆盖abe[L3]
[(3,0,3),(3,0,1)],覆盖acd[L4]
可见,测试用例的选择不唯一。
判断覆盖的不足之处是:假如第二个判断中的条件X>1被错写成了X1取TRUE时为T1,取FALSE时为F1;
对第二个判断:
- 条件A=2取TRUE时为T3,取FALSE时为F3;
- 条件X>1取TRUE时为T4,取FALSE时为F4。
根据这8个条件取值,可分别设计如下两组测试用例,如表1和表2所列。
表1 第一组
测试用例
通过路径
条件取值
覆盖分支
[(1,0,3),(1,0,4)]
abe(L3)
F1,T2,F3,T4
b,e
[(2,1,1),(2,1,2)]
abe(L3)
T1,F2,T3,F4
b,e
表2 第二组
测试用例
通过路径
条件取值
覆盖分支
[(2,0,4),(2,0,3)]
ace(L1)
T1,T2,T3,T4
c,e
[(1,0,1),(1,0,1)]
abd(L2)
F1,T2,F3,F4
b,d
[(2,1,1),(2,1,2)]
abe(L3)
T1,F2,T3,,F4
b,e
由表1和表2可以看出,两组测试用例都满足了条件覆盖,即覆盖了所有的体哦阿健取值。条件覆盖的不足之处是:第一组测试用例不满足判断(分支)覆盖的要求。
5. 判断-条件覆盖判断-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。也就是说,要求各个判断的所有可能的条件取值组合至少执行一次。
根据判断-条件覆盖的定义,只需设计下面两个测试用例来覆盖例子的8个条件取值以及4个判断分支,如表3所列。
表3 判断分支列表
测试用例
通过路径
条件取值
覆盖分支
[(2,0,4),(2,0,3)]
ace(L1)
T1,T2,T3,T4
c,e
[(2,1,1),(2,1,2)]
abd(L2)
F1,F2,F3,F4
b,d
判断-条件覆盖的不足之处是:从表面上看来,判断-条件覆盖测试了所有条件的取值,但实际上并非如此,而是某些条件掩盖了另一些条件(由于多重条件判定),例如,对条件表达式(A>1)AND(B=0)来说,若(A>1)的测试结果为FALSE,可以立即确定表达式的结果为FALSE,这时往往就不再测试(B=0)的取值了,因此,条件(B=0)就没有被检查。同样,对条件表达式(A=2)OR(X>1)来说,若(A=2)的测试结果为TRUE,就立即确定表达式的结果为TRUE,这时,条件(X>1)就没有被检查。
因此,采用判断-条件覆盖测试,逻辑表达式中的错误不一定能够检查的出来。
6. 条件组合覆盖条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
针对上面的例子,先对各个判断的条件取值组合加以标记,如表4所列。
表4 判断条件取值组合表
组合编号
条件取值的组合
标记
说明
①
A>1,B=0
T1,T2
属第一个判断的取TRUE分支
②
A>1,B!=0
T1,F2
属第一个判断的取FLASE分支
③
A
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?