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

作者&投稿:尉妹 (若有异议请与网页底部的电邮联系)
~ 1 白盒测试的概念
白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。(测试用例由测试输入数据以及与之对应的输出结果组成。)
白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。
2 白盒测试的主要目的
保证一个模块中的所有独立路径至少被执行一次;对所有的逻辑值均需要测试真、假两个分支;在上下边界及可操作范围内运行所有循环;检查内部数据结构以确保其有效性。
3 测试覆盖标准
白盒法特点:以程序的内部逻辑为基础设计测试用例,所以又称为逻辑覆盖法。应用白盒法时,手头必须有程序的规格说明以及程序清单。
白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但是由于程序中一般含有循环,所以路径的数目极大,要执行每一条路径是不可能的,只能希望覆盖的程度尽可能高些。
图1 程序流程图
图1包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520(=1013)条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同
样假定一天工作24小时,一年工作365天, 那么要想把如图所示的小程序的所有路径测试完,则需要3170年。
为了衡量测试的覆盖程度,需要建立一些标准,目前常用的一些覆盖标准从低到高分别是:
语句覆盖:是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。它是最弱的逻辑覆盖,效果有限,必须与其它方法交互使用。判定覆盖(也称为分支覆盖):执行足够的测试用例,使得程序中的每一个分支至少都通过一次。判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。条件覆盖:执行足够的测试用例,使程序中每个判断的每个条件的每个可能取值至少执行一次;条件覆盖深入到判定中的每个条件,但可能不能满足判定覆盖的要求。判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。判定/条件覆盖有缺陷。从表面上来看,它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值,需要将判定语句中给出的复合条件表达式进行分解,形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。这是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏掉。测试还不完全。
4 白盒测试的主要方法
逻辑驱动测试语句覆盖判定覆盖(分支覆盖)条件覆盖判定/条件覆盖条件组合覆盖基本路径测试设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。
4.1 逻辑驱动测试
4.1.1 语句覆盖
程序1如下:
PROCEDURE M(VAR A,B,X:REAL);BEGINIF (A1) AND (B=0) THEN X:=X/A ;IF (A=2) OR (X1) THEN X:=X+1 ;END
code>
图2 程序流程图
为使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了,就可达到“语句覆盖”标准。例如选择输入数据为:
A=2,B=0,X=3
缺点: 从上例可看出,语句覆盖实际上是很弱的
如果第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;又如第三个条件语句中X>1误写成X>0,这个测试用例也不能暴露它;此外,沿着路径abd执行时,X的值应该保持不变,如果这一方面有错误,上述测试数据也不能发现它们。
4.1.2 判定覆盖(分支覆盖)
对程序1,如果设计两个用例,使它们能通过路径ace和abd,或者通过路径acd和abe,就可达到“判定覆盖”标准,为此,可以选择输入数据为:
A=3,B=0,X=1 (沿路径acd执行);A=2,B=1,X=3(沿路径abe执行)
优点:“分支覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,则每个语句也就执行过了。
缺点:但是,“分支覆盖”还是很不够的
两个测试用例未能烤炉到A=1的情况两个测试用例未能检查沿着路径abd执行时,X的值是否保持不变。
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=2,B=1,X=4 (沿路径abe执行);A=1,B=0,X=1 (沿路径abd执行)。
优点:“条件覆盖”通常比“分支覆盖”强,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖则不保证这一点。
缺点:“条件覆盖”并不包含“分支覆盖”,如两个用例没有有覆盖判定(A1 and B=0)为True的情况
4.1.4 判定/条件覆盖
程序1,以下用例是满足判定/条件覆盖:
A=2,B=0,X=4 (沿ace路径)A=1,B=1,X=1 (沿abd路径)
优点:既有“条件覆盖”,又有“判定覆盖”
缺点:分支/条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件。
对于第一个表达式(A1 and B=0)如果(A>1)为假则一般的编译器不在判断是否B=0了。对于第二个表达式(A=2 or X1)来说,若A=2测试结果为真,就认为表达式的结果为真,这时不再检查(X1)条件了。
因此,采用分支/条件覆盖,逻辑表达式中的错误不一定能够查出来了。
4.1.5 条件组合覆盖
程序1,以下用例是满足条件组合覆盖:
再看程序1,我们需要选择适当的用例,使得下面 8种条件组合都能够出现:
1) A1, B=0  2) A1, B≠0  3) A≤1, B=0  4) A≤1, B≠0
5) A=2, X1  6) A=2, X≤1  7) A≠2, X1  8) A≠2, X≤1
5) 、6) 、7)、8)四种情况是第二个 IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。
下面设计的四个用例可以使上述 8种条件组合至少出现一次:
A=2,B=0,X=4 使 1)、5)两种情况出现 (沿ace路径);A=2,B=1,X=1 使 2)、6)两种情况出现 (沿abd路径);A=1,B=0,X=2 使 3)、7)两种情况出现 (沿abe路径);A=1,B=1,X=1 使 4)、8)两种情况出现 (沿abd路径)。
优点:既有“条件覆盖”,又有“判定覆盖”,还有“条件组合覆盖”
缺点:上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,例如路径acd就没有执行
4.1.6 黑盒法补充测试用例
通过前面逻辑驱动测试方法,可以得到两点结论:
“条件组合覆盖”标准比其他标准优越。即使达到任何一种覆盖标准,其测试效果仍然是不彻底的,我们还需要用其他的测试方法作补充。
一个参考的黑盒法补充策略是:
1) 在任何情况下都需使用边界值分析(这个方法应包括对输入和输出的边界值进行分析)。
2) 必要的话,再用等价分类法补充一些测试用例。
3) 再用错误推测法附加测试用例。
4) 检查上述例子的逻辑覆盖程度,如果未能满足某些覆盖标准,则再增加足够的测试用例。
5) 如果功能说明中含有输入条件的组合情况,则一开始就可先用因果图(判定表)法。
4.2 路径测试
路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。
4.2.1 基本路径测试
程序1是很简单的程序函数,只有四条路径。但在实践中,一个不太复杂的程序,其路径都是一个庞大的数字,要在测试中覆盖所有的路径是不现实的。为了解决这一难题,只得把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行一次。
基本路径测试就是这样一种测试方法,它在程序控制图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。
在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:
程序的控制流图:描述程序控制流的一种图示方法。程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。准备测试用例:确保基本路径集中的每一条路径的执行。
工具方法:
图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。
1) 控制流图
在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图。流图是对待测试程序过程处理的一种表示。流图使用下面的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。
图3 流图符号
流图只有二种图形符号
图中的每一个圆称为流图的结点,代表一条或多条语句。流图中的箭头称为边或连接,代表控制流。
任何过程设计都要被翻译成控制流图。
在将程序流程图简化成控制流图时,应注意:
在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。
图4 控制流图
如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。
图5 程序结构转化成流图
2) 独立路径
独立路径:至少沿一条新的边移动的路径
图6 独立路径
对以上路径的遍历,就是至少一次地执行了程序中的所有语句
3) 基本路径测试
第一步:画出控制流图
流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。
流图中圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点;流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构);由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。
图7 程序流程图
图8 程序流程图和对应的控制流图
第二步:计算圈复杂度
圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。
独立路径必须包含一条在定义之前不曾用到的边。
有以下三种方法计算圈复杂度:
流图中区域的数量对应于环型的复杂性;给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
第三步:导出测试用例
根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)
路径1:4-14路径2:4-6-7-14路径3:4-6-8-10-13-4-14路径4:4-6-8-11-13-4-14
第四步:准备测试用例
为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:
路径1:4-14
输入数据:iRecordNum=0,或者取iRecordNum0的某一个值  预期结果: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、白盒测试:称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。二、测试目的不同 1、黑盒测试:把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,只检查程序功能是否按照...

什么白盒测试?白盒测试方法包括哪些?
2、白盒测试概念白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。3、白盒测试的测试方法总体上分为静态方法和动态方法两大类。强度由低到高有语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径...

用白盒测试设计测试用例的方法包括
一、白盒测试概念 1、白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。2、白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在...

什么是黑盒测试,概念以及意义
正交试验设计法,就是使用已经造好了的正交表格来安排试验并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率。 黑盒测试的流程 1.测试计划 首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求...

汇川区17277839881: 什么是白盒测试,其主要功能和测试点. -
针绿清胃:[答案] 白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作.这一方法是把测试对象看作一个打开的盒子,...

汇川区17277839881: 【白盒测试】白盒测试定义什么? -
针绿清胃: 白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试.白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的."白盒"法全面了解程序内部逻...

汇川区17277839881: 白盒测试解释? -
针绿清胃: 白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作.这一方法是把测试对象看作一个打开的...

汇川区17277839881: 黑盒测试和白盒测试?含义 -
针绿清胃: 软件测试的种类大致可以分为人工测试和基于计算机的测试.而基于计算机的测试由可以分为白盒测试和黑盒测试.① 黑盒测试 根据软件产品的功能设计规格,在计算机上进行测试,以证实每个实现了的功能是否符合要求.这种测试方法就是...

汇川区17277839881: 什么是白盒测试? -
针绿清胃: 白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例.用白盒测试产生的测试用例能够... 白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结...

汇川区17277839881: 怎样简单的介绍软件测试中白盒测试的概念?
针绿清胃: 中文名白盒法适用范围软件测试别称结构测试优点覆盖全部代码白盒法的概念:白盒测试也称为结构测试或者是逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例

汇川区17277839881: 什么是白盒测试和黑盒测试?有什么区别? -
针绿清胃: 1、黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求.2、白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查.3、区别:二者最大的区别应该就是测试对象不一样,白盒测试主要针对的是程序代码逻辑,黑盒测试主要针对的是程序所展现给用户的功能,简单的说就是前者测试后台程序后者测试前台展示功能.白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍.2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍.3、在循环的边界和运行的界限内执行循环体.4、测试内部数据结构的有效性,等等.

汇川区17277839881: 什么是:黑盒测试 白盒测试 静态测试?求解答 -
针绿清胃: 单元测试 -- 看源代码 分析程式内部逻辑结构 集成测试 -- 对设计的检测 系统测试 -- 测试功能 交接测试 -- 即确认测试 测试是否符合用户需求 黑盒测试法:一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现,...

汇川区17277839881: 内部技术交流白盒测试指什么?
针绿清胃: 白盒测试是通过对程序内部结构的分析、检测来寻找问题. 白盒测试可以把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构...

汇川区17277839881: 黑盒测试和白盒测试的意思和区别是什么? -
针绿清胃: 白盒测试也叫做alpha测试,是指程序设计员为了验证程序的逻辑过程而进行的测试,因知道内部原理而得名.黑盒测试也beta测试,是由客户(使用者)进行的测试,目的在于检验程序的功能,因不知道其内部结构而得名.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网