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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据报道,亚马逊公司要求员工每周至少在办公室工作三天,取消了之前由高级管理人员决定这类工作的政策。  亚马逊首席执行官安迪·雅西(AndyJassy)发布在亚马逊公司博客上的致员工的备忘录表示,这项规定将于5月1日生效。雅西表示会有例外情况,包括一些销售和客户支持工作,“但那将是一小部分。  雅西说:“当团队成员更频繁地见面时,他们之间往往会联系的更紧密。与同事面对面,看着他们的眼睛,看到他们完全沉浸在你所讨论的将人们联系在一起的事情中,这是非常有益的。”  作为仅次于沃尔玛的美国第二大私营雇主,亚马逊与很多公司一样要求员工更频繁地到岗上班。这些公司正在削减疫情期间提供的一些随时随地工作的灵...
            0 0 1276
            分享
          • 当进行 自动化测试 编排时,测试步骤间的数据传递是至关重要的。在传统的方式中,一般通过复杂的脚本配置,或者手动复制这些数据,然后再慢慢地粘贴到每个需要它们的地方,以此来实现接口之间的参数传递。这种方式往往效率低下、容易出错并且难以维护,当接口或业务逻辑发生变化时,需要进行大量修改,增加了维护成本。为了应对这种复杂的数据依赖关系,Apifox 中引入了「动态值」传递机制。这种机制就像是一个灵活的“桥梁”,将指定的“上游”测试步骤的运行结果捕获,并插入到“下游”测试步骤的请求参数中,确保测试用例能够适应不同场景下的数据变化。这种响应关联机制消除了中间的手动传递数据环节...
            0 0 778
            分享
          •   为什么在JMeter中执行压力测试时,出现连接异常或连接重置错误?  答案:连接异常或连接重置错误通常是由于服务器在处理请求时出现问题引起的。这可能是由于服务器过载、网络故障或配置错误等原因导致的。  解决方法:  确定服务器的负载是否过高,如果是,可以考虑增加服务器资源或优化服务器端代码。  检查网络连接是否稳定,如果存在网络故障,可以尝试重启网络设备或切换网络环境。  确认JMeter的线程数、Ramp-up时间和循环次数是否合理设置,以避免对服务器造成过大压力。  检查JMeter的代理服务器设置,并确保在浏览器中正确配置代理,以便在测试期间正确转发请求。  JMeter运行压测脚本...
            0 0 234
            分享
          • 下班提bug今天阿常正收拾东西下班呢,听到开发 B 对开发 A 发牢骚,「测试 S 临下班了还给我提bug,这 bug 太恶心了。」阿常跑过去关切地问道,「是 bug 恶心,还是下班前提 bug 恶心呢。」B 回复阿常,「 bug 恶心,下班前提 bug 也恶心。」说完大家会心一笑。A 接着笑道,「那有什么,测试 M 上线还给我提 bug 呢。」听到这里,阿常没有给予更多回应。这个画面让人想起测试同学抱怨开发总是下班提测任务,但其实这有什么问题呢,下班提测难道就要当天加班测试吗,第二天测也可以呀。测试下班提 bug 也是,开发也不一定要当天解决掉呀,第二天改不行吗。很多事情不是一天就能做完的,...
            0 0 1212
            分享
          • 对于一个优秀的Java技术人员来说,成为Java架构师是一个很好的职业发展方向,相比于普通的Java技术人员,Java架构师要求更高,不仅有丰富的编码经验,而且还要熟悉硬件性能优化、内核调试、网络故障排查、系统安全、分布式系统设,还有了解国内外技术的新趋势和特点,最重要的是,还要善于与人沟通,敢于排除不同意见,敢于承担责任,了解团队内工程师的特点,善于将他们组成一个整体。对于想要成为Java架构师的人员来说,可以着重培养以下几个方面的能力:1、知识广度了解国内外技术的新趋势和特点,以及使用该技术能够解决什么问题,同一种业务使用不同的技术存在什么样的优缺点,相比较而言,哪一种能符合公司要求。2、...
            0 0 797
            分享
      • 51testing软件测试圈微信