判定表也称为决策表,用于描述程序输入条件组合与相应的程序处理动作之间的对应关系。等价类划分和边界值分析都没有考虑被测程序输入条件的组合情况,只是孤立地考虑各个输入条件的测试数据取值问题,对输入组合情况下产生可能产生的错误没有进行充分地测试。判定表驱动法从多个输入条件组合的角度来满足测试的覆盖率要求,是黑盒测试方法中最严格、最有逻辑的测试方法。
1.判定表的构造与化简
判定表一般由上图4个部分构成
(1)条件桩:列出了问题所包含的所有条件。一般情况下,条件的排列书必须无关紧要。
(2)动作桩:列出了问题规定可能采取的操作。对这些操作的排列顺序一般没什么要求。
(3)条件项:条件桩中每个条件可以取真值或者假植,条件项给出了这些条件取值的多种组合情况。
(4)动作项:列出了在各种条件取值情况下应当采取的相应动作。
判定表的构造过程一般包括5个步骤:
①列出所有的条件桩和动作桩
②根据条件桩中的条件个数确定规则的个数
③根据条件组合,填入条件取值,形成每一个条件项
④填入相应的动作项,得到初始判定表
⑤化简初始判定表,合并相似规则
2.判定表构造实例
(1)
假设程序的规格说明要求:“对于各科成绩高于85分并且是优秀毕业生的人员,或总是成绩大于450的人员,应当优先录取,其他情况进行正常处理”。从规格说明可知,条件桩由“各科成绩均高于85分”“优秀毕业生”和“总成绩大于450分”三个条件构成,动作桩由“优先录取”和“正常处理”两种动作构成。因为由三个条件,所以有23=8个规则。根据8种条件取值组合情况,可以得到如下表所示判定表
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
条件 | 各科成绩高于85分 | Y | Y |
Y | Y | N | N | N | N |
优秀毕业生 | Y | Y | N | N | Y | Y | N | N | |
总成绩大于450 | Y | N | Y | N | Y | N | Y | N | |
动作 | 优先录取 | √ | √ | √ | √ | √ | |||
正常处理 | √ | √ | √ |
化简之后的判定表如下
序号 | 1,2 | 3 | 4 | 5 | 6 | |
条件 | 各科成绩高于85分 | Y | Y | Y | N | N |
优秀毕业生 | Y | N | N | - | - | |
总成绩大于450 | - | Y | N | Y | N | |
动作 | 优先录取 | √ | √ | √ | ||
正常处理 | √ | √ |
(2)
一个函数根据A、B、C三条边的输入值怕段是否能够构成三角形,如果能够构成三角形,进而判断是等腰三角形还是等边三角形。A、B、C均为正整数。根据问题先构造判定表
序号 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | |
条件 | A+B>C | N | Y | Y | Y | Y | Y | Y | Y |
A+C>B | - | N | Y | Y | Y | Y | Y | Y | |
B+C>A | - | - | N | Y | Y | Y | Y | Y | |
A=B | - | - | - | Y | Y | N | N | N | |
A=C | - | - | - | Y | N | Y | N | N | |
B=C | - | - | - | - | - | - | Y | N | |
动作 | 非三角形 | √ | √ | √ | |||||
不等边三角形 | √ | ||||||||
等腰三角形 | √ | √ | √ | √ | |||||
等边三角形 | √ |
3.在使用判定表驱动法设计测试用例时,还需要注意默许规则和默许操作的问题。
如果软件规格说明如下:
(1)当条件1和条件2满足,并且条件3和条件4不满足,或者当条件1、条件3和条件4满足时,要执行条件操作1
(2)当任意一个条件不满足,而条件4满足时,执行操作2
(3)当条件1不满足,尔条件4满足时,执行操作3
根据说明,构造如下判定表。规格说明中共有4个条件,判定表只列出了16个规则中与规格描述直接相关的4个规则。程序在实际执行时,当遇到除上述4条规则意外的其他规则时,需要执行默许操作,不需要时可以忽略这些规则。但是用判定表驱动法设计测试用例时,就必须列出这些默许规则,如下下表
规则1 | 规则2 | 规则3 | 规则4 | |
条件1 | Y | Y | N | N |
条件2 | Y | - | N | - |
条件3 | N | Y | N | - |
条件4 | N | Y | N | Y |
操作1 | √ | √ | ||
操作2 | √ | |||
操作3 | √ |
规则5 | 规则6 | 规则7 | 规则8 | |
条件1 | - | N | Y | Y |
条件2 | - | Y | Y | N |
条件3 | Y | N | N | N |
条件4 | N | N | Y | - |
默许操作 | √ | √ | √ | √ |
4.判定表法的优缺点:
优点:①能将规格说明中各种复杂逻辑组合情况一一列举出来,只管并且易于理解,便于检查并且能够便面功能遗漏。
②每个测试用例可以覆盖多种输入情况,有利于提高测试效率。
③考虑了输入条件间的约束关系,因此避免了无效测试用例,提高了测试有效性。
④能够很方便地给出每个测试用例地预期输出。
缺点:①不能表达重复执行地动作,例如循环语句的执行。
②当被测特性较多时,判定表的规模会很庞大。
③不能有效地确认某些输入组合是否必须测试,会造成一定的用例冗余
判定表适合描述具有一下特征的应用程序:
①程序中if-then-else分支逻辑较多
②程序具有较高的环路复杂度
③输入变量之间存在逻辑关系
④设计输入变量子集的计算
⑤输入和输出之间存在因果关系