6.4.2 按测试方法分类
(1)白盒测试(White-box Testing)。白盒测试又称结构测试或逻辑驱动测试,指通过对程序内部结构的分析、检测来寻找问题。白盒测试把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是正确的,检查软件的内部动作是否按照设计说明的规定正常进行。
软件人员使用白盒测试方法,主要想对程序模块进行检查,包括对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性;等等。
(2)黑盒测试(Black-box Testing)。黑盒测试又称功能测试或数据驱动测试,指通过软件的外部表现来发现缺陷和错误。黑盒测试把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
黑盒测试方法主要是为了发现如下问题,比如是否有不正确或遗漏了的功能?输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?因此,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,检查程序是否都能产生正确的输出。
任何工程产品都可以使用以下两种方法之一进行测试。
①已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经经过检查。
②已知产品的功能设计规格,可以通过测试证明每个实现了的功能是否符合要求。(https://www.daowen.com)
前者是白盒测试,后者是黑盒测试。表6.2给出了两种方法的一个基本比较。
表6.2 白盒测试与黑盒测试的比较

如表6.2所示,白盒测试和黑盒测试各有侧重点,不能相互取代,在实际测试活动中,这两种测试方法不是截然分开的。通常在白盒测试中交叉着黑盒测试,黑盒测试中也交叉着白盒测试。相对来说,白盒测试比黑盒测试成本要高得多,它需要测试在可以被计划前产生源代码,并且在确定合适数据和决定软件是否正确方面需要花费更多的工作量。
在实际测试活动中,应当尽可能使用可获得的软件规格从黑盒测试方法开始测试计划,白盒测试计划应当在黑盒测试计划已成功通过之后再开始使用已经产生的流程图和路径判定。路径应当根据黑盒测试计划进行检查,并且决定和使用额外需要的测试。
(3)灰盒测试(Grey-box Testing)。灰盒测试是介于白盒测试和黑盒测试之间的测试方法,它关注输出对于输入的正确性,同时也关注内部表现,但是不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件和标志来判断内部的运行状态。有时候输出是正确的,但是程序内部已经是错误的,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此,可采取灰盒测试这种方法。
灰盒测试结合了白盒测试和黑盒测试的要素,考虑了用户端、特定的系统知识和操作环境。它在系统构件的协同性环境中评价应用软件的设计。我们可以认为,集成测试就是一类灰盒测试。关于灰盒测试,本书不再展开叙述。