软件测试——动态黑盒测试

摘要:
本文主要介绍动态黑盒测试。动态黑盒测试被比喻为带着眼罩测试软件,是软件测试基础知识之一。这是软件测试基础的第二篇。

动态黑盒测试是什么?


  • 不深入代码细节测试软件的方法,称为动态黑盒测试。它是动态的,因为程序在运行,软件测试员像用户一样使用它。同时它是黑盒子,因为测试时不知道程序如何工作。程序员输入数据,接受输出检验结果,动态黑盒测试常常被称为行为测试,因为测试的是软件在使用过程的实际行为。
  • 有效的动态测试需要关于软件行为的一些定义,好的产品说明书,会提供这些细节信息。也就是说,我们不需要了解软件“盒子”内发生的事情,只要通过需求文档或者产品说明书,就可以了解输入a输出b或执行操作c得到结果d。当我们清楚的了解被测试软件的输入和输出之后,我们就可以开始定义测试用例。
  • 选择测试用例是软件测试员最重要的一项任务。不正确的选择可能导致测试量过大或者过小,甚至测试目标不对,准确评估风险,把无穷尽的可能性减少到可以控制的范围是成功的诀窍。

软件测试的两种基本方法


  • 软件测试有两种基本方法,通过性测试和失效性测试
  • 通过性测试,是确认软件至少能做什么,而不考验其能力,软件测试员仅仅运行最简单、最直观的测试用例。在设计和执行测试用例时,总是首先进行通过性测试。
  • 失效性测试或错误强制测试,是纯粹为了破坏软件而设计和执行的测试用例。这种测试是在确信软件在普通情况下能正确运行之后才采用的。

如何通过等价类划分减少测试测试用例的数量


  • 选择测试用例的方法是等价类划分,有时称为等价划分。等价类划分是指分步骤,把海量、无限的测试用例集减得很小,但过程同样有效。
  • 在寻找等价划分时,考虑把软件具有相似输入,相似输出,相似操作的分在一组,这些组就是等价划分。
    • 数据测试
  • 对数据进行软件测试,就是在检查用户输入的信息,返回的结果以及中间计算结果是否正确。
  • 进行数据测试的关键原则
    • 测试边界条件
    • 测试次边界条件
    • 测试空值
    • 测试无效数据

边界条件:


  • 如果软件能在其边界运行,那么在正常情况下就应该不会有什么问题。因为编程从根本上说在边界上容易产生问题,边界条件是特殊情形。
  • 技巧 提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。
  • 缓冲区溢出是由边界条件缺陷引起的,它是造成软件安全问题的头号原因。

次边界条件


  • 次边界条件或者称为内部边界条件,这些边界,在软件的内部,最终用户几乎看不见,但是软件测试员必要进行检查。
  • 寻找这样的次边界,确实要求大体了解软件的工作方式。软件测试员应和开发小组的程序员交流,看看他们能否对其他的,应该测试的是边界条件提供建议。

默认,空白,空值,零值和无


  • 一定要考虑建立处理默认值,空白,空值,零值,或者无输入单条件的等价划分

垃圾数据


  • 这是失效性测试的对象。
  • 这类测试没有实际的规则,只是设法破坏软件。

状态测试


  • 软件状态是指软件当前所处的条件或者模式。
  • 软件测试的另一方面是通过不同的状态验证程序的逻辑流程。这就是状态测试。
  • 状态测试的难点跟数据测试的难点是类似的。除了极其简单的程序之外,基本上不可能走遍所有的分支,到达所有的状态。
  • 因此做软件测试的时候,解决方法是运用等价划分技术选择状态和分支。
  • 建立状态转换图
    • 状态转换图应该包括,软件可能进入的每一种独立状态;从一种状态转入另一种状态所需要的输入和条件;进入或者退出某种状态时的设置条件及输出结果。

减少要测试的状态及转换的数量的方法


  • 每种状态至少访问一次
  • 测试看起来是最常见和最普通的状态转换。这个听起来很主观,可以通过静态黑盒子分析时收集到的信息,试图寻找用户真正常用常见的状态转换。
  • 测试状态之间最不常用的分支。这些分支是容易被产品设计者和程序员忽略的,软件测试员,也许是第一个测试他们的人。
  • 测试所有错误状态,及其返回值。
  • 测试随机状态转换。

失败状态测试


  • 进行失败状态测试时可以考虑竞争条件和时序错乱。因为当今大多数操作系统,都具备多任务执行能力,因此,软件总会面临着竞争。比如说两个成不同的程序同时保存它打开同一个文档;共享同一台打印机通信端口,或者其他外围设备;让软件处于读取或者改变状态时,按键或者单击鼠标;同时关闭或者启动软件的多个实例,同时使用不同的程序访问共同的数据库等等。
  • 另外三个时效性状态测试是重复,压迫和重负。重复测试是不断执行同样的操作,最简单的是不停的重启而关闭程序,还可以反复读写数据或者反复选择同一个操作。进行这种反复测试的主要原因是检测是否存在内存泄漏。如果以前使用的某个程序在开始启动时,工作状态良好,但随后变得越来越慢,或者经过一段时间就表现不稳定,原因可能是内存泄漏缺陷。压迫测试是使软件,在不够理想的条件下运行,内存小、磁盘空间少、CPU运行速度慢、调制解调器速率低的等,观察软件对外部资源的要求和依赖的程度。压迫测试,就是将支持降到最低限度,目的在于尽可能地限制软件的必要条件。重负测试与压迫测试相反,压迫测试是尽量限制软件,重负测试是尽量提供条件任其发挥,让软件处理尽可能大的数据文件。如果软件对打印机或者通信端口之类的外设进行操作,就把能连的都连上,如果正在测试的英特尔服务器,可以处理1000个并发连接,就按他说的做,最大限度地发掘软件的能力,让他不堪重负,同时不忘记,时间也是一种重负测试。

  • 一些压迫测试和重负测试的情景是手工操作不可能完成的,因此,我们需要将测试自动化。这部分在测试自动化中再讲。