回复: [分享]软件测试经验与教训
路径测试(path testing) 。一条路径包含测试员所执行的所有步骤,或程序为了得到正确状态所通过的所有语句。路径测试包括测试通过程序的很多路径。通过非平凡程序的所有路径是不可能的。因此,有些测试员进行子路径测试(subpath testing),测试很多部分路径。例如,基本路径测试(basis-path testing)包括测试一定类型(基本路径)的大多数或全部假设,这里采用的假设是如果测试了所有基本路径,那么几乎没有更长的路径会找出这些测试所遗漏的问题。
语句与分支覆盖率(statement and branch coverage)。如果测试执行了程序中的所有语句(或代码行),则达到100%的语句覆盖率。如果执行了所有语句和一个语句到另一个语句之间的所有分支,则达到100%的语句和分支覆盖率。设计自己的测试,达到高的语句与分支覆盖率,有时叫做“基于覆盖率的测试(coverage-based testing)” 。(达到覆盖率目标后,可以停止测试,或停止设计更多的测试) 。把它叫做语句与分支覆盖率,是为了与关注其他类型覆盖率的测试相区别。配置覆盖率就是一个很好例子,这种手段执行同一条语句很多次,但是潜在产生非常不同的结果。其他例子还有很多很多(Kaner 1995a) 。关注达到高语句与分支覆盖率的测试往往遗漏很多类型的问题,例如(但不限于)与以下因素有关的程序错误:遗漏代码、边界值处理不正确、时序问题、硬件和软件配置兼容件问题,诸如指针越界、内存泄漏或栈破坏等最终导致栈溢出的滞后暴露问题、可使用性问题,以及其他方面没有满足客户需求的问题。这种手段在标识不完备测试方面(哪些代码还没有侧试过)要更有价值得多,而不是在所需测试量的最低标准方圆。的确,让测试员停止测试只是因为达到了X%的覆盖率,这样做很危险(Marick 1999) 。
配置覆盖率(configuration coverage) 。如果必须测试100台打印饥的兼容性,并且已经测试了10台,就达到10%的打印机覆盖率。更一般地,配置覆盖率度量测试员已经运行(并且程序已经通过)的配置测试占计划运行的配置测试总数的百分比。为什么要把它叫做测试手段?一般我们只是将它看作是已经完成了多少一定类型测试的度量。但是,有些测试员完成的一系列特殊测试,可以更快、更容易地完成大量配置测试。对于他们来说,优化工作以达到高的覆盖率,是一种测试手段。
基于规格说明的测试(specification-based testing) 。这种测试关注验证在规格说明中所做的有关产品的每个事实声明。(事实声明是可以用真或假表示的任何语句。)常常包括手册、市场开发文档或广告、技术支持人员寄给客户的印刷品中的所有声明。
基于需求的测试(requirements-based testing) 。测试关注证明程序满足需求文档中的所有需求(或关注逐个需求地证明某个需求没有被满足。)
组合测试(combination testing) 。相互组合测试两个或更多变量。本章最后的“测试手段附录”还要讨论这个问题。组合测试很重要,但是很多测试员对这种测试研究得还很不够。通过程序得到的大部分好处都基于很多变量的交互。如果不在测试中一起改变这些变量,就会遗漏由不同的组合(而不是不同的单个取值)触发的错误。