【黑盒测试】等价类划分法及实例
本文主要介绍黑盒测试之等价类划分法,如什么是等价类划分法,以及如何划分,设计等价类表。以及关于三角形案例的等价类划分法。
文章目录
一、什么是等价类划分法
二、划分等价类和列出等价类表
三、确定等价类的原则
四、建立等价类表
五、确定测试用例
六、经典案例-三角形
一、什么是等价类划分法
等价类划分法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。
使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出等价类表。
二、划分等价类和列出等价类表
可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据取得较好的测试结果。
等价类划分有两种不同的情况:
1)有效等价类:是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
2)无效等价类:与有效等价类的定义恰巧相反。
三、确定等价类的原则
1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
四、建立等价类表
在确立了等价类之后,建立等价类表,列出所有划分出的等价类:

五、确定测试用例
根据已列出的等价类表,按以下步骤确定测试用例:
1.为每个等价类规定一个唯一的编号;
2.设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖;
3.设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。
六、经典案例-三角形
根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。
“一个程序读入3个整数,把这三个数值看作一个三角形的3条边的长度值。这个程序要打印出信息,说明这个三角形是不等边的、是等腰的、还是等边的。”
1.首先我们根据等价类划分法设计出等价类表:

2.根据以上的等价类划分,我们可以用最小用例条数,设计出如下这个三角形的测试用例:
| 序号 | 【A,B,C】 | 覆盖等价类 | 输出 |
| 1 | 【3,4,5】 | (1),(2),(3),(4),(5),(6) | 一般三角形 |
| 2 | 【0,1,2】 | (7) | 不能构成三角形 |
| 3 | 【1,0,2】 | (8) | |
| 4 | 【1,2,0】 | (9) | |
| 5 | 【1,2,3】 | (10) | |
| 6 | 【1,3,2】 | (11) | |
| 7 | 【3,1,2】 | (12) | |
| 8 | 【3,3,4】 | (1),(2),(3),(4),(5),(6),(13) | 等腰三角形 |
| 9 | 【3,4,4】 | (1),(2),(3),(4),(5),(6),(14) | |
| 10 | 【3,4,3】 | (1),(2),(3),(4),(5),(6),(15) | |
| 11 | 【3,4,5】 | (1),(2),(3),(4),(5),(6),(16) | 非等腰三角形 |
| 12 | 【3,3,3】 | (1),(2),(3),(4),(5),(6),(17) | 是等边三角形 |
| 13 | 【3,4,4】 | (1),(2),(3),(4),(5),(6),(14),(18) | 非等边三角形 |
| 14 | 【3,4,3】 | (1),(2),(3),(4),(5),(6),(15),(19) | |
| 15 | 【3,3,4】 | (1),(2),(3),(4),(5),(6),(13),(20) |
相关文章:
【黑盒测试】等价类划分法及实例
本文主要介绍黑盒测试之等价类划分法,如什么是等价类划分法,以及如何划分,设计等价类表。以及关于三角形案例的等价类划分法。 文章目录 一、什么是等价类划分法 二、划分等价类和列出等价类表 三、确定等价类的原则 四、建立等价类表 …...
LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“…...
SQLite数据库是什么?DB Browser for SQLite是什么?
SQLite是一个轻量级的嵌入式数据库,它是一个遵守ACID原则的关系型数据库管理系统。SQLite的主要特点是占用资源少、无需配置、支持多种操作系统和编程语言,并且具有高性能和跨平台特性。 SQLite的基本概念和特性 轻量级:SQLite的数据…...
核心概念解析Caffeine 缓存模型与策略
1. 简介 什么是 Caffeine Caffeine 是一个高性能的 Java 缓存库,专为提高内存缓存的效率和灵活性而设计。它由 Google 的 Guava Cache 项目启发,并提供了更高的性能和更丰富的功能集。Caffeine 以其卓越的缓存命中率和内存管理能力而广受欢迎ÿ…...
ubuntu 22.04 防火墙
Ubuntu(22.04)云主机SSH安全加固 https://blog.csdn.net/qq_44846097/article/details/141098092 ubuntu22.04防火墙策略 https://blog.csdn.net/sunyuhua_keyboard/article/details/139493464 Ubuntu 22.04 防火墙设置和开放端口命令 https://blog.c…...
【数据结构-合法括号字符串】力扣678. 有效的括号字符串
给你一个只包含三种字符的字符串,支持的字符类型分别是 ‘(’、‘)’ 和 ‘*’。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。 有效 字符串符合如下规则: 任何左括号 ‘(’ 必须有相应的右括号 ‘)’。 任何右括号 …...
ThreadX在STM32上的移植:F1,F4通用启动文件tx_initialize_low_level.s
在嵌入式系统开发中,实时操作系统(RTOS)的选择对于系统性能和稳定性至关重要。ThreadX是一种广泛使用的RTOS,它以其小巧、快速和可靠而闻名。在本文中,我们将探讨如何将ThreadX移植到STM32微控制器上,特别是…...
【算法】递归+深搜:814.二叉树剪枝
目录 1、题目链接 2、题目 3、解法(后序遍历) 4、代码 1、题目链接 814.二叉树剪枝(LeetCode) 2、题目 3、解法(后序遍历) 我们这次不使用宏观的观察法,而是从具体实现开始。 题目要求我们,去掉不含1的子树。 对于子树这个…...
spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)修复
spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)修复 漏洞描述 CVE-2024-38816: Path traversal vulnerability in functional web frameworks 通过功能性 Web 框架 WebMvc.fn 或 WebFlux.fn 提供静态资源的应用程序容易受到路径遍历攻击。攻…...
ESP32-C3 入门笔记03:VScode + flash_download_tool 下载烧录程序(ESP-IDF + PlatformIO)
ESP32-C3 支持多种烧录方式,主要包括以下几种: VS Code 串口烧录:使用 VS Code 配合 PlatformIO 或 ESP-IDF 插件进行串口烧录。串口连接通常使用 UART 接口,通过 USB 转串口芯片与电脑连接。步骤大致如下: 配置 VS Co…...
Node.js——fs模块-文件重命名和移动
1、在Node.js中,我们可以使用 rename 或 renameSync 来移动或重命名文件或文件夹 2、语法: fs.rename(oldPath,newPath,callback) fs.renameSync(oldPath,newPath) 参数说明: oldPath 文件当前的路径 newPath 文件新的路径 callback 操…...
vue2.0版本引入Element-ui问题解决
作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 使用版本: vue:2.6.14 element-ui:2.15.14 一、问题及解决 1、安装后组件没有生效&#x…...
qt QTableView详解
1、概述 QTableView 是 Qt 框架中的一个高级视图类,用于以表格形式展示二维数据。它基于 QAbstractItemView,并与模型(通常是 QAbstractTableModel 或 QStandardItemModel)结合使用,以实现数据的展示和交互。QTableVi…...
将Notepad++添加到右键菜单【一招实现】
一键添加注册表 复制以下代码保存为 Notepad.reg,将红框内路径修改为自己电脑的“Notepad.exe路径”后,再双击运行即可。 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\NotePad] "Notepad" "Icon""D:\\N…...
Nature Methods | 基于流形约束的RNA速度推断精准解析细胞周期动态调节规律
生信碱移 VeloCycle算法 VeloCycle:基于流形约束的RNA速度推断在细胞周期动态中的精准解析 今天给各位老铁们分享一篇于2024年10月31号发表在 Nature Methods [IF: 36.1] 的文章:"Statistical inference with a manifold-constrained RNA velocity…...
在离线环境中使用sealos工具快速部署一套高可用的k8s服务集群
文章目录 项目基础信息工具版本测试环境 下载资源文件下载sealos二进制命令文件下载k8s安装镜像和组件资源下载docker离线安装包下载Docker Registry容器镜像 NFS共享配置coredns服务的DNS解析配置安装配置sealos、k8s服务安装sealos工具导入k8s及相关组件镜像安装 K8s 集群部署…...
ReactPress系列—Next.js 的动态路由使用介绍
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,感谢Star。 Next.js 的动态路由使用介绍 Next.js 是一个流行的 React 框架,支持服务端渲染、静态站点生成和动态路由等功能,极大地简化…...
DevOps业务价值流:需求设计最佳实践
DevOps实践正推动着产品快速迭代与高质量交付,但需求设计作为产品开发的关键起点,往往被忽视。它不仅是收集与分析需求的过程,更是将需求转化为可实施产品特性的核心。本文深入探讨DevOps业务价值流中的需求设计,从调研、整理、原…...
A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
RC高通滤波器Bode图分析(传递函数零极点)
RC高通滤波器 我们使得R1K,C1uF;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i R X C R R 1 s C R s R C 1 s R C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{R }{X_{C}R} \frac{R }{\frac{1}{sC}R} \fra…...
OpenClaw+GLM-4.7-Flash:低成本搭建24/7内容处理助手
OpenClawGLM-4.7-Flash:低成本搭建24/7内容处理助手 1. 为什么选择本地模型与OpenClaw组合 去年我在处理个人知识管理时遇到了一个典型矛盾:既需要AI辅助完成资料收集、草稿生成等重复工作,又对第三方API的隐私风险和持续成本心存顾虑。直到…...
从零开始:LabelImg图像标注工具的完整实战指南
从零开始:LabelImg图像标注工具的完整实战指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out Label Stu…...
3步掌握高效网络数据采集:Scrapling智能反爬+异步处理实战指南
3步掌握高效网络数据采集:Scrapling智能反爬异步处理实战指南 【免费下载链接】Scrapling 🕷️ Undetectable, Lightning-Fast, and Adaptive Web Scraping for Python 项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling 在当今数据驱…...
OpenClaw备份与迁移:GLM-4.7-Flash项目完整转移指南
OpenClaw备份与迁移:GLM-4.7-Flash项目完整转移指南 1. 为什么需要完整的迁移方案 上周我的主力开发机突然硬盘故障,导致所有数据丢失。虽然OpenClaw本身是开源工具可以重装,但那些精心调试的配置文件、自定义技能和对接好的GLM-4.7-Flash模…...
OpenClaw安全指南:Qwen3-32B-Chat本地化执行边界控制
OpenClaw安全指南:Qwen3-32B-Chat本地化执行边界控制 1. 为什么需要关注OpenClaw的安全边界? 去年冬天的一个深夜,我被一阵急促的键盘敲击声惊醒。走进书房,发现OpenClaw正在自动执行我前一天设置的爬虫任务——这本是正常现象&…...
Go Context 取消信号机制剖析
Go Context 取消信号机制剖析 在Go语言中,Context是控制并发任务生命周期的重要工具,其取消信号机制尤其关键。通过Context,开发者可以优雅地终止协程、释放资源,避免资源泄漏和无效计算。本文将深入剖析Go Context的取消信号机制…...
揭秘28BYJ-48步进电机的隐藏技能:用Arduino实现0.056°超高精度控制
揭秘28BYJ-48步进电机的隐藏技能:用Arduino实现0.056超高精度控制 在创客和硬件爱好者的世界里,28BYJ-48步进电机因其低廉的价格和广泛的应用而备受青睐。这款电机标称步距角为5.625,看似精度有限,但通过巧妙的驱动技术和算法优化…...
深度测评:2026年最值得拥有的专业降AI率工具
2026年论文降AI率工具已从“基础修改”升级为智能化、多维度的学术合规解决方案,核心评价维度涵盖AIGC识别精度、文本自然度、文献真实性、格式合规性、查重适配性及多语言支持。本次测评涵盖6款主流工具,覆盖中英文写作、全流程与专项优化、免费与付费模…...
赣州琴行哪家最可靠
在赣州,选择一家可靠的琴行对于孩子的钢琴启蒙和成长至关重要。今天我们就来聊聊赣州的几家知名琴行,看看哪家最适合您的孩子。1. 可六琴行:专注儿童钢琴启蒙,天天练琴模式为什么选择可六琴行?1.1 专注儿童钢琴启蒙具体…...
化工模拟老司机的原油蒸馏骚操作
Aspen 化工过程模拟虚拟组分蒸馏原油 本可模型 在本模型中,将使用pseudocomponents进行原油蒸馏。 将创建一个由常压蒸馏塔和真空蒸馏塔组成的模型。 常压蒸馏塔将使用 Chao-Seader 热力学模型建模,而真空蒸馏塔将使用 Braun K10 模型建模。在Aspen里折腾…...
