判定表是分析和表达多种输入条件下系统执行不同动作的工具,它可以把复杂的逻辑关系和多种条件组合的情况表达得即具体又明确
- 条件桩:输入条件
- 动作桩:输出结果
- 条件项:输入取值
- 动作项:输出取值
例:手机如果欠费或者停机则不能主被叫
条件:欠费;停机
动作:不能主被叫
规则数:2*2=4条
条件桩 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
欠费(Y/N) | Y | Y | N | N |
停机(Y/N) | Y | N | Y | N |
动作桩 | 不能主被叫 | 不能主被叫 | 不能主被叫 | 能主被叫 |
例:修改账户密码,要求如下:首选输入正确的原始密码;输入两次一致的新密码;并且新密码要具有一定的复杂度(8-15位;包含大写字符;小写字母;数字;其它字符)
假定:优先提醒原始密码不正确,然后提醒新密码不一致,最后提醒新密码不够复杂
条件桩:a)原始密码正确;b)新密码一致;c)新密码够复杂
动作桩:a)密码修改成功; b)提示原始密码不正确; c)提示新密码不一致 ;d)提示新密码不够复杂
规则数:2X2X2=8条
生成初始的判定表如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|
条件桩 | 原始密码正确 | Y | Y | Y | Y | N | N | N | N |
新密码一致 | Y | Y | N | N | Y | N | Y | N | |
新密码够复杂 | Y | N | Y | N | Y | Y | N | N | |
动作桩 | 密码修改成功 | Y | |||||||
提示原始密码不正确 | Y | Y | Y | Y | |||||
提示新密码不一致 | Y | Y | |||||||
提示新密码不够复杂 | Y |
y:满足条件 N:不满足条件
一、判定表的合并
化简工作是以合并相似规则为目标的。如果表中有两条或多条规则具有相同的动作,并且其条件项之间存在极为相似的关系,我们并可以将其合并。合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件
例:上述中的修改密码,规则5、6、7、8可以合并(无论条件②和条件③取什么值,动作桩都是提示原始密码不正确),合并后判定表如下:
序号 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
条件桩 | 原始密码正确① | Y | Y | Y | Y | N |
新密码一致② | Y | Y | N | N | - | |
新密码够复杂③ | Y | N | Y | N | - | |
动作桩 | 密码修改成功 | Y | ||||
提示原始密码不正确 | Y | |||||
提示新密码不一致 | Y | Y | ||||
提示新密码不够复杂 | Y |
二、判定表法设计用例的步骤
- 确定规则的个数。如有3个条件,每个条件有2个取值,则应有2X2X2=8种规则
- 列出所有的条件桩 和动作桩
- 填入条件项
- 填入动作桩和动作项
- 化简,合并相似规则(不推荐化简合并,会有漏测现象,测试时间紧急,测试资源不够的情况下可化简合并)
- 将每条规则转化为用例
三、 判定表法实例讲解
有一个需求描述如下:对已运行10年以上的机器、或功率大于50马力且维修记录不全的机器,给予全面维修处理,对其它机器进行一般维修处理
条件:①运行10年以上 ②功率大于50马力 ③维修记录不全
动作:①全面维修处理 ②一般维修处理
规则数:2X2X2=8条
生成初始的判定表如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|
条件桩 | 已运行10年以上① | Y | Y | Y | Y | N | N | N | N |
功率大于50马力② | Y | Y | N | N | Y | Y | N | N | |
维修记录不全③ | Y | N | Y | N | Y | N | Y | N | |
动作桩 | 全面维修处理 | Y | Y | Y | Y | Y | |||
一般维修处理 | Y | Y | Y |
序号 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
条件桩 | 已运行10年以上 | Y | N | N | N | N |
功率大于50马力 | - | Y | Y | N | N | |
维修记录不全 | - | Y | N | Y | N | |
动作桩 | 全面维修处理 | Y | Y | |||
一般维修处理 | Y | Y | Y |
文件修改需求:
如想对文件进行修改,需要遵循以下规则:
输入的第一列字符必须是A或B;第二列字符必须是一个数字;
如果第一列字符不正确,则给出信息L;如果第二列字符不正确,则给出信息M;如果两列字符输入正确,则可修改文件
条件:
第一列 A;B;其他
第二列 数字
动作:提示L;提示M;可修改文件
规则数:3X2=6条
生成初始的判定表如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|
条件桩 | 第一列 | A | A | B | B | 其他 | 其他 |
第二列 | 数字 | 非数字 | 数字 | 非数字 | 数字 | 非数字 | |
动作桩 | 修改文件 | Y | Y | ||||
提示L | Y | Y | |||||
提示M | Y | Y |
判定表合并后如下:
5,6可以合并(无论第二列取什么值,动作桩都是提示L。)
序号 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
条件桩 | 第一列 | A | A | B | B | 其他 |
第二列 | 数字 | 非数字 | 数字 | 非数字 | - | |
动作桩 | 修改文件 | Y | Y | |||
提示L | Y | |||||
提示M | Y | Y |
四、 判定表的优缺点
优点: 它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏
缺点: 合并存在漏测的风险。一个显而易见的原因是,虽然某个输入条件在输出接口上是无关的,但是在软件设计上,内部针对这个条件走了不同的程序分支(因分析内部业务流程而定)
输入和输出的逻辑关系很明确用判定表,不是很明了用因果图然后使用判定表