ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

测试用例编写指南:五步流程、十二字段与粒度划分

测试用例编写指南:五步流程、十二字段与粒度划分

简介:一份面向软件测试人员与技术管理团队的单文档指南,聚焦测试用例编写规范与注意点,帮助解决编写凭惯性、设计逻辑固定、划分颗粒度不一、可读性差等常见问题。文档按需求分析、业务流程分析、系统设计分析、用例编写、用例完善五步展开,并系统梳理测试需求与用例的路径层级、前置条件、操作步骤、预期结果、优先级、用例类型与属性等要素,同时覆盖测试需求划分、用例划分、编写要求、测试类型、等价类划分、边界值分析、状态迁移等设计方法及用例维护与风险建议,便于团队统一模板、补齐知识空缺并提升测试设计水平。压缩包仅含1个docx文件,约494KB,结构紧凑、便于查阅。已有553人学习,适合需要建立测试设计规范、做用例评审或新人培训的测试从业者参考。

1. 从「凭惯性写」到有章可循:这份测试用例编写指南要解决的是什么

同一个需求,三个人写出三套用例:一个按页面写,一个按接口写,还有一个把三个检查点塞进一条用例里。评审会上谁也说服不了谁,执行时又发现该测的边界一个没覆盖。这不是能力问题,是缺一把统一的尺子——测试用例编写指南要解决的正是「用例编写注意点说不清、颗粒度对不齐、新人上手全靠悟」这三件事。

它把需求分析到用例维护拆成五步,把测试需求压到五个字段、测试用例压到十二个字段,再按测试对象给出划分依据、编写要求和设计方法。适合两类人:一类是要给团队立规范的测试负责人,一类是要交测试方案、课程设计或毕业设计的同学——照着这套结构填,至少不会在「用例怎么划分」这一节卡住。

2. 五步编写流程:从需求分析到用例完善的输入输出闭环

测试用例写得乱,八成不是写的时候乱,而是前面几步没做。这套指南把编写过程拆成五个步骤,每一步都规定了输入、处理和输出,输出的东西直接喂给下一步。把这条链走一遍,用例的覆盖范围基本就有了骨架,剩下的才是往里填肉。

2.1 需求分析与业务流程分析:把文档拆成可验证的检查点

需求分析是第一步,输入只有一样东西:业务需求说明书。处理动作是按业务流程或功能模块分类,输出是「测试需求 + 检查点清单」。这里最常见的误解是把需求条目原样抄一遍就当测试需求——需求写「支持用户注册备案」,用例写「验证用户注册备案」,这条用例等于没写。真正要做的是把每一个需求细节拆成可判定的检查点:输入项有哪些、必填哪几个、长度上限多少、重复注册怎么提示、成功后落到哪张表哪个字段。

拆到这一层,用例还没开始写,但测试设计已经完成了一半。我一般会要求检查点必须能用「是/否」回答,写不成判断句的,说明还没想清楚。

第二步是业务流程分析,输入是业务背景知识和被测系统、模块的实际业务流程。很多系统里都存在需求文档没写、但实际操作必须走的路径,比如某后台管理系统里「用户注册备案」这个菜单,需求只写了新增和查询,实际业务里还有一条「备案被驳回后重新提交」的支线,这条支线不测,上线后就是第一个投诉点。所以这一步的处理重点是整理主流程、备选流程、数据流向、关键判断条件,以及完成该操作的(非)必要条件。

输出作为对测试需求的补充检查点。这几条补充需求覆盖不到,但业务上绕不开,恰恰是最容易漏的部分。

步骤输入处理输出
需求分析业务需求说明书按流程或功能分类,逐条拆细节测试需求与检查点清单
业务流程分析业务背景知识、系统业务流程梳理主流程、备选流程、数据流向、关键判断条件需求未提及但需覆盖的补充检查点
系统设计分析概要设计、详细设计、接口设计、数据库设计分析改动点与影响范围逻辑分支检查点、回归范围
用例编写测试需求覆盖业务流程场景与系统逻辑分支功能、边界、异常、接口、信息安全用例
用例完善评审意见、变更、执行反馈、生产问题判断是否触发更新修订后的用例集

这张表建议直接放进方案文档,评审时对着它问「这一步的输出在哪」,比空谈流程有效得多。

2.2 系统设计分析与用例编写:盯住改动点和影响范围

第三步系统设计分析,是整套流程里最容易被跳过、也最容易出事的一步。输入是系统设计、接口设计和数据库设计文档,处理动作是针对系统为实现业务需求所做的主要改动点及影响范围做全面分析,输出是把改动功能支持的所有逻辑分支、以及影响范围的回归测试,一并加入测试需求检查点。

举个具体场景:某系统把「登录接口」的入参校验从后端校验改成前端加后端双重校验。需求文档只会写「提升登录安全性」,但设计文档里写着:手机号字段新增了格式校验、验证码有效期从 5 分钟调整为 10 分钟、连续失败 5 次锁定账户。这三条如果不从设计文档里挖出来,用例就只会覆盖「账号密码正确能登录」这一条正向路径。

这一步还有一层价值是划回归范围。改动点定了,依赖它的上游调用方、下游数据表、关联的定时任务都要进回归清单。我的习惯做法是画出「改动点—调用方—数据表」三列,改一行填一行,填不满说明设计文档没读透。

第四步才是真正动笔写用例。输入是前面攒下来的测试需求,处理原则是尽量覆盖生产上的所有业务流程场景和系统逻辑分支,除了正向测试,要加大对边界、异常的关注。输出要求用例类型至少覆盖功能正确性测试、边界测试、异常测试、接口测试、信息安全测试。

这里有个排序技巧:先写业务流程类用例,把主流程和每条备选流程跑通;再补功能点类,逐个输入项做有效性和边界;最后补异常和信息安全。顺序反了,很容易在细节里泡一天,回头发现主流程还缺一条。

2.3 用例完善:四类必须回写更新的触发场景

用例写完不等于结束。这套指南明确列了四种必须触发更新维护的场景,我认为这是整份文档最该被抄进团队规范的部分:

  1. 评审过程中发现测试用例存在问题;
  2. 系统新增功能或需求变更;
  3. 测试过程中发现设计用例时考虑不周,存在遗漏点;
  4. 系统出现生产问题,经分析确认属于测试遗漏。

第四条尤其关键。生产上出的每一个问题,都是一次免费的用例补充机会,但多数团队只改代码不改用例,于是同一个坑第二年再踩一次。通常的做法是:生产问题定位完成后,必须同步提一条用例补充单,写清楚「原有用例为什么没覆盖」「新增哪个检查点」,并且在修订记录里留痕。

修订记录本身也要规范。文档头部有版本、修订日期、修订人、修订内容、审核人五列,版本号按 V1.0、V1.1 递进,每次修订内容写清改了哪一章哪一条。看起来很形式,但等到半年后有人问「这条规则什么时候加的、为什么加」,这份记录就是唯一的后悔药。

3. 要素与粒度:测试需求五字段、测试用例十二字段与两级划分原则

用例模板字段越多越难填,越少越说不清。这套指南的做法是把「测试需求」和「测试用例」分成两层:需求层管「测什么」,用例层管「怎么测」。两层字段各自固定,不允许多人多套模板,这是可读性的底线。

3.1 测试需求:五个字段与路径层级怎么定

测试需求固定五个字段:需求路径(层级)、需求名称、需求描述、设计人、关联系统。

需求路径是结构目录,通常写成「/项目名称/一级需求/二级需求/……/N 级需求」的形式。它的作用是让几千条用例挂在一棵树上,执行时能按模块整体拉起,出问题时能快速定位影响面。需求名称是对测试对象的简短描述,控制在能一眼看懂的粒度。需求描述是重点,要把针对这个测试对象的检查点一条条列出来,而不是复述需求文档。

设计人写编写者,关联系统写被影响的系统名。关联系统这个字段常被忽略,但在多系统联调的项目里,它是判断回归范围的直接依据。

粒度上有个判断标准:一个需求描述里的检查点,应该能在一个执行轮次内全部验证完。如果一条测试需求挂着二十几个检查点、涉及三个模块,说明它该往下拆一层。

3.2 测试用例:十二个字段里哪些是硬约束

测试用例的十二个字段是:用例路径、测试名称、用例描述、前置条件、操作步骤、预期结果、设计人、优先级、用例类型、用例属性、测试方式、执行次数。

用例路径在需求路径基础上追加需求名称,即「/项目名称/一级需求/……/N 级需求/需求名称/」,这样一条用例既能顺着需求树找到,也能反查出它覆盖了哪个检查点。前置条件是执行前提,操作步骤是执行动作,预期结果是执行完之后的程序表现——这三个字段是用例的主体,也是最容易写歪的地方,下一章单独展开。

优先级分高、中、低三级。高对应系统基本功能和关键路径,比如正常流程、页面元素的正常输入;中对应功能完善类,比如异常流程、异常输入;低对应体验类、少用功能、辅助功能,比如纯页面元素显示。三级足够了,再细分没人会在执行时看。

用例类型按测试对象分类,取值包括流程类、功能点类、报表统计类、界面类、报文接口类、批处理、其他类。用例属性只有正常和异常两种,标的是这条用例检测的方向。测试方式分手式和自动化。执行次数一般按轮次约定,用在需要反复执行的场景,比如回归轮次或压测重复次数。

这十二个字段里有几个是可以留空或填默认值的,比如报表统计类的用例、纯界面检查的用例,操作步骤可能就一步。但测试名称、前置条件、操作步骤、预期结果、优先级这五个不能空,空一条就退回去重写。

3.3 划分原则:按测试对象分类定颗粒度

颗粒度过粗会漏测,过细会让维护成本翻倍,这套指南的解法是先给测试对象分类,再对每一类给出划分方式。核心原则一句话:尽量做到一个测试需求检查点对应一条用例。

测试对象分类测试对象用例划分方式
前端功能新增菜单、菜单功能修改一个检查点一条用例:页面要素检查、列表查询分页删除、表单输入项检查;输入项多时可按输入区拆分
业务流程全业务流程一个检查点一条用例,主流程分支、备选分支各自独立成条
后台功能单功能、接口原则上一个检查点一条用例,入参有效性等同类校验可合并
批处理批处理节点一个检查点一条用例,按查询范围、分页处理、数据转移结果拆分
后台流程全流程、步骤分解全流程一条、每个步骤分解一条
数据埋点页面埋点每个页面一条用例
兼容性全流程兼容按指定测试维度划分,每个细分项一条,如操作系统维度、机型维度、浏览器维度

配套还有几条说明值得抄进规范:同一项目要区分多系统或多需求时,可以把系统名称或需求名称作为一级需求;需求描述要把末级需求的检查点全部列出,检查点太多就继续细分;同一功能的不同入口可以合并成一个需求;一个功能的正常流程对应一个检查点;一个功能里有多个正常场景或多个异常流程,要分别列多个检查点;同一功能需要多份不同数据时,原则上分别列检查点,如果这些数据必须一次操作同时处理,才单独列一个组合检查点。

最后这条划清了「拆分」和「合并」的边界:合并的前提是逻辑上不可分,而不是写起来省事。

3.4 步骤与预期结果的对应关系:一对一、多对一、多对多怎么落

同一条用例里,操作步骤和预期结果的分支数量可能对不上,这套指南给了三种允许的组合和一个明确不建议的组合。

一对一最简单:一步操作对应一个预期结果分支,分支里只有一个检查点。这是最推荐的写法。

多对一:多种操作对应同一个预期结果分支。比如分别删除只有一级的分类目录、多级分类的根目录、多级目录下的子目录,预期结果都是「可成功删除未挂用例的执行集」。这种写法成立的前提是几个操作的行为完全等价。

多对多:多个操作对应多个预期结果分支,用相同的编号建立映射。比如添加分类时分别输入空值、超长值、重复值,对应五条不同的提示信息,步骤编 1 到 5,预期结果也编 1 到 5,一一对应。

明确不建议的是两种:一个操作对应多个预期结果分支,以及一个预期结果分支里塞多个检查点。前者会让执行人不知道以哪个分支判定通过,后者一旦中间某个检查点失败,整条用例判失败,缺陷定位就得靠人肉回溯。遇到这种结构,正确做法是按预期结果分支拆成多条用例。

一条具体的对照:删除测试执行集的用例,如果预期结果写「可成功删除执行集,包括目录和其下所有执行记录;用例管理列表数据仍存在且状态不变」,这就是一个分支两个检查点;拆开写会清晰得多——一条验证执行集删除,一条验证用例数据不受影响。

4. 编写要求与设计方法:让用例可读、可执行、可回归

4.1 名称、前置条件、操作步骤、预期结果的硬性要求

测试名称要简洁易懂,直接通过名称就能识别测试对象和检查点,不能包含具体操作步骤和逻辑。好的写法是「放款失败-合同冻结」这种「场景-结果」结构,坏写法是「输入合同号点击查询按钮后检查列表是否返回数据」——把步骤写进名称,等于把用例写了两遍。

前置条件有三条硬规矩:有特殊账号权限要求、需要数据准备或前置操作的,必须完整列出;用例之间不允许相互依赖,不能把其他用例当作前置条件;前置条件要写到别人拿着就能复现的程度。

操作步骤要清楚描述操作入口、与测试点相关的输入要素、按钮、运行的任务以及操作顺序。步骤和预期结果的分支对应关系按上一节的一对一、多对一、多对多处理,原则上不允许一对多。还有一条最容易被违反:操作步骤里不能包含检查结果。「点击删除,检查是否删除成功」这种写法,把检查动作混进了操作里,执行时到底算步骤还是算结果说不清。

预期结果要把检查点完整列出。前端操作成功或失败,应包含页面显示、提示信息、后台数据存储、前后端数据一致性检查;涉及后台数据存储或变更的,要明确具体数据表记录和关键字段取值变化;提示信息要写清关键检查内容,而不是笼统写「系统给出合理提示」;后台系统测试和涉及信息安全的前端操作,必须包含输出日志和后台数据存储结果的检查。如果一条预期结果分支包含多个步骤,先把步骤按序列出,再用编号把检查点和它依赖的前置步骤关联起来。同样,预期结果里不能包含操作步骤。

前后端一致性这条我要多说一句。很多用例只写「页面提示添加成功」,不写数据库校验,结果前端展示正常、后台根本没落库的问题一路漏到生产。凡是涉及新增、修改、删除的操作,预期结果里都应该有一句「检查前端展示数据与后台对应表新增记录一致」。

4.2 测试类型与用例类型:两套分类别混着用

指南里列了十二类测试类型:功能测试、接口间测试、信息安全测试、关联性测试、回归测试、数据库测试、压力测试、操作友好性测试、效率测试、兼容性测试、数据移植测试、安装测试。

这十二类是「测什么维度」,而用例类型那七类(流程类、功能点类、报表统计类、界面类、报文接口类、批处理、其他类)是「挂在哪个对象上」。两套分类经常被混用,写出来的用例类型五花八门起不到筛选作用。我的处理方式是:用例类型只从七类里选,测试维度写进用例描述或用例属性里,需要筛选时按标签查。

其中几个类型在方案里容易被写空。关联性测试针对的是不涉及代码改动、但与被改动功能有依赖或调用关系的功能,判断依据就是前面系统设计分析里画的那张影响范围表。数据移植测试关注迁移前后数据量一致性、数据库表结构变化,以及迁移后数据的业务逻辑回归。安装测试要覆盖首次安装、升级安装、完整安装和自定义安装,以及异常情况下的安装表现。这三类如果方案里只写名字不写检查点,答辩时基本一问就露。

4.3 六种设计方法的适用边界

指南列了六种设计方法,每一种都有它擅长的场景,也都有被滥用的风险。

功能正确性测试是打底,输入用户实际数据验证系统是否满足需求规格说明书的要求,用例首先要保证业务需求说明书里的各项功能正常实现。没有这一层,后面所有方法都是空中楼阁。

异常测试的思路是模拟一个不了解产品操作的客户执行任意操作。典型场景是所有输入框都输入特殊字符,或者前端限制长度与数据库字段长度不一致时会发生什么。这条最容易翻车的地方在于只测前端提示、不测后台是否真的拦截。

边界值测试取刚刚小于、稍小于、等于、刚刚大于、稍大于五个点,数据集中在边界附近选取。像利率管理里「利率浮动比例值边界值 0」这种,0 就是必须单独立一条用例的点。

等价类划分把所有可能的有效和无效输入数据划分成若干等价类,每类取一个代表值。它省事,但前提是等价类划对了,划错等于批量漏测。

错误推测依赖经验和直觉,参照以往系统出过错的地方做同类验证。典型场景是分页(查询分页、文件分页)和金额四舍五入。这类用例在方案里不好写,因为说不出推导过程,我的做法是把它单独归到「历史缺陷回归」一类,标注来源缺陷编号,评审时反而更有说服力。

因果图分析针对输入条件的组合、约束关系和输出条件的因果关系,适合检查输入条件涉及多种组合的情况。登录页面就是经典例子:验证码、身份证号、姓名、密码几个条件的组合,靠人脑穷举很容易漏。

六种方法不是六选一,是针对不同测试对象组合使用。流程类用例以功能正确性为主,功能点类用例以等价类加边界值为主,接口类用例以异常加因果图为主。

5. 避坑:用例评审里被退回最多的五个问题

评审会上被打回来的用例,原因基本集中在五类。这几条是我踩过的坑,写出来供参考。

5.1 结构与依赖类问题

用例之间互相做前置条件。现象是执行时 A 用例没跑通,B 用例直接卡住无法执行。原因通常是图省事,把「先创建一条数据」这件事写成了「前置条件:执行用例 XXX」。解决方式是把数据准备独立出来:能通过接口或脚本造数的,写清造数规则;必须手工造的,把操作步骤完整写进前置条件,而不是指向另一条用例。用例之间一旦有依赖,执行顺序就被锁死,后面想并行执行或者挑着跑都不可能。

操作步骤里混进了检查结果。现象是步骤一栏写着「点击保存,检查是否保存成功」,预期结果一栏空着或者写「保存成功」。原因是写的时候边想边写,没有区分动作和判断。解决方式是先写完所有动作,再统一补检查点,检查点一律下沉到预期结果。步骤只描述「点哪里、输什么、按什么顺序」,判断全部留给预期结果,这样执行人才能明确知道在哪一步做判断、判断标准是什么。

一个预期结果分支塞多个检查点。现象是执行时前面的检查点通过了、后面的没通过,整条用例判失败,提缺陷时说不清是哪一块出的问题。原因还是图省事,把「删除成功」「目录及其下用例记录一并删除」「用例管理列表数据不受影响」三件事写成一条。解决方式是按预期结果分支拆成多条用例,一条只验证一件事。拆完用例数量会涨,但缺陷定位速度和回归时的可维护性会明显好转。

5.2 覆盖与维护类问题

颗粒度失控,要么太粗要么太细。太粗的表现是一条用例覆盖一个模块,执行时全靠执行人自由发挥,不同人跑出不同结果;太细的表现是一个页面拆出几十条用例,改一个字段名要改二十处。根因是没有按测试对象分类套用划分原则,全凭手感。解决方式是先判定这条用例属于哪一类测试对象,再对照划分表定颗粒度:前端功能按检查点拆,业务流程按分支拆,数据埋点按页面拆,兼容性按维度拆。分类定了,颗粒度自然就定了。

需求变更后用例不回写。现象是版本上线前跑了一轮回归,全绿,结果新逻辑上线当天就出问题——因为回归跑的是三个月前的用例集。原因是团队只规定「要维护」,没规定「什么时候必须维护」。解决方式是把四类触发场景变成硬性流程节点:评审有问题、需求变更、执行中发现遗漏、生产问题确认遗漏,任意一条触发就必须提用例修订,并同步更新版本号和修订记录。这条规矩定下来以后,最直接的变化是每次生产问题复盘都会多出一个动作——翻用例看为什么没覆盖。

6. 验收与答辩:一套用例算不算合格怎么判

用例集交上去,怎么证明它合格?我的做法是不看总量,看四件事:需求覆盖率、字段完整率、划分一致性、可执行性。这四项都能抽样验证,评审会上十分钟就能出结论。

检查项合格标准判定方式
需求覆盖测试需求检查点与用例一一对应,无孤儿检查点随机抽 10 条测试需求,反查是否有用例覆盖
字段完整名称、前置条件、步骤、预期结果、优先级五项无空缺全量筛空值字段
划分一致同类测试对象的用例颗粒度无明显差异抽同类对象各 5 条对比结构
可执行执行人仅凭用例可复现,无需口头补充换一个人试跑 3 条用例

答辩或评审时,最容易被追问的两个点是「颗粒度怎么定的」和「覆盖怎么证明的」。第一个问题用第 3 章的划分表和「一个检查点一条用例」原则回答,说清哪类对象按什么维度拆。第二个问题不要答「都覆盖了」,而是现场抽一条测试需求,把它的检查点清单和对应用例逐条对上,对上几条比说十句都管用。

还有一个加分动作是讲一个闭环案例:某次生产问题暴露了某个检查点没覆盖,复盘后补了哪条用例,并在修订记录里留了痕。这个故事能同时证明三件事——流程是活的、维护机制在跑、团队真的在从缺陷里学习。比任何覆盖率数字都有说服力。

血泪经验是:评审前一定自己先抽 10% 的用例反查需求,把那些「需求写了但没对应用例」的检查点找出来。这一步花不了半小时,但能挡掉评审会上最尴尬的沉默。从那以后我每次交付用例集之前,都强制走一遍抽检和反查,宁可自己先难堪一次。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进