(4)简化判定表(可选)。
简化判定表用于将相似规则进行合并,以简化测试用例。当然,它是以牺牲测试用例充分性为代价的。
简化的过程为:找到判定表中输出完全相同的两列,观察它们的输入是否相似,例如,如果只有一个输入不同,说明不管该输入取何值,输出都是一样的,也就是说,该输入对输出的结果没有影响,因此可以将这两列合并为一列。
图1-6展示了把两条规则简化为一条规则的示例。
▲图1-6 把两条规则简化为一条规则
(5)生成测试用例。
简化后的判定表的每一列可以作为一个测试用例,它的输入和输出都已经非常明确。
3.案例1-5
若用户欠费或停机,不允许其呼入/呼出。判定表如表1-11所示。
表1-11 案例1-5的判定表
其中表1-11的1~4列中的每一列就是一条规则。
针对该判定表,可以化简,规则1和规则2的动作完全相同,条件桩中只有条件2的取值不同,因此可将规则1、规则2合并。化简后的结果如表1-12所示。每条规则对应一条测试用例,这样一共有3条测试用例。
表1-12 案例1-5中判定表的化简
4.案例1-6
关于订购单的检查如下。
如果金额大于500元且时间又未过期,则发出批准单和提货单;如果金额大于500元且时间过期了,则不发出批准单;如果金额小于或等于500元,则不论是否时间过期都发出批准单和提货单,在时间过期的情况下还需要发出通知单。
请用判定表法对测试用例进行设计。
(1)生成判定表,如表1-13所示。
表1-13 案例1-6的判定表
(2)合并相似规则,如表1-14所示。如果用例数不多,不建议合并(因为合并存在漏测的风险,一个显然易见的原因是,虽然某个输入条件在输出接口上是无关的,但是在软件设计上,内部针对这个条件选择了不同的程序分支)。
表1-14 案例1-6中判定表的合并
5.实际应用
从以上案例可以看出,判定表法主要用于功能需求中的逻辑处理过程,处理过程越复杂,越有必要使用判定表法。考虑到控制系统以及游戏的处理过程比较复杂,因此判定表法在控制系统和游戏的测试中应用较多。
对于典型的控制系统 ,如平常上下楼的电梯,电梯的运动比较复杂,在各层按选层按钮都会影响电梯的运动,因此可以采用判定表法进行用例设计。下面仅列出判定表中包含的条件和动作。
电梯一般有十几层,高的有几十层,但这样考虑测试会非常复杂,因此可以将电梯进行简化,简化成一个3层的电梯。对于该电梯,在1层只能按“上”按钮,在3层只能按“下”按钮,在2层“上”“下”按钮都可以按。为了更好地确定条件和动作,可以先确定动作,然后分析影响这些动作的因素,就可以得到所有的条件。
电梯的动作很好确定,有3个动作。
电梯上。
电梯下。
电梯厢门打开。
哪些因素会影响电梯的动作呢?通过分析可以得到:
1层的按钮(按“上”或者不按,有两个条件项);
2层的按钮(按“上”“下”或者不按,有3个条件项);
3层的按钮(按“下”或者不按,有两个条件项);
电梯所在楼层(1层、2层或3层,有3个条件项);
电梯状态(电梯上、电梯下或者电梯停,有3个条件项)。
如果只考虑外部按钮对电梯的影响,可以得到5个条件、3个动作,对应的全排列组合有2×3×2×3×3=108个。在这108个排列组合中有不少组合是无效的,比如电梯所在楼层为1层与电梯状态为“下”是冲突的,这样针对这108个组合可以进行大量化简,然后根据化简后的判定表来得到测试用例。
对于扫雷游戏,具体游戏界面如图1-7所示。
▲图1-7 扫雷游戏界面
扫雷游戏测试的一个重点在于各种游戏规则的测试(比如,用户单击,结果不小心点在一颗地雷上,这样游戏就会结束)。当针对这些游戏规则进行测试时,可以忽略雷区上面的雷数显示、笑脸、计时等。考虑到游戏规则比较多而且比较复杂,可以使用判定表法。列出所有可能的游戏规则,规则的前半部分就是条件,后半部分就是动作。比如,根据前面提到的规则,会得到条件为单击,方块下有地雷,动作为游戏结束。经过这种分析后可以得到如下条件。
方块为白色。
方块通过红色的数字1标识地雷。
方块标识问号。
方块显示灰色数字。
单击。
右击。
当前方块是地雷。
动作如下。
方块为白色。
方块标识地雷。
方块标识问号。
方块显示灰色数字。
游戏失败。
未标识方块闪烁(同时按鼠标左右键时会出现)。
确定了条件和动作,就可以进行判定表的化简,从而得到测试用例。这里主要用于演示,因此并未测试扫雷游戏的所有游戏规则。
6.练习
练习1-4 针对以下需求,利用判定表法进行测试用例设计。
如果想对文件进行修改,输入的第1列字符必须是A或B,第2列字符必须是数字。如果第1列字符不正确,则给出信息L;如果第2列字符不正确,则给出信息M。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。