判定表也称为决策表,其实质就是一种逻辑表。利用决策表可以设计出完整的测试用例集合。
下面通过一个“图书阅读指南”来制作一个决策表。图书阅读指南指明了图书阅读过程中可能出现的状况,以及针对各种情况给读者的建议。在图书阅读过程中可能会出现3 种情况:是否疲倦、是否对内容感兴趣、对书中的内容是否感到糊涂。如果回答是肯定的,则使用“Y”标记;如果回答是否定的,则使用“N”标记。那么这 3 种情况可以有2 3=8 种组合,针对这 8 种组合,阅读指南给读者提供了 4 条建议:回到本章开头重读、继续读下去、跳到下一章去读、停止阅读并休息,据此制作的阅读指南决策表如表 1 所示。
表 1 就是一个决策表,根据这个决策表阅读图书,对各种情况的处理一目了然,简洁高效。
决策表通常由 4 个部分组成,具体如下。
(1)条件桩:列出问题的所有条件,除了某些问题对条件的先后次序有要求之外,通常决策表中所列条件的先后次序都无关紧要。
(2)条件项:条件项就是条件桩的所有可能取值。
(3)动作桩:动作桩就是问题可能采取的操作,这些操作一般没有先后次序之分。
(4)动作项:指出在条件项的各组取值情况下应采取的动作。
这 4 个组成部分对应到表 1 中,条件桩包括是否疲倦、是否对内容感兴趣、对书中内容是否感到糊涂;条件项包括“Y”与“N”;动作桩包括回到本章开头重读、继续读下去、跳到下一章去读、停止阅读并休息;动作项是指在问题综合情况下所采取的具体动作,动作项与条件项紧密相关,它的值取决于条件项的各组取值情况。
在决策表中,任何一个条件组合的特定取值及其相应要执行的操作称为一条规则,即决策表中的每一列就是一条规则,每一列都可以设计一个测试用例,根据决策表设计测试用例就不会有所遗漏。
在实际测试中,条件桩往往很多,而且每个条件桩都有真假两个条件项,有n 个条件桩的决策表就会有 2n 条规则,如果每条规则都设计一个测试用例,不仅工作量大,而且有些工作量可能是重复且无意义的,例如,在表 1 中,第 1、2 条规则,第1 条规则取值为:Y、Y、Y,执行结果为“停止阅读并休息”;第 2 条规则取值为:Y、Y、N,执行结果也为“停止阅读并休息”。对于这两条规则来说,前两个问题的取值相同,执行结果一样,因此第3个问题的取值对结果并无影响,这个问题就称为无关条件项,使用“-”表示。忽略无关条件项,可以将这两条规则进行合并,如图 1 所示。
由图 1 可知,规则 1 与规则 2 合并成了一条规则。由于合并之后的无关条件项(-)包含其他条件项取值,因此具有相同动作的规则还可进一步合并,如图2 所示。
由图 2 可知,包含无关条件项“-”的规则还可以与其他规则合并。注意:
图 2 中只是演示合并后的规则,还可以与其他规则进一步合并,但规则1 与规则2 合并之后就不再存在于决策表中了。
将规则进行合并,可以减少重复的规则,相应地减少测试用例的设计,这样可以大大降低软件测试的工作量。图书阅读指南决策表最初有 8 条规则,进行合并之后,只剩下5 条规则,简化后的图书阅读指南决策表如表 2 所示。
表 2 是简化后的图书阅读指南决策表,相比于表 1,它简洁了很多,在测试时只需要设计 5 个测试用例即可覆盖所有的情况。
实验案例:三角形决策表
在测试用例中,三角形问题是一个永盛不衰的经典案例。要求使用决策表实现三角形问题的构建与测试用例的设计。
三角形的三边是否能构成三角形?如果能构成三角形,那么是构成一般三角形、等腰三角形还是等边三角形?据此分析,三角形问题有 4 个原因:是否构成三角形?a=b?b=c?c=a?有 5 个结果:不构成三角形、一般三角形、等腰三角形、等边三角形、不符合逻辑,具体如表 3 所示。
在表 3 中,有 4 个原因,每个原因可取值“Y”和“N”,因此共有2 4=16 条规则,如表4 所示。
在表 4 中,由规则 9 到规则 16 可知,只要 c1 为 N,则无论 c2、c3、c4 取何值结果都是 e1,因此 c2、c3、c4 为无关条件项,可以将规则 9 到规则 16 合并成一条规则,而剩余其他规则无法合并简化,因此简化后的决策表如表 5 所示。
根据表 5 可设计 9 个测试用例用于测试三角形,如表 6 所示。
某房产中介公司的中介费政策如下:如果房屋销售总价少于 10 万元,那么基础中介费将是销售额的 2%;如果房屋销售总价大于 10 万元,但少于 100 万元,那么基础佣金将是销售额的 1.5%,外加 1 000 元;如果销售额大于 100 万元,那么基础中介费将是房屋销售总价的 1%,外加 1 500 元。另外房屋销售单价和销售的套数对中介费也有影响。如果单价低于1万元/m2,则外加基础中介费的 5%,此外若是老顾客,则减免外加基础中介费;若单价在1万元/m2 以上,但低于 2 万元/m2,则外加基础中介费的 2.5%,若是老顾客,则减免外加基础中介费;若单价在 2 万元/m2 以上,则减免外加基础中介费,若是老顾客,则减去基础中介费的 5%。
请使用决策表法设计测试用例。 分析如下:
(1)分析各种输入情况,列出为房屋销售总价、单价、客户性质的有效等价类。
房屋销售总价的有效等价类:
S1:{0≤Sale<100 000}。
S2:{100 000≤Sale<1 000 000}。
S3:{Sale≥1 000 000}。
房屋销售单价的有效等价类:
P1:{Price<10 000}。
P2:{10 000≤Price<20 000}。
P3:{Price≥20 000}。
客户性质的有效等价类:
B1:{新客户}。
B2:{老客户}。
(2)分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。考虑各种有效的输入情况,程序中可能采取的操作有以下6种:
a1:基础中介费为销售总价的 2%。
a2:基础中介费为(销售总价的 1.5%+1 000)元。
a3:基础中介费为(销售总价的 1%+1 500)元。
a4:外加基础中介费的 5%。
a5:外加基础中介费的 2.5%。
a6:减去基础中介费的 5%。
(3)根据以上分析的步骤(1)和(2),画出决策表,如表 7 所示。
根据上述房产中介费收费的决策表,设计测试用例,如表 8 所示。