#5.黑盒测试:决策表法
黑盒:决策表法
决策表法概述
优势:
最严格、最具有逻辑性。
决策表法能把复杂逻辑关系和多条件组合情况表达的比较明确。
适用于:在程序中,若输入输出较多,且相互制约的条件较多时。
决策表组成
-
规则
任何一个条件组合的特定取值及其相应要执行的操作成为规则;
在判定表中贯穿条件项和动作项的一列就是一条规则;
判定表中列出多少组条件取值,就有多少条规则,即条件项和动作项有多少列。
问题实例
需求一:
“……对‘功率大于50马力的机器且维修记录不全’或‘已运行10年以上’的机器,应给予优先的维修处理……” 。请建立判定表。
1.列出所有条件桩和动作桩。
条件 | 动作 |
---|---|
功率是否大于50马力? 维修记录是否齐全 运行是否超过10年 |
优先处理 不优先 |
2.确定规则个数
三个条件,每个条件两种情况(yes/no),2*2*2=8
3.列表
* | * | 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 |
动作 | 优先处理 | * | * | * | * | * | |||
动作 | 不优先处理 | * | * | * |
4.化简判定表(合并规则)
规则合并就是判定表的简化。
有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系,就可以将规则合并。
最后
步骤总结
- 1.列出所有的条件桩和动作桩
- 2.确定规则个数
- 3.列表
- 4.简化
实例二: 依旧是NextDate函数
NextDate函数需求:
NextDate函数输入为month(月份)、day(日期)和year(年),输出为输入后一天的日期。例如,如果输入为:1964年8月16日,则输出为1964年8月17日。要求输入变量month、day和year都是整数值,并且满足以下条件:
Con1 1≤month≤12
Con2 1≤day≤31
Con3 1900≤year≤2050
1、条件桩与动作桩表
条件桩 | 动作桩 |
---|---|
Y:年份是闰年吗? M1:月份是12月吗? M2:月份是2月吗? M3:月份是否是1、3、5、7、8、10? M4:月份是否属于4、6、9、11? D1:日期是否为28 D2:日期是否为29 D3:日期是否为30 D4:日期是否为31 D5:日期是否1-27? |
月份+1 日期+1 月份重置为1 日期重置为1 |
2、确定规则个数
Y有2种选择,M有4种,D有5种。
2*4*5=40种。 这么算其实是不对的。。。。因为2月时不会有30、31号的情况,非闰年也不会有29号。。。
但是这么算可以保证没有遗漏,再在填表的过程中去掉错误输入。
3.列表(部分)
* | 1 | 2 | 3 | 4 | 5 | …… |
---|---|---|---|---|---|---|
Y | * | * | * | * | * | …… |
M1 | * | * | * | * | * | …… |
M2 | ||||||
M3 | ||||||
M4 | ||||||
D1 | * | |||||
D2 | * | |||||
D3 | * | |||||
D4 | * | |||||
D5 | * | |||||
日期+1 | * | * | * | * | ||
日期复位 | * | |||||
月份+1 | ||||||
月份复位 | * |
其实我这么列表不好。可以参考我看的ppt里的这种。
4.化简
5.设计测试用例
总结
决策表适用范围
最严格,最具有逻辑性的测试方法
程序中,如果输入输出比较多,输入之间和输出之间相互制约的条件比较多,在这种情况下应用决策表很合适
如:if-then-else逻辑很突出——输入变量之间存在逻辑关系——涉及输入变量子集的计算——输入和输出之间存在因果关系
决策表优点和缺点
优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。
缺点:不能表达重复执行的动作,例如循环结构。
THE END