• 9
  • 9
分享
  • 白盒测试及其基本方法——软件测试圈
  • quinn 2022-05-09 11:07:43 字数 5434 阅读 6963 收藏 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据报道,苹果周四成功说服美国一家上诉法院维持专利法院的判决。苹果原本有可能要向专利授权公司VirnetX支付5.02亿美元侵权赔偿,而这一最新判决有可能推翻此前的赔偿决定。  美国联邦巡回上诉法院确认了美国专利和商标局的裁定,认为VirnetX指控苹果侵犯的两项专利无效。  VirnetXCEO肯达尔·拉森在声明中表示,该公司对这项裁决感到失望,并考虑重新申请听证会,或者上诉到美国最高法院。  本案宣判后,VirnetX股价在周四纽交所常规交易中下跌超过14%。但在本案宣判前,该股早盘一度涨超55%,原因是该公司宣布将派发特别股息,并预计未来可能因为苹果案获益。  苹果发言人尚未对此置评。...
            0 0 719
            分享
          • 在我们自动化过程中,能否构建一个健壮和可靠的测试是UI自动化测试能否成功的关键因素之一。然而在自动化过程中试着去执行的时候,常常会出现各种不同的状况,当使用脚本定位元素或者去验证程序的运行状态时,有时候会发现找不到元素,这可能是由于突然的资源受限或者网络延迟或者机器性能等各种因素引起的响应速度太慢导致的,这时候测试报告就会返回测试失败的结果。其实元素是正常加载的,只是加载的时间晚了一点,那么遇到这种情况我们该怎么解决呢?我们需要在测试脚本中引入延时机制,来使脚本的运行速度与程序元素的加载速度匹配。通俗意义上讲,就是我们需要使脚本和程序的响应能够同步。我们有三种等待机制,强制等待、隐式等待和显式...
            0 0 2330
            分享
          •   今年,Google将提前两个月,于 8 月 13 日举行年度硬件发布会。届时,除了Pixel 9 系列手机,Pixel Watch 3也有望亮相。Pixel Watch 将首次推出两种尺寸--这已经得到了 FCC 的确认。今天,一则新的消息透露了更多细节,据称该消息来自Google内部。据说,Pixel Watch 3 将使用骁龙 W5 SoC,并搭配一个定制的协处理器。  41 毫米的 Watch 3 配备了 310 毫安时电池,而 45 毫米的型号将配备 420 毫安时电池,较小的 Watch 3 显示屏尺寸为 32x32 毫米(比Pixel Watch 2 的 30x30 毫米大),...
            0 0 207
            分享
          •   Web软件性能测试是一种收集信息和分析信息的过程,主要目的是用来检查程序是否具有良好的性能,为维护系统的性能找到有效的改善策略。  性能测试主要是考察在不同的用户负载下,Web 应用对用户请求作出的响应情况,以确保将来系统运行的安全性,可靠性和执行效车。  Web性能测试能够基露出系统的性能瓶颈问题,并提供一定量的数据来帮助诊断和查明问题所在,最后起到优化系统的目的。  性能测试包括连接速度测试、负载测试和压力测试。压力测试是通过不断向被测系统施加压力,测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负载并帮助找出系统瓶颈所在。  负载测试是为了检验系统在给定负载下是...
            0 0 1475
            分享
          • 上一篇文章介绍了正则表达式的一些高级用法的使用,但是一些 常用的正则表达式我们可能会更长用,为了记录和方便以后查询,特记录一些常用的正则表达式。1.找到所有小数的数字,比如10.2引用名称:aa正则表达式:[0-9]+\.[0-9]+模板:$0$区配数字: -1 调用:${aa_1}:取出第一个满足要求的数字${aa_2}:取出第二个满足要求的数字2、找到所有小数点后的数字引用名称:aa正则表达式:([0-9]+)\.([0-9]+)   必须用括号分组模板:$2$   第二组区配数字: -1 取出所有符合要求的调...
            0 0 1101
            分享
      • 51testing软件测试圈微信