因果图&判定表法
在了解了等价类和边界值比较适宜搭档的测试用例方法之后
接下来我们来了解另外一队就是因果图和判定表
因果图会产生判定表法
因果图法
- 等价类划分法和边界值分析方法都是着重考虑输入条件
- 而不考虑输入条件的各种组合、输入条件之间的相互制约关系。例如地区的选择
- 如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字
- 因此必须考虑采用一种适合于描述多种条件的组合、产生多个相应动作的测试方法,这就需要利用因果图(逻辑模型)
因果图-判定表
- 因果图法基于这样的思想:一些程序的功能可以用决策表的形式来表示,并根据输入条件的组合情况规定相应的操作
- 因此,可以考虑为决策表中的每一列设计一个测试用例,以便测试程序在输入条件的某种组合下的输出是否正确
- 概括的说,因果图法就是从程序规格说明书的描述中找出因(输入条件)和果(输出结果或程序状态的改变)
- 将因果图转换为判定表,为判定表(也叫做决策表)中的每一列设计一个测试用例
- 这种方法考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系(那些有互斥,那些无互斥这种情况)
判定表
- 判定表(decision table)是分析和表达多逻辑条件下执行不同操作的工具
- 在程序设计发展的初期,判定表就已被当做编写程序的辅助工具
- 因为他可以把复杂的逻辑关系和多种条件组合的情况表达得具体
- 判定表通常由四个部分组成
- 条件桩:列出了问题的所有条件,通常认为列出的条件的次序无关紧要。类似于你感到疲惫吗?你对内容感兴趣吗?
- 动作桩:列出了问题规定可能采取的操作,这些操作的排列顺序没有约束,这些结果一般都是互相排斥的。例如请回到本章开头重读,继续读下去
- 条件项:列出针对他左列条件的取值,在所有可能情况下的真假值
- 动作项:列出在条件项的各种取值情况下应该采取的动作
设计步骤
- 分析软件规格说明中那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给予每个原因和结果赋予一个标识符
- 分析软件规格说明中语义的内容,找出原因与结果之间、原因与原因之间对应的关系,根据这些关系画出因果图。==直接画出判定表
- 由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特定的情况,在因果图上使用一些记号表明约束或限制条件
- 把因果图转换为判定表
- 根据判定表中的每一列设计测试用例
注意,虽然这些都是约定速成的,但是我们可以进行简化
实战
- 使用因果图+判定表设计测试用例测试两位数加法计算器
当然,这个例子可能不是那么那么标准。但是不要紧,后面还用一些例子进行补充,
- 输入1:
- 条件1:0<=x<=99
- 条件2: -99<=x<0
- 条件3: x<-99
- 条件4: x>99
- 输入2:
- 条件1:0<=x<=99
- 条件2: -99<=x<0
- 条件3: x<-99
- 条件4: x>99
- 输出
- 正确计算
- 错误提示
分析条件互斥
- 输入
- 输入1:
- 1 2 3 4 互斥
- 输入2:
- 1 2 3 4 互斥
- 输入1:
- 输出
- 输出结果正确和错误互斥
跳过因果图
分析、简化并画出判定表
这里的“-”是具有普适性的。也就是说当条件3成立,输入2里不管什么值该输出结果都是错误提示。
条件1 2 是有效等价类, 条件 3 4 是无效等价类
有效等价类会产生4种结果,无效的也是4种结果
以列为单位,写出测试用例。比如第一列,可能取值为90 + 90 = 180
以此类推,取出8层测试用例额
因果图法用例设计联系
- 同理我们将同一测试需求用因果图设计
- 余额宝提现到银行卡增加新规则:快速到账(2小时)日限额1w元,超过1w元只能选择普通到账
- 按照y因果图法设计测试用例
分析输入条件和输出条件
- 输入
- 输入1:
- a1:快速体现
- a2:普通体现
- 输入2:
- a1:0<x<=10000
- a2: x<=0
- a3: x>10000
- 输入1:
- 输出
- b1:提现成功
- b2:提现失败
分析、简化并画出判定表
这三类条件都是互斥的
经典因果图-判定表面试题
- 问题:某厂工资发放
- 描述、分析:
- 工资分为年薪制a1,月薪制a2
- 错误程度分为普通a3,严重a4
- 工资为a1的员工犯普通错误扣工资2%(b1),犯严重错误扣工资6%(b2)
- 工资为a2的员工犯普通错误的扣工资4%(b3),犯严重错误扣工资8%(b4)
- 其中a1和a2为互斥,b1 b2和 b3 b4是互斥,a3 a4可以同时具备
输入 | ||||||||
---|---|---|---|---|---|---|---|---|
a1 | T | T | T | T | F | F | F | F |
a2 | F | F | F | F | T | T | T | T |
a3 | T | F | T | F | T | F | T | F |
a4 | F | T | T | F | F | T | T | F |
输出 | ||||||||
b1 | × | × | ||||||
b2 | × | × | ||||||
b3 | × | × | ||||||
b4 | × | × |