软件测试学习笔记丨测试用例设计方法
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31921
一,黑盒测试方法论
1,等价类
1.1 定义
- 等价类划分是一种重要的、常用的黑盒测试方法
- 不需要考虑程序的内部结构,只需要考虑程序的输入规格即可
- 它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性
- 用户所有可能输入的数据,划分成了若干个子集,然后从每一个子集当中选取少数具有代表性的数据作为测试用例
- 在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果
1.2 等价类分类
- 有效等价类:指符合《需求文档》,输入合理的数据集合
- 无效等价类:指不符合《需求文档》,输入不合理的数据集合
1.3 设计步骤
- 先划分等价类:找出所有可能的分类
- 确定有效等价类:需求中的条件
- 确定无效等价类:与条件相反的情况,再找到特殊情况
- 从各个分类中挑选测试用例数据
2,边界值
2.1 定义
- 边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力
- 边界值分析法是作为对等价类划分法的补充,测试用例来自等价类的边界
2.2 边界值确定
- 上点:边界上的点
- 离点:离上点最近的点
- 内点:在输入域内任意一个点
- 选取正好等于、刚好大于或刚好小于边界值作为测试数据
2.3 边界值总结
- 确定边界情况
- 选取正好等于、刚刚好大于或刚刚好小于边界值作为测试数据
- 确定各个值的等价类
3,判定表
3.1 定义
- 因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例
- 画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例
3.2 组成
- 条件桩:问题的所有条件
- 动作桩:问题的所有输出
- 条件项:针对条件桩的取值
- 动作项:条件项的各种取值情况下的输出结果
3.3 设计步骤
- 列出所有的条件桩和动作桩
- 确定规则数:条件取值个数^条件数
- 填入条件项
- 填入动作项。得到初始判定表
- 简化判定表
4,场景法
4.1 定义
- 场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程 - 基本流:按照正确的业务流程来实现的一条操作路径
- 备选流:导致程序出现错误的操作流程
  
 
4.2 用例设计步骤
- 根据需求规格说明,画出功能模块流程图;
- 根据流程图,描述出程序的基本流及备选流;
- 根据基本流和备选流生成不同的场景,构造场景列表;
- 对每一个场景生成相应的测试用例;
- 对生成的所有测试用例重新复审,去掉多余的测试用例;
- 测试用例确定后,为每一个测试用例确定测试数据值
5,因果图
5.1 定义
- 因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法
- 它适合于检查程序输入条件的各种组合情况 - “因” —— 输入条件
- “果” —— 输出结果
 
5.2 适合场景
- 描述多种条件的组合
- 产生多个动作
5.3 因果图中的基本符号
- 恒等:若原因出现,则结果出现;若原因不出现,则结果也不出现
- 非:若原因出现,则结果不出现;若原因不出现,则结果出现
- 或:有多个原因。若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现
- 与:有多个原因。若几个原因都出现,则结果才出现;若其中一个原因不出现,则结果不出现
5.4 因果图中的约束条件
- 互斥 E:a、b、c 只能有一个成立,但是可以都不成立
- 包含 I:a、b、c 中至少有一个成立
- 唯一 O:a、b、c 有且仅有一个成立
- 要求 R:如果 a 成立,则要求 b 必须也成立,其他的不约束
- 屏蔽 M:如果 a 成立的时候,强制 b 不成立,其他的不约束
5.5 因果图法基本步骤
- 找出所有的输入条件(因)
- 找出所有的输出条件(果)
- 明确所有输入条件之间的制约关系以及组合关系
- 明确所有输出条件之间的制约关系以及组合关系
- 找出什么样的输入条件组合会产生哪种输出结果
- 把因果图转换成判定表
- 为判定表中的每一列表示的情况设计测试用例
6,正交法
6.1 定义
简介
 正交法(0rthogonalArray)是一种设计实验方案和测试用例的统计方法,旨在通过有限次试验来研究多个因素对结果的影响,同时尽可能减少试验次数。正交法的主要特点是通过一种合理的方式选择一组试验参数的组合,以实现对所有可能的参数组合进行有效的覆盖,从而节省试验资源和成本。
正交法的核心思想是在所有可能的因素组合中,选择一组互相正交的因子水平组合,以尽可能少的试验次数来观察所有因素的影响。
正交表是一种特制的表格,一般用 Ln(m^k)表示,L代表是正交表,n代表试验次数或正交表的行数,k代表最多可安排影响指标因素的个数或正交表的列数,m 表示每个因素水平数。
其中,因素是影响试验结果的一个变量或因素,可以是独立变量、处理水平或参数。因素可以是产品的属性、工艺参数、环境条件等。水平是每个因素可能的取值或状态。例如,一个因素可以有多个不同的水平,如高、中、低等。
6.2 使用场景及操作步骤
使用场景
- 多参数系统:当系统具有多个输入参数,而且这些参数之间存在相互影响时,正交法特别有用。
- 多条件覆盖:当需要覆盖不同的条件组合,以测试系统在不同情况下的行为。
- 资源有限:当测试资源有限,需要在较小的测试用例集中获得尽可能广泛的覆盖。
常用正交表
正交表根据参数数量和取值范围的不同,有多种等级和类型可供选择。选择适当的正交表可以有效地设计测试用例,覆盖各种参数组合,以达到最佳的测试覆盖和效率
操作步骤
 1.确定测试参数和取值范围:识别系统的输入参数和条件。这可能包括各种参数、设置、状态等。
 2.确定正交表和参数等级:根据参数数量和取值范围,选择合适的正交表
 3.设计正交表:使用正交表工具,根据系统的输入参数和条件构建正交表,
 4.生成测试用例:从正交表中选择测试用例,以覆盖尽可能多的参数组合。确保所选用例能够测试系统的各个方面。
7,基于模型的测试
二,测试用例设计
1,用例组成(以我测过的项目为例)
- 需求名称
- 一级模块
- 二级模块
- 用例标题
- 优先级
- 前提条件
- 测试步骤
- 期望结果(预期结果)
2,用例设计方法的选择
- 任何情况下,都需要采用等价类划分法,将无限测试变成有限测试
- 在规定了数据范围的情况下,必须采用边界值分析法
- 如果需要关注它的主要功能和业务流程、业务逻辑是否正确实现,考虑使用场景法
- 如果含有输入条件的组合情况,考虑选用因果图和判定表法
- 采用错误推断法再追加测试用例
3,测试用例编写步骤
- 划分功能模块
- 正向功能验证
- 单个功能项验证
- 功能之间交互验证
- 隐形需求
4,测试用例的粒度
- 测试用例可以写的很简单,也可以写的很复杂
- 最简单的测试用例是测试的纲要,仅仅指出要测试的内容
- 测试用例写的过于简单,则可能失去了测试用例的意义
- 测试用例写得过于复杂或详细,会带来两个问题: - 效率问题
- 维护成本问题
 
5,用例评审
- 测试用例的本身的描述是否清晰,是否存在二义性
- 测试用例内容是否正确,是否与需求目标相一致
- 测试用例的期望结果是否确定、唯一
- 测试用例是否覆盖了所有的需求
- 测试用例是否具有可执行性
- 是否从用户层面来设计用户使用场景和业务流程的测试用例
- 场景测试用例是否覆盖最复杂的业务流程
- 用例设计是否包含了正面、反面的用例
三,面试测试用例设计
1,设计思路
- 需求分析 - 明确需求
- 和面试官交流需求细节
 
- 界面 - 页面布局设计和产品原型图一致
- 页面文案正确
 
- 功能 - 正向功能验证
- 单个功能项验证
- 功能之间交互验证
- 接口验证
 
- 易用性 - 功能操作是否简便
- 页面布局是否美观合理
- 提示语相关信息是否易于理解
 
- 兼容性 - APP - 平台
- 厂商
- 系统版本
- 屏幕大小与分辨率
 
- WEB - 浏览器
- 操作系统
- 分辨率
 
 
- APP 
- 性能 - 服务器性能测试
- APP 客户端性能测试
 
- 安全性 - 注入攻击
- 加密
- 权限
- APP 测试要点 - 网络
- 中断
- 系统权限
 
- WEB 测试要点 - 链接测试
- 多个浏览器同时访问
 
 
四,白盒测试方法
1,白盒测试的度量
- 根据待测产品的内部实现细节来设计测试用例
- 白盒测试的执行手段是可以涵盖单元测试、集成测试
- 使用代码覆盖率作为白盒测试的主要度量指标
2,代码覆盖率常见概念
- 语句覆盖:每行代码都要覆盖至少一次
- 判定覆盖:判定表达式的真假至少覆盖一次
- 判定/条件覆盖:判定覆盖与条件覆盖都必须覆盖
- 条件组合覆盖:判定表达式中的所有条件组合都需要覆盖
- 分支覆盖:控制流中的每条边都要被覆盖一次
- 路径覆盖:所有的路径都要尽量覆盖
- 指令覆盖:一行代码会被编译为多条指令,尽可能的覆盖所有指令
- 方法覆盖:每个方法至少要被覆盖一次
- 类覆盖:每个类至少被覆盖一次
3,覆盖率统计的工具
- emma
- cobertura
- jacoco
4,插桩原理
- 对jvm的字节码插桩
- 基于block插桩
- 计算覆盖的代码块
  
5,流程覆盖
- 利用代码执行流代表流程
- 流程覆盖用路径覆盖率表达
- 对流程进行裁剪获得一个适合业务的小规模的业务子集
- 流程覆盖率=测试经过的路径/业务子集路径
6,精准化测试
- 代码调用链与黑盒测试用例的关联
- 根据代码变更自动分析影响范围
- 黑盒测试过程中借助代码流程覆盖数据指导探索式测试
- 利用线上数据推导有效测试用例
- 代码流程分析与覆盖率统计
推荐学习
【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)
【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试
【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff
【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享
【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装
【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?
【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!
【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我
【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化
【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试
【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !
【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置
【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)
相关文章:
 
软件测试学习笔记丨测试用例设计方法
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31921 一,黑盒测试方法论 1,等价类 1.1 定义 等价类划分是一种重要的、常用的黑盒测试方法不需要考虑程序的内部结构,只需要考虑程序的输入规格即可它将…...
MinIO基本用法
在现代云计算和大数据领域,对象存储因其可扩展性、可靠性和低成本成为数据存储的重要选择。MinIO作为一个高性能、分布式的对象存储系统,凭借其开源、简单易用以及与Amazon S3兼容的特性,在业界得到了广泛的应用。本文将带您了解MinIO的基本用…...
MySQL windows版本安装
一、下载MySQL安装包 访问MySQL官网:首先,访问MySQL的官方网站(MySQL),或者更具体地,访问MySQL的下载页面(MySQL :: Download MySQL Community Server)。 选择适合的版本࿱…...
Python实现人脸轮廓提取
目录 一、背景知识1.1 人脸检测和轮廓提取的意义1.2 人脸检测方法概述1.3 轮廓提取方法概述二、常用的人脸轮廓提取方法2.1 基于边缘检测的轮廓提取2.2 基于形态学操作的轮廓提取2.3 基于特征点检测的轮廓提取三、Python实现人脸轮廓提取3.1 安装依赖库3.2 使用Dlib进行人脸检测…...
 
Prettier+Vscode setting提高前端开发效率
文章目录 前言Prettier第一步:下载依赖(团队合作)或下载插件(独立开发)第二步:添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步:添加.prettierignore文件**以下是我常用的****配…...
 
YOLOv10实时端到端目标检测
文章目录 前言一、非极值大抑制(NMS)二、NMS算法的具体原理和步骤三、YOLOV10创新点四、YOLOv10使用教程五、官方github地址 前言 距离上次写YOLOv5已经过去了两年,正好最近用YOLOv10重构了项目,总结下YOLOv10。 YOLOv10真正实时端到端目标检测ÿ…...
Java中的Annotation注解
常用注解 override:重写方法deprecated:弃用SuppressWarnings:抑制编译器警告 元注解(注解的注解) Target:描述注解所能修饰的类型Retention:描述注解的生命周期(SOURCE源代码、C…...
 
小五金加工:细节决定产品质量与性能
在小五金加工领域,细节往往决定着最终产品的质量、性能以及市场竞争力。看似微不足道的细微之处,实际上蕴含着巨大的影响。时利和将介绍小五金加工中细节的重要性。 首先,细节关乎产品的精度。小五金零件通常尺寸较小,但对精度的要…...
 
VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤
文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…...
 
世界首位「AI科学家」问世!独立生成10篇学术论文! 横扫「顶会」?
大家好,我是 Bob! 😊 一个想和大家慢慢变富的 AI 程序员💸 分享 AI 前沿技术、项目经验、面试技巧! 欢迎关注我,一起探索,一起破圈!💪 AI科学家出世 最近一位人工智能AI科学家横空出世。 它是…...
 
【高阶数据结构】图
图 1. 图的基本概念2. 图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 3. 图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4. 最小生成树4.1 Kruskal算法4.2 Prim算法 5. 最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算…...
 
调研-音视频
音视频 基础概念主要内容音频基础概念音频量化过程音频压缩技术视频基础概念视频bug视频编码H264视频像素格式YUVRGB参考文献基础概念 ● 实时音视频应用环节 ○ 采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。 主要内容 音频 基础概念 三要素:音调(音频)、…...
 
【数据结构】链式结构实现:二叉树
二叉树 一.快速创建一颗二叉树二.二叉树的遍历1.前序、中序、后序遍历(深度优先遍历DFS)2.层序遍历(广度优先遍历BFS) 三.二叉树节点的个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第k层节点个数七.二叉树查找值为x的节点…...
 
20221元组
在Python语言中, (7)是一种可变的、有序的序列结构,其中元素可以重复。 A.元组(tuple) B. 字符串(str) C. 列表(list) D.集合(set) ChatGPT 说: ChatGPT 在Python中,选项 C 列表(list) 符合题目描述。 解释: 列表 (list) 是一种可变的、有…...
 
艾瑞白皮书解读(三)丨剖析制造业、工程设计、创投数据治理痛点与典型方案
2024年7月 艾瑞咨询公司对国内数据治理行业进行了研究,访问了国内多位大中型企业数据治理相关负责人,深度剖析中国企业在数字化转型过程中面临到的核心数据问题后,重磅发布《2024中国企业数据治理白皮书》(以下简称“白皮书”&…...
 
如何在 Odoo 16 Studio 模块中自定义视图和报告
为了有效地运营公司,需要定制的软件系统。Odoo 平台提供针对单个应用程序量身定制的管理解决方案和用户友好的界面,以便开发应用程序,而无需更复杂的后端功能。该平台支持使用简单的拖放功能和内置工具创建和修改更多定制的 Odoo 应用程序。企…...
 
Redis的十大数据类型的常用命令(上)
目录 1.key的操作命令2.String的常用命令案例一:dy点赞案例二:文章的喜欢数 3. List的常用命令案例:公众号订阅的消息 4. Hash的常用命令案例:早期购物车设计 5. Set的常用命令案例一:抽奖小程序案例二:朋友…...
智慧服务管理平台小程序开发方案
智慧服务管理平台小程序系统为用户提供一站式、个性化的服务管理解决方案,帮助用户优化服务流程、提升服务效率、增强客户满意度。适用于智慧校园、食堂、养老、智慧停车、智慧园区、智慧医院、智慧农业、康养、智慧社区、智慧农场等行业场景。一、目标用户 企业客户…...
 
【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?
ArrayList 和 LinkedList 的区别是什么? 1. ArrayList 2. LinkedList 3.总结 🎈边走、边悟🎈迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类,但它们在内部结构和操作性能上有所不同。 1. ArrayLis…...
 
【排序篇】快速排序的非递归实现与归并排序的实现
🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1 快速排序非递归2. 归并排序3.排序算法复杂度及稳定性分析 1 快速排序非递归 利…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
 
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
 
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
 
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
 
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
 
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
 
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
