上面已经讲过,决策表有四个部分:粗竖线的左侧是桩部分;右侧是项。横粗线的上面是条件项,下面是动作项。在上图的决策表中,如果C1、C2和C3

都为真,则采取行动a1和a2。如果C1和C2都为真而C3为假,则采取行动a1和a3。在C1为真,C2为假的条件下,规则中的C3项叫做“不关心”

项。不关心项有两种解释:条件无关或条件不适用。有时人们用“不适用(n/a)”表示后一种解释。

如果有二叉条件(真/假、是/否、0/1),则决策表的条件部分是旋转了90°的(命题逻辑)真值表。这种结构能够保证我们考虑了所有可能的条件值

组合。如果使用决策表标识测试用例,那么决策表的这种完备性能够保证一种完备的测试。所有条件都是二叉条件的决策表叫做有限项决策表。如果条件可以有多个

值,则对应的决策表叫做扩展项决策表。

决策表被设计为说明性的(与命令性相反),给出的条件没有特别的顺序,而且所选择的行动发生时也没有任何特定顺序。

表示方法

为了使用决策表标识测试用例,我们把条件解释为输入,把动作解释为输出。有时条件最终引用输入的等价类,动作引用被测试软件的主要功能处理部分。这时规则就解释为测试用例。由于决策表可以机械地强制为完备的,因此可以有测试用例的完整集合。

有多种产生决策表的方法对测试人员更有用。一种很有用的风格是增加动作,以显示什么时候规则在逻辑上不可能满足。

在下面给出的决策表中,给出了不关心项和不可能规则使用的例子。正如第一条规则所指示,如果整数a、b和c不构成三角形,则我们根本不关心可能的相

等关系。在规则2、3和4中,如果两对整数相等,则根据传递性,第三对整数也一定相等,因此第一条规则的否定项使使这些规则不可能满足。

下表所示决策表给出了有关表示方法的另一种考虑:条件的选择可以大大地扩展决策表的规模。这里将原来的条件(C1:a、b、c构成三角形?)扩展为

三角形特性的三个不等式的详细表示。如果有一个不等式不成立,则三个整数就不能构成三角形。我们还可以进一步扩展,因为不等式不成立有两种方式:一条边等

于另外两条边的和,或严格大于另外两条边的和。

如果条件引用了等价类,则决策表会有一种典型的外观。下表所示的决策表来自NextDate问题(也是经典的测试问题:NextDate是一个有三个变量,即月、日、年的函数。函数返回输入日期后面的那个日期):引用了可能的月份变量相互排斥的可能性。由于一个月份就是一个等价类,因此不可能有两项同时为真的规则。不关心项(-)的实际含义是“必须失败”。有些决策表使用者用F!表示这一点。

不关心条目的使用,对完整决策树的识别方式有微妙的影响。对于有限项决策表,如果有n个条件,则必须有2的n次方条规则。如果不关心项实际地表明条

件是不相关的,则可以按以下方法统计规则数。没有不关心项的规则统计为1条规则;规则中每出现一个不关心项,则该规则数乘一次2。下表所示决策表的规则条

数统计。请注意,规则总数是64(正好是应该得到的规则条数)。

如果将这种简化算法应用于NextDate的有互斥条件的决策表,会得到如下所示的规则条数统计:

应该只有8条规则,所以显然有问题。为了找出问题所在,我们扩展所有三条规则,用可能的T或F代替“-”,如下图所示:

请注意,所有条目都是T的规则有三条:规则1.1、2.1和3.1;条目是T、T、F的规则有两条:规则1.2和2.2。类似地,规则1.3和

3.2、2.3和3.3也是一样的。如果去掉这些重复,最后可得到七条规则,缺少的规则是所有条件都是假的规则。这种处理的结果如下表所示,表中还给出了

不可能出现的规则。

这种识别(和开发)完备决策表的能力,使我们在解决冗余性和不一致性方面处于很有利的地位。下表给出的决策表是冗余的,因为有3个条件和9条规则。(规则9和规则4相同。)

请注意,规则9的动作项与规则1~4的动作项相同。只要冗余规则中的行为与决策表相应的部分相同,就不会有什么大问题。如果动作项不同,例如下表所示的情况,就会遇到很大的问题。

如果上表所示的决策表被用来处理事务,其中C1是真,C2和C3都是假,则规则4和规则9都适用。我们可以观察到两点:

①规则4和规则9是不一致的。

②决策表是非确定的。

规则4和规则9是不一致的,因为行为集合是不同的。整个决策表是不确定的,因为不能确定是应用规则4还是应用规则9。测试人员的基本原则是在决策表中小心使用不关心动作项。

三角形问题的测试用例

使用上面修改的三角形问题决策表,可得到11个功能性测试用例:3个不可能测试用例,3个测试用例违反三角形性质,1个测试用例可得到等边三角

形,1个测试用例可得到不等边三角形,3个测试用例可得到等腰三角形。如果扩展决策表以显示两种违反三角形性质的方式,可以再选三个测试用例(一条边正好

等于另外两条边的和)。做到这一点需要一定的判断,否则规则会呈指数级增长。在这种情况下,最终会再得到很多不关心项和不可能的规则。

NextDate函数测试用例

选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美例子,因为决策表可以突出这种

依赖关系。从前面对等价类测试的分析我们知道,等价类分析假设所有的变量都是独立的。如果变量确实是独立的,则使用类的笛卡尔积是有意义的。如果变量之间

在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。决策表格式通过使用“不可能动作”概念表示条件的不可能组

合,使我们能够强调这种依赖关系。下面将对NextDate函数的决策表描述做三次尝试。

第一次尝试

标识合适的条件和动作,假设首先从分析等价类集合开始。

M1 = {月份:每月有30天}; M2 = {月份:每月有31天};M3 = {月份:此月是2月}

D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}

Y1 = {年:年是闰年};Y2 = {年:年不是闰年}

如果我们希望突出不可能的组合,则可以建立具有以下条件和动作的有限项决策表。(请注意,年变量对应的等价类收缩为下表的一个条件。)

这个决策表会有256条规则,其中很多是不可能的。如果要显示为什么这些规则是不可能的,可将动作修改为:

a1:月份中的天数太多;a2:不能出现在非闰年中;a3:计算NextDate。

第二次尝试

如果我们将注意力集中到NextDate函数的闰年问题上,则可以修改已有的等价类集合。为了说明另一种决策表表示方法,这一次采用扩展项决策表开

发,并更仔细地研究动作桩。在构建扩展项决策表时,必须保证等价类构成输入定义域的真划分。如果规则项之间存在“重叠”,则会存在冗余情况,使得多个规则

都能够满足。这里,Y2是一组1812~2012之间的年份,并除以4,2000除外。

M1 = {月份:每月有30天}; M2 = {月份:每月有31天};M3 = {月份:此月是2月}

D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}

Y1 = {年:年=2000};Y2 = {年:年是闰年};Y3 = {年:年是平年}

从某种意义上说,我们采用的是“灰盒”技术,因为更仔细地研究了NextDate函数。为了产生给定日期的NextDate,能够使用的操作只有五种:日期和月份的增1和复位,年的增1。(我们不允许通过复位年来回退时间。)

这些条件可以产生有对应等价类笛卡尔积的36个规则的决策表(自己可以分析一下)。结合不关心项,可得到下表所示的

17条规则的决策表。仍然存在逻辑不可能的规则,但是这个表有助于我们标识测试用例的扩展输出。如果填满这个决策表的动作项,就会发现12月有一些麻烦的

问题(规则8)。我们下面解决这些问题。

第三次尝试

通过引入等价类的第三个集合,可以澄清年末问题。这一次可以特别关注日和月,并重新使用第一次尝试的较简单的闰年或非闰年条件,因此2000年没有特别处理。(还可以做第四次尝试,采用第二次尝试的年等价类。)

M1 = {月份:每月有30天}; M2 = {月份:每月有31天,12月除外};M3 = {月份:此月是12月};M4 = {月份:此月是2月}

D1 = {日期:1≤日期≤27};D2 = {日期:日期=28};D3 = {日期=29};D4 = {日期=30};D5 = {日期=31}

Y1 = {年:年是闰年};Y2 = {年:年不是闰年}

这个等价类的笛卡尔积包含40个元素。所产生的组合规则包含不关心项,如下表所示,可与第二次的36条规则比较。大

的测试用例集合是否一定比小的测试用例集合好?这里我们有一个22条规则的决策表,得到的NextDate函数的描述比包含36条规则的决策表更清晰。前

5条规则处理有30天的月份,请注意,这里不考虑闰年。接下来两组规则(规则6~10,规则11~15)处理有31天的月份,前5条规则处理12月之外的

月份,后5条规则处理12月。不可能规则也在决策表中列出,尽管存在一些高效测试人员可能会有疑问的冗余。10条规则中的8条只是对日期增1。针对这个子

功能是否真的需要8条单独的测试用例,可能不需要,但是请注意我们可以通过决策表得到的启发。最后7条规则关注的是2月和闰年。

上表所示的决策表是NextDate函数源代码的基础。这个例子从另一个方面说明测试如何能够很好地改进程序设计。所有决策表分析都应该在NextDate函数的详细设计期间完成。

我们可以使用决策表代数进一步化简这22个测试用例。如果决策表中两个规则的动作集合相同,则一定至少有一个条件能够把两条规则用不关心条目合并。

这正体现出决策表等价于用于标识等价类的“相同处理”方针。在某种意义上,我们就是在标识规则的等价类。例如,规则1、2和3涉及有30天的月份日期类

D1、D2和D3。类似地,有31天的月份的日期类D1、D2、D3和D4也可以合并,2月的D4和D5也可以合并。所得到的结果如下表所示:

相应的测试用例如下表所示:

总结

与其他测试技术一样,基于决策表的测试对于某些应用程序(例如NextDate函数)很有效,但是对另外一些应用程序就不值得费这么大的事。毫不奇

怪,基于决策表所适用的情况都是要发生大量决策(例如三角形问题),以及在输入变量之间存在重要的逻辑关系的情况(例如NextDate函数)。

①决策表技术适用于具有以下特征的应用程序:

●if-then-else逻辑很突出。

●输入变量之间存在逻辑关系。

●涉及输入变量子集的计算。

●输入与输出之间存在因果关系。

●很高的圈(McCabe)复杂度。(路径测试中会详细讲解)

②决策表不能很好地伸缩(有n个条件的有限项决策表有2的n次方条规则)。有多种方法可以解决这个问题---使用扩展项决策表、代数化简表,将大表“分解”为小表,查找条件项的重复模式。

③与其他技术一样,迭代会有所帮助。第一次标识的条件和动作可能不那么令人满意。把第一次得到的结果作为铺路石,逐渐改进,直到得到满意的决策表。

简述用决策表设计测试用例的步骤_软件测试(14)--黑盒测试案例设计技术--基于决策表的测试...相关推荐

  1. 简述用决策表设计测试用例的步骤_决策表快速入门

    1. 为什么要开发决策表? 决策表是分析和表达多逻辑条件下执行不同操作的情况的工具,使用它可以简化条件使写的程序逻辑更清晰. 2. 决策表的组成? 条件桩:列出问题的所有条件. 条件项:针对条件桩给出 ...

  2. 简述用决策表设计测试用例的步骤_决策表设计测试用例的步骤(流程)?

    [单选题]计算轴心受压构件的计算长度Lo,当构件两端固定时取( )L;当构件两端铰接时取( )L. [简答题]钢筋混凝土纯扭构件中适筋纯扭构件的破坏有什么特点? [单选题]轴心受压构件中,如果构件纵向 ...

  3. java测试---用例(设计测试用例的基本要素、好处,六大设计测试用例的方法)

    QQ登录测试 兼容性: ① 不同的Windows操作系统,不同品牌的电脑 ② 不同的手机系统,不同的手机品牌 ③ 不同版本的QQ,市场上用户主要用的主流版本 ④ MAC电脑的主流版本 1. 设计测试用 ...

  4. 因果图设计测试用例的步骤

    1.1.1. 分析需求 阅读需求文档,如果User Case很复杂,尽量将它分解成若干个简单的部分.这样做的好处是,不必在一次处理过程中考虑所有的原因.没有固定的流程说明究竟分解到何种程度才算简单,需 ...

  5. 状态机设计的一般步骤_浅谈状态机

    来源:公众号[ZYNQ]ID   :FreeZynq 整理 :李肖遥 本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式状态机 二段式状态机 三段式 ...

  6. 用mysql设计数据库的步骤_数据库设计的主要步骤是什么

    数据库设计的主要步骤是什么 发布时间:2020-08-12 10:00:24 来源:亿速云 阅读:141 作者:小新 这篇文章给大家分享的是有关数据库设计的主要步骤是什么的内容.小编觉得挺实用的,因此 ...

  7. 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。

    静态原型设计 加载中 In April 2015, I joined the Disney Parks creative team to design mobile experiences for t ...

  8. 测试用例管理工具_检测Bug很难吗?推荐优质的测试管理工具

    理想和现实差了十万八千里.不少人也许觉得鞭长莫及,却又马不停蹄. 就像学习软件测试一样,知道是需要常常跟踪BUG,发现BUG.但等到真正上手工作的时候,还是觉得繁琐的细节很多,一个不留神就容易出错了! ...

  9. 黑盒测试案例设计技术--等价类划分法

    什么是测试用例 所谓的测试用例设计就是将软件测试的行为活动,作一个科学化的组织归纳.软件测试是有组织性.步骤性和计划性的,而设计软件测试用例的目的,就是为了能将软件测试的行为转换为可管理的模式.软件测 ...

  10. 简述工业机器人示教再现的一般步骤_机器人运动轨迹的示教主要是确认程序点的属性,这些属性包括( )。 1位置坐标;2插补方式;3再现速度;4作业点 / 空走点_学小易找答案...

    [单选题]募集设立的股份公司,认股人从( )起不得抽回出资. [填空题]1. Defoe's two important novels are _____________ and __________ ...

最新文章

  1. javascript worker 多线程 简单示例
  2. Leetcode | Minimum/Maximum Depth of Binary Tree
  3. 《Effective C#》读书笔记——条目19:保证0为值类型的有效状态.NET资源管理
  4. Python安装FrankMocap实现3D人体姿态估计
  5. 一种数据库打天下?开源数据库选型应该注意什么?
  6. CSDN下载频道【2月热门资源TOP100】汇总
  7. MAC系统镜像几个版本的下载链接
  8. 黑马程序员-随笔-我与程序员
  9. ASP.Net Core 发布在IIS部署出现502.5错误的解决办法
  10. 做的好不如说得好,老板为什么喜欢听过程汇报?
  11. python添加背景图片_Python实例 tkinter canvas (设置背景图片及文字)
  12. 只查看ett.txt文件(100行)内第20行到30行的内容
  13. 西瓜创客python在线编译器_西瓜创客在线少儿编程 - 课程
  14. 计算机表格小边框如何关闭,【解惑】怎样去掉表格中打勾的小方格?
  15. Quartus II开发软件中的宏模块 (转摘)
  16. 怎样找回我的世界服务器密码,我的世界服务器
  17. 3G/4G上网卡和企业网、局域网共用-路由设置
  18. 程序员能有什么好出路?前路漫漫,望长风破浪!
  19. 大数据热点图制作(微重点)
  20. win7 启动管理器修改默认启动项

热门文章

  1. javascript根据浏览器userAgent判断浏览器类型
  2. 厦门理工学院OJ题解(1223:Rite与跳舞毯)
  3. Different tests were collected between gw0 and gw1. The difference is: --- gw0
  4. 关于ajax同步状态及sucess,complete的顺序的理解
  5. 微信个性化菜单 java_微信公众平台开发(109) 个性化菜单
  6. 磁条卡知识学习与数据解析
  7. chua系统matlab代码
  8. PHP fwrite和file_put_contents 性能对比测试
  9. html文本框怎么加粗,html怎么让字体加粗
  10. html 制作人物模型,星际科幻人物模型材质教程 Stargazer Character Design Tutorial