软件测试的艺术_读书笔记(三)

第二章 测试用例的设计

2.2 黑盒测试

2.2.1 等价划分

当测试某个程序时测试人员被限制在从所有的可能输入中找出用来测试的子集,找出的子集必须是正确的,并且是可能发现最多错误的子集。

精心挑选的测试用例子集 应该具备两个特征:

  1. 严格控制测试用例的增加,为了达到合理测试,每个测试用例都必须体现尽可能多的不同的输入情况,以使得最大限度的减少测试用例的全部用例数量
  2. 覆盖了大部分可能的测试输入,也就是说,使用这个特定集合某些错误就会发现,不使用这个特定的输入集合某些错误就会被遗漏掉。

为了满意以上两个特征,应该尽量将程序的输入范围进行划分,将其划分为有限数量的等价类,合理假设测试的每个等价类的代表性数据就等同于测试该类的其他任何数据。也就是说,如果等价类的某个测试用例发现了某个错误,该等价类的其他用例也应该能发现同样的错误。相反,如果测试用例没能发现错误,那么我们可以预计,该等价类中的其他测试用例也不会发现错误,且该等价类的的其他测试不会出现在其他等价类中。

等价类测试方法设计测试用例主要有两个步骤: 1. 确定等价类  2. 生成测试用例

确定定价类

确定等价类就是选取每一个输入条件,并将其划分为两个或更多的组,两个组的划分:有效等价类代表了有效的输入,而无效等价类代表了其他任何可能的输入(即不正确的输入值),这样遵循测试原则,测试人员要格外注意无效和未预料到的输入情况;

生成测试用例

使用等价类生成测试用例,过程如下:

  1. 为每一个等价类设置不同的编号
  2. 编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖
  3. 编写新的测试用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例覆盖

可以用单个测试用例覆盖多个有效等价类,这样可以减少用例的冗余,但是尽量用单个测试用例覆盖单个无效等价类,是因为某些特定的输入错误检查可能会屏蔽或者取代其他的输入错误检查。

确定等价类的例子

1.  输入条件的规定了一个取值范围1-999,那么有效等价类就是 1<=X<=999 ,两个无效的等价类就是X<1和X>999

2.  输入条件规定了取值个数,例如汽车可登记一至六名业车主,可以确定一个定价类和两个无效等价类(没有车主,车主多于6个)、

3. 输入条件规定输入的类型,每种类型就是一个有效等价类,如果可以输入多个,那么多个有效类型组合也是有效等价类,所描述的输入类型之外类型的都是无效等价类,如果可以输入多个,无效等价类和有效等价类的组合也是无效等价类;

4. 输入条件规定条件可能比较宽泛,需要确定等价的大类别,再细分小的等价类别。

等价划分方法比随机选取测试用例优越的多,但是仍有不足,这种方法忽略了某些特定类型的高效测试用例,下面介绍方法:边界值分析 ,弥补其中的不足

2.2.2 边界值分析

经验证明,考虑边界条件的测试用例与其他未考虑边界条件的测试用例相比,具有更高的测试回报率。所谓边界就是指输入和输出等价类中那些恰好处于边界、或超过边界、或在边界一下的状态。边界值分析方法与等价划分方法存在两方面的不同:

  1. 边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一次测试。
  2. 边界测试更多的需要考虑输出结果,从输出结果设计边界测试用例

边界值测试没有详细定义说明,但是提供一些通用指南:

  1. 如果输入条件规定了输入值范围,应该针对输入边界设置有效输入测试测试用例和刚刚越界的无效输入测试用例, 例如,输入条件的规定了一个取值范围1-999整数,那么设计测试用例就是1和999,0和1000四种测试用例。
  2. 如果输入规定了输入值的数量,那么就是应该针对最小输入数量、最大输入数量,以及比最大数量大一个,比最小数量小一个的情况设计测试用例
  3. 如说输入或输出是一个有序数列,应该考虑错误顺序录入和关注输出的第一个和最后一个序列。

边界值看似比较简单,但是实际工作中能够快速准确的定义边界,能够很快发现程序的错误,有些情况很有可能是开发人员没有考虑过的场景。重点是有些边界条件是会被忽略掉,不容易发现。

2.2.3 因果图分析

因果图分析是考虑输入与输出的逻辑关系,对输入的条件进行组合,按照逻辑关系,选择出测试用例, 但是实际工作中,这个因果图分析用的很少, 讲起来也是逻辑复杂,这里不再描述了。

2.3  总结

每一种测试方法都可以提供一组具体的测试用例, 但是都不能提供一个完整的测试用例集,合理的组合测试方法,最终会获得相对完整的测试用例。

要做到广泛而深入的测试并非易事,而最广泛的测试用例设计能够保证每一个错误都被曝光的机会。这意味着打算做进一步深入测试的团队,如果在测试用例设计和测试结果分析上投入了足够的时间,对于发现的问题能够及时解决,那么最终收的将是功能完善、可靠性高的软件。

猜你喜欢

转载自blog.csdn.net/LoveG_G/article/details/112233121