决策表
决策表
实际测试种,如果输入条件较多,再加上各种输入与输出之间相互地作用关系,画出地因果图会比较复杂,容易使人混乱。为了避免这种情况,人们往往使用决策表法代替因果图法。
决策表也称为判定表,其实质就是一种逻辑表。在程序设计发展初期,判定表就已经被当作程序开发地辅助工具,帮助开发人员整理开发模式和流程,因为它可以把复杂地逻辑关系和多种条件组合地情况表达得既具体又明确。利用决策表可以设计出完整得测试用例集合。
为了让读者明白什么是决策表,下面通过一个【图书阅读指南】来制作一个决策表。图书阅读指南指明了图书阅读过程中可能出现得状况,以及针对各种情况给读者得建议。在图书阅读过程中可能会出现3种情况:是否疲倦、是否对内容感兴趣、对书中得内容是否感到糊涂。
如果回答是肯定得,则使用【Y】标记;如果回答是否定的,则使用【N】标记。那么这3种情况可以有8种组合,针对这8种组合,阅读指南给读者提供了4条建议:回到本章开头重读、继续读下去、跳到下一章去读、停止阅读并休息,据此制作的阅读指南决策表如图所示。
上图就是一个决策表,根据这个决策表阅读图书,对各种情况的处理一目了然,简介高效。
决策表通常由4个部分组成,具体如下。
(1)条件桩:列出问题的所有条件,除了某些问题对条件的先后次序由要求外,通常决策表种所列条件的先后次序都无关紧要。
(2)条件项:条件项就是条件桩所有可能取值。
(3)动作桩:动作桩就是问题采取的操作,这些操作一般没有先后次序之分。
(4)动作项:指出在条件项的各组取值情况下应采取的动作。
这4个组成部分对应到表2-11种,条件桩包括是否疲倦,是否对内容感兴趣,对书中内容是否感到糊涂;条件项包括【Y】与【N】;动作桩包括回到本章开头重读,继续读下去、跳到下一章去读、停止阅读并休息;动作项是指问题综合情况下所采取的具体动作,动作项与条件项紧密相关,它的值取决于条件项的各组取值情况。
再决策表中,任何一个条件组合的特定取值及其相应要执行的操作称为一条规则,即决策表中的每一列就是一条规则,每一列都可以设计一个测试用例,根据决策表设计测试用例就不会有所遗漏。
在实际测试中,条件桩往往很多,而且每个条件桩都由真假两个条件项,有n个条件桩的决策表就会有2的n次方条规则,如果每条规则都设计一个测试用例,不仅工作量大,而且有些工作量可能是重复且无意义的,例如,在表2-11中,第1、2条规则,第1条规则取值为:Y\Y\Y,执行结果为【停止阅读并休息】。对于这两条规则来说,前两个问题的取值相同,执行结果一样,因此第3个问题的取值对结果并无影响,这个问题就称为无关条件项,使用【-】表示。忽略无关条件项,可以将这两条规则进行合并,如图2-4所示。
由图2-4可知,规则1和规则2合并成了一条规则。由于合并之后的无关条件项(-)包含其它条件项取值,因此具有相同动作的规则还可进一步合并,如图2-5所示。
由图2-5可知,包含无关条件项【-】的规则还可以与其它规则合并
注意:
图2-5中只是演示合并后的谷子额,还可以与其它规则进一步合并,但规则1与规则2合并之后就不再存在于决策表中了
将规则进行合并,可以减少重复的规则,相应地减少测试用例地设计,这样可以大大降低软件测试地工作量。图书阅读指南决策表最初有8条规则,进行合并之后,只剩下5条规则,简化后地图书阅读指南决策表如下表所示。
上表是简化后地图书阅读指南决策表,相比于表2-11,它简洁了很多,在测试时只需设计5个测试用例即可覆盖所有地情况。
相比于因果图,决策表能够把复杂地问题按各种可能地情况--列举,简明而易于理解,也避免遗漏,因此在多逻辑条件下执行不同操作地情况,决策表使用得更多。