测试用例 - 判定表法

概述

使用场景

适合于有多个输入和多个输出,输入和输出之间有相互的组合关系,输入输出之间有相互的制约和依赖关系。

定义

判定表也称决策表,是分析和表达多逻辑条件下执行不同操作的工具.

它能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表适合于处理这类问题。

组成

判定表是由条件桩、动作桩、条件项、动作项四部分组成,如下图.

条件桩 条件项
动作桩 动作项
  1. 条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。

  2. 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。

  3. 条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。

  4. 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

规则及规则合并

规则

任何一个条件组合的特定取值及其相应要执行的操作称为规则

在判定表中贯穿条件项和动作项的一列就是一条规则。显然判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

化简

规则合并有两条或多条规则具有相同动作,并且其条件项之间存在着极为相似的关系。

测试案例设计

步骤:

  1. 明确规则个数
  2. 列出所有条件桩和动作桩
  3. 填入条件项
  4. 填入动作项,等到初始判定表
  5. 简化,合并相似规则

案例

案例1

问题要求:对于功率大于50马力的机器、维修记录不全或运行10年以上的机器,应优先维修.

测试案例设计思想

  1. 明确规则个数

这里有三个条件:大于50马力、维修记录不全、运行10年以上, 每个条件有2种取值,所以有八种规则.

  1. 列出条件桩和动作桩
条件桩 功率大于50马力?
维修记录不全?
运行超过10年?
动作桩 优先处理
  1. 填入条件项

  2. 填入动作项等到初始判定表

条件桩 条件项 1 2 3 4 5 6 7 8
功率大于50马力? Y Y Y Y N N N N
维修记录不全? Y Y N N Y Y N N
运行10年以上? Y N Y N Y N Y N
动作桩 优先处理? X X X X X
其他处理 X X X
  1. 简化判定表

通过初始的判定表我们发现:

  1. 在三个条件中有2个不满足时,剩下的一个完全没有参考价值,可以进行简化.

    只有功率大于50马力、维修记录全的、运行十年以上的才优先处理;

    其他处理的情况是:满足动力大于50马力、维修功能完全、没有运行10年以上中只要满足两项

  2. 简化后为

条件桩 条件项 1 2 3 4 5
功率大于50马力? Y Y N N Y
维修记录不全? Y N - - N
运行10年以上? - Y Y N N
动作桩 优先处理? X X X
其他处理 X X

注意: “-”表示取值与否不影响触发的动作.即,不影响规则

案例2

公交一卡通自动充值系统要求:

  • 系统只接收50或100元纸币,一次只能使用一张纸币,一次充值金额只能为50元或100元。
  • 若输入50元纸币,并选择充值50元,完成充值后退卡,提示充值成功;
  • 若输入50元纸币,并选择充值100元,提示错误,并退回50元;
  • 若输入100元纸币,并选择充值50元,完成充值后退卡,提示充值成功,找零50元;
  • 若输入100元纸币,并选择充值100元,完成充值后退卡,提示充值成功;
  • 若输入纸币后在规定时间内不选择充值按钮,找零,并提示错误;
  • 若选择充值按钮后不输入货币,提示错误

测试案例实现如下

  1. 明确规则个数
规则个数(条件桩) 输入50元
输入100元
充值50元
充值100元
  1. 列出条件桩和动作桩
动作桩 提示充值成功
充值成功并退卡
退卡
找零
  1. 列入条件项

  2. 填入动作项,等待初始的判定表

输入条件 1 2 3 4 5 6 7 8
输入50元 Y Y X
输入100元 Y Y X
充值50元 Y Y X
充值100元 Y Y X
动作桩 充值成功并退卡 X X X
提示充值成功 X X X
找零 X X X X
提示错误 X X X X X
  1. 简化

这个案例中每个条件都是独立的,没有可以简化的

  1. 测试用例设计

上面的表中每一条就是一个测试用例.

公交一卡通测试用例

小结

优缺点

优点

  • 能把复杂问题按照各种可能情况—列举出俩, 简明而易于理解,避免遗漏

缺点

  • 不能表达重复执行的动作、例如循环结构