前言:

  在1999年,美国洛克希德马丁公司发表了灰盒测试的论文,提出灰盒测试方法,是一种介于白盒测试黑盒测试的一种新的测试方法。2000年洛克希德马丁公司在之前灰盒测试基础上,完整论述在真实环境中,以实时方式对嵌入式设备进行灰盒测试的方法(《Graybox Software Testing in the Real World in Real-Time》),进一步完善了灰盒测试理论,不单从覆盖角度验证软件功能正确性和测试完整性,同时从时间维度测试嵌入式设备的性能指标是否满足实时系统性能需求。

黑盒、白盒、灰盒测试比较:

  我们都知道黑盒测试一般根据系统的需求文档、设计文档,来设计测试用例,从系统的角度验证功能是否能否满足需求。

黑盒测试的优点:

  由于其面向系统级别,不涉及代码,测试人员只需了解需求文档,根据系统功能描述设计测试用例,执行测试用例,简单易行,基本上只需要对测试有一定了解,对产品功能需求由较深的理解,即可实施黑盒测试。

黑盒测试的缺点:

  由于只关注系统外部输入输出,而不会深入到系统内部,因此测试不够深入,容易造成测试遗漏,同时发现功能问题后,难以定位问题原因。

  白盒测试也即单元测试,一般由开发人员自己针对所写代码进行测试,其测试对象一般函数单元或者文件单元。

白盒测试的优点:

  针对每个函数进行测试,测试粒度足够细,测试足够充分,通过单元测试用例的回归,发现问题时,很容易定位到具体的出错函数,同时测试用例一旦建立完成,可以通过命令行的方式自动化的实施回归测试。

白盒测试的缺点:

  对测试人员要求较高,需要具备较强的阅读、编写代码能力;测试粒度细,因此需要花费大量的测试用例编写以及维护时间;测试对象是单元级别,主要验证函数的功能逻辑是否正确,没法覆盖系统级的验证,即使做了单元测试,仍需进行系统测试;同样由于其面向函数级别,单元测试也没办法实施性能测试。

  上面我们梳理了白盒测试、黑盒测试的优缺点,那么灰盒测试是否能够兼顾白盒、黑盒测试的优点,尽量避免白盒和黑盒的缺点,取长补短呢?

灰盒测试:

  从验证系统功能正确性的角度,以常规黑盒测试方式,同时结合程序内部逻辑结构设计用例,执行程序并采集程序执行路径信息和外部输入输出结果。

灰盒测试的优点:

  灰盒测试对程序内部逻辑的关注不像白盒测试那样细致,是兼顾测试效果和效率的测试方法;能够进行基于需求的覆盖测试和基于程序路径覆盖的测试;测试结果可以对应到程序内部路径,便于bug的定位、分析和解决;能够保证设计的黑盒测试用例的完整性,防止遗漏软件的一些不常用的功能或功能组合; 能够分析需求或设计不详细或不完整对测试造成的影响;由于面向系统级测试,能实施性能测试;当然灰盒测试也有其自身面临的挑战,文章后面部分会专门论述。