首页 > 其他分享 >白盒测试用例设计方法(逻辑覆盖法或者基本路径法)

白盒测试用例设计方法(逻辑覆盖法或者基本路径法)

时间:2025-01-10 21:29:19浏览次数:3  
标签:语句 magic 覆盖 白盒 路径 测试用例 条件

目录

前言:

逻辑覆盖测试法

语句覆盖

定义

实例

判定覆盖 

定义

实例

条件覆盖 

定义

实例

判定-条件覆盖 

定义

实例

条件组合覆盖 

定义

实例

路径覆盖 

定义

实例

接下来我们讲基本路径法:

定义

步骤1:导出过程的控制流图:根据流程图分析结点:

步骤2:确定环形复杂性度量V(G):

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

步骤3:确定基本路径集合(即独立路径集合)。于是可确定5条独立的路径:

步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。

用例

至此我们就将逻辑覆盖和基本路径讲完了,希望大家在这里面有所收获,整篇博客是在一边写一边构思的,如有错误欢迎在评论区指正 


前言:

我单独开一篇博客来介绍一下白盒测试的逻辑覆盖法和基本路径法设计,待会也会写一篇黑盒的

白盒测试主要是检查程序的内部结构、逻辑、循环和路径。白盒测试的常用用例设计方法有逻辑覆盖和基本路径测试。

根据覆盖测试的目标不同,逻辑覆盖又可分为语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖及路径覆盖。

逻辑覆盖测试法

 我们先设计一个代码块

//以下代码用于测试六种逻辑覆盖测试法
IntlogicExample(int x, int y){
	int magic=0;
	if(x>0&&y>0)
		magic=x + y + 10;	  //语句1
	else			
		magic = x + y - 10;  //语句2
	
	if(magic<)		
		magic=0;			//语句3
		return magic;		//语句4
}

得到代码流程图:

 

语句覆盖

定义

语句覆盖要求设计足够多的测试用例,运行被测程序,使得程序中每条语句至少被执行一次。

实例

这里就能看到,语句实际上就是在判断节点的分支对应的路径,无论如何,语句覆盖多数情况下都只需要两个用例就可以跑完(变量够少) ,这里的测试数据也是不唯一的

测试用例编号输入数据预期输出覆盖语句
CASE1x=3 y=3magic=16语句1、4
CASE2x=-3 y=0magic=0语句2、3

 但是
在这个实例中,无法判断运算中逻辑关系错误。当第一个判断语句if(x>0&&y>0)被错写成if(x>0||y>0)也能达到100%的语句覆盖,所以语句覆盖不能发现上述的逻辑错误。

判定覆盖 

 满足判定覆盖,则满足语句覆盖。

定义

判定覆盖,又称”分支覆盖“;要求设计足够多的测试用例,运行被测程序,使得程序中每个判断的”真“和”假“都至少被执行一次。

实例

在本例共有两个判断条件:if(x>0&&y>)if(magic<0)

测试用例编号输入数据预期输出执行路径
CASE1x=3 y=3magic=16b–>c–>e
CASE2x=-3 y=0magic=0a–>c–>d–>e

 这里就能发现,在判定覆盖的方法下,我们聚焦的重点是判断框的数据,所以指标才是执行路径而非覆盖语句。

 通过着两个测试用例,两个判断的真、假分支都已经被执行过,所以满足了判定覆盖的标准。
在这个实例中,无法判断运算中逻辑关系错误。当第一个判断语句if(x>0&&y>0)被错写成if(x>0||y>0)也能达到100%的语句覆盖,所以判定覆盖也无法发现上面的逻辑错误。

条件覆盖 

定义

条件覆盖要求设计足够多的测试用例,运行被测程序,使得判定中的每个条件获得各种可能的结果;即每个条件至少有一次为真,有一次为假。(这个我一般是看变量数量来算条件数量)

实例

本例共有两个判断条件:if(x>0&&y>0)if(magic<0)共计三个条件x>0、y>0、magic<0

测试用例编号输入数据预期输出执行路径
CASE1x=3(T) y=0(F)magic=-1(T)a–>c–>d–>e
CASE2x=-3(F) y=15(T)magic=2(F)a–>c–e

 通过这两个测试用例,三个条件的各种可能取值都满足了一次,达到了100%条件覆盖的标准。
条件覆盖职能保证每个条件至少有一次为真,而不考虑所有的判定结果。因此条件覆盖不能保证满足判定覆盖。

判定-条件覆盖 

同时满足判定覆盖和条件覆盖 

定义

判定-条件覆盖要求设计足够多的用例,运行被测程序,使得被测程序中的每个判断本身的结果(真、假)至少满足一次,同时,每个逻辑条件的可能值也至少满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。

实例
测试用例编号输入数据预期输出执行路径
CASE1x=3(T) y=3(T)magic=16(F)b–>c–e
CASE2x=-3(F) y=0(F)magic=-1(T)a–>c–>d–>e

通过这两个测试用例,所有条件的可能取值都满足了一次,而且所有的判断本身的判定结果也都满足了一次。
判定-条件覆盖满足了判定覆盖准则和条件覆盖准则,弥补了二者的不足。但未考虑条件组合的情况。

条件组合覆盖 

 条件组合覆盖同时满足语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖

定义

条件组合覆盖要求设计足够多的测试用例,运行被测程序,使得被测程序中每个判定中条件结果的所有可能组合至少执行一次。

其测试用例需要注意三点:

1. 条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合

2. 不同的判断语句内的条件取值之间无须组合;

3. 对于单条件的判断语句,只需要满足自己所有的取值即可。 

实例

这里的笛卡尔积操作就是针对x和y的真假互相组合:

测试用例编号输入数据预期输出执行路径
CASE1x=3(T) y=3(T)magic=16(F)b–>c–e
CASE2x=-3(F) y=0(F)magic=-1(T)a–>c–>d–>e
CASE3x=3(T) y=0(F)magic=-1(T)a–>c–>d–>e
CASE4x=-3(F) y=15(T)magic=2(F)a–>c–>e

通过这四个测试用例,程序中所有条件取值的组合都被满足了一次。 

路径覆盖 

 100%满足路径测试,一定能100%满足判定覆盖标准,但并不一定能100%满足条件覆盖,也就不能满足100%条件组合覆盖。

定义

路径覆盖要求设计足够的测试用例,运行被测程序,覆盖程序中所有可能的路径。

实例

测试用例编号输入数据预期输出执行路径
CASE1x=3(T) y=3(T)  magic=16(F)b–>c–e
CASE2x=-3(F) y=0(F)magic=-13(T)a–>c–>d–>e
CASE3x=-3(F) y=15(T)magic=2(F)a–>c->e

本质上就是真-假、假-真、假-假 ,但是为什么没有b->c->d->e呢?,因为这条路径不可能实现

if(x>0&&y>0)
		magic=x + y + 10;	  //语句1
	else			
		magic = x + y - 10;  //语句2

 xy都>0(T),magic必然大于0(F).

 

 通过这三个测试用例,所有可能的路径都被满足了一次。

 

 至此,对白盒测试的逻辑覆盖法做了简答的介绍和演示。

 

接下来我们讲基本路径法:

 这个简答多了

定义

        基本路径测试法又称独立路径测试,是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计出相应的测试用例的方法。设计出的测试用例要保证在测试中程序的语句覆盖100%,条件覆盖100%。

基本路径测试法包括以下4个步骤:

        (1) 画出程序的控制流图:描述程序控制流的一种图示方法;

        (2) 计算程序的环形复杂性:McCabe复杂性度量;从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界;

        (3) 导出测试用例;根据圈复杂度和程序结构设计用例数据输入和预期结果;

        (4) 准备测试用例,确保基本路径集中的每一条路径的执行;

 这个跟复习题里面的是一样的过程,我这里拿一个例子来讲:

代码段如下: 

public void function(int x, int y, int z)
{
    if ((y > 1) && (z == 0))
    {
        x  =  x/y;
    }
    if ((y == 2) || (x > 1))
    {
        x = x+1;
    }
 
    y = x + z;
}

 

 

步骤1:导出过程的控制流图:根据流程图分析结点:

(1)结点1:开始;

(2)(y>1)&&(z==0)为逻辑运算符 AND连接的复合条件表达式,需要改为单条件的判定,分解为2个结点,结点2:z==0;结点3:y>1;

(3)结点4:x=x/y;

(4)(y==2)||(x>1)为逻辑运算符 OR连接的复合条件表达式,需要改为单条件的判定,分解为2个结点,结点5:y==2;结点6:x>1;

(5)结点7:x=x+1;

(6)结点8:y=y+z

(7)结点9:结束。

步骤2:确定环形复杂性度量V(G):

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

给定流图G的圈复杂度V(G),定义为V(G)=Area,Area是流程图中的区域数量(即为封闭区域数量+1);

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

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

 

(1)V(G)= 5 (个区域)[区域1:2-3-5;区域2:3-4-5;区域3:5-6-7;区域4:6-7-8;区域5:外部];

(2)V(G)=E–N+2=12–9+2=5;其中E为流图中的边数,N为结点数;

(3)V(G)=P+1=4+1=5;其中P为判定结点的个数。在流图中,结点2、3、5、6是判定结点。

 

步骤3:确定基本路径集合(即独立路径集合)。于是可确定5条独立的路径:

        路径1:1-2-5-6-8-9

        路径2:1-2-5-7-8-9

        路径3:1-2-5-6-7-8-9

        路径4:1-2-3-5-6-8-9

        路径5:1-2-3-4-5-6-8-9

步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。

(1)路径1(1-2-5-6-8-9)的测试条件:

z≠0,y≠2,x<=1;
(2)路径2(1-2-5-7-8-9)的测试条件:

z≠0,y=2;
(3)路径3(1-2-5-6-7-8-9)的测试条件:

z≠0,y≠2,x>1;
(4)路径4(1-2-3-5-6-8-9)的测试条件:

z=0,y<=1,x<=1;
(5)路径5(1-2-3-4-5-6-8-9)的测试条件:

z=0,y>1&&y≠2,x<=1;
 

用例

基本路径覆盖法用例如下:

测试用例输入独立路径
CASE1x=1, y=1,z=11-2-5-6-8-9
CASE2x=2,y=2,z=11-2-5-7-8-9
CASE3x=2,y=1,z=11-2-5-6-7-8-9
CASE4x=1, y=1,z=01-2-3-5-6-8-9
CASE5x=1, y=3,z=01-2-3-4-5-6-8-9

 

至此我们就将逻辑覆盖和基本路径讲完了,希望大家在这里面有所收获,整篇博客是在一边写一边构思的,如有错误欢迎在评论区指正 


 

 

 

 

 

 

 

 

标签:语句,magic,覆盖,白盒,路径,测试用例,条件
From: https://blog.csdn.net/m0_73302939/article/details/145064457

相关文章

  • 部落竞争与成员合作算法(CTCM)求解多个无人机协同路径规划(可以自定义无人机数量及起始点
    一、部落竞争与成员合作算法部落竞争与成员合作算法(Competitionoftribesandcooperationofmembersalgorithm,CTCM)由ChenZuyan等人于2024年提出的一种智能优化算法。该算法受古代部落之间竞争及其合作行为的启发而得。参考文献:[1]ZuyanChen,ShuaiLi,AmeerTamo......
  • linux通过配置软链接修改文件默认存储路径
    前提有时候通过集群安装的docker之类的软件是不方便修改docker的默认存储路径的,使用时间长了后会占用服务器根目录磁盘,默认位置是/var/lib/docker/,这种情况可以在安装docker之前配置。比如执行这条命令可以将默认的docker存储路径实际放到/data/docker/下ln-s/data/docker/v......
  • 【MATLAB源码-第51期】基于matlab的粒子群算法(PSO)的栅格地图路径规划。
    操作环境:MATLAB2022a1、算法描述粒子群算法(ParticleSwarmOptimization,简称PSO)是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述:基本思想:鸟群在寻找食物时,每只鸟都会观察自己和其他鸟之间的距离,以及当前找到的食物的位置。每只鸟都会向自己历史上找到的最好食......
  • 程序员2025年新兴赚钱机遇:独立开发,通向财富自由的新路径
    引言随着2025年的临近,你是否也开始感受到“赚钱焦虑”的袭击?社交媒体上充斥着关于“经济寒冬”和“收入困境”的讨论,聚会中“副业刚需”和“财富自由”成为了绕不开的话题。在这个变幻莫测的时代,每个人都渴望找到一条可靠的赚钱之路。本文将为你揭示2025年极具潜力的赚钱方......
  • 【学习路线】Python基础 详细知识点学习路径(附学习资源)
    其他路线:Python基础>>Python进阶>>Python爬虫>>Python数据分析(数据科学) >>Python 算法(人工智能) >>Python Web开发 >>Python自动化运维 >>符号表解释:可根据知识点前的符号按需选学,并获取知识点描述和学习资源。 必学:核⼼知识点,经常⽤到。建议学:重要知......
  • 最小路径和(二维动态规划)
    给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 示例1:输入:grid=[[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径1→3→1→1→1的总和最小。示例2:输入:grid=[[1,2......
  • 不同路径(二维动态规划)
    一个机器人位于一个 mxn 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 示例1:输入:m=3,n=7输出:28示例2:输入:m=3,n=2输出:3解释......
  • 大模型在金融行业的应用场景和落地路径
    这是最好的时代,也是最坏的时代。尽管大模型技术在金融领域具有巨大的应用潜力,但其应用也面临不容忽视的风险和挑战。本文将深入研究大模型在金融领域的数据隐私和安全风险、模型可解释性和透明度、监管和合规要求,梳理中国、美国、欧洲等地AIGC技术的应用规则,探索对应的风......
  • 1.2.3 快速辨别电源主干道,信号回流路径
    快速辨别电源主干道,信号回流路径在PCB(印刷电路板)设计中,快速辨别电源主干道和信号回流路径对于确保电源完整性和信号完整性至关重要。以下是一些步骤和要点,可以帮助设计师快速识别电源主干道和信号回流路径。一、电源主干道的辨别电源主干道是指连接电源输入和电源输出、为电......
  • ThinkPHP5框架下解决路径配置错误导致模板无法找到的问题
    问题描述:在使用ThinkPHP5开发Web应用程序时,有时会遇到因为路径设置不当而导致试图加载的视图文件不存在的情况。面对这样的报错提示,我们应该怎样排查并修复呢?解决方案:确认项目目录结构:检查项目的物理文件夹组织方式是否与预期一致,特别是application目录下的控制器、模型、视图......