好的,我们来详细解释等价类划分法,并使用中文提供测试用例设计实例。
核心思想: 等价类划分法是一种黑盒测试技术。它将软件的所有输入数据划分成若干个等价类。每个等价类中的数据应该被软件以相同的方式处理(要么都被接受并产生类似输出,要么都被拒绝)。目的是通过测试每个等价类中的一个代表值来代替测试整个庞大的输入域,从而高效地减少测试用例数量,同时保证测试的覆盖度。
为什么要划分等价类? 想象一下,测试一个只能输入1-100之间整数的文本框。测试所有101个值(1到100和无效值)效率太低。划分等价类后,我们只需要测试:
- 一个有效等价类代表值: 如 50(代表所有1-100的数)
- 两个无效等价类代表值: 如 0(代表小于1的数),101(代表大于100的数)
关键概念:
- 有效等价类: 符合软件规格说明或预期的、合理且有意义的输入数据构成的集合。测试这些类是为了验证软件功能正常。
- 无效等价类: 不符合软件规格说明或预期的、不合理或无意义的输入数据构成的集合。测试这些类是为了验证软件能妥善处理错误输入(如给出错误提示,而非崩溃)。
设计步骤:
- 识别输入域: 明确被测试功能需要哪些输入数据(字段、参数等)。
- 划分有效等价类: 根据软件规格说明,将所有合法的、预期能正确处理的输入划分成若干个等价类。
- 规则:
- 每个有效输入必须属于且只属于一个有效等价类。
- 相同方式处理的输入分在一类(如所有正整数)。
- 考虑边界值(边界值分析法常与之结合)。
- 考虑输入条件之间的关系。
- 规则:
- 划分无效等价类: 根据软件规格说明和常识,考虑所有可能的非法、无效、异常或边界外的输入情况,将其划分成若干个无效等价类。
- 规则(常见场景):
- 输入为空(空白、Null)
- 输入类型错误: 要求数字却输入了字母、符号等。
- 输入长度错误: 过短或过长。
- 输入格式错误: 不符合预定格式(如日期格式、邮箱格式)。
- 输入范围错误: 小于最小值或大于最大值。
- 输入包含非法字符: 如密码中不允许的特殊字符。
- 输入数据关联性错误: 多个输入字段之间存在逻辑依赖关系时的无效组合(如密码和确认密码不一致)。
- 规则(常见场景):
- 为每个等价类设计测试用例:
- 为每个有效等价类设计至少一个测试用例,使用该等价类中一个代表性的输入值(通常包括边界值)。
- 为每个无效等价类设计至少一个测试用例,使用该无效等价类中一个代表性的输入值。
- 重要原则: 一个测试用例最好只覆盖一个无效等价类。因为如果一个测试用例包含多个无效输入(比如同时输入空值和格式错误),软件可能只检测到第一个错误就停止处理,导致其他无效条件没有被测试到。
- 优化测试用例: 检查是否有测试用例可以覆盖多个有效等价类(但要确保覆盖),并确保所有等价类都有测试用例覆盖。
实例演示:用户注册 - “用户名”字段
规格说明:
- 字段名: 用户名
- 要求:
- 必填项。
- 长度限制:6-20个字符。
- 允许字符:字母(a-z, A-Z)、数字(0-9)、下划线(_)。
- 必须以字母开头。
- 不能包含空格或其他特殊字符(除了下划线)。
- 在系统中必须唯一(此例中我们假设我们只测试输入本身的有效性,唯一性验证通常需要结合数据库查询,是另一个测试点)。
步骤分解:
-
识别输入域: “用户名”字段的输入值。
-
划分有效等价类:
- VEC1: 长度正好为6个字符的合法用户名 (边界值)
- 代表值:
abc123(假设字母开头,包含字母数字组合)
- 代表值:
- VEC2: 长度正好为20个字符的合法用户名 (边界值)
- 代表值:
abcdefghij1234567890(假设字母开头,包含字母数字组合)
- 代表值:
- VEC3: 长度在6-20个字符之间(非边界)的合法用户名
- 代表值:
user_name123(包含字母、数字、下划线,字母开头)
- 代表值:
- VEC4: 只有字母的合法用户名
- 代表值:
Username(长度在6-20内)
- 代表值:
- VEC5: 字母加数字的合法用户名
- 代表值:
user123(长度在6-20内,字母开头)
- 代表值:
- VEC6: 字母加下划线的合法用户名
- 代表值:
user_name(长度在6-20内,字母开头)
- 代表值:
- VEC7: 字母加数字加下划线的合法用户名 (虽然示例中包含了下划线,但单独列出来更清晰)
- 代表值:
usr_1(注意长度需在范围内,此处假设usr_1长度5无效,所以应为更长的如 user_123)
- 代表值:
- 注意:
VEC3实际上已经包含了VEC4,VEC5,VEC6,VEC7的一些特性。为了更清晰展示划分逻辑,这里并列列出。实际优化时可以合并,但需确保覆盖所有情况。例如user_name123可以覆盖VEC3和VEC7。
- VEC1: 长度正好为6个字符的合法用户名 (边界值)
-
划分无效等价类:
- IVEC1: 用户名为空 (空白或Null)
- 代表值:
(空格) 或 直接留空
- 代表值:
- IVEC2: 用户名长度小于6个字符 (边界值)
- 代表值:
abcde(长度5)
- 代表值:
- IVEC3: 用户名长度大于20个字符 (边界值)
- 代表值:
thisusernameistoolongforthefieldxyz(长度>20)
- 代表值:
- IVEC4: 用户名以数字开头
- 代表值:
123user(长度合规,其他字符合规)
- 代表值:
- IVEC5: 用户名以下划线开头
- 代表值:
_username(长度合规,其他字符合规)
- 代表值:
- IVEC6: 用户名包含空格
- 代表值:
user name(长度合规,其他字符合规但有空格)
- 代表值:
- IVEC7: 用户名包含非法特殊字符 (除下划线外)
- 代表值:
user@name(包含@),user-name(包含-)
- 代表值:
- IVEC8: 用户名只包含数字
- 代表值:
123456(长度合规,但无字母开头)
- 代表值:
- IVEC9: 用户名只包含下划线
- 代表值:
_______(长度在6-20内)
- 代表值:
- IVEC10: 用户名格式正确但与现有用户冲突 (唯一性检查,假设已有用户
existing_user)- 代表值:
existing_user(格式合法,长度合法)
- 代表值:
- IVEC1: 用户名为空 (空白或Null)
-
设计测试用例: 测试用例编号 输入值 预期结果 覆盖等价类 说明 有效等价类测试 TC_VU_01 abc123接受,提示成功或进入下一步 VEC1 最小长度边界 (6字符) TC_VU_02 abcdefghij1234567890接受,提示成功或进入下一步 VEC2 最大长度边界 (20字符) TC_VU_03 validUser12接受,提示成功或进入下一步 VEC3, VEC5 中间长度,字母数字组合 TC_VU_04 AllLetters接受,提示成功或进入下一步 VEC4 仅字母 TC_VU_05 user_with_under接受,提示成功或进入下一步 VEC6 包含下划线 TC_VU_06 mix_123_ABC接受,提示成功或进入下一步 VEC7 字母、数字、下划线混合 无效等价类测试 TC_IU_01 ` (空格) /` (留空)提示错误:“用户名不能为空” IVEC1 空值 TC_IU_02 short提示错误:“用户名长度需在6-20之间” IVEC2 太短 (5字符 < 最小6) TC_IU_03 this_username_is_far_too_long_for_acceptance提示错误:“用户名长度需在6-20之间” IVEC3 太长 (>20字符) TC_IU_04 4numberStart提示错误:“用户名必须以字母开头” IVEC4 数字开头 TC_IU_05 _underscoreFirst提示错误:“用户名必须以字母开头” IVEC5 下划线开头 TC_IU_06 user name提示错误:“用户名不能包含空格” IVEC6 包含空格 TC_IU_07 invalid@char提示错误:“用户名包含非法字符” IVEC7 包含非法字符(@) TC_IU_08 12345678提示错误:“用户名必须以字母开头” IVEC8 纯数字 (也违反了字母开头规则) TC_IU_09 ________提示错误:“用户名必须以字母开头” IVEC9 纯下划线 (也违反了字母开头规则) TC_IU_10 existing_user提示错误:“该用户名已被使用” IVEC10 用户名已存在 (假设已存在)
说明:
- 表格中每个测试用例主要覆盖一个等价类(无效类尤其遵循此原则)。
TC_VU_03覆盖了VEC3(中间长度)和VEC5(字母数字组合),这是一个可以接受的合并,因为输入值同时满足了这两种有效条件。TC_IU_08和TC_IU_09除了违反纯数字/下划线的规则外,也必然违反“必须以字母开头”的规则。测试用例预期结果聚焦在更根本的“必须以字母开头”错误上(也可以设计更具体的错误提示,取决于需求)。- 边界值(
TC_VU_01,TC_VU_02,TC_IU_02,TC_IU_03)是等价类划分法中需要特别关注的点。 - 预期结果应该清晰明确地描述软件应有的行为(接受并继续 or 拒绝并给出具体错误信息)。
总结:
等价类划分法通过将输入数据分类(有效类和无效类),并选取代表性数据设计测试用例,显著提高了测试效率,并能系统地覆盖各种正常和异常输入场景。它是设计黑盒测试用例最基础和重要的方法之一,常与边界值分析法结合使用。在设计时,务必确保所有划分出的等价类都有对应的测试用例覆盖。
鉴源实验室·ISO 26262中测试用例的得出方法-等价类的生成和分析
标准规范中给出了单元、集成、系统测试各阶段的建议测试使用方法,设计生成测试用例的建议方法包括需求分析、等价类的生成和分析、边界值分析、基于已有经验和知识的错误推测等等,从本篇开始我们对测试用例设计生成的方法进行介绍。 01 开始于需求分析 无论使用哪种方法设计测试用例,首先都需要对需
2024-07-30 15:37:25
数据测试:输入数据的设计方法和测试用例设计方法
测试用例的设计是测试设计的重要内容,关于测试用例的设计方法,当前不少出版的测试书和发表的测试文章,不少存在着表述错误,主要是把测试用例中的输入数据的设计方法与测试用例的设计方法混为一谈,对测试初学者和测试用例设计人员产生误导。
2020-06-29 10:22:22
测试用例的管理 介绍测试用例的几种管理方法
摘要 随着软件系统规模的持续增大,业务复杂度的持续增加,软件测试的复杂度也随之越来越大。而软件测试工作复杂度的直接体现,就是测试用例编写、维护、执行和管理,所以编写易读、易维护和易管理的测试用例可以
2021-11-26 15:13:18
利用等价类在TPT中进行测试
在这篇文章中,我们将探讨等价类在用TPT做测试过程中的使用,以及它们如何优化测试过程。等价类将值分类为不同的子集,通过从每个类中选择一个具有代表性的值来简化测试过程。
2023-07-06 14:52:39
基于base test如何来构造测试用例
在设计仿真用例时,有限制条件的激励相比漫无目的的仿真更加有效的找出RTL的bug。因此,同一份测试方案,不同的sequence往往代表着不同的test_case。真正的测试用例都是基于base_test派生的一个类。
2022-09-19 09:16:40
测试用例质量的重要性
在进行测试时,通常会花很多精力选择“正确”的测试工具。这其实只是为了实现次要目标。当然,一个适合开发环境、项目和流程的工具是重要的。然而,对于良好测试而言,最重要的是测试用例的质量。只有“好”的测试用例才会发现软件存在缺陷。
2021-09-03 15:13:23
PTCRB的测试用类认证等级分类介绍
PTCRB的测试用类认证等级CategoryA/B/EA类项:测试用例在商用系统上经过完全验证;必测项且需要结果为PASSB类项:测试用例在商用系统上经过部分验证(标准或系统有缺陷);必测项如果有
2024-03-14 16:46:12
端到端测试用例怎么写
编写端到端测试用例是确保软件系统从头到尾能够正常工作的关键步骤。以下是一个详细的指南,介绍如何编写端到端测试用例: 一、理解端到端测试 端到端测试(End-to-End Testing)是一种软件
2024-09-20 10:29:24
芯片硬件测试用例
例是项目开始的关键,利用白盒和黑盒覆盖,保证产品质量。根据芯片功能,目标市场,进行测试立项:依据BRD/MRD/PRD;计划:测试需求分析、人力资源时间线;测试用例设
2025-09-05 10:04:21
用例篇 | 单元测试用例复用到集成测试?Testlet Library来助力!(上)
作者:fox小编:吃不饱作为一名测试工程师,在做MiL测试时,编写测试用例的效率影响整个测试项目的进度,如何有效提升编写测试用例的效率,是大家都关心的问题。TPT作为一款自动化测试工具,提供了很多
2022-11-04 10:14:55
磁盘eCryptfs加密测试用例
apt安装用户态工具ecryptfs-utils即可。 4.1、测试用例 下图是一个脚本基础测试用例。先创建test目录和文件hello,
2023-11-29 11:27:54
上海控安:基于模型的测试用例生成
在当今复杂多变的软件开发环境中,软件系统的规模和复杂度不断攀升,传统测试方法面临着诸多挑战。如何高效、准确地生成测试用例,以确保软件系统的质量和可靠性,成为软件测试领域的关键问题之一。而基于模型
2025-08-28 14:30:53
怎么用嵌入式软件运行剖面生成测试用例?
和测试数据的等价类信息,自动生成测试用例,大大减轻测试人员的工作量,提高了测试工作的效率和质量。本文中采用带标记的Markov链对软件运行剖面进行描述,并据此生成测试用例。
nmcxkwqjhd
2019-10-11 08:32:48
数据测试:代替测试用例的检查表
前几年在大连出差的时候,帮一个项目做测试,顺便写下这个检查表,这个检查表对测试的初学者积累经验比较有用,实际对于有经验的测试人员尤其对于测试业务管理信息系统,基本上大量的测试不需要再编写测试用例
2020-06-29 10:50:55
AI生成的测试用例真的靠谱吗?
软件测试正经历一场深刻的技术革命。AI,尤其是以GPT、通义千问、文心一言、Claude等为代表的大语言模型(LLM),开始广泛介入测试流程:从需求分析、测试用例设计,到脚本生成与测试报告撰写,AI
2025-08-01 10:02:35
一文了解导入测试数据自动化生成测试用例的方法
作者|Poplar小编|吃不饱概述在模型开发过程中,测试是一个不可或缺的环节。在测试过程中,测试用例的编写是所有测试工程师关注的重点和难点。在编写的过程中,可能会遇到各种各样的问题,比如历史测试用例
2023-11-23 08:24:53
如何让大模型生成你想要的测试用例?
应用大模型生成测试用例,常见的知识库,测试大模型,微调,RAG等技术门槛都不低,甚至很难,因此对于应用者而言,最快的方式就是应用好提示词,调教属于个人风格的测试用例智能生成模块,让智能模板像人一样
2025-09-26 10:01:09
从跨平台测试用例复用想到IP测试意图交付
像Intel这样的大公司,在产品线每年跟摩尔定律一样按照产品路线推出芯片的时候,他们在测试时的测试用例肯定不会跟初创公司似的,需要从零开始构建。大公司呆过的人都知道那里的流程封装得多么完善,那里蹲着多少资深的工程师,当然那里的测试用例也都是每个项目一个个地继承下来的。
2023-04-25 11:08:09
【明日在线研讨会预热】测试用例质量的重要性
介绍在进行测试时,通常会花很多精力选择“正确”的测试工具。这其实只是为了实现次要目标。当然,一个适合开发环境、项目和流程的工具是重要的。然而,对于良好测试而言,最重要的是测试用例的质量。只有“好
2021-09-03 19:03:11
是德科技验证首个协议一致性测试用例
是德科技验证了首个采用 NB-IoT 技术的非地面网络 3GPP Rel-17 标准的协议一致性测试用例。 是德科技公司针对采用窄带物联网(NB-IoT)技术的非地面网络,针对第三代合作伙伴计划
2023-11-14 16:01:10
基于python的用于构建仿真及测试用例的lib库cocotb
对于从事ASIC行业及FPGA行业的小伙伴来说,仿真是一件必不可少的事情。或许有人是验证大拿,UVM高手,但相较于软件丰富的验证框架,对于各种各样的场景单纯的SV构建测试用例是否便捷
2021-10-13 17:01:01
TPT自动生成测试用例
方法。TASMO不仅可以测量覆盖率,还可以通过自动生成测试数据来填补覆盖率的空白。在TPT 19中,TASMO更进一步,因为测试用例可以直接从形式化的需求中创建。
2023-11-06 17:30:40
RT-Thread全球技术大会:RT-Thread上的单元测试框架与运行测试用例
RT-Thread全球技术大会:RT-Thread上的单元测试框架与运行测试用例 审核编辑:彭静
2022-05-27 16:21:15
测试用例质量的重要性
介绍在进行测试时,通常会花很多精力选择“正确”的测试工具。这其实只是为了实现次要目标。当然,一个适合开发环境、项目和流程的工具是重要的。然而,对于良好测试而言,最重要的是测试用例的质量。只有“好
hirain_tech
2021-09-02 16:44:41