黑盒测试、白盒测试与灰盒测试方法

article/2025/9/28 13:30:20

测试奇谭,BUG不见。

大家好,我是谭叔。

对于黑盒、白盒与灰盒测试方法的理解,几年前我在某乎做过一个概念性的回答,当时提问者询问:如何跟非技术人员解释黑盒、白盒、灰盒测试的区别?

我的回答原文如下:


既然是对非技术人员解释,就不能用专业术语。

这样说吧,有个打孔机,类似这样。

image-20210403202257785

纸条从盒子左方插入,从右方出来时,分别打出圆形、正方形、三角形三个样式的孔。

img

某天,打出来的纸条,只有一种图形。

image-20210403202330773

黑盒测试员只能说:“这个打孔机坏了!”

灰盒测试员把打孔机的盖子掀开,发现打孔机的造型原来是这样的。

image-20210403202349683

于是他说:“机器仍能打孔,说明主机没坏;三个桩子也都是好的;但只打印出了圆形,可能因为连接正方形和三角形桩子的地方有问题。”

白盒测试员把机器拆开,查看内部的电线、电路、控制器等等,发现连接正方形和三角形的电线烧坏了,于是说:“原因找到了,换根电线吧。”


彼时,我还是一位测试小鸟,在研习了不少理论知识后,回答了这个问题。现在,我算不上测试老鸟,但能算个测试大鸟,在工作中,越发频繁地接触这三种测试方法。

如果你要问我哪种测试方法更好,我不置评价,每个人的口味不一样,别人适合的不一定自己适合

对于黑盒测试方法来说,是每一位测试的必备技术,没有谁不会:发现问题,抛出问题。简单、轻松、快速,是黑盒测试的优点,特别是在项目特别赶,测试时间无限被压缩的时候——只需要抛给开发问题,剩下的让开发自个儿玩去吧。

但黑盒测试人员常常被人诟病只知道点点点,抛开此类“鄙视”不谈,接着上面继续,我们是不是忽略了一个事实:项目既然赶,那开发的时间亦不充足,如果恰好遇上稍稍复杂的bug,并搭配不靠谱的开发,一个bug的生命周期可能会拉得极长,效率特别低下。

这么说,那用白盒测试方法呗,看代码,查原因,丢给开发后,留下一个高大帅气的背影,让开发心里默念——这个测试不简单。

白盒测试可以,但使用它时,你需要盘算盘算:

是否有充足的时间研究代码以及和代码相关的环境部署、配置设置等?

付出和产出是否成正比,如同自动化测试,能达到高性价比吗?

白盒是一种选择,但同样是一个难题。更别说白盒对于测试技术的高要求。

废话了这么多,你一定会说:谭叔,你不就是拐弯抹角地推荐灰盒测试嘛。

我不知道该怎么回答你,就像刚开始说的,每个人的口味不一样,适合自己的测试方法,最醇最香。

但说实话,日常工作中我使用灰盒测试方法的场景相对较多,总结来说,就这么一个流程:

发现问题–>我大概知道你是怎么玩的–>初步定位问题原因–>同开发确定问题–>接下来呢?

会分成两类:

1、我定位的原因并不是真正的原因。但我能通过这个过程学习到新知识、新业务,积攒个人经验(很多人往往弃步于此)

2、我定位的问题是真正的原因。就此打住吗?并不是。你能提出问题的解决建议吗?你的建议是否比开发的修改 or 产品给的方案更好,更具有可实施性?

合理地提出解决问题的建议,这才是你关注的重点,而不是因为找到问题原因而沾沾自喜,迷失于他人的赞许中。

实践是检验真理的唯一标准。恰好,我最近遇到一个问题,并且刚好使用到灰盒测试方法,分享给大家窥其一二。

先描述下业务:

我测试的X系统会从配置系统拉取几条数据,并保存在数据库A(读写库)中,数据库A又会将新数据实时同步到数据库B(读写库)中。业务上:a类用户从数据库A中读数据,b类用户从数据库B中读数据。

再说下bug:

我在配置系统删除了一条数据,结果a类用户没有读到该条数据(预期结果),b类用户却读到了该条数据(非预期结果)。去数据库查看,A库没有被删除的数据,B库仍然存在被删除的数据。

按理说,走到这一步,便可以到bug系统提交一条bug指给开发解决。不过我想到开发最近天天晚上加班,并且我之前提的几个bug反复修改,开发效率很低,加之临近上线,时间被压缩,于是乎,我额外抽出一点时间,简单定位下问题。

这个问题看起来简单,无非是同步导致两个库的数据不一致,可以得出两个猜测:

一 同步没有触发。

二 同步触发了,但数据没有在B库落库。

接着,我做了一个实验:在配置系统修改了一条数据,结果A库和B库的数据保持一致。据此,猜测一不成立。

紧接着,我又做了一个实验:进入A库,在数据库内删除一条数据,奇怪的是,B库的数据被删除了,猜测二也不成立。

两种猜测同时被证明无效,那问题究竟出在哪里呢?

于是,我上到服务器,重新在配置系统删掉一条数据,并触发了一次同步操作,我在日志上找到了两条sql:

truncate table xxtable;

insert into xxtable……;

到此,我恍然大悟。

原来因为这个业务的数据不多,开发可能是这样处理的:从配置系统拉取数据时,先清空A库的xxtable,再向A库的xxtable插入数据,以此简化数据增删改的逻辑。但我司DBA做过处理,不允许数据库级别之间进行truncate table的同步。

最后找开发讨论,果真是这个问题。

怎么解决呢,将truncate table xxtable换成delete from xxtable即可。

这算是一次我所理解的完整的灰盒测试,也是我一直推荐给组内人员的高效率的一种工作方式:我大概知道你是怎么实现业务的,实践定位问题,达到快速解决问题的目的。

一如既往,做个总结

01 测试时,特别简单的bug建议直接抛出,让开发去玩,没必要浪费精力定位问题

02 复杂问题多总结,定位问题时头脑要清晰且灵活,证实或否定每一个猜测

03 和开发打好关系(或强制要求),让他们在解决bug的时候注明bug产生的原因

04 多花时间在业务上,绝对物超所值


http://chatgpt.dhexx.cn/article/aiLhgr6W.shtml

相关文章

白盒测试、黑盒测试、灰盒测试

根据被测对象的不同,软件测试可以分为白盒测试、黑盒测试、灰盒测试三种方式。那么,这三种测试测试方式具体是如何运行的?各有什么特点?下面,跟着小厚一起了解一下吧! 01 白盒测试 ●概念: ➢…

一直没搞懂灰盒测试的我,收藏了这篇文章

在本文中,我们将了解什么是灰盒测试以及为什么要使用它,以及它的优缺点。 在软件测试中,灰盒测试是一种有用的技术,可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作的…

拉普拉斯变换学习笔记

目录 1.为什么引入拉普拉斯变换? 2.双边拉普拉斯的定义 3.双边拉普拉斯变换的收敛域 4.单边拉普拉斯变换的定义 5.单边拉普拉斯变换和傅立叶变换的关系 6.常见信号的拉式变换 7.拉普拉斯变换的性质 7.1.线性、尺度变换性质 7.2.时移、复频移特性 7.3.时域、…

MATLAB之拉氏变换

一、复数和复变函数 1、复数的三种表现形式: 坐标形式: 三角形式: 指数形式: 2、复变函数: 复数集E内的每一个复数zab*i,都有(唯一确定的/无穷多个/有限个)复数与之对应,可以确定(单…

【拉普拉斯变换】2. 拉普拉斯变换的性质

文章目录 【 1. 线性 】【 2. 时域尺度变换 】【 3. 时移 】【 4. S域平移(复频移) 】【 5. 时域的微分(微分定理) 】【 6. 时域的积分(积分定理) 】【 7. 卷积定理 】【 8. S域微分、积分 】【 9. 初值定理、终值定理 】 【 1. 线性 】 例: 注意ROC的变化 &#xf…

【高数+复变函数】Laplace变换的性质

文章目录 【高数复变函数】Laplace变换的性质一、性质1. 线性性质2. 微分性质3. 像函数的微分性质4. 积分性质5. 象函数的积分性质6. 位移性质7. 延迟性质8. 相似性质 【高数复变函数】Laplace变换的性质 通过上一节【高数复变函数】Laplace变换的学习,我们知道了L…

图像变换 -拉普拉斯变换(cvLaplace)

拉普拉斯变换(Laplace Transform),是工程数学中常用的一种积分变换。 拉普拉斯变换也可以用作边缘检测,用二次导数的形式定义。函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶x和y差分,…

逆Laplace数值逆变换

01拉普拉斯变换定义 1.变换公式 2. 常见函数的Laplace变换 02 Laplace数值逆变换 根据拉普拉斯逆变换的公式,可以看到,f(t)可以变成如下的公式。 #!/usr/local/bin/python # -*- coding: gbk -*- # # TEST1.PY -- by Dr. ZhuoQing…

Laplace变换

众人推荐的 MIT公开课——拉普拉斯变换简介 用级数来理解 拉普拉斯变换比傅里叶变换多了一个衰减因子,使得不满足绝对可积的信号也能转化为频域信号。 两者都能描述幅值信息和相位信息。 --------------------------------------------------------------------…

信号与系统(Python) 学习笔记 (6) 拉普拉斯变换 Laplace Transform

【总目录】 (1) 简介 Intro(2) 傅里叶 Fourier 常用函数的傅里叶变换汇总 (3) LTI 系统 与 滤波器 二次抑制载波振幅调制接收系统 Python (4) 取样 Sampling(5) 离散傅里叶 Discrete Fourier(6) 拉普拉斯变换 Laplace Transform 文章目录 6. 拉普拉斯变换6.1. 拉普拉斯变换 L…

实验八、拉普拉斯变换

实验八、连续系统的复频域分析 一、实验目的二、实验器材三、实验原理1、用MATLAB进行Laplace正、反变换例1:分别用Laplace和ilaplace函数求 2、用MATLAB进行部分分式展开3、用MATLAB分析LTI系统的特性 三、实验内容1、验证实验原理中所述的相关程序;2、…

Laplace变换笔记(2)

对实域内f(t)的Laplace变换函数如下 对s域 Laplace变换收敛域(边界条件): 拉普拉斯变换乘以衰减因子以后要保证衰减和可积,这样的衰减因子所满足的条件则为收敛域 Laplace变换逆变换: 定义式 线性性质拆分&#xff1…

MATLAB——拉氏变换及反其变换、Z变换及其反变换

一、拉式正反变换 1、拉式变换 【时域转s域】 laplace(F) 2、拉式反变换 【s域转时域】 ilaplace(L) 二、Z正反变换 1、Z变换 【ztrans 时域转Z域】 ztrans(f); ztrans(f,w); ztrans(f,k,w); 2、Z反变换 【iztrans Z域转时域】 iztrans(f); iztrans(f,w); iztrans(f…

【高数+复变函数】Laplace变换

文章目录 【高数复变函数】Laplace变换1. 问题引入及定义2. 存在定理3. 常见Laplace变换 【高数复变函数】Laplace变换 1. 问题引入及定义 上一节:【高数复变函数】傅里叶积分 回顾之前我们讲的傅里叶变换要满足的条件有(也就是傅里叶积分要满足的条件…

[Matlab-5]Laplace变换

[Matlab-5]Laplace变换 Laplace 变换(数学)Laplace 变换和逆变换Laplace 变换与Fourier变换的关系极点(pole)与零点(zero)作3D曲面图(surface plot)标题会用到的函数颜色挑选栗子 给定微分方程求Laplace变换…

拉氏变换

拉氏变换 拉氏变换的理解 一个函数f(t)的Laplace变换定义为 这个式子说的是一件这样的事情:F(s)是实空间函数f(t)在复空间中以为基底的投影。 解释 首先,定义复空间上两个函数f,g的内积为 很容易知道是复空间中的一组正交基。那么根据内积的意义——…

【模拟电路建模与控制系统分析】01Laplace变换

0.若没有拉氏变换会怎样? 根据上述微分方程,求输入输出关系,即求解微分方程。 以上为一个卷积关系,求解设计卷积、微分方程,求解困难。而拉氏变换将微分方程变成代数方程,得出系统传递函数,卷积…

信息与通信的数学基础——Laplace变换

文章目录 1. Laplace变换的概念1.1 Laplace变换的引入1.2 Laplace变换的定义1.2.1 常见的Laplace变换 2. Laplace变换的性质2.1 线性性质与相似性质[1]2.2 延迟性质与位移性质2.2.3 利用延迟性质求逆变换[2] 2.3 微分性质2.3.1 复合性质的Laplace变换[3] 2.4 积分性质 3. Lapla…

Eclipse配置JDK、Maven

一、配置JDK 1.1、打开电脑eclipse,进入到eclipse的主页面,点击【window】–【preferences】选项,进入eclipse的首选项管理 1.2、进入【preferences】设置后,在左上角的搜索栏中输入【jdk】关键,就可以搜索出jdk的相…

MAC上配置jdk

如何在MAC上配置jdk 相信每个拿到MAC的小伙伴都是很欣喜的,但是由于MAC系统与WIN系统有着极大的不同,所以使用起来会有一些小困扰。这是我个人的第一篇博客,我目前应该完全算是个小菜鸡;我会在这里分享使用MAC的心得和做一些技术…