一、开篇:从痛点说起

每个测试工程师都经历过这样的场景:拿到一个需求文档,面对复杂的业务逻辑的测试对象,脑海里一片混乱——到底该设计哪些测试用例?怎么才能保证覆盖率?是不是靠”感觉”在写用例?

我见过太多新手测试工程师,拿到需求后直接开始”拍脑袋”设计用例,结果要么用例冗余重复,要么关键场景遗漏。更糟糕的是,当被问到”你的用例覆盖率是多少”时,只能含糊其辞地回答”应该差不多吧”。

其实,测试用例设计不是玄学,而是一门有方法论支撑的技术。就像建筑师需要图纸,医生需要诊断流程一样,测试工程师也需要系统性的方法论来指导用例设计。本文将深入讲解七种核心的测试用例设计方法,每种方法都配有实战案例,帮你建立完整的测试设计思维体系。

无论你是刚入行的新手,还是有一定经验但想系统提升的测试工程师,这篇文章都能帮你建立起结构化的测试设计能力。让我们开始吧。




二、测试用例设计方法论全景图

微信公众号二维码图片引自微信公众号,扫码关注阅读原文
上图展示了测试用例设计的完整流程:从需求分析开始,根据场景特点选择合适的方法论,生成测试用例,最终执行并反馈。七种方法论各有侧重,在实际工作中往往需要组合使用,才能达到最佳效果。


方法一:等价类划分法

1. 是什么(定义)

等价类划分法是将无限多的输入数据按照”是否暴露缺陷”的可能性划分为若干个等价类,从每个等价类中选取少数代表性数据作为测试用例的方法。


2. 解决什么问题

解决”无法穷举所有输入”的问题。通过科学分类,用最少的用例覆盖最大的范围,避免冗余测试,提高测试效率。


3. 怎么用(步骤要点)

步骤:

要点:

4. 实战案例:电商登录模块(用户名输入框)

需求:用户名长度为8-16位,只能包含字母和数字的组合。

等价类划分:

等价类类型
条件描述
测试用例示例
有效等价类
长度8-16位,字母+数字组合
test1234(10位)
无效等价类
长度<8位
test12(6位)
长度>16位
test1234567890123(17位)
纯数字
12345678
纯字母
abcdefgh
含特殊字符
test@123

测试用例设计:




方法二:边界值分析法

1. 是什么(定义)

边界值分析法是在等价类划分的基础上,选择等价类边界上的值(上点、离点、内点)作为测试用例的方法。经验表明,错误往往发生在边界附近。


2. 解决什么问题

解决”开发人员容易在边界条件上犯错”的问题。通过系统性地测试边界值,发现那些隐藏在边界附近的缺陷。


3. 怎么用(步骤要点)

核心概念:

取值规则:

4. 实战案例:银行转账模块(转账金额)

需求:转账金额范围为0.01元-50000元(含边界)。

边界值分析:

下边界(0.01元):

上边界(50000元):

测试用例设计:

通用边界值概念(上点、离点、内点)

微信公众号二维码图片引自微信公众号,扫码关注阅读原文

银行转账模块实战案例(转账金额:0.01元-50000元 闭区间)

微信公众号二维码图片引自微信公众号,扫码关注阅读原文



方法三:场景法

1. 是什么(定义)

场景法是基于用户真实使用场景来设计测试用例的方法。通过描述用户与系统的交互流程,识别出基本流(正常流程)和备选流(异常或分支流程),为每个场景设计测试用例。


2. 解决什么问题

解决”单个功能测试通过,但端到端流程失败”的问题。场景法关注用户视角的完整业务流程,更容易发现集成缺陷和用户体验问题。


3. 怎么用(步骤要点)

步骤:

要点:

4. 实战案例:OTA升级流程

需求:车主通过车机系统触发OTA升级,系统检测版本、下载升级包、安装并验证。

场景分析:

基本流(场景1:升级成功):

车主触发升级 → 系统检测网络(正常) → 检测版本(有新版本) → 下载升级包(成功) → 安装(成功) → 验证(通过) → 升级完成

预期结果:车机系统升级到最新版本,功能正常

备选流1(场景2:网络断开):

车主触发升级 → 系统检测网络(断开) → 提示”网络连接失败,请检查网络”

预期结果:升级中止,提示用户检查网络

备选流2(场景3:下载失败):

车主触发升级 → 系统检测网络(正常) → 检测版本(有新版本) → 下载升级包(失败,空间不足) → 提示”存储空间不足,请清理后重试”

预期结果:升级中止,提示用户清理存储空间

备选流3(场景4:安装失败):

车主触发升级 → 系统检测网络(正常) → 检测版本(有新版本) → 下载升级包(成功) → 安装(失败,断电) → 回滚到旧版本

预期结果:系统回滚到升级前版本,不影响正常使用


OTA升级状态转换图

📊 状态 → 事件 → 动作 → 新状态

微信公众号二维码图片引自微信公众号,扫码关注阅读原文

📋 状态说明:

状态
触发事件
系统动作
下一状态
🔵 待机
系统启动 / 重置完成
等待用户或定时触发检测
检测到新版本 / 保持待机
📡 检测到新版本
服务器推送版本通知 / 用户手动检查
展示版本信息、变更说明、用户确认
用户确认→下载中 / 用户取消→待机
⬇️ 下载中
用户点击”立即升级”
后台下载升级包、显示进度、断点续传
下载完成→安装中 / 下载失败→待机
⚙️ 安装中
下载完成,自动/用户触发
关闭业务、写新镜像、校验完整性、重启
升级成功→待机 / 升级失败→待机(回滚)
❌ 升级失败
镜像校验失败 / 安装异常 / 断电
自动回滚旧版本、记录日志、上报告警
回滚成功→待机 / 回滚失败→维修模式



方法四:判定表法

1. 是什么(定义)

判定表法是通过表格形式,列出所有条件组合及其对应的动作(结果),从而设计出覆盖所有条件组合的测试用例的方法。


2. 解决什么问题

解决”多条件组合逻辑复杂,容易遗漏某些组合”的问题。判定表能够系统地枚举所有条件组合,确保不遗漏任何逻辑分支。


3. 怎么用(步骤要点)

判定表结构:

步骤:

4. 实战案例:电商登录模块(账号状态处理)

需求:电商系统登录逻辑:

判定表:

条件/规则
规则1
规则2
规则3
规则4
规则5
用户名存在
是
是
是
否
是
密码正确
是
否
否
—
是
账号锁定
否
否
是
—
否
预期结果
登录成功
密码错误
账号已锁定
用户名不存在
锁定账号

测试用例:




方法五:因果图法

1. 是什么(定义)

因果图法是通过图形化的方式(因果图)描述输入条件(因)和输出结果(果)之间的逻辑关系,然后转换为判定表来设计测试用例的方法。


2. 解决什么问题

解决”条件之间的约束关系复杂,判定表难以直接构建”的问题。因果图通过图形化表示,更直观地展现条件间的关系,特别适合有复杂业务规则的场景。


3. 怎么用(步骤要点)

基本关系:

约束关系:

步骤:

4. 实战案例:银行转账(转账成功条件)

需求:银行转账成功的 conditions:

因果图逻辑关系:

转账成功 = 因1 AND 因2 AND 因3

(三个条件同时满足,转账才成功)

转换为判定表:

条件/规则
规则1
规则2
规则3
规则4
余额充足
是
否
是
是
收款行在线
是
是
否
是
金额在限额内
是
是
是
否
转账结果
成功
失败(余额不足)
失败(收款行离线)
失败(超限额)



方法六:状态迁移法

1. 是什么(定义)

状态迁移法是通过描述系统状态之间的转换关系(状态→事件→动作→新状态)来设计测试用例的方法,确保覆盖所有状态转换路径。


2. 解决什么问题

解决”有状态的系统,状态转换逻辑复杂,容易遗漏某些转换路径”的问题。特别适合工作流、订单状态、设备状态等场景。


3. 怎么用(步骤要点)

步骤:

要点:

4. 实战案例:OTA升级状态流程

需求:OTA升级模块的状态转换。

状态识别:

状态转换表:

当前状态
事件
下一个状态
待机
检测版本
检测到新版本
检测到新版本
用户确认升级
下载中
下载中
下载完成
下载完成
下载中
下载失败
升级失败
下载完成
开始安装
安装中
安装中
安装成功
升级成功
安装中
安装失败
升级失败
升级成功
重启系统
待机
升级失败
重试
下载中

测试用例设计:




方法七:错误推测法

1. 是什么(定义)

错误推测法是基于测试人员的经验、直觉和历史数据,推测系统中可能出错的环节,从而有针对性地设计测试用例的方法。


2. 解决什么问题

解决”系统性方法无法覆盖所有隐性缺陷”的问题。错误推测法能够发现那些违反”常识”但系统未处理的异常场景,是对其他方法的补充。


3. 怎么用(步骤要点)

错误推测的来源:

要点:

4. 实战案例:电商登录模块(基于经验的错误推测)

基于历史经验和常见问题的错误推测:

推测1:密码明文显示问题

历史Bug:某些浏览器或设备上,密码输入框会明文显示。测试用例:在不同浏览器/设备上检查密码是否密文显示。

推测2:复制粘贴失败

历史Bug:某些安全策略会禁止密码框的复制粘贴,但实现有bug导致无法输入。测试用例:尝试复制粘贴密码,检查是否正常工作。

推测3:切换输入法后密码丢失

历史Bug:在某些输入法切换时,密码框内容会被清空。测试用例:在输入密码过程中切换输入法,检查密码是否保留。

推测4:会话超时处理不当

历史Bug:用户登录后长时间不操作,会话超时后再次操作没有得到正确提示。测试用例:登录后等待会话超时,然后尝试操作,检查是否跳转到登录页。

推测5:并发登录强制下线逻辑错误

历史Bug:某些系统支持单点登录,但强制下线逻辑有bug,导致原用户未被正确踢出。测试用例:同一账号在不同设备登录,检查原会话是否被终止。

推测6:SQL注入等安全问题

常见问题:登录模块的SQL注入漏洞。测试用例:在用户名/密码框输入SQL注入字符(如’ OR ‘1’=’1),检查是否会被攻击。




七种方法横向对比

方法
适用场景
用例数量
难度
可配合的其他方法
等价类划分
输入条件有明确的等价分类
少
★
边界值分析
边界值分析
输入有数值范围或边界
中
★
等价类划分
场景法
业务流程、端到端测试
多
★★
等价类、边界值
判定表法
多条件组合逻辑
多(2^n)
★★★
因果图法
因果图法
复杂条件约束关系
多
★★★★
判定表法
状态迁移法
有状态的系统、工作流
中
★★★
场景法
错误推测法
经验性补充测试
不定
★★
所有方法

注:难度评级从★到★★★★★,★表示最简单。用例数量取决于具体场景,表中给出的是一般情况下的相对多少。




实战组合案例:电商订单模块

现在,让我们将七种方法串联起来,完整设计一个电商订单模块的测试用例。通过这个案例,你会看到如何在实际项目中组合运用这些方法。

需求描述

电商订单流程:用户提交订单 → 支付 → 发货 → 收货 → 完成

涉及的功能点:订单提交、支付、发货、确认收货、订单完成。


方法一:等价类划分(订单金额输入)

场景:用户提交订单时,输入购买数量。

等价类划分:

测试用例:

方法二:边界值分析(支付金额边界)

场景:订单支付金额边界(假设最低支付0.01元,最高50000元)。

边界值:0, 0.01, 0.02, 49999.99, 50000, 50000.01

测试用例:

方法三:场景法(完整订单流程)

基本流(场景1):

用户提交订单 → 支付成功 → 商家发货 → 用户确认收货 → 订单完成

预期结果:订单状态变为”已完成”,交易完成

备选流1(场景2:支付失败):

用户提交订单 → 支付失败(余额不足) → 订单取消

预期结果:订单状态变为”已取消”

备选流2(场景3:退款):

用户提交订单 → 支付成功 → 商家发货 → 用户申请退款 → 退款成功 → 订单关闭

预期结果:订单状态变为”已关闭”,退款到账


方法四:判定表法(订单处理规则)

需求:订单处理规则:

判定表(简化):

条件/规则
规则1
规则2
规则3
订单已支付
是
是
否
库存充足
是
否
—
处理结果
发货
退款
等待支付


方法五:因果图法(优惠券使用规则)

需求:使用优惠券的条件:

逻辑关系:可以使用优惠券 = 因1 AND 因2 AND 因3

测试用例:设计8条规则(2^3),覆盖所有条件组合。


方法六:状态迁移法(订单状态转换)

订单状态:待支付 → 已支付 → 发货中 → 已发货 → 已完成/已退款/已取消

状态转换表(部分):

测试用例:为每条状态转换路径设计用例。


方法七:错误推测法(基于经验的推测)

推测可能的问题:

测试用例:针对上述问题设计专项测试用例。

总结:通过组合七种方法,我们可以系统地覆盖电商订单模块的各个测试维度:功能正确性(等价类、边界值、判定表、因果图)、业务流程(场景法、状态迁移法)、以及经验性缺陷(错误推测法)。这种组合运用能够最大化测试覆盖率,提高测试效率。




总结与进阶建议

核心要点回顾

1. 七种方法不是孤立的,组合使用效果最佳

在实际项目中,单一方法往往无法覆盖所有测试需求。组合使用多种方法,才能达到最佳测试效果。

2. 等价类+边界值是基础组合

这两种方法最简单,也最常用。几乎所有输入测试都可以从这两个方法入手。

3. 场景法贯穿始终

无论测试哪个模块,都要从用户场景出发。场景法是连接需求和测试用例的桥梁。

4. 状态迁移适合有状态的对象

订单、工单、流程审批等有明确状态的对象,用状态迁移法最合适。

5. 判定表/因果图适合复杂逻辑

当业务规则涉及多个条件组合时,这两种方法能帮你系统化地覆盖所有逻辑分支。

6. 错误推测法需要经验积累

新手可以多复盘历史Bug,建立自己的”错误模式库”,逐步提升错误推测的准确率。

给新手的进阶建议

第一步:从方法一(等价类划分)入手

这是最简单、最基础的方法。先学会如何科学地分类,这是所有测试方法的基础。

第二步:掌握方法二(边界值分析)

边界值是最容易发现缺陷的方法,性价比极高。学会识别边界,取对边界值。

第三步:学会方法三(场景法)

场景法能帮你建立”用户视角”,这是测试工程师最重要的思维之一。

第四步:挑战方法四和方法五(判定表和因果图)

这两种方法比较抽象,但非常强大。建议找一些复杂的业务规则来练习,比如权限系统、促销规则等。

第五步:掌握方法六(状态迁移法)

当你遇到有状态的系统时,这种方法会非常有用。建议找一个订单系统或工单系统来实践。

第六步:培养方法七(错误推测法)的直觉

这种方法需要经验积累。建议每次测试完成后,复盘一下”我为什么没想到这个缺陷”,逐步建立自己的错误模式库。