二、设计方法
世界上不存在一组黑盒测试用例能将软件逻辑测试完全,就像不存在没有bug的软件一样。我们不可能进行穷举测试,为了保证软件产品的敏捷开发、快速迭代和通过,至少测试不能给敏捷开发拖后腿,就必须要从大量的可测数据中精选出有代表性的测试数据来安排测试。
什么是测试用例:引自清华大学出版社出版的《软件评测是教程》中解释:“所谓的测试用例设计就是将软件测试的行为活动,作一个科学的组织归纳。”
·测试用例的好处有:
(1) 将测试行为转换为可管理的模式,将其量化有助于管理层掌握测试过程;
(2) 在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率;
(3) 测试用例的执行令软件测试的实施重点突出、目的明确;
(4) 在软件版本更新后,只需要修正少量测试用例,配合敏捷开发;
(5) 便于验证变更。测试用例是设计一个操作,使软件产品在此操作下可得到预期结果。如此用例发现bug,经过提交至跟踪管理系统及开发同事解决问题后,使用同一个用例进行变更验证,确保该bug已修改完成。
尽量避免测试的随意性。软件测试是有组织、有计划、有步骤的活动,要严格按照测试计划进行,要避免测试的随意性。
·具体黑盒测试用例设计方法包括:
已掌握:等价类划分方法、边界值分析方法、错误推测方法——结合实践讲解。
已理解:因果图方法、判定表驱动方法、正交试验设计法、场景法——讲解原理。
未掌握:功能图法(状态迁移图,流程法)——暂不讲解。
1.等价类划分方法
等价类是集合中的概念,我们理解为选取每类的代表元素来降低问题的复杂度,等价类划分就是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。同一类中的用例发现bug的能力是一致的,即测试某等价类的代表值就等于对这一类其他值的测试。等价类划分的目标是在仍然足以满足软件测试需求的前提下,把可能的测试用例组合缩减到最小。仔细阅读需求规格说明书的各项需求,特别是功能需求。把说明中对输入的要求和输出的要求加以分解。
(1) 划分等价类和列出等价类表
等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。等价类的划分答案不唯一。等价类划分有两种不同的情况:有效等价类和无效等价类。
有效等价类:指对于程序的规格说明来说是合理的、有意义的输入数据结构的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类:指对于程序的规格说明来说是违法的输入数据结构的集合。利用无效等价类可检验程序是否可以经受意外的考验。
设计原则:
① 1+2在输入条件规定了取值范围,取一个有效等价类和两个无效等价类。例如:新建联系人姓名要求字符长度1~980个中文字符,有效等价类取500,无效等价类取0和981。
② 1+1在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,取一个有效等价类和一个无效等价类。例如:更改SIM卡PIN码时输入旧SIM卡PIN码,有效等价类为输入正确密码,无效等价类为输入错误密码。
③ 1+1在输入条件是一个布尔量的情况下,取一个有效等价类和一个无效等价类。例如:新建联系人头像,有效等价类为拍照确认,无效等价类为拍照取消。
④ n+1在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。例如:将本地图库中的图片设置为联系人头像,有效等价类有jpg/gif/png/bmp格式的图片,无效等价类有raw格式的图片。
⑤ 1+n在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。例如:联系人添加电子邮件,有效等价类为“注册时的用户名@提供邮箱注册的网站域名地址”,无效等价类为各种违法字符串组合。
等价类确立后,建立等价类表,如下所示:
(2) 生成测试用例:
① 为每个等价类规定一个唯一的编号;
② 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖;
③ 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使得所有无效等价类均被覆盖。
感兴趣的同学可以进一步查看等价类划分法例题:
(3) 点评:
① 等价类测试比较适用于输入数据以离散值区间和集合定义的函数;
② 不论系统是否是应用强类型语言编写,进行健壮形式的测试是非常有必要;
③ 当输入变量之间存在依赖关系,等价类测试会产生很多“错误”用例;
④ 等价类的确定是不确定的,有时是不完美的;
⑤ 当与其他测试技术相结合时,等价类测试可以得到加强和补充