7.3 判定表
判定表是分析和表达多种输入条件下系统执行不同动作的工具,它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确。适用于多种条件的组合。
由于多个条件会产生很大数量的组合,所以判定表法受限于需求的规模,另外如果条件有先后顺序,那么判定表也会受到局限。
7.3.1 概念
条件桩(Condition Stub):列出了问题的所有条件,通常认为列出的条件的次序无关紧要。
动作桩(Action Stub):列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。
条件项(Condition Entry):列出针对它左列条件的取值,在所有可能情况下的真假值。
动作项(Condition Entry):列出在条件项的各种取值情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然判定表中列出多少组条件取值,也就有多少条规则,即条件项和动作项有多少列。
化简:合并两条或多条具有相同的动作的规则,并且其条件项之间存在着极为相似的关系。
合并举例:
7.3.2 步骤
1.列出所有的条件桩和动作桩。
2.填入条件桩、条件项,动作桩、动作顶。
3.确定规则的个数。如果有3个条件,每个条件有两个取值,故应有 = 8种规则。
4.化简,合并相似规则。
5.将每条规则转化为用例。
7.3.3 举例
书籍阅读指南中有以下建议:
如果觉得疲倦,不论对本章内容是否感兴趣,不论是否糊涂,请停止阅读,休息;
如果不觉得疲倦,对本章内容感兴趣,但糊涂的话,回到本章重读;
如果不觉得疲倦,对本章内容感兴趣,不糊涂的话,继续读下去;
如果不觉得疲倦,对本章内容不感兴趣,但糊涂的话,跳到下一章去阅读;
如果不觉得疲倦,对本章内容不感兴趣,不糊涂的话,跳到下一章去阅读。
1.根据需求将条件桩、条件项、动作桩、动作项分别列出来:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
---|---|---|---|---|---|---|---|---|---|
条件桩 | 觉得疲倦? | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
感兴趣? | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
糊涂吗? | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
动作桩 | 重读本章 | 1 | |||||||
继续读 | 1 | ||||||||
跳下一章 | 1 | 1 | |||||||
休息 | 1 | 1 | 1 | 1 |
2.根据化简规则对判定表进行化简:
1 | 2 | 3 | 4 | ||
---|---|---|---|---|---|
条件桩 | 觉得疲倦? | 1 | 0 | 0 | 0 |
感兴趣? | -- | 1 | 1 | 0 | |
糊涂吗? | -- | 1 | 0 | -- | |
动作桩 | 重读本章 | 1 | |||
继续读 | 1 | ||||
跳下一章 | 1 | ||||
休息 | 1 |
3.输出测试用例:
每一条规则输出一条测试用例。
7.3.4 练习
1.三角形三条边为1-200的整数,使用判定表法进行用例设计(11)。
条件:
1<=a<=200
1<=b<=200
1<=c<=200
a<b+c
b<a+c
c<a+b
a=b
b=c
a=c
结果:
数据错误
不是三角形
等腰三角形
等边三角形
普通三角形
2.有一个处理单价为 5 角钱的饮料自动售货机,测试用例的设计规格说明如下(12):
若投入 5 角钱或 1 元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来;
若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时再投入 1 元硬币并押下按钮后,饮料不送出来而且 1 元硬币也退出来;
若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还 5 角硬币。
条件:
1.售货机有零钱找
2.投入1元硬币
3.投入5角硬币
4.押下橙汁按钮
5.押下啤酒按钮
结果:
1.售货机〖零钱找完〗灯亮
2.退还1元硬币
3.退还5角硬币
4.送出橙汁饮料
5.送出啤酒饮料