软件测试笔记(四):白盒测试

article/2025/9/14 11:54:48

1 白盒测试

白盒测试是对软件的过程性细节做细致的检查,把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构以及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。

白盒测试只测试软件产品的内部结构和处理过程,而不是测试软件产品的功能,可以分为静态和动态两种:

  • 静态白盒测试就是在不执行测试的情况下有条理仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程
  • 动态白盒测试也叫结构化测试,通过查看并使用代码的内部结构,设计和执行测试

白盒测试的常见方法包括:

  • 逻辑覆盖法
  • 路径分析
  • 控制结构测试

2 逻辑覆盖法

逻辑覆盖法又叫控制流覆盖,是按照程序内部逻辑结构设计测试用例的测试方法,根据程序中的判定和条件控制流覆盖准则来定量度量测试进行程度,按照覆盖标准的不同,可以分为:

  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 条件判定覆盖
  • 修正条件判定覆盖
  • 条件组合覆盖
  • 路径覆盖

2.1 语句覆盖

语句覆盖又叫线覆盖面或者段覆盖面,含义是选择足够数目的测试数据,使被测试程序中每条语句至少执行一次。语句覆盖可以直接应用于目标代码,不需要处理源代码,但是由于对一些控制结构不敏感(比如同样的测试用例,语句中的逻辑运算符从and改为or也同样通过),逻辑覆盖率低,因此往往不能发现判断中逻辑运算符出现的错误。

2.2 判定覆盖

又叫分支覆盖或所有边覆盖,用于测试控制结构中布尔表达式分别为真和假,其中布尔表达式被认为是一个整体,不考虑内部是否包含了“逻辑与”或者“逻辑或”等运算符。判定覆盖的基本思想是设计的测试用例是的程序中每个判定至少分别取“真”分支和取“假”分支经历一次,即判断真假值均被满足。

判定覆盖比语句覆盖提供了更强的测试能力,但是,大部分的判定语句是由多个逻辑条件组合而成的,仅仅判断最终的逻辑运算结果并不能真正覆盖所有的测试路径,这是判定覆盖的一个缺点。

2.3 条件覆盖

条件覆盖是设计测试用例,使得每个判断中每个条件的可能取值至少满足一次。

条件覆盖比判定覆盖增加了对符合判定情况的测试,增加了测试路径,但是条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

2.4 条件/判定覆盖

条件/判定覆盖是综合了条件覆盖与判定覆盖的一种方法,含义是通过设计足够的测试用例,使得判断条件中所有条件可能至少执行一次取值,同时所有判断的可能结果至少执行一次。

表面上,条件/判定覆盖能同时满足判定覆盖以及条件覆盖两种标准,但实际上并没有完全覆盖所有的“真”和“假”取值的条件组合情况,这种情况下需要将判定语句中的复合条件表达式进行分解,形成由多个基本判定嵌套组成的流程图,以有效检查所有条件是否正确。

2.5 修正条件/判定覆盖

修正条件/判定覆盖(缩写为MC/DC)可以解释为:

  • 每个条件的所有可能结果至少出现一次
  • 每个判定本身的所有可能结果也至少出现一次
  • 每个入口点与出口点至少要唤醒一次
  • 每个条件都显示能单独影响判定结果

MC/DC具有如下优点:

  • 继承了多重条件覆盖的优点
  • 线性地增加了测试用例的数量
  • 对操作数以及非等式条件变化反应敏感
  • 具有更高的目标码覆盖率

2.6 条件组合覆盖

基本思想是,设计测试用例使得:

  • 每个条件中的所有可能至少出现一次
  • 每个判断本身的判定结果也至少出现一次

条件组合覆盖是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确,它不但可以覆盖所有条件的可能取值组合,还可以覆盖所有判断的可取分支,但仍有可能的路径会遗漏掉,测试还不完全。

2.7 路径覆盖

路径覆盖的基本思想是,选择足够的测试用例,使得程序中所有可能的路径都至少被执行一次。一条路径是从函数的入口到出口分支的一个唯一序列。

路径覆盖的覆盖率比前面几种逻辑覆盖要大,但是随着代码增加,测试工作将呈指数级增长,比如一个函数包括10个判断语句,那么就需要测试2^10 = 1024个路径。

2.8 总结

语句覆盖的效果最弱,路径覆盖的效果最好,如下图所示:

在这里插入图片描述

优缺点集合:

在这里插入图片描述

3 路径分析

路径分析测试法是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出独立路径集合,设计测试用例的方法。程序的所有路径作为一个集合,在这些路径集合中必然存在一个最短路径,这个最小的路径称为基路径或独立路径。

路径分析与测试法主要步骤如下:

  • 绘制控制流图
  • 计算圈复杂性,圈复杂性用于计算程序的基本独立路径数目,确保所有语句至少执行一次的测试数量的上界
  • 确定独立路径的集合,独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,即独立路径必须包含一条在定义之前不曾使用的边
  • 测试用例生成,设计测试用例的数据输入和预期结果,确保基本路径集中每条路径上的执行

4 控制结构测试

控制结构测试可以分为:

  • 条件测试:检查程序模块中所包含逻辑条件的测试用例设计方法
  • 循环测试:检测代码中的简单循环、嵌套循环以及串接循环,测试用例包括零次循环、一次循环、两次循环、m次循环、最大循环次数等等
  • Z路径覆盖:是路径覆盖的一个变体,是一种在大量判断和多个循环组合的情况下减少循环测试次数的方法,Z路径覆盖不考虑循环的形式和复杂度如何,也不考虑实际执行循环体次数是多少,只考虑通过循环体零次和一次这两种情况

http://chatgpt.dhexx.cn/article/1ppE6Fow.shtml

相关文章

白盒测试方法|白盒测试的六种方法比较分析

白盒测试的六种方法比较分析 一、摘要 白盒测试是测试人员常用的一种测试方法,越来越受到测试工程师的重视。白盒测试并不是简单的按照代码测试用例而走,需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。本文…

白盒测试的各种方法

文章目录 一、逻辑测试法设计测试用例1.1语句覆盖1.2判定覆盖1.3条件覆盖1.4判断、条件覆盖&#xff08;CDC&#xff09;1.5条件组合覆盖&#xff08;MCC&#xff09; 二、基本路径测试法2.1定义&#xff1a;2.2程序控制流图 白盒测试又叫架构测试 语句覆盖<条件覆盖<判定…

白盒测试怎么做?

目录 前言 一、什么是白盒测试 二、白盒测试的分类 三、白盒测试的设计方法 四、白盒测试静态方法 五、白盒测试动态方法 六、白盒测试的特点 七、总结 前言 在企业内部&#xff0c;软件测试工程师基本处于“双高”地位&#xff0c;即地位高、待遇高。可以说他们的职业…

SpringBoot 默认数据库连接池 HikariCP

目录 引言 1、问题描述 2、SpringBoot默认的数据库连接池 3、HikariCP是什么 4、测试依赖 5、配置文件 5.1、数据库连接参数 5.2、连接池数据基本参数 5.3、连接检查参数 5.4、事务相关参数 5.5、JMX参数 6、HikariCP源码浅析 6.1、HikariConfig--连接池配置的加载…

HikariCP配置手册

必须配置 1、dataSourceClassName或者jdbcUrl &#xff08;二选一&#xff09; 在Springboot 自动装配&#xff0c;或使用Mysql DataSource 情况下 请使用jdbcUrl。其他情况&#xff0c;HikariCP建议使用DataSourceClassName dataSourceClassName &#xff1a;意思是JDBC驱动…

HikariCP 创建连接

PoolEntry PoolEntry 是 HikariCP 中对数据库物理连接的封装。 那我们现在探索问题的关键点就是&#xff1a; PoolEntry.connection 是如何创建的&#xff1b;连接是何时创建的&#xff1b; 我们先看下 HikariCP 中数据源、连接、连接池之间的关系。 创建连接 连接池的初…

hikaricp mysql_配置HikariCP连接池

配置HikariCP连接池 数据库配置 spring.datasource.driver-class-namecom.mysql.jdbc.Driver 指定 spring 连接数据源驱动 spring.datasource.typecom.zaxxer.hikari.HikariDataSource 指定 spring 连接数据源类型 spring.datasource.urljdbc:mysql:///dbgoods?serverTimezone…

HikariCP连接池

背景 自己在写点代码的时候之前pom文件的内容都是从前一个项目中复制的&#xff0c;并没有认真分析一下各种依赖的关系&#xff0c;有时候重复的问题会出现好多次&#xff0c;比如说连接数据库报错&#xff0c;有时候配置没有问题&#xff0c;可能是依赖的jar包的问题&#xf…

HikariCP数据库连接池详解

HikariCP数据库连接池详解 1. 数据库连接池概述2. 为什么需要连接池3. HikariCP概述4. HikariCP特点5. HikariCP配置6. HikariCP案例验证 1. 数据库连接池概述 连接池是一种常用的技术&#xff0c;为什么需要连接池呢&#xff1f; 这个需要从TCP说起。假如我们的服务器跟数据库…

hikaricp mysql_HikariCP数据库连接池

摘要: 原创出处 hacpai.com/article/1582096971127 「jianzh5」欢迎转载&#xff0c;保留摘要&#xff0c;谢谢&#xff01; 什么是数据库连接池&#xff1a; 连接池是一种常用的技术&#xff0c;为什么需要连接池呢&#xff1f;这个需要从TCP说起。假如我们的服务器跟数据库没…

hikaricp使用

hikaricp数据库连接池是目前很流行的数据源 1.需要引入mysql的驱动、hikaricp依赖 <properties><java.version>1.8</java.version><hikari.version>2.7.9</hikari.version><mysql.version>8.0.13</mysql.version></properties&g…

自定义HikariCP连接池

文章目录 一、简介1、概述2、地址 二、配置参数1、Hikari原生参数2、Springboot中参数 三、springboot中使用四、自定义数据源1、各模块2、完整代码3、多数据源 五、多数据源dynamic中使用1、简介2、引入依赖3、参数配置 六、XMind整理 一、简介 1、概述 官方解释&#xff1a…

HikariCP源码分析

文章目录 1. 基本用法1.1 添加依赖1.2 创建DataSource1.3 获取连接 2. 源码分析2.1 API2.2 Pool2.2.1 获取连接2.2.2 添加连接2.2.3 维护连接 2.3 metrics2.3.1 dropwizard2.3.2 prometheus 3. 最佳实践 HikariCP是一个快速&#xff0c;简单可靠的JDBC连接池&#xff0c;Spring…

hikaricp mysql_HikariCP

软件简介 HikariCP 是一个高性能的 JDBC 连接池组件。下图是性能的比较测试结果&#xff1a; 使用方法&#xff1a; HikariConfig config new HikariConfig(); config.setMaximumPoolSize(100); config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlData…

数据库连接池HikariCP

HikariCP 现在已经有很多公司在使用HikariCP了&#xff0c;HikariCP还成为了SpringBoot默认的连接池&#xff0c;伴随着SpringBoot和微服务&#xff0c;HikariCP 必将迎来广泛的普及。 下面带大家从源码角度分析一下HikariCP为什么能够被Spring Boot 青睐&#xff0c;文章目录…

HikariCP 了解一下

作者 | 黄永灿 后端开发攻城狮&#xff0c;关注服务端技术与性能优化。 前言 在我们的工作中&#xff0c;免不了要和数据库打交道&#xff0c;而要想和数据库打好交道&#xff0c;选择一款合适的数据库连接池就至关重要&#xff0c;目前业界广为人知的数据库连接池有 Tomcat JD…

离线数仓-03-数仓系统搭建(ODS,DIM,DWD,DWS,ADS)

文章目录 数仓分层为什么要分层数据运营层&#xff1a;ODS&#xff08;Operational Data Store&#xff09;数据仓库层&#xff1a;DW&#xff08;Data Warehouse&#xff09;维表层&#xff1a;DIM&#xff08;Dimension&#xff09;数据明细层&#xff1a;DWD&#xff08;Dat…

数仓数据分层(ODS DWD DWS ADS)换个角度看

数仓数据分层简介 1. 背景 数仓是什么, 其实就是存储数据,体现历史变化的一个数据仓库. 因为互联网时代到来,基于数据量的大小,分为了传统数仓和现代数仓.传统数仓,使用传统的关系型数据库进行数据存储,因为关系型数据库本身可以使用SQL以及函数等做数据分析.所以把数据存储和…

湖仓一体电商项目(十):业务实现之编写写入DWD层业务代码

文章目录 业务实现之编写写入DWD层业务代码 一、代码编写