测试技术之白盒测试及其基本方法
白羽 2018-06-12 来源 :网络 阅读 1056 评论 0

摘要:本文将带大家了解测试技术之白盒测试及其基本方法,希望对大家学测试技术有所帮助。


 一、

       白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

 二、概述

        白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例的设计方法,盒子对应的是被测试的测试,"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

三、基本方法

强度由低到高:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

(1)语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。

(2)判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。

(3)条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支

(4)判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。

(5)条件组合覆盖:在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准成为条件组合覆盖。

(6)路径覆盖:是每条可能执行到的路径至少执行一次。

补充:(1)语句覆盖在所有的测试方法中是一种最弱的覆盖。

(2)判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖(3)路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。

四、优缺点

1. 优点

a.迫使测试人员去仔细思考软件的实现

b.可以检测代码中的每条分支和路径

c.揭示隐藏在代码中的错误

d.对代码的测试比较彻底

e.最优化

2. 缺点

a.代价昂贵

b.无法检测代码中遗漏的路径和数据敏感性错误

c.不验证规格的正确性

五、白盒测试中设计到圈复杂度的计算

首先要画出控制流图(这里不再加以说明)

圈复杂度计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。

此外圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,

此外对应与控制流图区域数还有一个圈复杂度计算公式:V(G)=区域数=判定节点数+1。其中判定节点是控制流图中出现的判断条件。

下面附上一个实例,实例并不是很好,但是很全,由于包含细节较多,如有错误,还望见谅。

 

被测程序:寻找最大数程序:max.numbers

 

程序操作说明:从键盘输入3个整数(间隔为空格),找出并输出其中数值最大的那一个。如果其中有一个以上的最大数(相等的情况),也要表示出来。

 

 

#include<stdio.h>

1  void main()

2   {

3         int i,a,b,c;

4         i = 0;

5         while(i<100) {

6         printf("Enter numbers: ");

7         scanf("%d %d%d",&a,&b,&c);

8         if(a>b)

9               {

10               if(a>c)

11                printf("max. a=%d\n",a);

12               else if(a==c)

13                 printf("max. a=c=%d\n",c);

14                     else

15                  printf("max.c=%d\n",c);

16               }

17         else{

18               if(a==b)

19                   {

20               if(a>c) 

21                 printf("max.a=b=%d\n",a);

22               else

23                if(a==c) 

24                  printf("max.a=b=c=%d\n",c);

25                     else

26                       printf("max.c=%d\n",c); 

27                     }

28              else{

29                  if(b>c)

30                printf("max.b=%d\n",b);

31                else

32                 if(b==c) 

33                    printf("max. b=c=%d\n",b);

34                      else

35                        printf("max. c=%d\n",c);

36               }

37             }

38           i++;

39           }

40     }

 

 

实验要求:依据语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖、基本路径测试分别给出测试用例。基本路径测试要求画出程序流图、控制流图、计算圈复杂度、给出路径并导出测试用例。

 

整个程序对应的流程图如下和控制流图对应如下:

 

(1)    语句覆盖

由控制流图可知:测试用例需要9组

a.      a=3,b=2,c=1

路径经过为:1,3,4,5,6,7,8,10,11,16.38,39

b.     a=2,b=1,c=2

路径经过为:1,3,4,5,6,7,8,10,12,13,16.38,39

c.      a=2,b=1,c=3

路径经过为:1,3,4,5,6,7,8,10,12,15,16.38,39

d.     a=2,b=2,c=1

路径经过为:1,3,4,5,6,7,8,18,20,21,27.38,39

e.      a=b=c=2

路径经过为:1,3,4,5,6,7,8,18,20,23,24,27,38,39

f.      a=2,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,20,23,26,27,38,39

g.     a=1,b=3,c=2

路径经过为:1,3,4,5,6,7,8,18,29,30,37, 38,39

h.     a=1,b=2,c=2

路径经过为:1,3,4,5,6,7,8,18,29,32,33,37, 38,39

i.       a=1,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,29,32,35,37, 38,39

 

(2)    判断覆盖

 

由控制流图可知:测试用例需要9组

a.      a=3,b=2,c=1

路径经过为:1,3,4,5,6,7,8,10,11,16.38,39

b.     a=2,b=1,c=2

路径经过为:1,3,4,5,6,7,8,10,12,13,16.38,39

c.      a=2,b=1,c=3

路径经过为:1,3,4,5,6,7,8,10,12,15,16.38,39

d.     a=2,b=2,c=1

路径经过为:1,3,4,5,6,7,8,18,20,21,27.38,39

e.      a=b=c=2

路径经过为:1,3,4,5,6,7,8,18,20,23,24,27,38,39

f.      a=2,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,20,23,26,27,38,39

g.     a=1,b=3,c=2

路径经过为:1,3,4,5,6,7,8,18,29,30,37, 38,39

h.     a=1,b=2,c=2

路径经过为:1,3,4,5,6,7,8,18,29,32,33,37, 38,39

i.       a=1,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,29,32,35,37, 38,39

 

(3)  条件覆盖

整个测试所覆盖的条件:

1.a>b 真为T1,假为F1

2.a>c 真为T2,假为F2

3.a=c 真为T3,假为F3

4.a=b 真为T4,假为F4

5.b>c 真为T5,假为F5

6.b=c 真为T6,假为F6

 测试用例 覆盖条件 具体条件取值

a=3,b=2,c=1 T1,T2 a>b,a>c

a=2,b=1,c=2 T1, F2,T3 a>b ,a=c

a=2,b=1,c=3 T1,F2,F3 a>b,a<=c,

a=2,b=2,c=1 F1,T4,T2 a=b,a>c

a=b=c=2 F1,T4,F2,T3 a=b=c

a=2,b=2,c=3 F1,T4,F2,F3 a=b,a<c

a=1,b=3,c=2 F1,F4,T5 a<b,b>c

a=1,b=2,c=2 F1,F4,F5,T6 a<b,b=c

a=1,b=2,c=3 F1,F4,F5,F6 a<b,b<c

 

(4)  判断/条件覆盖

 

a.      a=3,b=2,c=1

覆盖路径经过为:1,3,4,5,6,7,8,10,11,16.38,39

覆盖条件:T1,T2

b.     a=2,b=1,c=2

路径经过为:1,3,4,5,6,7,8,10,12,13,16.38,39

覆盖条件:T1, F2,T3

c.      a=2,b=1,c=3

路径经过为:1,3,4,5,6,7,8,10,12,15,16.38,39

覆盖条件:T1,F2,F3

d . a=2,b=2,c=1

路径经过为:1,3,4,5,6,7,8,18,20,21,27.38,39

覆盖条件:F1,T4,T2

e.      a=b=c=2

路径经过为:1,3,4,5,6,7,8,18,20,23,24,27,38,39

覆盖条件:F1,T4,F2,T3

f.      a=2,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,20,23,26,27,38,39

覆盖条件:F1,T4,F2,F3

g.     a=1,b=3,c=2

路径经过为:1,3,4,5,6,7,8,18,29,30,37, 38,39

覆盖条件:F1,F4,T5

h.  a=1,b=2,c=2

路径经过为:1,3,4,5,6,7,8,18,29,32,33,37, 38,39

覆盖条件:F1,F4,F5,T6

i.                   a=1,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,29,32,35,37, 38,39

覆盖条件:F1,F4,F5,F6

 

(5)  条件组合覆盖

所有可能的条件组合:

编号

   

覆盖条件

   

判定条件

   

具体条件

   

1

   

T1,T2

   

8取Y,10取Y

   

a>b,a>c

   

2

   

T1, F2,

   

8取Y,10取N,

   

a>b,a<=c

   

3

   

F2,T3

   

10取N,12取Y

   

a=c

   

4

   

F2,F3

   

10取N,12取N

   

a<c

   

5

   

F1,T4

   

8取N,18取Y

   

a=b

   

6

   

F1,F4

   

8取N,18取N

   

a<b

   

7

   

T4,T2

   

18取Y,20取Y

   

a=b,a>c

   

8

   

T4,F2

   

18取Y,20取N

   

a=b,a<=c

   

9

   

F2,T3

   

20取N,23取Y

   

a=c

   

10

   

F2,F3

   

20取N,23取N

   

a<c,

   

11

   

F4,T5

   

18取N,29取Y

   

a<b,b>c

   

12

   

F4,F5

   

18取N,29取N

   

a<b,b<=c

   

13

   

F5,T6

   

29取N,32取Y

   

b<=c,b==c

   

14

   

F5,F6

   

29取N,32取N

   

b<c

   

 

1.a>b 真为T1,假为F1

2.a>c 真为T2,假为F2

3.a=c 真为T3,假为F3

4.a=b 真为T4,假为F4

5.b>c 真为T5,假为F5

6.b=c 真为T6,假为F6

 

 

测试用例:

测试用例

   

覆盖条件

   

覆盖组合

   

具体条件取值

   

a=3,b=2,c=1

   

T1,T2

   

1

   

a>b,a>c

   

a=2,b=1,c=2

   

T1, F2,T3

   

2,3

   

a>b ,a=c

   

a=2,b=1,c=3

   

T1,F2,F3

   

2,4

   

a>b,a<=c,

   

a=2,b=2,c=1

   

F1,T4,T2

   

5,7

   

a=b,a>c

   

a=b=c=2

   

F1,T4,F2,T3

   

5,8,3

   

a=b=c

   

a=2,b=2,c=3

   

F1,T4,F2,F3

   

5,8,4

   

a=b,a<c

   

a=1,b=3,c=2

   

F1,F4,T5

   

6,11

   

a<b,b>c

   

a=1,b=2,c=2

   

F1,F4,F5,T6

   

6,12,13

   

a<b,b=c

   

a=1,b=2,c=3

   

F1,F4,F5,F6

   

6,12,14

   

a<b,b<c

   

 

 

(7)基本路径测

 

a.      a=3,b=2,c=1

路径经过为:1,3,4,5,6,7,8,10,11,16.38,39

b.     a=2,b=1,c=2

路径经过为:1,3,4,5,6,7,8,10,12,13,16.38,39

c.      a=2,b=1,c=3

路径经过为:1,3,4,5,6,7,8,10,12,15,16.38,39

d.     a=2,b=2,c=1

路径经过为:1,3,4,5,6,7,8,18,20,21,27.38,39

e.      a=b=c=2

路径经过为:1,3,4,5,6,7,8,18,20,23,24,27,38,39

f.      a=2,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,20,23,26,27,38,39

g.     a=1,b=3,c=2

路径经过为:1,3,4,5,6,7,8,18,29,30,37, 38,39

h.     a=1,b=2,c=2

路径经过为:1,3,4,5,6,7,8,18,29,32,33,37, 38,39

i.       a=1,b=2,c=3

路径经过为:1,3,4,5,6,7,8,18,29,32,35,37, 38,39

 

每个测试用例对应的路径:

路径1:  1-3-4-5-6-7-8-10-11-16-38-39

路径2: 1-3-4-5-6-7-8-10-12-13-16-38-39

路径3: 1-3-4-5-6-7-8-10-12-15-16-38-39

路径4: 1-3-4-5-6-7-8-18-20-21-27-37-38-39

路径5: 1-3-4-5-6-7-8-18-20-23-24-27-37-38-39

路径6:1-3-4-5-6-7-8-18-20-23-26-27-37-38-39

路径7: 1-3-4-5-6-7-8-18-29-30-36-37-38-39

路径8:1-3-4-5-6-7-8-18-29-32-33-36-37-38-39

路径9:1-3-4-5-6-7-8-18-29-32-35-36-37-38-39

 

圈复杂度V(G)=判断节点数+1=9+1=10

 



本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程