灰盒测试是一种综合测试法,它将“黑盒”测试、“白盒”测试结合在一起,构成一种无缝测试技术。“灰盒” 测试以程序的主要性能和主要功能为测试依据,测试方法主要根据程序的程序图、功能说明书以及测试者的实践经验来设计。下面从灰盒测试的优缺点开始说起。

  一、几个基本概念

  首先,把一些基本概念,简单通俗地说一下。

  1、黑盒测试

  通俗来说:黑盒测试不关注软件内部的实现细节。他仅仅把被测试的软件当成一个整体来处理,只关注软件的外在表现,不关注内部细节。典型的黑盒测试,是光拿着鼠标操作一下用户界面,看看功能是否满足要求。

  2、白盒测试

  白盒测试与黑盒测试相反,重点关注软件内部的实现细节(比如代码覆盖率等)。

  3、灰盒测试

  如果你是从事开发或者测试的行当,应该已经听过黑盒测试与白盒测试这2个概念。但对灰盒测试,或许比较耳生。单纯从名称上来看,灰盒测试是介于黑盒测试与白盒测试之间的一种测试方式。

  这种测试方式,主要用于多模块构成的稍微复杂的软件系统。在灰盒测试中,重点关注软件系统内部模块的边界(接口)。这里所说的“接口”是广义的,包含有各种形式。对于进程内的模块,其接口可能是动态库的导出函数;对于进程级的模块,其接口可能是各种IPC(进程间通讯)机制;对于涉及数据库的软件系统,其接口可能是数据库的表结构。

  4、灰盒测试与黑盒测试的区别

  如果某软件包含多个模块,当你使用黑盒测试时,你只要关心整个软件系统的边界,无需关心软件系统内部各个模块之间如何协作。而如果使用灰盒测试,你需要关心模块与模块之间的交互。这是灰盒测试与黑盒测试的区别。

  5、灰盒测试与白盒测试的区别

  但是,在灰盒测试中,你还是无需关心模块内部的实现细节。对于软件系统的内部 模块,灰盒测试依然把它当成一个黑盒来看待。而白盒测试则不同,还需要再深入地了解内部 模块的实现细节。所以,这是灰盒测试与黑盒测试的区别。

  6、灰盒测试与单元测试的区别

  刚才看到有网友在评论中问到此问题,俺补充一下。

  首先,在进行单元测试时,需要写一些测试代码(行话叫“桩代码”,洋文叫stub)。一般来说,测试代码与被测试代码采用同种语言(比如Java的单元测试通常也用Java来写),且测试代码和被测试代码之间的耦合很紧密。因此,单元测试通常由开发人员来完成的——测试人员的能力未必能胜任。

  其次,单元测试的颗粒度会更细(会细到模块内部的类一级、函数一级),而灰盒测试仅仅到模块一级。