测试用例设计白皮书--判定表驱动分析方法

2023-10-30

 测试用例设计白皮书--判定表驱动分析方法
Author: Vince      来源:http://blog.csdn.net/vincetest

一.    方法简介

1.定义:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。

2.判定表的优点

    能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。

在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。

3.“阅读指南”判定表

 

 

 
1
2
3
4
5
6
7
8
问题
觉得疲倦?
Y
Y
Y
Y
N
N
N
N
感兴趣吗?
Y
Y
N
N
Y
Y
N
N
糊涂吗?
Y
N
Y
N
Y
N
Y
N
建议
重读
 
 
 
 
 
 
 
继续
 
 
 
 
 
 
 
跳下一章
 
 
 
 
 
 
休息
 
 
 
 

 

4.  判定表通常由四个部分组成如下图所示。

 

1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。

2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。

3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。

4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

5.规则及规则合并

1)规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

2)化简:就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

 

6.规则及规则合并举例

1)如下图左端,两规则动作项一样,条件项类似,在1、2条件项分别取Y、N时,无论条件3取何值,都执行同一操作。即要执行的动作与条件3无关。于是可合并。“-”表示与取值无关。

 

 

2)与上类似,下图中,无关条件项“-”可包含其他条件项取值,具有相同动作的规则可合并。

 

 

 

 

3)化简后的读书指南判定表

 

1

2

3

4

你觉得疲倦吗?

-

-

Y

N

你对内容感兴趣吗?

Y

Y

N

N

书中内容使你胡涂吗?

Y

N

-

-

 

请回到本章开头重读

x

 

 

 

继续读下去

 

X

 

 

跳到下一章去读

 

 

 

x

停止阅读,请休息

 

 

x

 

7.判定表的建立步骤:(根据软件规格说明)

1)确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有2n种规则。

2)列出所有的条件桩和动作桩。

3)填入条件项。

4)填入动作项。等到初始判定表。

5)简化.合并相似规则(相同动作)。

 

 

二. 实战演习

1.问题要求:”……对功率大于50马力的机器、维修记录不全或已运行10年以上的机器,应给予优先的维修处理……” 。这里假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义 。请建立判定表。

解答:

①确定规则的个数:这里有3个条件,每个条件有两个取值,故应有2*2*2=8种规则。

②列出所有的条件茬和动作桩:

 

③填入条件项。可从最后1行条件项开始,逐行向上填满。如第三行是: Y N Y N Y N Y N,第二行是: Y Y N N Y Y N N等等。 

④填入动作桩和动作顶。这样便得到形如图的初始判定表。

 

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

进行优先处理

x

x

X

 

X

 

X

 

作其他处理

 

 

 

X

 

x

 

x

 

初始判定表

⑤化简。合并相似规则后得到图。

 

1

2

3

4

5

功率大于50马力吗?

Y

Y

Y

N

N

维修记录不全吗?

Y

N

N

-

-

运行超过10年吗?

-

Y

N

Y

N

进行优先处理

x

x

 

X

 

作其他处理

 

 

x

 

x

 

2.NextData函数的精简决策表

M1={月份, 每月有30天}

M2={月份, 每月有31天}

M3={月份, 2月}                 有29=512条规则

D1={日期,1~28}                 12月末31日和其它31

D2={日期,29}                    日月份的31日处理不同

D3={日期,30}                    平年2月28日处理不同

D4={日期,31}                    于2月27日

Y1 ={年:年是闰年}

Y2 ={年:年不是闰年}

改进为

M1={月份: 每月有30天}

M2={月份: 每月有31天, 12月除外}

M4={月份:12月}

M3={月份: 2月}

D1={日期:1<=日期<=27}

D2={日期:28}

D3={日期:29}

D4={日期:30}

D5={日期:31}

Y1 ={年:年是闰年}

Y2 ={年:年不是闰年}

输入变量间存在大量逻辑关系的NextData决策表

 

 

 

 

 

3. 用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。

    例如,输入为2004年11月29日,则该程序的输出为2000年12月1日。

1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。

2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。

3)根据(1)和(2),画出简化后的决策表。

案例分析如下:

1) month变量的有效等价类:

    M1: {month=4,6,9,11}             M2: {month=1,3,5,7,8,10}

    M3: {month=12}                  M4: {month=2}

2)day变量的有效等价类:

    D1:{1≤day≤26}         D2: {day=27}         D3: {day=28}                    D4: {day=29}                    D5: {day=30}                D6: {day=31}

3)year变量的有效等价类:

    Y1: {year是闰年}                Y2:  {year不是闰年}

4)考虑各种有效的输入情况,程序中可能采取的操作有以下六种:

    a1: day+2                       a2: day=2                    a3: day=1 

    a4: month+1                     a5: month=1                  a6: year+1 

 

4. 判定表在功能测试中的应用

1)一些软件的功能需求可用判定表表达得非常清楚,在检验程序的功能时判定表也就成为一个不错的工具。如果一个软件的规格说明指出:

I. 当条件1和条件2满足,并且条件3和条件4不满足,或者当条件1、3和条件4满足时,要执行操作1。

II. 在任一个条件都不满足时,要执行操作2。

III. 在条件1不满足,而条件4被满足时,要执行操作3。 根据规格说明得到如下判定表:

 

这里,判定表只给出了16种规则中的8种。事实上,除这8条以外的一些规则是指当不能满足指定的条件,执行3种操作时,要执行1个默许的操作。在没必要时,判定表通常可略去这些规则。但如果用判定表来设计测试用例,就必须列出这些默许规则(如下表)。

 

 
规则5
规则6
规则7
规则8
条件1
-
N
Y
Y
条件2
-
Y
Y
N
条件3
Y
N
N
N
条件4
N
N
Y
-
默许操作
x
x
x
x
默许的规则

 

 

2)判定表的优点和缺点

I.  优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。

II. 缺点:不能表达重复执行的动作,例如循环结构。

3)B. Beizer 指出了适合使用判定表设计测试用例的条件:

①规格说明以判定表形式给出,或很容易转换成判定表。

②条件的排列顺序不会也不影响执行哪些操作。

③规则的排列顺序不会也不影响执行哪些操作。

④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。

⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。

B. Beizer提出这5个必要条件的目的是为了使操作的执行完全依赖于条件的组合。其实对于某些不满足这几条的判定表,同样可以借以设计测试用例,只不过尚需增加其它的测试用例罢了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试用例设计白皮书--判定表驱动分析方法 的相关文章

  • pandas1-数据的增删改查

    文章目录 核心数据结构 Series DataFrame 数据查改 对Series操作 对DataFrame操作 对单列数据访问 对多列数据访问 对某几行访问 loc与iloc ix方法 数据修改 更新修改DataFrame中的数据 为Da
  • Java中的多线程

    java中的多线程是同时执行多个线程的过程 线程基本上是一个轻量级的子进程 是一个最小的处理单元 多处理和多线程都用于实现多任务 但是我们使用多线程而不是多进程 因为线程共享一个共同的内存区域 它们不分配单独的内存区域 因此节省内存 并且线
  • 我的Java后端书架

    这位大侠 这是我的公众号 程序员江湖 分享程序员面试与技术的那些事 干货满满 关注就送 我的Java后端书架 2016年暖冬4 0版 原文出处 江南白衣 书架主要针对Java后端开发 3 0版把一些后来买的 看的书添补进来 又或删掉或降级一
  • git: Your branch and 'origin/master' have diverged解决方法

    如果不需要保留本地的修改 只要执行下面两步 git fetch origin git reset hard origin master 当我们在本地提交到远程仓库的时候 如果遇到上述问题 我们可以首先使用如下命令 git rebase or
  • C++11 lambda函数

    用过脚本语言的童鞋都知道 函数的定义可以在任何地方 例如 local function table sort t local function sort by len t1 t2 return t1 lt t2 end table sort
  • 在idea中创建maven,修改pom.xml文件(二)

    续上 修改pom xml文件 1 springframework下载配置 2 打jar包文件时 配置成打包包涵依赖文件
  • 工具包安装-梳理

    文章目录 1 conda 虚拟环境安装 2 使用网络代理后网络连接断掉 解决 1 conda 虚拟环境安装 1 创建虚拟环境 conda create n env name python 3 7 使用 conda env list 查看已有
  • 一致性模型

    一致性模型
  • 熬夜总结的2022java面试题

    java面试宝典 前言 java基础 什么是面向对象 值传递和引用传递 和equals的区别是什么 重载和重写的区别 抽象类和接口的区别 构造器 Constructor 是否可被 override java静态变量 代码块 和静态方法的执行
  • Django(1)-创建django项目

    前提 已安装django 创建项目 django admin startproject mysite django 运行后 在当前目录下生成了一个项目 asgi py 为项目创建AGSI兼容web服务器入口 settings py 项目的配
  • Win11共享打印机错误0x00000040

    在办公打印的时候 想要连接共享打印机 但是遇到了错误0x00000040指定的网络名不再可用的提示 该如何解决呢 方法一 1 按键盘上的 Win X 组合键 或右键点击任务栏上的Windows 徽标 在打开的隐藏菜单项中 选择运行 2 运行
  • SpringCloud基础9——服务异步通信-高级篇

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 服务异步通信 高级篇 1 消息可靠性 1 1 生
  • linux脚本里ps进程多出一个,运行shell脚本时进程数量变多

    写了一个很简单的脚本 用于统计memcache进程的数量 bin bash echo ps aux grep memcache grep v grep wc l 然而在执行时却遇到了问题 work oss memcache status p
  • Linuxcentos7.5二进制安装mysql8.0.23(切勿继续踩坑)

    场景 这个量有点大 闲话不多说 都是小细节 开始 首先下载mysql8 0 23 这个你们可以去官网下载800多m 也可以使用我分享的这个 链接 https pan baidu com s 1S1ZQyjv9pOSr5zBsgt0lRA 提
  • c语言从文件中读取数据到链表_C语言

    点击上方 C语言中文社区 选择 设为星标 技术干货第一时间送达 作者 ancientear 原文 https www jianshu com p e43e795808aa 要求设计的管理系统能够实现以下功能 1 每一条记录包括一个学生的学号
  • 【Linux】解决运行sudo时提示sudo: unable to resolve host

    因为开发需要 把主机名从oldname修改成newname后 再运行sudo时会报一行错误 sudo unable to resolve host newname 解决方法 sudo gedit etc hosts打开 etc hosts
  • Linux LDAP搭建与使用

    Linux LDAP搭建与使用 标签 空格分隔 LDAP ubuntu ldap安装 执行以下命令安装ldap apt get install slapd ldap utils migrationtools dpkg reconfigure
  • 用keras进行猫狗识别(一)

    Keras是一个高层神经网络API Keras由纯Python编写而成并基Tensorflow Theano以及CNTK后端 Keras 为支持快速实验而生 能够把你的idea迅速转换为结果 如果你有如下需求 请选择Keras 简易和快速的

随机推荐

  • VMA与page fault

    一 红黑树与VMA 红黑树的应用 广泛用于 C 的 STL 中 set 和 map 是用红黑树实现的 Linux 的的进程调度 用红黑树管理进程控制块 进程的虚拟内存空间都存储在一颗红黑树上 每个虚拟内存空间都对应红黑树的一个节点 左指针指
  • 05 神经网络语言模型(独热编码+词向量的起源)

    博客配套视频链接 https space bilibili com 383551518 spm id from 333 1007 0 0 b 站直接看 配套 github 链接 https github com nickchen121 Pr
  • C# 获取qq邮箱的未读邮件

    第一步 先在QQ邮箱进行设置 获取授权码 第一步 打开QQ邮箱并点击设置 第二步 点击账户 并滑到下面 第三步 开启POP3 IMAP SMTP Exchange CardDAV服务并生成授权码 在这个页面找到下图这个位置 在IMAP SM
  • 2PC 两阶段提交

    这是使用Java实现两阶段提交的简单代码示例 public abstract class BaseTwoPhaseCommit public abstract void commit public abstract void rollbac
  • 华为 进入和退出Fastboot、eRecovery和Recovery升级模式

    手机关机状态下 可以进入Fastboot eRecovery Recovery 升级这几种模式 需要连接电脑 Fastboot模式 长按音量下键 电源键 eRecovery 模式 长按音量上键 电源键 不需要连接电脑 Recovery 模式
  • java bufferedimage颜色_java – 如何在BufferedImage中使颜色透明并保存为PNG

    我最近这样做 是为了回答我的项目经理的一个问题 将灰色变为透明度的功能是 private Image TransformGrayToTransparency BufferedImage image ImageFilter filter ne
  • 用Python开发了一个进销存管理的小软件

    研究生毕业之后 就进入国企工作 工作内容偏产品和售前 几乎没写过代码了 有个朋友是开游泳馆的 也会有少量商品的售卖 问我能不能给她开发一个小软件 记录商品的入库出库 统计下金额 恰好工作中今年也用到了python写一个小工具 觉得非常好用
  • 因为一个函数strlen的陷阱,我懂得了看源码的重要性

    因为一个函数strlen的陷阱 我懂得了看源码的重要性 在程序开发中 我们经常会使用各种函数库来提高效率 其中字符串处理函数是开发中最常用的函数之一 在这些函数中 strlen是一个很重要的函数 它用来计算字符串的长度 然而 有时候使用st
  • 吴恩达深度学习第一课第四周课后作业2参考

    Deep Neural Network for Image Classification Application 深度神经网络应用 When you finish this you will have finished the last p
  • 队列(Queue)——class Stack 和 class Stack T 实现

    这是对于Queue类的实现 PS 这是队列链式存储 带头节点 的类和模板实现 静态循环序列本质也只是封装类和套模板 class Stack实现代码如下 myqueue h include
  • VMware虚拟机从一台电脑复制到另一台电脑【亲测,成功】

    在一台电脑上利用虚拟机创建了centos 如果想在家里的电脑虚拟机上也运行centos 不用再重新安装以及漫长的安装等待了 可以利用先前在虚拟机上安装centos生成的 vmx文件和 vmdk文件 拷贝到U盘 再重新导入到新电脑就可以了 省
  • 孤立森林(isolation forest)

    1 简介 孤立森林 Isolation Forest 是另外一种高效的异常检测算法 它和随机森林类似 但每次选择划分属性和划分点 值 时都是随机的 而不是根据信息增益或者基尼指数来选择 在建树过程中 如果一些样本很快就到达了叶子节点 即叶子
  • synchronized关键字在同步方法中的应用

    synchronized 同步方法 synchronized关键字可用来保障原子性 可见性和有序性 非线程安全问题会在多个线程对同一个对象中的实例变量进行并发访问时发生 产生的后果就是 脏读 也就是读取到的数据其实是被更改过的 线程安全是指
  • pmap 命令

    NAME pmap report memory map of a process SYNOPSIS pmap x d q pids pmap V 常用参数 x 显示扩展格式 d 显示设备格式 q 不显示header footer行 V 显示
  • 一文搞定:SpringBoot 集成 Apollo 配置中心

    公众号后台回复 面试 获取精品学习资料 扫描下方海报了解专栏详情 本文来源 http www mydlq club article 42 Java工程师面试突击 第3季 重磅升级 由原来的70讲增至160讲 内容扩充一倍多 升级部分内容请参
  • 浅谈java中的锁

    JAVA中的锁 自旋锁 当一个线程要获取锁的时候 该锁被其他线程获取 那么该线程将循环等待 不判断该锁是否能够被成功获取 直到获取到该锁才会退出循环 自旋锁实现例子 通过CAS操作实现加锁与解锁逻辑 循环等待占用锁的线程解锁 自旋锁代码实现
  • Ubuntu 16.04系统安装jdk1.8

    笔者环境 主系统Win7 VMware Workstation 12 Player虚拟机 虚拟机系统ubuntu 16 04 desktop amd64 安装jdk jdk 8u102 linux 一 在Oracle官方网站下载JDK 1
  • 跨域问题之手机号码登录验证

    1 构建登录组件 router js 设置路由 import Vue from vue import Router from vue router Vue use Router const router new Router mode hi
  • javaweb jsp的认识

    1 java 程序片 1 在jsp中 之间的书写叫做java 程序片 一个jsp中页面中可以有多个java 程序片 在java 程序片声明的变量 在它们所在的jsp中的所有java 程序片及表达式中都有效 java 程序片中声明的变量 只在
  • 测试用例设计白皮书--判定表驱动分析方法

    测试用例设计白皮书 判定表驱动分析方法 Author Vince 来源 http blog csdn net vincetest 一 方法简介 1 定义 判定表是分析和表达多逻辑条件下执行不同操作的情况的工具 2 判定表的优点 能够将复杂的