白盒测试重点复习内容

简介: 白盒测试重点复习内容

按照测试方法,测试可以分为白盒测试和黑盒测试两种。


白盒测试也称结构测试或逻辑驱动测试,是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。

所以白盒测试是一种基于代码的测试,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

白盒测试一般是开发做单元测试用,但是也有是测试自己做的,那么对测试能力要求比较高。


白盒测试之逻辑覆盖法


逻辑覆盖用例设计方法


白盒测试的逻辑覆盖基本方法主要有以下6种,接下来我们就来分析一下每种方法的原理,以及他们之间的区别:


语句覆盖

分支覆盖

条件覆盖

判定条件覆盖

路径覆盖

组合覆盖

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


接来下的学习我们使用如下案例:


if A and B then Action1;
if C or D then Action2;


1.语句覆盖

语句覆盖,顾明思意就是针对代码语句,我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。


通常语句覆盖被认为是“最弱的覆盖”,因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。


案例:


if A and B then Action1;
if C or D then Action2;


语句覆盖需使得每个语句(本案例中有两个判断语句)都被执行一次,即 A and B = true, C or D = true


上例中,设计一条测试用例即可:A=true B=true C=true


2.判定覆盖(分支覆盖)


判定覆盖(分支覆盖)︰使得程序中每个判断的取真和取假至少经历一次,即判断的真假均被满足。


案例:


if A and B then Action1;
if C or D then Action2;


分支覆盖需使得程序中的每个判断(本案例中有两个判断)的取真和取假至少经历一次

A and B == True , Flase

C or D == True , Flase

A and B == True : A = true B = true

A and B == Flase :A = true B = flase

C or D == True : C = true D= flase

C or D == Flase : C = flase D= flase


上例中,两条测试用例即可:

testcase1: A=true,B=true,C= true,D=false

testcase2: A=true,B=false,C = false,D=false.


3.条件覆盖

条件覆盖:条件覆盖要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)


第一个判断应考虑到 A=true,A=false,B=true,B=false

第二个判断应考虑到 C= true,C= false,D=true,D=false,


所以上例中可以设计测试用例满足下列条件,两条用例:

testcase1 : A=true,B=true,C= true, D=true

testcase2 : A=false,B=false,,C= false,D=false


4.判定条件覆盖


判定条件覆盖,就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖)。同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。

不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。

条件覆盖:

A=true,A=false,B=true,B=false

C=true,C = false,D=true,D=false,

判断覆盖:

A and B =True, A and B =False

C or D =True , C or D =False

所以满足条件覆盖和判断覆盖。我们可以设计两条用例:

TestCase1 : A=true,B=true,C=true,D=true(条件都为True,A and B=True,C or D =True)

TestCase2: A=false,B=false,C=false,D=false (条件都为False,A and B=False,C or D =False)


5.条件组合覆盖


组合覆盖也叫做条件组合覆盖,意思是说我们设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。


每个判定中的各个条件的各种可能组合都至少出现一次,即:

A - true,flase B - true,flase

C - true,flase D - true,flase


针对这个案例,做条件组合覆盖时我们可以设计如下用例:


TestCase1: A=True,B=True,C=True,D=True

TestCase2: A=True,B=False, C=True,D=False

TestCase3: A=False,B=True,C=False,D=True

TestCase4: A=False,B=False,C=False,D=False


条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。


6.路径覆盖


路径覆盖:要求覆盖程序中所有可能的路径。意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。可以对程序进行彻底的测试用例覆盖,但是用例数量会增多很多。所以路径覆盖是最彻底的测试用例覆盖,但实际上可操作性不强。


所以可以设计测试用例满足下列条件:


A=true,B=true,C= true,D=true,

A=false,B=false,C= false。D=false

A=true,B=true,C= false,D=false

A=false,B=false,C= true。D=true

A=true,B=true,C = false,D=false


白盒测试之基本路径测试法


基本路径法:基本路径法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,从而设计测试用例的方法 。是白盒测试中运用最广泛的方法。


基本路径测试方法的步骤

第一步:画出控制流图


第二步:计算圈复杂度


第三步:导出测试用例


第四步:准备测试用例


1.根据程序流程图画控制流图


e430b567f12e275c9caca3e8250a2597_image-20230216004600484.png


根据程序流程图画控制流图的步骤


开始结束不要,先把每一 个节点画成圆圈

将节点上的出入关系补全


8f96d881a5b5b36536552b413ba66e68_image-20230216004622458.png


f9834b4117f28e6ef6262d1be548693b_image-20230216004856158.png


2.计算圈复杂度


圈的复杂度:流图中区域的数量对应于环型的复杂度;有以下两种方式计算圈复杂度:


给定流图G的圈复杂度V(G),定义为V(G) = E - N + 2,E是流图中边的数量,N是流图中结点的数量。

给定流图G的圈复杂度V(G),定义为V(G) = P + 1,P是流图G中判定结点的数量。

圈的复杂度就是设计测试用例的个数


3.导出测试用例


4.准备测试用例


5.例题


723a44ece0f429a70147b0cd11602480_904f459c5c66bff680e66bd149fd8920.jpeg


5.1 画控制流图


caaf9dd178d3d7949a9d0035782cf0b5_v2-47bde2407cf869d4cac2cd41ac5feee6_r.jpg


5.2 计算圈复杂度


d103471c4d478da694e49aace9f2361c_v2-c7942a98ca0aae886074129bbae148dd_r.jpg


5.3 导出测试用例


根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。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


根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。


5.4 准备测试用例


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


f04ce115058f2f5bddbc8aaa9cab6c2e_v2-0357b0f2599d5c6a4a0dc74ee9852257_r.jpg


白盒测试总结


以上简单描述了几种不用的白盒测试方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。

白盒测试的优点:


迫使测试人员去仔细思考软件的实现。

帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。

白盒测试的缺点:


昂贵:系统庞大时,测试开销会非常大; 测试人员要求比较高,人才昂贵。

测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。

适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。

白盒测试的优点:


迫使测试人员去仔细思考软件的实现。

帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。

白盒测试的缺点:


昂贵:系统庞大时,测试开销会非常大; 测试人员要求比较高,人才昂贵。

测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。

相关文章
|
存储 人工智能 算法
秒懂算法 | 矩阵连乘问题
给定n个矩阵{A1,A2,A3,…,An},其中Ai与Ai+1(i=1,2,3,…,n-1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同加括号的方法所对应的计算次序是不同的。
1337 0
秒懂算法 | 矩阵连乘问题
|
Ubuntu Linux 虚拟化
使用阿里云镜像站NTP服务搭建NTP服务器(基于CentOS 7系统)
使用阿里云镜像站NTP服务搭建NTP服务器(基于CentOS 7系统)
3323 0
使用阿里云镜像站NTP服务搭建NTP服务器(基于CentOS 7系统)
|
4月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
349 3
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
安全 网络协议 物联网
物联网僵尸网络和 DDoS 攻击的 CERT 分析
物联网僵尸网络和 DDoS 攻击的 CERT 分析
|
开发框架 网络协议 网络安全
【华为HCIP | 高级网络工程师】刷题日记(10)
【华为HCIP | 高级网络工程师】刷题日记(10)
862 0
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
|
安全
【守护工地安全】YOLOv8实现安全帽检测
【守护工地安全】YOLOv8实现安全帽检测
457 0
|
人工智能 搜索推荐 算法
秒懂算法 | 推荐系统常用数据集和验证方法
推荐系统常用数据集和验证方法
3007 1
秒懂算法  | 推荐系统常用数据集和验证方法
|
SQL 关系型数据库 MySQL
FlinkCDC支持哪些数据库?
FlinkCDC支持哪些数据库?