白盒测试的概念、目的是什么?及主要方法有哪些?

1 白盒测试的概念

白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。(测试用例由测试输入数据以及与之对应的输出结果组成。)

白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。

2 白盒测试的主要目的


白盒测试的概念、目的是什么?及主要方法有哪些?


3 测试覆盖标准

白盒法特点:以程序的内部逻辑为基础设计测试用例,所以又称为逻辑覆盖法。应用白盒法时,手头必须有程序的规格说明以及程序清单。

白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但是由于程序中一般含有循环,所以路径的数目极大,要执行每一条路径是不可能的,只能希望覆盖的程度尽可能高些。

白盒测试的概念、目的是什么?及主要方法有哪些?

图1 程序流程图

图1包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520( 1013)条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同
样假定一天工作24小时,一年工作365天, 那么要想把如图所示的小程序的所有路径测试完,则需要3170年。

为了衡量测试的覆盖程度,需要建立一些标准,目前常用的一些覆盖标准从低到高分别是:

4 白盒测试的主要方法

  1. 逻辑驱动测试
  2. 语句覆盖
  3. 判定覆盖(分支覆盖)
  4. 条件覆盖
  5. 判定/条件覆盖
  6. 条件组合覆盖
  7. 基本路径测试
  8. 设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。

4.1 逻辑驱动测试

4.1.1 语句覆盖

程序1如下:

PROCEDURE M(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0) THEN X:=X/A ;
IF (A=2) OR (X>1) THEN X:=X+1 ;
END
白盒测试的概念、目的是什么?及主要方法有哪些?

图2 程序流程图

为使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了,就可达到“语句覆盖”标准。例如选择输入数据为:

A=2,B=0,X=3

缺点: 从上例可看出,语句覆盖实际上是很弱的

4.1.2 判定覆盖(分支覆盖)

对程序1,如果设计两个用例,使它们能通过路径ace和abd,或者通过路径acd和abe,就可达到“判定覆盖”标准,为此,可以选择输入数据为:

优点:“分支覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,则每个语句也就执行过了。

缺点:但是,“分支覆盖”还是很不够的

4.1.3 条件覆盖

一个判定中往往包含了若干个条件,如程序中,判定 (A 1) AND (B=0)包含了两个条件: A 1以及 B=0,所以可引进一个更强的覆盖标准——“条件覆盖”。

程序1有四个条件:

A 1 、B=0、A=2、X 1
为了达到“条件覆盖”标准,需要执行足够的测试用例使得在a点有:
A 1、A 1、B=0、B 0
以及在b点有:
A=2、A 2、X 1、X 1
现在只需设计以下两个测试用例就可满足这一标准:

优点:“条件覆盖”通常比“分支覆盖”强,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖则不保证这一点。

缺点:“条件覆盖”并不包含“分支覆盖”,如两个用例没有有覆盖判定(A>1 and B=0)为True的情况

4.1.4 判定/条件覆盖

程序1,以下用例是满足判定/条件覆盖:

优点:既有“条件覆盖”,又有“判定覆盖”

缺点:分支/条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件。

因此,采用分支/条件覆盖,逻辑表达式中的错误不一定能够查出来了。

4.1.5 条件组合覆盖

程序1,以下用例是满足条件组合覆盖:

再看程序1,我们需要选择适当的用例,使得下面 8种条件组合都能够出现:

1) A>1, B=0  2) A>1, B 0  3) A 1, B=0  4) A 1, B 0

5) A=2, X>1  6) A=2, X 1  7) A 2, X>1  8) A 2, X 1

5) 、6) 、7)、8)四种情况是第二个 IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。

下面设计的四个用例可以使上述 8种条件组合至少出现一次:

优点:既有“条件覆盖”,又有“判定覆盖”,还有“条件组合覆盖”

缺点:上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,例如路径acd就没有执行

4.1.6 黑盒法补充测试用例

通过前面逻辑驱动测试方法,可以得到两点结论:

一个参考的黑盒法补充策略是:

1) 在任何情况下都需使用边界值分析(这个方法应包括对输入和输出的边界值进行分析)。
2) 必要的话,再用等价分类法补充一些测试用例。
3) 再用错误推测法附加测试用例。
4) 检查上述例子的逻辑覆盖程度,如果未能满足某些覆盖标准,则再增加足够的测试用例。
5) 如果功能说明中含有输入条件的组合情况,则一开始就可先用因果图(判定表)法。

4.2 路径测试

路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。

4.2.1 基本路径测试

程序1是很简单的程序函数,只有四条路径。但在实践中,一个不太复杂的程序,其路径都是一个庞大的数字,要在测试中覆盖所有的路径是不现实的。为了解决这一难题,只得把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行一次。

基本路径测试就是这样一种测试方法,它在程序控制图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。

在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:

  1. 程序的控制流图:描述程序控制流的一种图示方法。
  2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
  3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
  4. 准备测试用例:确保基本路径集中的每一条路径的执行。

工具方法:

  1. 图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。


白盒测试的概念、目的是什么?及主要方法有哪些?


1) 控制流图

在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图。流图是对待测试程序过程处理的一种表示。流图使用下面的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。

白盒测试的概念、目的是什么?及主要方法有哪些?

图3 流图符号

流图只有二种图形符号

任何过程设计都要被翻译成控制流图。

在将程序流程图简化成控制流图时,应注意:

白盒测试的概念、目的是什么?及主要方法有哪些?

图4 控制流图

如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。

白盒测试的概念、目的是什么?及主要方法有哪些?

图5 程序结构转化成流图

2) 独立路径

独立路径:至少沿一条新的边移动的路径

白盒测试的概念、目的是什么?及主要方法有哪些?

图6 独立路径

对以上路径的遍历,就是至少一次地执行了程序中的所有语句

3) 基本路径测试

第一步:画出控制流图

流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。

白盒测试的概念、目的是什么?及主要方法有哪些?

图7 程序流程图

白盒测试的概念、目的是什么?及主要方法有哪些?

图8 程序流程图和对应的控制流图

第二步:计算圈复杂度

圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。

独立路径必须包含一条在定义之前不曾用到的边。

有以下三种方法计算圈复杂度:

  1. 流图中区域的数量对应于环型的复杂性;
  2. 给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;
  3. 给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

第三步:导出测试用例

根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)

第四步:准备测试用例

为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:

路径1:4-14
输入数据:iRecordNum 0,或者取iRecordNum<0的某一个值  预期结果:x 0

路径2:4-6-7-14
输入数据:iRecordNum 1,iType 0  预期结果:x 2

路径3:4-6-8-10-13-4-14
输入数据:iRecordNum 1,iType 1  预期结果:x 10

路径4:4-6-8-11-13-4-14
输入数据:iRecordNum 1,iType 2  预期结果:x 20

必须注意,一些独立的路径,往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。

4) 工具方法:图形矩阵

导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵(graph matrix)的数据结构很有用。

利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵

对每个矩阵项加入连接权值(link weight),图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是 1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性:

白盒测试的概念、目的是什么?及主要方法有哪些?

感谢每一个认真阅读我文章的人!!!

如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题可以直接进群询问,群里也会有大神帮忙解答,需要的可以评论区找我呀。



展开阅读全文

页面更新:2024-05-11

标签:测试   目的   方法   组合   结点   分支   语句   路径   逻辑   概念   条件   程序

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top