俺在忽悠某个技术领域的玩意儿之前,通常先要分析一下优缺点——这样才能调动大伙儿的积极性。所以,本系列第1帖先分析一下灰盒测试的优缺点。
★几个基本概念
首先,把一些基本概念,简单通俗地说一下。如果觉得俺解释得不够好,不够细,可以自己去查维基百科的词条:洋文的在“这里 ”,中文的词条在“这里 ”(可惜中文词条不够全,偏偏缺了“灰盒测试”这一节)。
◇黑盒测试
通俗来说:黑盒测试不关注软件内部的实现细节。他仅仅把被测试的软件当成一个整体来处理,只关注软件的外在表现,不关注内部细节。典型的黑盒测试,就是光拿着鼠标操作一下用户界面,看看功能是否满足要求。
◇白盒测试
白盒测试与黑盒测试相反,重点关注软件内部的实现细节(比如代码覆盖率等)。
◇灰盒测试
如果你是从事开发或者测试的行当,应该已经听过黑盒测试与白盒测试这2个概念。但对灰盒测试,或许比较耳生。单纯从名称上来看,灰盒测试是介于黑盒测试与白盒测试之间的一种测试方式。
这种测试方式,主要用于多模块构成的稍微复杂的软件系统。在灰盒测试中,重点关注软件系统的各个组成模块之间的互动。这里所说的"互动",包括模块之间的互相调用、数据传递、同步/互斥、等等。
◇灰盒测试与黑盒测试的区别
如果某软件包含多个模块,当你使用黑盒测试时,你只要关心整个软件系统的边界,无需关心软件系统内部各个模块之间如何协作。而如果使用灰盒测试,你就需要关心模块与模块之间的交互。这是灰盒测试与黑盒测试的区别。
◇灰盒测试与白盒测试的区别
但是,在灰盒测试中,你还是无需关心模块内部的实现细节。对于软件系统的内部 模块,灰盒测试依然把它当成一个黑盒来看待。而白盒测试则不同,还需要再深入地了解内部 模块的实现细节。所以,这是灰盒测试与黑盒测试的区别。
◇灰盒测试与单元测试的区别
刚才看到有网友在评论中问到此问题,俺补充一下。
首先,在进行单元测试时,需要写一些测试代码(行话叫“桩代码”,洋文叫stub)。通常测试代码和被测试代码通常是同种语言(比如Java的单元测试通常也用Java来写),且测试代码和被测试代码的耦合很紧密。因此,单元测试通常由开发人员来完成的,测试人员的能力未必能胜任。
其次,单元测试的颗粒度会更细(会细到类一级、函数一级),而灰盒测试仅仅到模块一级。