【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤

1、分析需求

阅读需求文档,如果User Case很复杂,尽量将它分解成若干个简单的部分。这样做的好处是,不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单,需要测试人员根据自己的经验和业务复杂度具体分析。

2、确定原因和结果

在每个已经分解好的块中,找出哪些是原因,哪些是结果。并且把原因和结果分别画出来。原因放在一列,结果放在一列

如下图所示:

3、确定逻辑关系

继续分析需求文档,找出原因和结果之间的关系,用逻辑运算符标出

4、确定约束关系

继续分析需求,找出原因和原因、结果与结果之间的约束限制,用上面说的约束关系标出

5、把因果图转换为决策表

给每个原因分别取真和假二种状态,用0和1表示。画一个有限项决策表,列出所有状态的状态组合。包含3个原因、2个结果的有限项决策表如下
 

根据原因给出结果,上面的决策表中,不一定每个原因的状态组合都是有效的。要根据因果图中的约束条件,去掉不可能出现的组合,从决策表中标记出来。并给出每个可能的原因组合对应的结果。

设计测试用例,上一步完成之后,决策表的每一个有效列都对应一个测试用例。

02、举例说明

下面用几个例子来说明因果图的用法:

例子1

某软件需求说明书:某段文本中,第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。由于此需求已经非常清晰,所以标准步骤中的第一步省略,从第二步开始分析。

  • 确定原因和结果:从大的方面看,第一列和第二列不同的字符会引起不同的结果,所以初步分析原因结果图如下

  • 确定因果逻辑关系:如果第一列和第二列都正确,则修改文件;如果第一列不正确,给出信息L;如果第二列不正确,给出M。可以得出下面的因果图

而根据需求描述,原因c1还可以细分为2个原因:第一列字符是A(c11),第一列字符是B(c12)。因此原因c1其实也可以看作成结果。把它用因果图表示出来如下:

根据上面的分析,其实总共有3个原因,3个结果

确定约束关系:从需求描述中可知,原因c11和c12不可能同时为真,但可以同时为假,因此满足排他性约束。这三个结果之间没有掩码标记的约束。

完整的因果图如下:

  • 根据因果图画决策表:列出3个原因所有的状态组合

  • 根据原因分析结果:分析每一种状态对应的结果,并根据约束关系,去掉不可能出现的状态。本例的c11和c12满足排他性约束,所以同时都为1的状态不会出现。

  • 设计测试用例:根据决策表,列出有效的状态组合和结果,给出对应的测试用例,可以单独画一个表,也可以直接加到决策表中。

  • 如下图:

到现在为止,使用因果图设计测试用例的一个简单的例子就完成了。

例子2

再以支付宝认证总流程为例,说明因果图的实际应用,支付宝个人认证中,分为两部分:个人身份认证银行卡认证。这两者都通过后,认为个人认证成功。

个人身份认证需要提交个人基本信息及身份证复印件。

银行卡认证分为两种:提现认证充值认证

  • 提现认证的流程是:用户提交正确的银行帐号——>支付宝给用户的银行卡中随机打款——>用户确认金额,认证成功。

  • 充值认证的流程是用户提交正确的银行帐号——>充值——>充值完成——>网银反馈,认证成功。

从上面的描述中,我们可以总结出2大原因和一个结果

原因一:身份认证成功

身份认证成功也是一个中间结果,它也有2个原因,提交基本信息成功 和 提交身份证成功。

原因二:银行卡认证成功,包含2个原因:充值认证成功 和 提现认证成功。这2种原因也可以看做是中间结果,产生结果的原因在需求中可以也能明显看出来,不再赘述。

一个结果:个人认证成功。

注意:为了简便起见,我们假设个人信息提交和身份证件提交成功后,身份认证则成功,忽略人工审核过程。

原因和结果表如下:

对于因果关系较为的复杂的逻辑,通过结果向前推原因是一个不错的方法。

  • 认证成功:身份认证成功和银行卡认证同时为真,认证成功才为真。

  • 身份认证成功:基本信息和身份证件同时为真,身份认证成功才为真。

  • 银行卡认证:提现认证和充值认证有一个成功,银行卡认证则成功。

提现认证、充值认证都是所有的原因都为真时,自己才为真。

确定约束关系

从业务流程可知:提现认证和充值认证是二择一的,满足唯一性约束条件。而充值认证的三个原因,有流程上的先后顺序,满足必要性约束条件。同样,提现认证的三个原因也满足必要性约束条件。

根据约束关系,我们画出因果图如下:

使用因果图的好处,综上所述,我认为因果图最大的好处有2点:

  • 考虑了多个输入之间的相互组合、相互制约关系

  • 帮助我们按一定步骤,高效率地选择测试用例

最后我邀请你进入我们的【软件测试学习交流群:1150305204】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

 

下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP2325 5V输入双节串联锂电池升压充电IC 英集芯参数

简介 IP2325是一款支持双节串联锂电池/锂离子电 池的升压充电管理IC。 IP2325集成功率MOS,采用同步开关架构, 使其在应用时仅需极少的外围器件,并有效减小整 体方案的尺寸,降低BOM成本。 IP2325的升压开关充电转换器工作频率500K…

免费的WordPress插件大全

在当今数字化的时代,拥有一个强大的在线存在变得至关重要。而对于使用WordPress建站的用户来说,插件是提高网站功能的关键。在这篇文章中,我们将为您推荐三款免费的WordPress插件,它们不仅是147SEO软件中的佼佼者,而且…

《WebKit 技术内幕》学习之五(3): HTML解释器和DOM 模型

3 DOM的事件机制 基于 WebKit 的浏览器事件处理过程:首先检测事件发生处的元素有无监听者,如果网页的相关节点注册了事件的监听者则浏览器会将事件派发给 WebKit 内核来处理。另外浏览器可能也需要处理这样的事件(浏览器对于有些事件必须响应…

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用(.so库文件) 动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享 动态链接库 动态&#…

vue3项目eslint配置、配置prettier(格式化配置)

文章链接: 全部配置链接 第一步:eslint配置、配置prettier(代码格式化):点击链接 (1) .eslint.cjs—eslint配置文件 (2).eslintignore—校验忽略文件 (3).prettierrc.json添加规则 (4).prettierignore忽略文件 prettierrc规范说明: npm install -D eslint-plugin-import…

gdip-yolo项目解读:gdip模块 |mdgip模块 |GDIP regularizer模块的使用分析

gdip-yolo是2022年提出了一个端到端的图像自适应目标检测框架,其论文中的效果展示了良好的图像增强效果。其提出了gdip模块 |mdgip模块 |GDIP regularizer模块等模块,并表明这是效果提升的关键。为此对gdip-yolo的项目进行深入分析。 gdip-yolo的论文可以…

第15届蓝桥杯嵌入式省赛准备第三天总结笔记(使用STM32cubeMX创建hal库工程+串口接收发送)

因为我是自己搞得板子,原本的下程序和串口1有问题,所以我用的是串口2,用的PA2和PA3 一,使用CubeMX配置串口 选择A开头的这个是异步通信。 配置串口参数,往届的题基本用的9600波特率,所以我这里设置为9600…

C++——结构体

1,结构体基本概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。像int(整型),浮点型,bool型,字符串型等都是属于系统内置的数据类型。而今天要学习的结构体则是属于我们自定义…

导出 MySQL 数据库表结构、数据字典word设计文档

一、第一种 :利用sql语句查询 需要说明的是该方法应该适用很多工具,博主用的是navicat SELECT TABLE_NAME 表名,( i : i 1 ) AS 序号,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE…

Linux: dev: glibc: 里面有很多的关于系统调用的函数

其实都没有实体源代码klogctl.c,而是通过编译时构造出来的源代码实体,比如klogctl这个函数,glibc的反汇编如下: 直接是0x67这个系统调用:103: Reading symbols from /usr/lib64/libc-2.28.so... (No debugg…

【C++】入门(一)

前言&#xff1a; 本篇博客将带大家认识C&#xff0c;熟悉基本语法 文章目录 认识CC的诞生与发展C 在行业中的运用 一、命名空间1.1 命名空间的定义1.2 命名空间的使用1.3 命名空间的访问 二、C输入&输出输出操作符 <<输入操作符 >>换行符和刷新输出缓冲区关键…

跟着我学Python进阶篇:03. 面向对象(下)

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

java实现将集合数据导入excel表格之竖向

这里使用的是apache.poi&#xff0c;当然如果使用easyExcel也可以实现 括号是EasyExcel官网&#xff08;EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel&#xff09; 找到填充&#xff0c;都会有相对应的demo实列 下面是我写的apache.poi实现代码 public static vo…

初学python系列: pandas操作excel

媳妇工作中经常用到excel处理&#xff0c;想用python处理excel更高效&#xff0c;所以自学了python&#xff0c;觉得python比Java还是简单多了&#xff0c;没有变量类型声明&#xff0c;比Java也就多了元组&#xff0c;各种库很丰富。 需求是&#xff1a; 汇总两个excel中 列&…

2024年 复习 HTML5+CSS3+移动web 笔记 之CSS遍

28-第三天课程介绍_哔哩哔哩_bilibili CSS 第一天 1.1 引入方式 1.2 选择器 1.3 画盒子 div 独占一行 1.4 文字控制 div 外层 1.5 调试工具 F12 1.5 综合案例 一 新闻详情 1.6 综合案例 二 CSS 简介 CSS 第二天 2.1 复合选择器 2.2 伪类选择器 2.3 CSS 特性 2.4 Emmet 写法 2.5…

JavaEE 网络原理

JavaEE 网络原理 文章目录 JavaEE 网络原理1. 网络互连1.1 局域网LAN1.2 广域网WAN 2. 网络通信基础2.1 IP地址2.2 端口号 3. 网络协议3.1 概念3.2 五元组3.3 协议分层3.4 TCP/IP 五层模型3.5 封装和分用 1. 网络互连 随着时代的发展&#xff0c;需要多个计算机协同工作来完成…

Pix2Pix理论与实战

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 1.语言&#xff1a;python3.7 2.编译器&#xff1a;pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、引入 在之前的学习中&#xff0c;我们知道…

Haar小波下采样模块

论文原址&#xff1a;Haar wavelet downsampling: A simple but effective downsampling module for semantic segmentation - ScienceDirect 原文代码&#xff1a;HWD/HWD.py at main apple1986/HWD (github.com) 介绍 深度卷积神经网络 &#xff08;DCNN&#xff09; 通…

springboot中一些注解

springboot中一些注解 1:项目启动时会去扫描启动的注解&#xff0c;一般是启动时就想要被加载的方法&#xff1a; 2:springBoot中MSApplication启动类的一些其他注解&#xff1a; EnableAsync&#xff1a;这是一个Spring框架的注解&#xff0c;它用于开启方法异步调用的功能。当…

2017年认证杯SPSSPRO杯数学建模B题(第一阶段)岁月的印记全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 跨年龄人脸识别模型的建立与分析 B题 岁月的印记 原题再现&#xff1a; 对同一个人来说&#xff0c;如果没有过改变面容的疾病、面部外伤或外科手术等经历&#xff0c;年轻和年老时的面容总有很大的相似性。人们在生活中也往往能够分辨出来两…