1、第第7 7章章 基于决策表的测试基于决策表的测试n决策表 n基于决策表的测试 n案例:三角形问题,NextDate问题 n练习:隔一日问题7.1 决策表决策表n决策表的原理 n决策表的组成 n决策表建立的步骤 1.决策表的原理决策表的原理n决策表 决策表:Decision Table决策表是分析和表达多逻辑条件下执行不同操作的工具。在程序设计发展的初期,决策表被当作编写程序的辅助工具。2.决策决策表的组成表的组成n条件桩(Condition Stub)列出问题的所有条件 n动作桩(Action Stub)列出可能采取的操作 n条件项(Condition Entity)列出条件桩的取值 n动作项
2、(Action Entity)列出条件项各种取值下应该采取的动作决策表的组成决策表的组成规则规则n任何一个条件组合的特定取值及其相应要执行的操作称为规则;n在决策表中贯穿条件项和动作项条件项和动作项的一列就是一条规则;n决策表中列出多少组条件取值,也就有多少条规则,即条件项和动作项有多少列。规则示例:三角形问题规则示例:三角形问题规则(规则(续续)n规则合并 规则合并就是决策表的简化简化。有两条或多条规则具有相同的动作相同的动作,并且其条件项之间存在着极为相似的关系相似的关系,就可以将规则合并。(1)两条规则合并成一条)两条规则合并成一条n条件项“”表示与取值无关。n条件项“”在逻辑上包含其它
3、的条件。(2)两条规则的进一步合并)两条规则的进一步合并3.决策表建立步骤决策表建立步骤n根据软件规格说明 列出所有的条件桩和动作桩;确定规则的个数;n假如有n个条件,每个条件有两个取值(0,1),则有2n 种规则;填入条件项;填入动作项,得到初始决策表;简化,合并相似规则(相同动作)。例:例:维修机器问题维修机器问题n问题描述:“对于功率大于50马力的机器并且维修记录不全,或已运行10年以上的机器,应给予优先的维修处理”n请建立决策表。例:例:维修机器问题(续)维修机器问题(续)n(1)列出所有的条件桩和动作桩 条件桩 nC1:功率大于50马力吗?nC2:维修记录不全吗?nC3:运行超过10
4、年吗?动作桩 nA1:进行优先处理 nA2:作其他处理 例:例:维修机器问题(续)维修机器问题(续)n(2)确定规则个数 输入条件个数:3;每个条件的取值:“是”或“否”;规则个数:2*2*2=8;u 功率大于50马力吗 u 维修记录不全吗 u 运行超过10年吗 例:例:维修机器问题(续)维修机器问题(续)12345678条条 件件功率大于50马力吗?YYYYNNNN维修记录不全吗?YYNNYYNN运行超过10年吗?YNYNYNYN动动 作作进行优先处理 作其他处理 n(3)填入条件项;n利用集合的笛卡尔积计算条件项的取值例:例:维修机器问题(续)维修机器问题(续)12345678条条 件件功
5、率大于50马力吗?YYYYNNNN维修记录不全吗?YYNNYYNN运行超过10年吗?YNYNYNYN动动 作作进行优先处理 作其他处理 n(4)填入动作项;n1,2合并,5,7合并,6,8合并例:例:维修机器问题(续)维修机器问题(续)n(5)化简;(1)(2)(3)(4)(5)条条 件件功率大于50马力吗?YYYNN维修记录不全吗?YNN 运行超过10年吗?YNYN动动 作作进行优先处理 作其他处理 基于决策表的测试基于决策表的测试n根据输入输出绘制决策表;n设计测试用例覆盖决策表中每条规则;7.2 案例:三角形问题案例:三角形问题n问题描述 输入三个正整数a、b、c,分别作为三角形的三条边
6、,通过程序判断三条边是否能构成三角形?如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形、一般三角形)。n请用基于决策表的方法设计测试用例。n n(1)条件桩 C1:a,b,c构成三角形?C2:a=b?C3:a=c?C4:b=c?n(2)规则数 共有四个条件,每个条件的取值为“是”或“否”,因此有24=16条规则。一、设计决策表一、设计决策表n(3)动作桩 n A1:非三角形;A2:不等边三角形;A3:等腰三角形;A4:等边三角形;A5:不可能;n(4)决策表123456789条条 件件a,b,c构成三角形NYYYYYYYYa=b?YYYYNNNNa=c?YYNNYYNNb=c?YNY
7、NYNYN动动 作作非三角形 不等边三角形 等腰三角形 等边三角形 不可能 n注意:注意:条件的选择可以大大扩展决策表的规模;n例如 a,b,c构成三角形吗?可以扩展为三个条件:a b+c?b a+c?c a+b?条件桩修改后的决策表条件桩修改后的决策表a=b,a=c,bc二、设计测试用例二、设计测试用例7.3 案例:案例:NextDate函数函数n问题描述 程序有三个输入变量month、day、year,并且满足:1month12、1day31、1900 year 2050。它们分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。例如,输入为2005年11月29
8、日,则该程序的输出为2005年11月30日。n 第一次尝试nM1=月份:每月有30天 nM2=月份:每月有31天 nM3=月份:此月是2月 nD1=日期:1日期28 nD2=日期:日期=29 nD3=日期:日期=30 nD4=日期:日期=31 nY1=年:年是闰年 nY2=年:年是平年有有256256条规则的第一次尝试条规则的第一次尝试u年变量对应的等价类收缩为表中的一个条件第二次尝试(重点考虑闰年)第二次尝试(重点考虑闰年)nM1=月份:每月有30天 nM2=月份:每月有31天 nM3=月份:此月是2月 nD1=日期:1日期28 nD2=日期:日期=29 nD3=日期:日期=30 nD4=日
9、期:日期=31 nY1=年:年=2000 nY2=年:年是平年 nY3=年:年是闰年第三次尝试(关注日期和月份)第三次尝试(关注日期和月份)nM1=月份:每月有30天 nM2=月份:每月有31天,12月除外 nM3=月份:此月是12月 nM4=月份:此月是2月 nD1=日期:1日期 27 nD2=日期:日期=28 nD3=日期:日期=29 nD4=日期:日期=30 nD5=日期:日期=31 nY1=年:年是闰年 nY2=年:年不是闰年NextDate函数的决策表每月每月30天天每月每月31天天,12月除外月除外续续 此月是此月是12月月此月是此月是2月月此年是闰年此年是闰年NextDate函数
10、的精简决策表续续 NextDate函数的测试用例指导方针和观察指导方针和观察n决策表技术适用的应用程序的特征:if-then-else逻辑很突出 输入变量之间存在逻辑关系 涉及输入变量子集的计算 输入与输出之间存在因果关系 很高的McCabe圈复杂度 n决策表的优点 能把复杂的问题按各种可能的情况一一列举出来 简明而易于理解 可避免遗漏 n n决策表的缺点 不能表达重复执行的动作,例如循环结构 决策表不能很好地伸缩 n有n个条件的决策表有2n 个规则。n解决方法 使用扩展条目决策表、代数简化表,将大表“分解”为小表,查找条件项的重复课堂练习课堂练习n隔一天的日期 程序有三个输入变量month、day、year,分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。例如,输入为2004年11月29日,则该程序的输出为2004年12月1日。