1.等价类和边界值
对测试输入值按照测试效果进行划分,将测试效果相同的测试输入归为一个类,按这种方式得到的分类就叫“等价类”。
由于等价类中测试数据的输出是一样的,所以在测试的时候只需要在每个等价类中选择一些测试样本来进行测试就可以了,无须遍历测试所有的值。
而边界值是对每个等价类中的参数,选择输入的“边界”来作为测试样本,这样的选择策略是源于通过错误统计发现,问题更容易在边界值中出现。如果系统处理等价类的边界值时没问题,那么处理等价类中间的取值一般也不会有问题,这也是一个提高测试效率的方式。
一般来说,习惯将等价类和边界值放在一起使用:首先对输入进行等价类划分,然后将每个等价类的边界值作为测试的样本点。
例如,某参数A的取值范围为[1,10]。先按照等价类将这个参数划分为有效等价类和无效等价类两类。
然后使用边界值来为每个等价类选择测试样本点。
这样在测试的时候,只需使用1、10、0、11这几个值作为输入即可。
等价类和边界值是最为经典的测试思想,Glenford J.Myers的著作《软件测试的艺术》,在1979年出版第一版时就对此进行了详细描述。但等价类和边界值在实战中却很容易出问题——没有正确划分等价类、过度划分等价类都会造成严重的测试遗漏,留下测试隐患。建议测试架构师在进行测试方案或测试用例评审时,着重检查团队(特别是缺乏经验的团队)的等价类划分情况,保证测试设计的质量。
2.使用等价类分析表来建模
等价类分析表是一张“分析数据在××条件下,有哪些有效输入和无效输入的表”。
接下来以“WiFi上可以修改WiFi网络的默认名称”为例,使用等价类分析表来进行测试建模。
“WiFi上可以修改WiFi网络的默认名称”包含的测试点,为测试点3建立等价类分析表,确定有效等价类和无效等价类。
先来分析有效等价类。对“系统能够允许的网络命名”来说,主要包含两个因素:名称的长度和命名规则。“名称长度”的有效等价类为“名称长度在1~10个字符之间,且只包含字母、数字和下划线”;无效等价类包含“名称长度为空(小于1个字符)”“名称长度大于10个字符”“名称中包含除了下划线之外的特殊符号”“名称中包含了中文字符”。
再考虑将测试点1和测试点2作为测试点3的测试条件,得到等价类分析表。
容易发现,在两种条件下,测试点3的有效等价类和无效等价类都是一样的,对应的输出也是一样的。因此我们可以对两个条件进行“策略覆盖”,把有效等价类和无效等价类分配到不同的测试条件中,对等价类分析表进行合并简化。
等价类分析表等价类分析表几个需要特别注意的地方。
1)可以将相关性强的有效等价类放在一起来减少测试用例。
2)不能合并无效等价类。
对无效等价类而言,必须是针对单个因素的,不能合并。比如,不能合并了“名称长度大于10个字符”和“包含除了下划线之外的特殊符号”这两个无效等价类。
3.覆盖等价类分析表完成测试用例的生成
接下来可以使用边界值的方法,为分析出来的每个等价类选择测试数据,覆盖等价类分析表,完成测试用例的生成。
接下来继续以“WiFi上可以修改WiFi网络的默认名称”为例,在已经得到的等价类分析表的基础上,进一步得到“测试用例”。
参考等价类分析表,为表中的每个等价类来确定边界值。
有效等价类的取值
无效等价类的取值
将测试条件和测试输入值进行组合
将该表中的“测试条件+每一个输入值”作为一个测试用例。
4.根据经验补充测试用例
等价类边界值设计法本身也是一种非全面覆盖的测试设计方法,故难免会有遗漏。为了让测试更有效,可以根据经验再补充一些测试用例。
1)是否要在等价类中增加一些除边界值之外的测试数据?
2)有哪些地方是容易出问题的?是否还需要补充一些测试用例?
摘取自刘琛梅老师的《测试架构师修炼之道:从测试工程师到测试架构师 第2版》
网友评论