Ch 5. 戴上眼罩测试软件
本章描述最常用、最有效的软件测试技术,主要从黑盒测试的角度解释如何测试软件。
动态黑盒测试:戴上眼罩测试软件
不深入代码细节的测试方法是一种动态黑盒测试。
程序需要运行,软件测试员像用户一样使用它,因而是动态的;测试员不需要了解软件的内部结构,只需要关注软件的功能是否符合需求,这就是黑盒。
- 测试用例:进行测试时使用的特定输入、预期输出及测试的步骤。
永远牢记软件测试 第一条原则,完全测试程序是不可能的。
选择测试用例是测试 员最重要的一项任务。要准确评估风险,把无穷尽的可能性减少到可以控制的范围。
当采用大爆炸模式或边写边改模式时,能够供测试员参考的产品说明书可能并不完整或根本没有,这就需要测试员把软件本身当做产品说明书,开展 第四章 中的静态黑盒测试,一边了解软件的功能,一边再开展动态黑盒测试,较为系统地测试软件。
通过性测试和失效性测试
通过(Pass)和失效(Fail)是软件测试中最基本的两个结果。同样地,通过性测试和失效性测试是软件测试中最基本的两种测试方法。
- 通过性测试:测试软件是否符合需求,是否能够正常工作。重在检查正常情况下软件是否存在问题。
- 失效性测试(或错误强制测试):测试软件在异常情况下是否能够正常工作。重在检查软件是否能够容错。
总是应该先进行通过性测试,再进行失效性测试。
在用苛刻的极端条件测试软件前,测试员往往会发现软件在正常情况下就存在不少问题。
选择测试用例:等价类划分
等价类划分(Equivalence partitioning / classing)是一种常用的测试用例设计方法,它分步骤地将无限的测试用例缩减到有限的测试用例,却拥有等价的测试效果。
- 等价类:具有相同功能和特性的输入数据的集合,或是测试相同目标或软件缺陷的输入数据的集合。
- ⭐ 有效等价类:包含有效输入数据的等价类,用于通过性测试。
- ⭐ 无效等价类:包含无效输入数据的等价类,用于失效性测试。
划分等价类并没有固定的标准,取决于测试员对软件的理解和经验。
例如,测试员可能将某个功能的不同触发方式划分为数种等价类,而在对软件质量更有信心后,可能会将这些等价类合并。
也正是因为这种主观性,等价类划分也可能导致漏掉一些重要的测试用例。说到底,等价类划分仍然是一种不完全测试,不可避免地存在风险。
构造等价类后,应当从等价类中挑选典型的测试用例,保证有效等价类和无效等价类都能单独地覆盖。这就是说,不要选择两个等价类中的测试用例,因为这样的测试用例可能会导致测试结果的混淆。
数据测试
狭义的软件大体上可以分为两个部分:数据和程序(也就是处理数据的算法),由此测试也可以分为数据测试和程序测试。
数据测试所要面临的第一个难题就是数据的海量性——没错,第一原则 仍然在这里发挥作用——因此,开展等价类划分分而治之是必不可少的步骤。
下面给出一些常见的等价类划分原则,可以帮助测试员更好地构造数据测试用例。
选择测试用例:边界条件
边界条件是特殊情况。我们之所以选择边界条件,是基于以下的事实:编程从根本上就更容易在边界条件处出错。
这有点像归纳法的思想:如果一个程序在边界条件下能够正常工作,那么它在其他情况下也大概率能够正常工作。
边界条件类型
边界条件是指软件运行在计划操作界限的边界的情况。通常来说,下述特征属于边界条件:
- 第一个和最后一个;
- 最小和最大;
- 开始时和结束时。
- 空和满(注意不是非空,这是一般情况)。
- ……
考虑输入值的实际应用意义(例如数量、速度等)能够更快地找到边界条件。
想起一张 meme:
鸡兔同笼问题里算出共有 -1 只鸡的你 be like