黑盒测试方法是根据软件产品的功能设计规格说明,通过运行程序进行测试,证实每个已经实现的功能是否符合设计要求。黑盒测试完全不考虑程序的内部结构,只是需要软件产品的设计文档,通过有效的方法设计测试用例。由于黑盒测试不可能使用所有可以输入的数据,因此只能从中选择一部分数据进行测试。

等价类划分
  等价类划分是一种典型的黑盒测试方法。等价类是指测试相同目标或者暴露相同错误的一组测试用例,等价类划分是将数量巨大的输入数据(有效的和无效的)划分成若干等价类,在每一个等价类中选取一个代表性的输入数据作为测试的输入条件,通过这些少量代表性测试数据覆盖整个输入数据集合,取得良好的测试效果。
  使用等价类划分方法设计测试用例时,需要同时考虑有效等价类和无效等价类的设计。有效等价类是由那些对于软件设计规格说明来说合理的、有意义的输入数据所组成,它可以检测软件是否实现了规格说明所规定的功能和性能。无效等价类是由那些对于软件设计规格说明来说不合理的、无意义的输入数据所组成,它可以检测软件中的功能和性能是否存在不符合规格说明的情况。
  等价类划分的目的是将可能的测试用例组合减少到仍然足以测试软件的控制范围,这种划分具有风险性,一定要仔细选择分类。对于初涉软件测试者,一定要请经验丰富的测试人员审查所划分的等价类。
  例1:一个程序计算任何一个在1~1000内整数的平方数,那么其输入项的等价类划分为

  例2:Windows文件名可以包含255个字符,但不能包含正斜杠(/)、反斜杠(\)、大于号(>)、小于号(<)、星号(*)、问号(?)、引号(")、竖线(|)、冒号(:) 或分号(;)等字符,那么文件名的等价类划分为

输入条件
有效等价类
无效等价类
字符个数 1~255个 0个,≥256个
文件名组成 含合法字符 含非法字符

 

边界值分析
  长期的测试经验显示,软件错误一般不是发生正常的输入范围内,却常常发生在输入或输出的边界上。因此,针对各种边界情况的测试是十分重要的。
  使用边界值分析方法设计测试用例时,首先要确定边界情况,通常输入等价类和输出等价类的边界,就是应该着重测试的边界情况。选择测试用例时,一定要选择临近边界的合法数据,即最后一个可能合法的数据,以及刚刚超过边界的非法数据。
  例1:如果文本编辑框允许输入1~255个字符,那么可以选取合法输入为1个字符和255个字符,非法输入为0个字符和256个字符。
  例2:如果一个文本编辑框只接受字母输入A~Z和a~z,那么非法输入应该选择ASCII码表中这些字符前后的字符@、[、{等。
状态测试
  软件测试有时需要通过不同的状态验证程序的逻辑流程,这时需要从用户的角度建立状态转换图,然后根据以下原则选择相应的测试用例。
  (1) 每一种状态至少访问一次;
  (2) 测试看起来最常见最普遍的状态转换;
  (3) 测试状态之间最不常用的分支;
  (4) 测试所有错误状态及其返回值;
  (5) 测试随机状态转换。

图5.2 状态转换图示例

  举例:对于接受用户输入口令,可以绘制如图5.2所示的状态转换图,其中包含空闲和等待输入两个状态。设计测试用例时,从最初的空闲状态开始,合法输入是按下"ESC"键,非法输入是按下除"ESC"以外的其他任何键,可以选择ASCII表"ESC"字符前后的字符。在等待输入状态,利用等价类划分方法设计有效等价类和无效等价类,并选择相应的测试用例。

失败条件测试
  前面的测试都属于通过测试,包括审查软件、描绘状态、尝试各种合法可能性、确认状态及其转换正常。与之相反的做法是找到测试软件失败的用例,主要有竞争条件、重复、压迫和重负。
  许多软件都是运行在多任务或多进程的环境下,因此软件设计必须能够与其他任何软件在系统中同时运行,并且共享内存、磁盘、通信设备以及其他硬件资源,这些都可能导致竞争条件问题。
以下是面临竞争条件的典型情形:
  * 两个不同的程序同时保存或打开同一个文档;
  * 共享同一台打印机、通信端口或者其他通信设备;
  * 当软件处于读取或者修改状态时按键或者单击鼠标;
  * 同时关闭或者启动软件的多个实例;
  * 同时使用不同的程序访问一个共同数据库。

  重复测试是不断执行同样的操作,如不停地启动或关闭程序、反复读写数据或者选择同一个操作。这种测试的主要原因是查看内存是否不足,往往一些操作执行完之后内存没有完全释放,结果是程序越来越慢,最终耗尽其工作的内存空间。
  压迫测试是使软件在不够理想的条件下运行,如内存小、磁盘空间少、CPU速度慢、网络速度低等,观察软件对外部资源的要求和依赖程度。压迫测试将支持降到最低限度,目的在于尽可能地限制软件的必要条件。
  重负测试与压迫测试相反,它是尽量提供条件尽量发挥,让软件处理尽可能大的数据文件。如果软件对打印机或通信端口之类的外设进行操作,则将能连的外设都连上。如果正在测试的Internet服务器可以处理几千个模拟连接,则最大限度地挖掘软件的能力,让其不堪重负。另外,时间也是一种重负测试,有些软件应该能够永远运行下去,而不用重新启动。
  重复、压迫和重负测试应联合使用,同时进行。

错误推测法
  人们可以凭借经验、直觉和预感测试软件中可能存在的各种错误,从而有针对性设计测试用例。根据经验积累和直觉判断,列出软件中所有可能存在的错误和容易发生错误的情况,针对这些情况选择测试用例。
  例如:测试一个排序程序,可以选择输入空的值、输入一个数据、所有输入数据均相等、所有输入数据有序排列、所有输入数据逆序排列等进行错误推测。