1.5.1 白盒测试和黑盒测试
从哲学观点来看,分析问题和解决问题的方法有两种,即白盒方法和黑盒方法。所谓白盒方法就是能够看清楚事物的内部,即了解事物的内部结构和运行机制,通过剖析来处理和解决问题。如果没有办法或不去了解事物的内部结构和运行机制,而把整个事物看成一个整体—黑盒子,通过分析事物的输入、输出以及周边条件来分析和处理问题,这种方法就是黑盒方法。软件测试具有相似的哲学思想。根据是针对软件系统的内部结构,还是针对软件系统的外部表现行为来采取不同的测试方法,分别被称为白盒测试(White-box Testing)方法和黑盒测试(Black-box Testing)方法。
1.白盒测试
已知软件产品的内部工作过程,可以通过测试验证每种内部操作是否符合设计规格要求,以及所有内部成分是否经过检查。白盒测试的测试依据主要是开发阶段的概要设计文档与详细设计文档中的内容。这种方法是把被测试对象看作一个打开的盒子,测试人员依据程序内部的逻辑结构设计测试用例,以测试程序中的主要执行通路是否按照设计要求完成了正确的实现。例如,设计规格中明确了必须采用快速排序算法,而程序员在编码实现时采用的是冒泡排序算法,虽然从功能上正确地实现了排序功能,但这是一个实现与设计不一致的问题。白盒测试中的动态测试一般通过在程序结构的不同位置设置检查点,检查程序内部的变量状态、逻辑结构、运行路径等,判断实际结果是否与预期结果一致。白盒测试也称为结构测试或逻辑驱动测试。
2.黑盒测试
黑盒测试检查程序功能是否能按照规格说明书的规定正常使用、程序是否能适当地接收输入数据并产生正确的输出,以及程序能否满足各种外部状态的要求。黑盒测试的测试依据通常是开发阶段的研制总要求,以及软件需求规格说明书中的功能、性能等指标要求。黑盒测试将软件视为“黑匣子”,测试人员不需要知道编程细节,不关心软件设计和编码是如何实现的,只关心实现的结果是否满足规定的要求。黑盒测试不需要获得源代码,只需要获得可执行程序,关注软件应该做什么,而不关注它是如何做到的。黑盒测试中常用的测试用例设计方法有:等价类方法、边界值方法、决策树方法、因果图方法等。测试人员在程序接口进行测试,把利用这些方法设计好的测试数据作为程序输入,观察输出结果是否正确,检查程序功能是否被正确实现。黑盒测试也称为数据驱动测试。