软件测试:黑盒测试、白盒测试和灰盒测试

article/2025/9/28 13:14:41

1. 黑盒测试和白盒测试的直观图

  从图中可以直接看出来,黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试。而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试。  

2. 黑盒测试 (Black-Box Testing)

  黑盒测试又称为功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。测试人员一般把被测程序当作一个黑盒子。

  黑盒测试主要测到的错误类型有:不正确或遗漏的功能;接口、界面错误;性能错误;数据结构或外部数据访问错误;初始化或终止条件错误等等。

  常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

  · 等价类划分法

    等价类分为有效等价类和无效等价类,其中,有效等价类是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合;而无效等价类是指对于程序的规格说明来说是不合理的,没有意义的输入数据构成的集合。

    确定等价类的原则是:a. 在输入条件规定了取值范围或值的个数的情况下,则可以确定一个有效等价类和两个无效等价类,比如若规定的输入范围是1<x<10的所有数,则有效的是1~10内的任意数,而无效的是 -∞~0.9999 和10.00001~+∞; b. 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,则可以确立一个有效等价类和一个无效等价类;c.在输入条件是一个布尔量的情况下,可以确定一个有效的等价类和一个无效的等价类;d. 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可以确立n个有效等价类和一个无效等价类;e. 在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);f.在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将改等价类进一步的划分为更小的等价类。

  · 边界值分析法

    根据经验法则,大量的错误是发生在输入或输出范围的边界上的,而不是发生在输入输出范围的内部。因此针对各种边界情况涉及测试用例,可以查出更多的错误。而使用边界值的分析方法涉及测试用例,首先应确定边界情况。通常输入和输出等价类的边界,应当选取正好等于,刚刚大于或者刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

    边界值选择的原则: a. 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围的边界的值作为测试输入数据。 例如,如果程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等;b. 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数小一,和比最大个数大一的数作为测试数据。例如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。c. 将前面两个原则应用于输出条件,即涉及测试用例使输出值达到边界值及其左右的值。d.如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。e. 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例数据;f. 分析规格说明,找出其他可能的边界条件。

  · 因果图法

    因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

    利用因果图生成测试用例的基本步骤有:1. 分析软件规格说明描述中哪些是原因(输入,包括前提条件,操作过程),哪些是结果(输出),并给每个原因和结果赋予一个标识符;2. 分析软件规格说明描述的语义,找出原因和结果之间,原因和原因之间的关系,根据这些关系,画出因果图;3. 在因果图上用一些记号表明约束或限制条件;4. 把因果图转换为判定表;5. 把判定表的每一列拿出来作为依据,设计测试用例。

    因果图的基本符号和约束符号:

    

  · 场景法

    场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。其中,基本流就是正常的,正确场景;备选流一般指中断操作的。

  · 正交实验设计法

    使用正交试验设计法首先要知道正交表,正交表是研究多因素多水平的一种设计方法,它是格局正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是一种基于正交表的、高效率、快速、经济的试验设计方法。正交表由三个成分构成,Runs:正交表的行数,即实验的次数;Factors:正交表的列数,即因素数;Levels:水平数,任何单个因素能够取得的值的最大个数。 正交表的表现形式是:  L行数 (水平数因素数)   L runs(levels^factors  )。

    用正交表设计测试用例的步骤: 1. 有哪些因素(变量); 2.每个因素有那几个水平(变量的取值):用等价类划分出来的;3. 选择一个合适的正交表;4. 把变量的值映射到表中;5. 把每一行的各因素水平的组合作为一个测试用例;6. 加上你认为可以且没有在表中出现的组合。

    如何选择正交表呢?取行数最少的一个,情况分三种:1.因素数(变量)、水平数(变量值)相符;2. 因素数不相同: 取因素数最接近但略大的实际值的表;3. 水平数不相同: 有五个因素(变量)A、B、C、D和E。两个因素有两个水平(变量的取值)、两个因素有三个水平,一个因素有六个水平。行数取最少的一个( 行数取最少的一个(L49(78)、 L18(3661)

  · 判定表驱动分析法

    判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。判定表由以下部分构成: 1. 条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要; 2. 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束;3. 条件项(Condition Entry):列出针对它左列条件的取值在所有可能情况下的真假值; 4. 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

 

  · 错误推测法

    错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况, 根据它们选择测试用例。

    最后,对于黑盒测试的综合策略是:首先,考虑边界值分析法,边界值分析法是在任何情况下都必须使用的方法,因为经验表明这种方法设计的测试用例发现程序错误的能力最强。必要时用等价类划分方法补充一些测试用例。其次,可以用错误推测法再追加一些测试用例。这时,可以对照程序逻辑,检查已设计出的测试用例的逻辑覆盖率,如果没有达到要求的覆盖标准,应当再补充足够的测试用例;如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法。

3. 白盒测试 (White-Box Testing)

  为什么要考虑白盒测试呢?举个栗子说明,设x=0,y=5, 程序设计z=y/x, 如果只考虑输入输出的黑盒测试,我们看不出程序内部的逻辑错误(分母不能为零),即使我们使用黑盒测试的测试用例覆盖的再全也发现不了这个问题,这个时候就要考虑使用白盒测试了。

  而什么是白盒测试呢?白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

  白盒测试需要遵循的原则有: 1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

  白盒测试方法有:

  · 静态测试&动态测试

  静态测试是不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。动态测试则需要执行代码,也是我们用的最多的一种测试,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

  · 单元测试

  · 代码检查

  · 同行评审

  · 技术评审

  要检验测试的效果,就要去看测试的覆盖率,当覆盖率越大,说明测试成效越好,软件的缺陷越少。但覆盖率不是目标(质量才是目标)而只是一种手段。测试覆盖率包括功能点覆盖率和结构覆盖率,其中,功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系;而结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率和路径覆盖率等等。

  而逻辑覆盖法中根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为:语句覆盖; 判定覆盖;条件覆盖;判定/条件覆盖;组合覆盖;路径覆盖,且这些覆盖程度越往后越全。

4. 灰盒测试 (Gray-Box Testing)

  灰盒测试更像是白盒测试和黑盒测试的混合测试,现阶段对灰盒测试没有更明确的定义,但更多的时候,我们的测试做的就是灰盒测试,即既会做黑盒测试又会做白盒测试。

总结:

       黑盒测试就是不看代码测试,模拟最真实的用户使用环境。

       白盒测试是看代码测试,结合测试结果和代码逻辑来测试,有时候这种方式更能发现、找出问题,尤其是一些潜伏性bug。

        灰盒测试介于白盒测试与黑盒测试之间的一种测试方法,灰盒测试多用于集成测试阶段,它不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。灰盒测试看作是白盒测试和黑盒的结合体。

 


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

相关文章

黑盒测试,白盒测试与灰盒测试的比较和区别

定义 黑盒测试 黑盒测试是一种软件测试技术&#xff0c;它可以检查软件的功能&#xff0c;而不会窥视其内部结构或编码。黑盒测试的主要来源是客户声明的要求规范。 在此方法中&#xff0c;测试人员选择一个函数并提供输入值以检查它的功能&#xff0c;并检查该函数是否给出…

【测试方法】黑盒测试、灰盒测试、白盒测试这些你确定都会了吗?

根据利用的被测对象信息的不同&#xff0c;可以将软件测试方法分为&#xff1a;黑盒测试、灰盒测试、白盒测试。 1、白盒测试 1&#xff09;概念&#xff1a;是依据被测软件分析程序内部构造&#xff0c;并根据内部构造分析用例&#xff0c;来对内部控制流程进行测试&#xff…

黑盒测试、白盒测试、灰盒测试的区别

1. 黑盒测试 黑盒测试也称功能测试、数据驱动测试或基于规格说明书的测试&#xff0c;它是通过测试来检测每个功能是否都能正常使用。在测试中&#xff0c;把程序看作一个不能打开的黑盒子&#xff0c;在完全不考虑程序内部结构和内部特性的情况下&#xff0c;在程序接口进行测…

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

测试奇谭&#xff0c;BUG不见。 大家好&#xff0c;我是谭叔。 对于黑盒、白盒与灰盒测试方法的理解&#xff0c;几年前我在某乎做过一个概念性的回答&#xff0c;当时提问者询问&#xff1a;如何跟非技术人员解释黑盒、白盒、灰盒测试的区别&#xff1f; 我的回答原文如下&…

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

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

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

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

拉普拉斯变换学习笔记

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

MATLAB之拉氏变换

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

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

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

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

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

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

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

逆Laplace数值逆变换

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

Laplace变换

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

信号与系统(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&#xff1a;分别用Laplace和ilaplace函数求 2、用MATLAB进行部分分式展开3、用MATLAB分析LTI系统的特性 三、实验内容1、验证实验原理中所述的相关程序&#xff1b;2、…

Laplace变换笔记(2)

对实域内f(t)的Laplace变换函数如下 对s域 Laplace变换收敛域&#xff08;边界条件&#xff09;&#xff1a; 拉普拉斯变换乘以衰减因子以后要保证衰减和可积&#xff0c;这样的衰减因子所满足的条件则为收敛域 Laplace变换逆变换&#xff1a; 定义式 线性性质拆分&#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. 问题引入及定义 上一节&#xff1a;【高数复变函数】傅里叶积分 回顾之前我们讲的傅里叶变换要满足的条件有&#xff08;也就是傅里叶积分要满足的条件…

[Matlab-5]Laplace变换

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

拉氏变换

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