白盒测试方法

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

一、概述:

白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。

白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。但即使每条路径都测试过了,仍然可能存在错误。因为:

穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。

穷举路径测试不可能查出程序因为遗漏路径而出错。

穷举路径测试发现不了一些与数据相关的错误。

二、方法

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

逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖等。

基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

 逻辑覆盖 vs. 路径覆盖:

逻辑覆盖:以程序或系统的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等。

基本路径测试:在程序或业务控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

2.1 语句覆盖:

语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次

如果是顺序结构,就是让测试从头执行到尾

如果有分支、条件和循环,需要利用下面的方法,执行足够的测试覆盖全部语句

只需设计一个测试用例:    a=2,b=1,c=6; 即达到了语句覆盖。

【优点】 :可以很直观地从源代码得到测试用例,无须细分每条判定表达式。

【缺点】 :由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。

2.2 判定覆盖

设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。 一个判定往往代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。

a=2,b=1 ,c=6可覆盖判断M的Y分支和判断N的Y分支;

a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断N的N分支 。   这两组测试用例可覆盖所有判定的真假分支。

a=1,b=1 ,c=-3  可覆盖判断M的Y分支和判断N的N分支 ;

a=1,b=-2 ,c=3可覆盖判断M的N分支和判断N的Y分支 ;   同样的这两组测试用例也可覆盖所有判定的真假分支。

【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是的逻辑覆盖。

2.3 条件覆盖

设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次

判断M表达式: 设条件 a>0 取真 记为 T1           取假 记为  F1  

条件 b>0 取真 记为  T2            取假 记为  F2

判断N表达式: 设条件 a>1 取真 记为 T3             取假 记为 F3  

条件 c>1 取真 记为  T4             取假 记为 F4

它覆盖了判定M的N分支和判断N的Y分支。 

测试用例

覆盖条件

具体取值条件

 

a=2,b=-1,c=-2

 

T1, F2, T3, F4

a>0,b<=0,

a>1,c<=1

 

a=-1,b=2,c=3

F1, T2, F3, T4

a<=0,b>0,

a<=1,c>1

我们用条件覆盖设计的思想就是让测试用例能覆盖 T1、T2、T3、T4、F1、F2、F3、F4 

【优点】:增加了对条件判定情况的测试,增加了测试路径。

【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断N的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

2.4 判定条件覆盖

判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次

测试用例

取值条件

具体取值条件

判定条件

通过路径

输入:a=2,b=1,c=6

输出:a=2,b=1,c=5

T1,T2,T3,T4

a>0,b>0, a>1,c>1

M=.T.

N=.T.

P1(1-2-4)

输入:a=-1,b=-2,c=-3

输出:a=-1,b=-2,c=-5

F1,F2,F3,F4

a<=0, b<=0, a<=1, c<=1

M=.F.

N=.F.

P4(1-3-5)

按照判定-条件覆盖的要求,我们设计的测试用例要满足如下条件:

1.所有条件可能至少执行一次取值;

2.所有判断的可能结果至少执行一次。 

测试用例

覆盖条件

覆盖判断

a=2,b=1,c=6

T1, T2,

T3, T4

M的Y分支和N的Y分支

a=-1,b=-2,c=-3

 

F1, F2, 

F3, F4

M的N分支和N的N分支

 要满足T1、T2、 T3 、T4 F1、 F2 、F3、F4

【优点】 :能同时满足判定、条件两种覆盖标准。

【缺点】 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。

2.5 条件组合覆盖

设计足够的测试用例,使得程序中每个判断的所有可能的条件取值组合都至少出现一次

它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次

按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件

组合编号

覆盖条件取值

判定条件取值

判定-条件组合

1

T1T2

M=.T.

a>0b>0M取真

2

T1F2

M=.F.

a>0b<=0M取假

3

F1T2

M=.F.

a<=0b>0M取假

4

F1F2

M=.F.

a<=0b<=0M取假

5

T3T4

N=.T.

a>1c>1N取真

6

T3F4

N=.T.

a>1c<=1N取真

7

F3T4

N=.T.

a<=1c>1N取真

8

F3F4

N=.F.

a<=1c<=1N取假

测试用例

覆盖条件

覆盖判断

覆盖组合

a=2,b=1,c=6

T1, T2,

T3, T4

M取Y分支,Q取Y分支

1,5

a=2,b= -1,c= -2

T1, F2, 

T3, F4

M取N分支,Q取Y分支

2,6

a=-1,b=2,c=3

 

F1, T2, 

F3, T4

M取N分支,Q取Y分支

3,7

a= -1,b= -2,c= -3

 

F1, F2, 

F3, F4

M取N分支,Q取N分支

4,8

要满足1、2、3、4、5、6、7、8条件组合

测试用例

覆盖条件

覆盖路径

覆盖组合

输入:a=2,b=1,c=6

输出:a=2,b=1,c=5

T1,T2,T3,T4

P1(1-2-4)

1,5

输入:a=2,b=-1,c=-2

输出:a=2,b=-1,c=-2

T1,F2,T3,F4

P3(1-3-4)

2,6

输入:a=-1,b=2,c=3 

输出:a=-1,b=2,c=6

F1,T2,F3,T4

P3(1-3-4)

3,7

输入:a=-1,b=-2,c=-3

输出:a=-1,b=-2,c=-5

F1,F2,F3,F4

P4(1-3-5)

4,8

覆盖了所有组合,但覆盖路径有限,1-2-5 没被覆盖 

【优点】:条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。

【缺点】:线性地增加了测试用例的数量。

2.6 路径覆盖

设计所有的测试用例,来覆盖程序中的所有可能的执行路径

测试用例

覆盖路径

覆盖条件

覆盖组合

输入:a=2,b=1,c=6

输出:a=2,b=1,c=5

P1(1-2-4)

T1,T2,T3,T4

1,5

输入:a=1,b=1,c=-3

输出:a=1,b=1,c=-2

P2(1-2-5)

T1,T2,F3,F4

1,8

输入:a=2,b=-1,c=-2

输出:a=2,b=-1,c=-2

P3(1-3-4)

T1,F2,T3,F4

2,6

输入:a=-1,b=2,c=3 

输出:a=-1,b=2,c=6

P3(1-3-4)

F1,T2,F3,T4

3,7

输入:a=-1,b=-2,c=-3

输出:a=-1,b=-2,c=-5

P4(1-3-5)

F1,F2,F3,F4

4,8

测试用例

覆盖组合

覆盖路径

a=2,b=1,c=6

1,5

1-2-4

a=1,b=1,c=-3

1,8

1-2-5

a=-1,b=2,c=3

4,7

1-3-4

a=-1,b=-2,c=-3

4,8

1-3-5

【优点】 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。

【缺点】 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。 

 2.7、逻辑覆盖总结

根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖

语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。

判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值, 也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。

条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。

判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。    

——满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。

组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。    

——满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。

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

3.基本路径测试

3.1流程

1.依据代码绘制流程图

2.确定流程图的圈复杂度(cyclomatic complexity )

3.确定线性独立路径的基本集合( basis set )

4.设计测试用例覆盖每条基本路径

3.2 示例:

Path1: 1-2-3-6-7-9-10-1-11

Path2: 1-2-3-6-8-9-10-1-11

Path3: 1-2-3-4-5-10-1-11

Path4: 1-11P

基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次


http://chatgpt.dhexx.cn/article/24jTsDiP.shtml

相关文章

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

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

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

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

白盒测试的各种方法

文章目录 一、逻辑测试法设计测试用例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以及函数等做数据分析.所以把数据存储和…