• 9
  • 9
分享
  • 白盒测试及其基本方法——软件测试圈
  • quinn 2022-05-09 11:07:43 字数 5434 阅读 8087 收藏 9

一、白盒测试

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

二、概述

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

三、基本方法

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

(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

1.png

(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)  条件组合覆盖

所有可能的条件组合:

2.png

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

测试用例:

3.png

(6)基本路径测

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

 

作者:Gavin-Zhang

原文链接:https://blog.csdn.net/u013457642/article/details/41680853

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 软件测试是对项目研发过程的产物(文档,代码等)进行审查,保障产品质量的过程。我们可以通过手工测试,自动化测试,工具扫描等方法完成这个任务。其中,自动化测试是当前重要的一种测试方法,具有响应速度快、稳定性高、人工干预少的特点,很好的契合了高响应、海量数据验证等需求的测试任务。数据驱动是自动化测试的灵魂,数据驱动的应用程度直接决定了自动化测试的水平和质量。一、自动化测试和数据驱动如果你有100亩麦子需要收割,你会怎么做?方法一:拎起镰刀或者雇几个人拎起镰刀割麦子。方法二:制造或者购买一台收割机,然后开着收割机割麦子。显然,这两种方法都能完成任务,但是,方法二具有重资产、高效率的特点。测试就如同这割...
            1 1 1927
            分享
          • 1、引言小屌丝:鱼哥, 都说要想代码写的溜,Lamdba不能少。小鱼:你在项目代码多写几个lamdba试试,看看架构师找不找你喝茶水。小屌丝:…小鱼:逗你玩… 架构师哪舍得自己花钱买茶叶,都是能蹭就蹭…小屌丝:…小鱼:你这突然提到lamdba函数,是想了解点什么??小屌丝:嘿嘿,真是什么都瞒不过你, 我就想把python最常用的内置函数在重新捋一捋,小鱼:说实话。小屌丝:你也知道,我女神最近在学习python,所以我想…小鱼:靠… 就知道你是这样的!小屌丝:鱼哥,我也是身不由己啊, 不然… 说出来都是眼泪。小鱼:行了,别装的这么可怜, 我给你捋一捋不就行了。小屌丝:啥也别说了,此时我想…2、内...
            1 0 1102
            分享
          •   移动端APP的测试处于不断探索,不断进化的过程中,而手机银行是目前各大银行金融科技战争的主要阵地,如何更好更快地对手机银行进行测试是个热门话题,也是个值得深入研究的课题。本文以某行手机银行测试为例,描述了SoloPi用例执行录制转为Appium脚本后集成至jenkins,并完成自动化部署后的真机并发执行实践流程,并对Appium 1.15.1和安卓10使用中存在的一些问题提供了解决方法,希望能够对移动端APP的测试提供更多的借鉴。  1、SoloPi与用例的自动化构建及测试  SoloPi是蚂蚁金服研发的一款移动端APP测试工具,提供脚本录制、编辑、回放,结果展示以及一机多控,即通过设备间...
            0 0 1991
            分享
          • Robot Framework是一款Python编写的功能自动化测试框架,它是开源的。搭建了Python环境后,可以接着搭建Robot Framework。 Robot Framework 有几大特点:1)使用简单;2)非常丰富的库;3)可以像编程一样写测试用例;4)支持开发系统关键字。 以Windows环境为例,我们来安装Robot Framework: 1)  安装Python2.7:https://www.python.org/ (参考前面的分享《关于Python + Selenium...
            2 3 3015
            分享
          •   各位小伙伴们还记上个月小红书APP崩溃闪退,导致大批用户卸载APP重装的事故吗?闪退Bug从凌晨持续到第二天上午。  事发第二天,就有研发在线承认了,因为自己的失误导致了这次事件,评论区也有人担心博主会不会失去工作。  这件事会到此为止吗?有研发人员承认了错误,测试人员还需要负责吗?  也由此引出一个测试人员的最大疑问:  项目上线后出了严重Bug,到底是谁的责任?  目前存在如下两种观点:  Mr.Zhou  Mr.Zhou是企业的研发总监,他看到这个Bug时,确定是测试的锅。  他认为:测试工程师是软件产品质量的最后一个把关者,没有做好更新测试,才导致版本发布上线后APP更新崩溃。因此...
            0 0 1240
            分享
      • 51testing软件测试圈微信