本节书摘来自异步社区《软件测试技术实战:设计、工具及管理》一书中的第2章,第2.1节运用等价类/边界值设计测试用例,作者顾翔,更多章节内容可以访问云栖社区“异步社区”公众号查看。
第2章 传统的软件测试的设计方法
软件测试技术实战:设计、工具及管理
从本章开始介绍软件测试的各种设计方法,这是学习软件测试的重要内容。
一般来说,软件测试设计方法分为5类:传统的黑盒测试方法、基于质量的测试方法、基于风险的测试方法、基于经验的测试方法以及白盒测试方法。本章主要介绍传统的黑盒测试方法和白盒测试方法,共分7节。
5种黑盒测试方法如下。
- 等价类/边界值。
- 决策表。
- 状态转换图。
- 决策树。
- 正交法。
7种白盒测试的方法如下:。
- 语句覆盖。
- 分支覆盖。
- 条件覆盖。
- 判定/条件覆盖。
- MC/DC覆盖。
- 路径覆盖。
- 控制流测试。
最后分析测试用例设计中几个错误观点。
基于质量的测试方法请参看1.1.9软件测试类型,本书中量的测试方法参看第1.1.9节软件测试类型,本书不再进行深入的介绍行深入介绍;基于风险的测试方法将在第四章进行介绍在第4章介绍;基于经验的测试方法将在第三章进行介绍。另外关于软件测试在第3章介绍。另外,关于软件测试的设计,读者可以参考参考文献【5】、【13】进行深入的学习行深入学习。
2.1 运用等价类/边界值设计测试用例
通过等价类/边界值法设计软件测试用例是测试用例设计的最基本的方法。这两种方法密不可分。下面先介绍“等价类分析法”。
2.1.1 等价类
等价类是指软件测试对象的某个参数输入域的子集合。在该子集合中,各个输入数据对于识别软件测试对象中的缺陷是等价的。只要测试等价类的某一个代表值,就可以认为覆盖了该等价类所有其他值的软件测试。
等价类的划分
是把软件测试对象的输入域划分成若干部分,然后从每一部分中选取少数具有代表性的数据,作为测试用例输入数据的测试用例设计技术。
等价类的两个假设
(1)软件测试对象等价类中任意一个代表值没有发现缺陷,则认为等价类内其他值也不能发现缺陷。比如等价类为【0~5】,如果测试数据4没有发现缺陷,那么测试数据1也不可能发现缺陷。
(2)软件测试对象等价类中任意一个代表值可以发现缺陷,则认为等价类内其他值也都可以发现缺陷。比如等价类为【0~5】,如果测试数据4发现缺陷,那么测试数据1也肯定能发现缺陷。
有效等价类与无效等价类
(1)有效等价类:对于软件测试对象而言,有效等价类指的是合理的、有意义的数据构成的集合。
(2)无效等价类:对于软件测试对象而言,无效等价类指的是不合理的、没有意义的数据构成的集合。
案例2-1:等价类的分类。
通过表2-1来看各种类型的数据是如何通过等价类进行分类的。
下面再介绍一下“边界值分析法”。
2.1.2 边界值
边界值分析是对输入或输出的边界值进行软件测试的一种测试方法。通常,边界值分析法作为对等价类划分法技术的补充。这种情况下,其测试用例来自等价类的边界。由于程序员在开发时在边界区域比较容易犯错误(如原本应该为a<100,却写成a≤100),所以边界值测试法就显得非常重要。由于边界值是随着等价类出现的,所以边界值可以分为有效等价类的边界值和无效等价类的边界值。
边界值分析的步骤如下:
(1)识别软件测试对象中的参数等价类;
(2)识别每个等价类的边界值;
(3)创建边界值的相关测试用例;
(4)定义边界值分析技术的覆盖率。
案例2-2:边界值的设计法。
基于表2-1,来看各种情况的边界值如何划定,见表2-2。
2.1.3 基于输出的等价类/边界值划分
等价类/边界值除了可以以输入进行分类,也可以以输出进行分类,如案例2-3所示。
案例2-3:公园门票规定:
- 身高1.2m以下的儿童免票;
- 身高1.2~1.4m的儿童半票(含1.2m);
- 年龄在60~69岁之间的老人半票(含60岁);
- 年龄在70岁以上的老人免票(含70岁);
- 在校学生半票(不含在职学生、电大学生);
- 革命烈士家属、现役军人免票。
我们可以划分等价类为全票、半票和免票,见表2-3。
2.1.4 测试用例的设计
如果系统中有多处需要使用等价类设计的测试用例,对于有效等价数据类,可以在一个测试用例中使用;而对于无效等价类数据,在一个测试用例中只能出现一个。
案例2-4:等价类测试。
图2-1是用户信息输入的部分界面,针对这个界面设计测试用例。
这里性别也需要输入,只允许输入“男”和“女”。
对于有效等价数据类,设计测试用例如下。
(1)姓名:小明,年龄:0岁,性别:男。
(2)姓名:阿拉克拉姆,年龄:130岁,性别:女。
而对于无效等价类,如果设计的测试用例如下。
姓名:明,年龄:200岁,性别:男。
那么系统如果只报告了姓名有误,而没有报告年龄有误的信息,就无法知道年龄是否在程序中进行了有效性检验。也就是说,出现“缺陷屏蔽”,所以,对于无效等价类,测试用例应该细化如下。
(1)姓名:克,年龄:13,性别:男。
(2)姓名:阿拉克拉姆萨,年龄:13,性别:男。
(3)姓名:@ @,年龄:13,性别:男。
(4)姓名:小明,年龄:134,性别:男。
(5)姓名:小明,年龄:13,性别:中。
这样就可以看出:有效等价类的总个数为每个用例有效等价类个数的笛卡儿积(1×1×2=2);而无效等价类的总个数为每个用例有效等价类个数的和(1+1+3=5)。
另外,如果只要求测试等价类,而对边界值测试要求不高,在测试用例的设计中尽可能多地用到边界值。
案例2-5:由于边界值测试不完善带来的Bug。
这是我亲自遇到的一个案例。有一天我去上海某医院看病,由于手头现金没有带够,需要在医院的门口一台ATM机上取款,取款机上有一个提示,“一次取款不得多于¥2000,每天最多取5次”,于是我用我的借记卡准备取¥2000,系统却告诉我“已经超过一次取款的最大金额”,我感到很纳闷,于是改为¥1900,取款成功;作为测试工程师,我马上就意识到该系统中的边界值测试没有做好或者根本没有进行边界值的测试。
2.1.5 案例
案例2-6:日历等价类/边界值测试。
最后以一个案例作为本节的结束,如图2-2所示。
等价类/边界值测试法是最基本的测试用例设计方法,不管是函数级别的软件测试,还是系统级别的软件测试都可以使用。