黑盒、白盒、灰盒测试的基本概念

黑盒:

  对于一段程序,对其测试时,不需要知道内部结构和特性,在输入接口处输入激励,观察输出是否正确。

  主要用于软件界面和功能测试。

  实际应用中,由于输入为无穷个,不仅要测试所有合法的输入,也要测试不合法但是可能发生的输入。

白盒:

  白盒测试也称结构测试和逻辑驱动测试,知道程序内部结构,验证内部每条通路是否能正常工作。

  也就是穷举路径测试,从检查程序的逻辑出发。主要用于软件验证。

  但是,

  第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。

  第二,穷举路径测试不可能查出程序中因遗漏路径而出错。

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

灰盒:

  介于白盒和黑盒之间的测试,结合外部接口、功能和内部逻辑、路径,根据程序实际情况,进行测试。

本文转自:http://www.eetop.cn/blog/html/28/1561828-438324.html

在FPGA验证技术中:

黑盒验证

如果验证人员对于设计的细节缺乏认识,那么黑盒验证是一种合适的方式。因为验证环境只需要将激励给入设计的外部接口,而检查设计的另一侧输出就够了。而测试的成功与否只是根据一个输入是否得到一个正确的输出,验证环境本身不会关注设计的内部。

从上面这张图可以看到,激励生成器(stimulator)只负责给设计灌入激励,监视器(monitor)和检查器(checker)也只查看和比较输出信号。

黑盒验证的一个缺点是它缺少设计的透明度和激励的可控度,而由此带来的一些问题包括:

  1. 当测试失败以后,无法更深层次地定位问题。对于验证人员而言,他只能判断是测试是否成功,但无法将报告进一步定位到缺陷所在的位置,与设计人员完成深度协作。
  2. 这种方式对于发现一些较深的缺陷比较困难,因为验证人员无法根据设计本身给出更窄的随机约束来定向生成一些激励。同时,这也对设计内部功能点的功能覆盖率收敛没有太多的帮助。

当一些设计的接口采用标准接口时,图中的激励生成器或者总线功能模型可以使用复用性高的验证IP。这些验证IP一般由第三方公司提供,有时候公司内部也有这样的IP,它们的特点是像标准接口一样易于在验证环境中插拔,易于控制且接口时序严格按照总线文档定义。同时对于监测器而言,它也来自于验证IP,这也减少了验证人员的工作量。所以当模块的接口标准化时,验证环境也可以复用一些验证IP。

由于黑盒验证本身不包含设计的内部逻辑信息,所以当设计由于缺陷做了更新或者添加新的特性之后,原有的测试列表仍然较稳定,验证人员只需要对新添加的特性考虑新的测试场景。黑盒验证有利于保持测试环境的稳定,在后续项目中一旦更新了设计,新的验证人员也只需要很少的力气来维护继承的验证环境。

白盒验证

相比黑盒验证,白盒验证可以弥补一些不足。由于验证人员了解设计的内部工作逻辑、层次、信号等,他就可以对更底层的设计细节进行测试。由于对于设计中各种组件和逻辑细节都了如指掌,这种验证方式可以验证设计是否更严格地遵循功能描述文档,而且一旦测试发生失败也可以更快速地定位到缺陷。

对于白盒验证的环境,我们的参考模型逻辑非常简略,甚至不需要参考模型,而只需要植入监视器和断言来检查各个内部逻辑。这种环境配置背后的原则是说,当我们充分检查各个逻辑驱动和结构以后,就不需要测试它的整体功能,因为白盒验证是穷举逻辑路径的方法。

使用白盒验证也面临一些方法学上的缺陷:

  1. 由于本身专注于设计内部逻辑检查而忽略整体功能的测试,在设计本身违反规范的情况下,白盒验证难以发现缺陷。
  2. 在数据一致性检查的方面,白盒验证难以从整体入手给出实际测试用例。
  3. 由于白盒验证的测试用例很多都是从设计的细节入手,所以一旦设计发生更新,那么对于验证环境的维护成本就偏高。这一点在项目间复用方面带来的影响更多,甚至新接手验证环境的人要付出很大的成本去理解设计细节和验证环境的细节。这时候白盒验证环境的低复用性缺点就暴露出来了。

灰盒验证

从黑盒验证和白盒验证来看,他们各自都有着优势和劣势。在实际验证中,我们更倾向于将黑盒和白盒两种方法掺杂在一起,让监视器、断言、参考模型一同来完善验证。这种糅合的方式带来的好处包括:

  1. 监视器和断言可以有着更好的透明度来着重检查设计的一些重要内部逻辑。
  2. 参考模型由于已经有了断言检查局部逻辑的帮助,会减少很大一部分精确度,而主要专注在输入和输出的数据比较上。

而从复用性角度考虑,灰盒验证也有着灵活地变动方式:

  1. 对于新的设计,我们的验证人员需要更深入地理解设计本身,而采用灰盒验证一开始通过监视器和断言来进行局部验证。待设计初步完善和趋向稳定时,验证人员此时也有了对设计更全局的理解来构建参考模型。又因为前期监视器和断言保证局部逻辑的正确,那么参考模型的构建不需要完全精确,只需要较少的精力来实现。
  2. 如果该设计移植到别的项目,尽管难免设计需要进行局部修改,对于验证环境而言,灰盒验证的复用性优势就体现出来了。即便是新的验证人员接手这个验证环境,好的灰盒环境也可以清晰地将黑盒和白盒的部分划分开来。在设计本身复用的项目中,我们首先建议打开黑盒开关,这对于新的验证人员来讲是较低的测试成本,也无需对设计和验证环境了解太多。同时,这么做也可以第一时间保证原有功能的稳定性,并反馈给设计人员新的改动造成的影响。紧接着,应该验证人员可以针对新的特性创建特定的黑盒测试序列,由于设计本身的稳定,新的黑盒测试序列不需要关注与设计内部太多。

    当黑盒环节进行完毕以后,我们可以在时间允许的情况下,有序引入白盒的开关。首先,我们应该考虑先创建新的白盒断言点或者是功能检查点,来专注在新的功能部分。其次,在完成了新的功能点白盒覆盖以后,我们再考虑逐个打开原有的白盒功能检查开关,逐次打开白盒检查开关的方式我们也遵循着每次添加尽可能少的开关来跑递归测试,这便于发现问题以后可以快速定位到新打开的开关一侧;并且,白盒检查点的开关也有逻辑重要性的优先级,如果之前验证人员足够专业的话,在他的代码或者文档中也应该对这些不同白盒开关给出说明和重要性的排列,这种说明会有助于新的验证人员先开高优先级的开关,而依次按照优先级的降序来打开不同的开关。

所以灰盒验证不但可以继承黑盒验证和白盒验证的优势,同时也对于验证环境在新项目中的复用有着明显优势。

无论对于设计人员还是验证人员也都需要从各自的角度考虑复用性,将设计的整个流程全盘考虑,也只有可以让使用设计交付包的项目可以有更好的“用户体验”,缩短集成时间(设计和验证),才是好的设计和验证环境。

原文地址:https://www.cnblogs.com/hcr1995/p/10821875.html

时间: 2024-10-29 05:06:33

黑盒、白盒、灰盒测试的基本概念的相关文章

测试方法——黑盒 白盒

这个博文是为了复习自己之前学习的内容,所以详简不一. 一.白盒测试 一般称为结构测试 1.静态:代码检查法,静态结构分析法 2.动态 :逻辑覆盖,基本路径推测法 (1)逻辑覆盖分为六大类(由弱到强排序):语句覆盖.分支(判定)覆盖.条件覆盖.判定-条件覆盖.条件组合覆盖.路径覆盖 (2)基本路径推测 a.先画出程序流图 b. 计算圈复杂度   圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界. 独立路径必须

软件测试中的“黑盒”与“白盒”

软件测试中,最常听到“黑盒测试”与“白盒测试”,它们是软件测试中最基本的测试方法. 那么究竟何为“黑盒”,何为“白盒”呢?下面就对其概念与常用方法进行一下介绍. 黑盒测试: 也称功能测试.数据驱动测试,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试. 概念:黑盒测试是从一种从软件外部对软件实施的测试,也称功能测试或基于规格说明的测试.其基本观点是:任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容(实现)是完全不知道

软件测试不再黑盒— threadingtest带来第二代白盒覆盖率技术

软件测试不再黑盒- threadingtest带来第二代白盒覆盖率技术 穿线测试对于测试界的一个重大创新在于,在白盒测试理论出现数十年以后,上海零一拼装信息技术有限公司结合在测试理论方面十余年的潜心研究,率先提出了第二代覆盖率技术,这绝对不是一个口号,而是ZOA真正对于白盒测试的理解以及对于标准第三方测试服务的深度理解经过数年的基础研究以及2年有余的研发而推出的达到商用标准的技术.现在先让我们温习下经典的测试理论: 1.测试方法论 黑盒功能测试法 黑盒功能测试法, 是把要测试的软件看成一个 "黑

关于白盒与黑盒

开通黄钻 什么是黑盒测试和白盒测试? 任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试.黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求.白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查. 黑盒测试软件的黑盒测试意味着测试要在软件的接口处进行.这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说

JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台

近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对自己或身边开发人员,对java语言更熟悉,为了后期维护打算采用java写一个这样的平台.另外白盒代码安全扫描也有Fortify等收费软件,或依赖PMD做代码分析,不过比如新增了什么安全问题,需要自定义或扩展就比较麻烦. 比如一个简单的:现在用struts2存在漏洞,现在需要升级到2.3.28版本,于

黑盒和白盒

黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求. 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查. 白盒测试和黑盒测试是根据对软件代码的可见性,采用的测试方法:凡是针对代码本身的测试,都可以看做是白盒测试,凡是不考虑代码如何实现,只对代码能实现的功能进行的测试都可以看作黑盒测试. 1.黑盒测试 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在

单元測试和白盒測试相关总结

一.  软件測试方法 1.        软件測试方法包含:白盒測试(White  Box  Testing).黑盒測试(Black  Box Testing).灰盒測试.静态測试.动态測试. 2.        白盒測试:是一种測试用例设计方法.在这里盒子指的是被測试的软件,白盒.顾名思义即盒子是可视的,你能够清晰盒子内部的东西以及里面是怎样运作的.因此白盒測试须要你对系统内部的结构和工作原理有一个清晰的了解,并且基于这个知识来设计你的用例. 白盒測试技术一般可被分为静态分析和动态分析两类技术

SafeNet推出行业首款白盒password软件保护解决方式

数据保护领域的全球率先企业SafeNet公司日前宣布,推出行业首款採用白盒安全技术的的软件保护方案.SafeNet 圣天诺 软件授权与保护解决方式如今纳入了新的功能,可在"白盒" 环境中保护安全算法免受攻击.此前,攻击者一般会随心所欲地观察和改变当中动态源代码的运行和内部算法的细节. 传统上,在软件保护技术中,安全算法一般会在攻击者的眼皮底下运行.没有黑盒保护密钥,因此应用程序的运行可一步一步地监视,全部訪问过的数据均为可见.为了更好地保护密钥不受损害,我们须要採用一种不同的方法. S

软件測试基本方法(二)之白盒測试

白盒測试 概念:依照程序内部的结构測试程序,通过測试来检測产品内部动作是否依照设计规格说明书的规定正常进行.检验程序中的每条通路是否都能按预定要求正确工作. 分类:白盒測试是基于覆盖的測试.尽可能覆盖程序的结构特性和逻辑路径.所以其详细方法有逻辑覆盖.循环覆盖.基本路径覆盖.逻辑覆盖又可进一步分为语句覆盖.判定(分支)覆盖.条件覆盖.判定-条件覆盖.条件组合覆盖等. 白盒測试主要用于单元測试(我们须要了解程序源代码和结构,并且基于输入输出.适合单元模块).以下重点介绍经常使用的几种白盒測试方法.