常见的软件测试用例设计方法有哪些?
常见的软件测试用例设计方法,个人认为主要是下面这6种:
1)流程图法(也叫场景法)
2)等价类划分法
3)边界值分析
4)判定表
5)正交法
6)错误推测法
这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解这4个部分进行讲解。
所以本文行文结构如下
1、每种用例方法定义、应用场景、使用步骤、案例讲解
2、每种用例方法应用场景的区别
一、流程图法(也叫场景法)
1、使用场景
所谓流程图法,就是专门针对软件业务流程测试的方法。
2、什么是业务流程?
业务流程,是指客户在使用软件的过程中,为了达成自身的所想要的目的,按照指定的顺序去操作软件的功能,这样的操作过程叫业务流程。
业务流程是多个功能的组合。比如:把大象放进冰箱就是一个业务流程。

3、使用频率
高。
未来不管面向什么项目,都是为了实现用户价值去开发的,所以一定会有业务场景测试。也就意味着一定会使用到流程图法。
流程图法测试不需要深入功能内部详细测试,主要测试流程。
4、使用步骤
根据流程图找出路径
编写测试用例(从开始到结束为一条路径,有多少条路径就有多少条用例)
路径数 = 判定节点数 + 1
5、测试流程使用案例
流程图举例如下:

测试用例设计步骤:1)找出流程图的路径
路径数 = 3 + 1 = 42)编写测试用例
① 结账流程成功
② 结账流程失败-登录失败
③ 结账流程失败-选择桌台失败
④ 结账流程失败-支付失败
二、等价类划分法
1、概念
等价类定义:满足某种共同特征的数据子集
等价类分类:
有效等价类,满足需求的数据集合
无效等价类,不满足需求的数据集合
2、使用场景
没法穷举的,或数据集过大的数据集。
比如手机号,无法穷举。
比如一年365天,虽然有限,但数据集过大。
那为了缩小测试范围,就可以考虑使用等价类划分法。
3、使用频率
该方法的使用频率高。
针对:需要有大量数据测试输入, 但是没法穷举测试的地方。
比如:输入框、下拉列表、 单选复选框
4、使用步骤
步骤1:分析需求
步骤2:划分等价类—等价类表
等价类划分:按照 1)长度(空)2)类型 3)规则 去设置无效等价类
步骤3:设计用例原则
① 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类。
② 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类。
5、使用案例
注册邮箱验证
要求:
- 6-18个字符
- 包含数字、字母和下划线
- 必须以字母开头
解题思路:
步骤1:分析需求
步骤2:划分等价类——等价类表

步骤3:设计用例原则
① 先写能覆盖所有有效测试点的正向用例
一条正向用例,覆盖编号1+2+3这3条有效等价类
图片
② 剩下的所有无效测试点,再分别和正确的测试点组成反向测试用例(有多少无效测试点,就要设置多少条反向测试用例)
有6个无效测试点,就要另外再设置6条反向测试用例。
三、边界值分析法
1、概念
规律:边界和边界内的值,更容易发现错误
所以要优先选取正好等于、刚好大于、刚好小于边界的值作为测试数据。
举例数据范围为 [-99,99]
上点:边界上的点(正好等于,下图中的绿色)
离点:距离上点最近的点(刚好大于、刚好小于, 下图中的黄色)
内点:范围内的点(区间范围内的数据,下图中的紫色)
其中,上点和内点【必选】。

2、使用场景
输入范围有边界。意味着使用场景只能是数字或时间类型。
边界值分析法一般都是结合等价类使用。
在等价类的基础上针对有边界范围的测试数据输入的地方(重点关注边界)
常见词语描述:大小、 尺寸、 重量、 最大、 最小、 至多、 至少等修饰词语
典型代表:有边界范围的输入框类测试
疑问:中英文字符串可以使用边界值吗?
中英文没有边界,意味着无法使用边界值。
3、使用步骤
边界值设计用例步骤:
明确需求
确定有效和无效等价类
确定边界范围值
提取数据编写测试用例
4、使用案例
需求:验证QQ账号的合法性
要求: 6~10位自然数
明确需求
确定有效和无效等价类
确定边界范围值

- 提取数据编写测试用例

四、判定表法
1、定义
判定表法,是一种以表格形式,表达多条件逻辑判断的工具。
2、使用场景
1)多条件组合的测试 且 2)各条件之间要有约束(依赖)

上方截图中,通过表格将各种组合情况都列出来,非常清晰。其中:
灰色背景色是条件桩:列出问题中的所有条件,列出条件的次序无关紧要。
绿色背景色是动作桩:列出问题中可能采取的操作,操作的排列顺序没有约束。
黄色背景色是条件项:列出条件对应的取值,所有可能情况下的真假值。
蓝色背景色是动作项:列出条件项的、各种取值情况下应该采取的动作结果。
3、判定表使用步骤
Step1、明确需求
Step2、画出判定表
1)列出条件桩和动作桩
2)填写条件项,对条件进行全组合
3)根据条件项的组合确定动作项
4)简化、合并相似规则(有相同的动作)
step3、根据规则编写测试用例
4、使用案例
订购单检查。规则:
1)如果金额大于500元,又未过期,则发出批准单和提货单;
2)如果金额大于500元,但过期了,则不发批准单与提货单;
3)如果金额小于等于500元,则不论是否过期都发出批准单和提货单;
4)在过期的情况下不论金额大小还需要发出通知。
Step1、明确需求
条件桩,两个
金额是否大于500元
订单状态是否过期
动作桩,三个
发出批准单
发出提货单
发出通知单
Step2、画出判定表
-
- 列出条件桩和动作桩

2)填写条件项,对条件进行全组合

3)根据条件项的组合确定动作项

4)简化、合并相似规则(有相同的动作)
没有,不用操作。
step3、根据规则编写测试用例
其中,判定表中贯穿条件项和动作项的一列就是一条规则,每条规则要配上一条测试用例。

五、正交法
1、定义
正交法,是通过正交表选择部分有代表性的组合进行测试(降低测试成本)
正交表,是经过统计学的实验,分析得来的一个数学结果。它相当于是在大数据集合当中,按照数学的特性去均匀的选择挑选测试数据,以便大幅缩小测试范围。
2、应用场景
各条件相互独立,每一种有效用例里的组合数过多,而且这些组合都是有效数据。举例:

比如,要为购票系统设置测试用例。到达北京的出发地至少有300个,以北京为出发地的目的地也至少有300个,加上出发日期,一年365天,取300天。
请问,覆盖出发地,目的地,出发日3个条件的测试用例,可以写多少条?
答案:300 x 300 x 300 =9w x 300= 2700w 条。
但由于城市名无法设置子集边界,不好使用等价类方法来缩小范围,那你就要考虑正交去降低了。
3、使用步骤
-
分析需求,确定因素(条件)和水平(条件取值)
-
选择正交表进行映射
-
设计测试用例:正交表一行对应一条用例
-
根据需求补充用例:常用的组合项
4、案例讲解

4.1,分析需求,确定因素(条件)和水平(条件取值)
因素:出发地、目的地和出发日期 因素数:3个
水平:填写、不填写 水平数:2个
4.2,选择正交表进行映射

正交表列名:条件具体取值替换。
水平:“填写”替代 1、“不填写”替代 2。

4.3,设计测试用例:正交表一行对应一条用例
case1: 出发地:填写+目的地:填写+出发日期:填写
case2: 出发地:填写+目的地:不填写+出发日期:不填写
case3: 出发地:不填写+目的地:填写+出发日期:不填写
case4: 出发地:不填写+目的地:不填写+出发日期:填写
4.4, 根据需求补充用例:常用的组合项
如果某些组合情况,用户经常使用,还可以进行适度的用例完善。
六、错误推测法
1、定义
通过【经验】推测系统可能出现的问题。
可以作为正常用例方法的补充存在。
2、场景
2.1、 时间紧任务量大时,根据之前项目类似经验找出易出错的模块重点测试
2.2、 时间宽裕通过该方法,列出之前出现问题较多的模块再次测试
3、使用方法
根据【经验】和【直觉】列举出可能出现问题的清单,根据清单分析问题可能原因,推测发现缺陷。
4、案例讲解
比如,输入框填入“空”。
七、最后用例方法总结

以上六种用例,最重要的是区别每种用例方法的应用场景。简单总结如下:
1)流程图法(也叫场景法),主要针对业务场景,也就是多个功能的组合使用场景。
2)等价类划分法,主要针对数据很大,且数据主要为数字、日期类型。
3)边界值, 确认边界,要结合等价类使用
4)判定表, 一条测试用例覆盖多个条件,且条件之间有约束
5)正交法, 数据很大,但是无法使用等价类缩小范围(比如城市名,浏览器名称不是数字、日期类型),就用正交表来缩小范围
6)错误推测法,有经验的人使用
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
常见的软件测试用例设计方法有哪些?
常见的软件测试用例设计方法,个人认为主要是下面这6种: 1)流程图法(也叫场景法) 2)等价类划分法 3)边界值分析 4)判定表 5)正交法 6)错误推测法 这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解…...
【24届校招】c++选手还有机会吗?如何选择更好的出路?
一、今年为什么c选手就业形势如此艰难? 去年c岗位的火热,不少c选手拿到高薪offer,今年转c的人群变多,内卷加剧,高学历大佬多如牛毛,很多比较好的c岗位多人投递,僧多肉少。 从行情来说…...
hvigor ERROR: Failed :entry:default@ProcessLibs...【鸿蒙开发-BUG已解决】
文章目录 项目场景:问题描述原因分析:建议的解决方案总结HarmonyOSArkTS项目场景: 项目无法在真机上运行。报错 hvigor ERROR: Failed :entry:default@ProcessLibs… hvigor ERROR: 2 file found in ‘lib/arm64-v8a/libagccrypto.so’. This may cause unexpected errors …...
由于没有公钥,无法验证下列签名: NO_PUBKEY
安装软件需要更新 sudo apt-get update 由于没有公钥,无法验证下列签名: NO_PUBKEY AA8E81B4331F7F50 NO_PUBKEY 112695A0E562B32A sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3B4FE6ACC0B21F32 只需要把最后一部分搞成自己…...
vue3 for循环创建的多个e-form 添加校验
v-for 创建 ref <el-form :model"item" :rules"state.rules" :ref"el > getRiskSpreadRef(el, index)" ></el-form>// 定义ref list const riskSpreadRefList ref<HTMLElement[]>([]);// ref存到数组 const getRiskSpread…...
【虚拟机Ubuntu 18.04配置网络】
虚拟机Ubuntu 18.04配置网络 配置网络连接方式,查看自己网关 修改主机名 修改系统配置1. 配置网络连接方式,查看自己网关 选择虚拟机镜像设置网络连接模式,可以选择桥接或者NAT连接(我这里选择是NAT连接) 确定自己网关,可以在虚拟机 -》 编辑 -》虚拟网络编辑器…...
MySQL 中的 JSON_CONTAINS 函数详解
在处理 MySQL 中的 JSON 数据时,我们经常需要检查一个 JSON 文档是否包含特定的值。这时,JSON_CONTAINS 函数就显得非常有用。 JSON_CONTAINS函数介绍 JSON_CONTAINS 是 MySQL 提供的一个 JSON 函数,用于测试一个 JSON 文档是否包含特定的值…...
详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!
文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置,颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…...
ClickHouse中的物化视图
技术主题 技术原理 物化视图(Materialized View)是一种预先计算并缓存结果的视图,存储在磁盘上自动更新,空间换时间的思路。物化视图是一种优化技术,本质上就是为了加速查询操作,降低系统负载,…...
界面组件Telerik UI for WinForms中文教程 - 创建明暗模式的桌面应用
黑暗模式现在在很多应用程序中都挺常见的,但如何在桌面应用程序中实现它呢?这很简单,本文将为大家介绍如何使用一个类和命令行调用来实现! Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI fo…...
C语言:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
分析: 在主函数 main 中,程序首先定义一个字符变量 c,以及四个整型变量 letters、k、s 和 o,并初始化它们的值为 0。然后使用 printf 函数输出提示信息,让用户输入一行字符。 接下来,程序通过 while 循环结…...
王者荣耀java版
主要功能 键盘W,A,S,D键:控制玩家上下左右移动。按钮一:控制英雄发射一个矩形攻击红方小兵。按钮二:控制英雄发射魅惑技能,伤害小兵并让小兵停止移动。技能三:攻击多个敌人并让小兵停止移动。普攻:对小兵造…...
前缀和与差分
文章目录 前缀和一维前缀和公式CODE 二维前缀和公式CODE 差分一维差分思路作用CODE 二维差分思路CODE 前缀和 一维前缀和 板子题:https://www.acwing.com/activity/content/problem/content/829/ 公式 S [ i ] a [ i ] S [ i − 1 ] S[i] a[i] S[i - 1] S[i]…...
力扣hot100 滑动窗口最大值 单调队列
👨🏫 题目地址 🍻 AC code class Solution {public int[] maxSlidingWindow(int[] nums, int k){int n nums.length;int[] res new int[n - k 1]; // 单调递减队列int[] q new int[n];// q数组维护的是元素在 nums 数组对应的下标int…...
mysql MHA配置文件
[rootlocalhost mastermha]# cat app1.cnf [server default]默认服务器配置 check_repl_delay0 #默认值为1,表示如果slave中从库落后主库relay log超过100M,主库不会选 择这个从库为新的master,因为这个从库进行恢复需要很长的时间.通过设置参数check_r…...
策略算法与Actor-Critic网络
策略算法 教程链接 DataWhale强化学习课程JoyRL https://johnjim0816.com/joyrl-book/#/ch7/main 策略梯度 与前面的基于价值的算法不同,这类算法直接对策略本身进行近似优化。 在这种情况下,我们可以将策略描述成一个带有参数 θ θ θ的连续函数…...
基于Pytest+Requests+Allure实现接口自动化测试
一、整体结构 框架组成:pytestrequestsallure 设计模式: 关键字驱动 项目结构: 工具层:api_keyword/ 参数层:params/ 用例层:case/ 数据驱动:data_driver/ 数据层:data/ 逻…...
【中间件】消息队列中间件intro
中间件middleware 内容管理 introwhy use MQMQ实现漫谈主流消息队列QMQ IntroQMQ架构QMQ 存储模型 本文还是从理论层面分析消息队列中间件 cfeng现在处于理论分析阶段,以中间件例子,之前的blog对于中间件是从使用角度分享了相关的用法,现在就…...
从 RBAC 到 NGAC ,企业如何实现自动化权限管理?
随着各领域加快向数字化、移动化、互联网化的发展,企业信息环境变得庞大复杂,身份和权限管理面临巨大的挑战。为了满足身份管理法规要求并管理风险,企业必须清点、分析和管理用户的访问权限。如今,越来越多的员工采用移动设备进行…...
vue3中如何使用TypeScript?
在Vue 3中引入和使用TypeScript非常简单。下面是在Vue 3中引入和使用TypeScript的步骤: 创建Vue 3项目:首先,使用Vue CLI创建一个新的Vue 3项目。可以使用以下命令: vue create my-project在创建项目时,选择TypeScri…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

