1、软件测试技术,复习,边界值测试 单缺陷/多缺陷假设 取值情况 等价类测试 有效/无效等价类 等价类分类,4.3 基于判定表的测试,判定表 判定表的组成 判定表建立步骤 基于判定表的测试 基于判定表测试的指导方针,1. 判定表的原理,判定表 判定表(Decision Table),又叫决策表 判定表是分析和表达多逻辑条件下执行不同操作的工具。 将复杂的问题按照各种可能的情况全部列出,2. 判定表的组成,条件桩:列出问题的所有条件 动作桩:列出可能采取的操作 条件项:列出条件桩的取值 动作项:列出条件项各种取值下应该采取的动作,判定表的组成,规则,任何一个条件组合的特定取值及其相应要执行的操作称为
2、规则; 在判定表中贯穿条件项和动作项的一列就是一条规则; 判定表中列出多少组条件取值,也就有多少条规则,即条件项和动作项有多少列。,规则示例:三角形问题,规则(续),规则合并 规则合并就是判定表的简化。 有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系,就可以将规则合并。,(1)两条规则合并成一条,条件项“”表示与取值无关。,条件项“”在逻辑上包含其它的条件。,(2)两条规则的进一步合并,3. 判定表建立步骤,根据软件规格说明 列出所有的条件桩和动作桩; 确定规则的个数; 假如有n个条件,每个条件有两个取值(0,1),则有2n 种规则; 填入条件项; 填入动作项,得到初始决
3、策表; 简化,合并相似规则(相同动作)。,案例1:维修机器问题,问题描述: “对于功率大于50马力并且维修记录不全或已运行10年以上的机器,应给予优先的维修处理” 请建立决策表。,例:维修机器问题(续),(1)列出所有的条件桩和动作桩 条件桩 C1:功率大于50马力吗? C2:维修记录不全吗? C3:运行超过10年吗? 动作桩 A1:进行优先处理 A2:作其他处理,例:维修机器问题(续),(2)确定规则个数 输入条件个数:3; 每个条件的取值:“是”或“否”; 规则个数:2*2*2 =8;,功率大于50马力吗维修记录不全吗运行超过10年吗,例:维修机器问题(续),(3)填入条件项;,利用集合的
4、笛卡尔积计算条件项的取值,例:维修机器问题(续),(4)填入动作项;,1,2合并,5,7合并,6,8合并,例:维修机器问题(续),(5)化简;,4 基于判定表的测试,根据输入输出绘制判定表; 设计测试用例覆盖判定表中每条规则;,案例2:三角形问题,问题描述输入三个正整数a、b、c,分别作为三角形的三条边,通过程序判断三条边是否能构成三角形?如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形、一般三角形)。 请用基于判定表的方法设计测试用例。,(1)条件桩 C1:a,b,c构成三角形? C2:a = b? C3:a = c? C4:b = c? (2)规则数 共有四个条件,每个条件的取值
5、为“是”或“否”,因此有24= 16条规则。,一、设计判定表,(3)动作桩A1:非三角形;A2:不等边三角形;A3:等腰三角形;A4:等边三角形;A5:不可能;,(4)判定表,注意: 条件的选择可以大大扩展判定表的规模; 例如 a, b, c构成三角形吗?可以扩展为三个条件: a b + c? b a + c? c a + b?,条件桩修改后的判定表,a=b, a=c, bc,二、设计测试用例,案例3: NextDate函数,问题描述程序有三个输入变量month、day、year,并且满足:1month12、1day31、1900 year 2050。它们分别作为输入日期的月份、日、年份,通过
6、程序可以输出该输入日期在日历上下一天的日期。例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。,第一次尝试,M1=月份:每月有30天 M2=月份:每月有31天 M3=月份:此月是2月 D1=日期:1日期28 D2=日期:日期=29 D3=日期:日期=30 D4=日期:日期=31 Y1=年:正常年,第二次尝试(重点考虑闰年),M1=月份:每月有30天 M2=月份:每月有31天 M3=月份:此月是2月 D1=日期:1日期28 D2=日期:日期=29 D3=日期:日期=30 D4=日期:日期=31 Y1=年:年是平年 Y2=年:年是闰年,第三次尝试(关注日期和月份),M1=
7、月份:每月有30天 M2=月份:每月有31天 M3=月份:此月是12月 M4=月份:此月是2月 D1=日期:1日期 27 D2=日期:日期=28 D3=日期:日期=29 D4=日期:日期=30 D5=日期:日期=31 Y1=年:年是闰年 Y2=年:年不是闰年,NextDate函数的判定表,每月30天,每月31天,续,此月是12月,此月是2月,此年是闰年,NextDate函数的精简判定表,续,NextDate函数的测试用例,指导方针和观察,适合使用判定表设计测试用例条件: 规格说明容易转换成判定表 条件的排列顺序不影响执行的操作 规则的排列顺序不影响执行的操作 当某规则条件满足时,不必检查别的规
8、则 某规则要执行多个操作时,执行顺序无关,指导方针和观察,判定表技术适用的应用程序的特征: if-then-else逻辑很突出 输入变量之间存在逻辑关系 涉及输入变量子集的计算 输入与输出之间存在因果关系,判定表的优点 能把复杂的问题按各种可能的情况一一列举出来 简明而易于理解 可避免遗漏,判定表的缺点 不能表达重复执行的动作,例如循环结构 判定表不能很好地伸缩 有n个条件的决策表有2n 个规则。 解决方法 使用扩展条目判定表、代数简化表,将大表“分解”为小表,查找条件项的判定表式,课后练习,登陆功能说明书:(用户输入和密码输入) 1)管理员用户名为“admin”,密码为“123456”,正常登陆 2)用户名和密码输入为空,提示 “用户和密码不允许为空” 在用户名和密码非空的情况下: 3)要求用户名必须输入字母,否则提示“输入非法” 4)要求密码必须输入数字,否则提示 “输入非法” 在输入合法的情况下: 5)用户名错误,提示 “用户名和密码输入错误”,用户名和密码清空 6)用户名正确,密码错误,提示 “用户名和密码输入错误”,用户名保留,密码清空,小 结,判定表(决策表)测试的原理 三角形问题的测试用例 NextDate函数测试用例 判定表测试的讨论,作业: p75 第9题,