第4章 测试用例的设计
除了第2章探讨的软件测试的心理学问题以外,软件测试中最重要的因素是设计和生成有效的测试用例。
然而,无论软件测试进行得如何具有创造性、如何完全,也不能保证软件中不存在任何错误。测试用例的设计如此重要,原因在于完全的测试是不可能的,对任何程序的测试必定是不完全的。那么,最显然的测试策略就是努力使测试尽可能完全。
由于时间和成本的约束,软件测试的最关键问题是:
在所有可能的测试用例中,哪个子集最有可能发现最多的错误?对软件测试用例设计方法的研究为这个问题提供了答案。
一般而言,在所有的方法中效率最低的是随机输入测试,即在所有可能的输入值中随机选取某个子集来对程序进行测试的过程。就发现最多错误的可能性而言,随机选取而产生的测试用例集很少有可能是理想的或接近理想的子集。在本章中,我们将提出一套思考过程,该过程有助于更加睿智地选取测试数据。
本书第2章已经证明穷举的黑盒和白盒测试通常都是不可能的,但同时也建议:将这两种测试的要素组合起来得到一种合理的测试策略。本章将对这种策略进行研究。我们可以通过使用特定的面向黑盒测试的测试用例设计方法,而后使用白盒测试方法对程序的逻辑结构进行检查以补充这些测试用例,借此来设计出一个相当严格的测试。
本章将要讨论的测试方法如下:
黑盒测试
白盒测试
等价类划分
语句覆盖
边界值分析
判定覆盖
因果图分析
条件覆盖
错误猜测
判定/条件覆盖
多重条件覆盖
尽管上述方法将分开来进行讨论,但我们建议综合最多的(如果不能是全部的话)测试方法来设计严格的程序测试,因为每一种测试方法都有其独特的优势和弱点。举例来说,某种方法遗漏掉的错误,而用其他的方法就可能找出来。
没有人曾承诺说:软件测试会是容易的事。引用一位智者的话,“如果你觉得设计和编写程序很困难,你就并非一无所知”。
我们推荐的步骤是先使用黑盒测试方法来设计测试用例,然后视情况需要使用白盒测试方法来设计补充的测试用例。下面首先讨论较为有名的白盒测试方法。