6.7.4 决策表
决策表(Decision Table)也叫判定表,决策表是最具逻辑性的测试方法,和因果图法有重叠的地方。决策表可以用来分析和表达多逻辑条件下执行不同操作的情况的工具。在程序设计发展初期,决策表就已被用作编写程序的辅助工具了。它可以把复杂的逻辑关系和多种条件组合的情况表达得比较明确。
(1)决策表组成。决策表由四个部分组成,如图6.10所示。

图6.10 决策表的组成
①条件桩:列出了问题得所有条件,通常认为列出的条件次序无关紧要。
②动作桩:列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。
③条件项:列出针对它条件桩的取值,在所有可能情况下的真假值。
④动作项:列出在条件项的各种取值情况下应该采取的动作。
规则是任何条件组合的特定取值及其相应要执行的操作。在决策表中贯穿条件项和动作项的列就是规则。不难看出,规则贯穿于条件项和动作项的一列。决策表中能列出多少组条件项的取值,也就有多少规则,条件项和动作项就有多少列。
所有条件都是逻辑结果(即真/假、是/否、0/1)的决策表称为有限条件决策表,如果条件有多个值,则对应的决策表叫作扩展条目决策表。决策表设计测试用例,条件解释为输入,动作解释为输出。
(2)决策表构造步骤。一般来说,构造决策表分为5个步骤。
①确定规则的个数,假如有n个条件,每个条件有两个取值(0,1),故有2n种规则;
②列出所有的条件桩和动作桩;
③填入条件项;
④填入动作项,等到初始判定表;
⑤简化,合并相似规则(相同动作)。
简化就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。
合并后的条件项用符号“—”表示,说明执行的动作与该条件的取值无关,称为无关条件。
例6.5 如图6.11(a)所示,两规则动作项一样,条件项类似,在1、2条件项分别取Y、N时,无论条件3取何值,都执行同一操作。即要执行的动作与条件3无关。于是可合并。“—”表示与取值无关。与6.11(a)类似,在6.11(b)图中,无关条件项“—”可包含其他条件项取值,具有相同动作的规则可合并。

图6.11 决策表合并规则
(3)适合使用决策表设计测试用例的情况。在简化或最后的决策表给出之后,只需要选择恰当的输入,使得决策表每一列的输入条件值得到满足即可生成相应的测试用例。(https://www.daowen.com)
同其他软件测试一样,决策表测试法适用于具有以下特征的应用程序。
适用于if else或者switch case的程序,输入变量之间存在逻辑关系,涉及输入变量子集的计算,以及输入与输出之间存在因果关系的程序。
另外,B.Beizer指出了适合于使用判定表设计测试用例的条件如下:
①规格说明以判定表形式给出,或是很容易转换成判定表;
②条件的排列顺序不会也不应影响执行哪些操作;
③规则的排列顺序不会也不应影响执行哪些操作;
④当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则;
⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。
B.Beizer提出这5个必要条件的目的是为了使操作的执行完全依赖于条件的组合。其实,对于某些不满足这几个条件的判定表,应用它来设计测试用例,只不过还需要增加其他的测试用例罢了。
决策表的优点是它能把复杂的问题按各种可能的情况一一列举出来,简明易懂,也可避免遗漏。其缺点是不能表达重复执行的动作,例如循环结构。
例6.6 一个软件的规格说明指出:
①当条件1和条件2满足,并且条件3和条件4不满足,或者当条件1、条件3和条件4满足时,要执行操作1;
②在任个条件都不满足时,要执行操作2;
③在条件1不满足,而条件4被满足时,要执行操作3。
试根据规格说明建立决策表。
解:确定规则的个数:软件规格说明中有4个条件,每个条件有2个取值,因此,有2*2*2*2=16种规则。根据规格说明,得到如表6.13所示的决策表。
表6.13 软件规格说明决策表

这里,决策表只给出了16种规则中的8种。事实上,除这8种以外的一些规则是指当不能满足指定的条件,执行这些条件时,要执行1个默许的操作。在无必要时,决策表通常可略去这些规则。但如果用决策表来设计测试用例,就必须列出这些默许规则,如表6.14所示。
表6.14 默许操作决策表
