全栈测试这么多年,我最大的一个感触是:功能测试大家都会做,缺的是对“体验”进行系统化体检的方法。很多项目提测后,测试报告写得密密麻麻,全是按钮失灵、数据不对、接口报错,真正卡住用户的交互问题反而没人管。设计师说“这不是我想要的”,开发说“之前没提这个需求”,最后不了了之。后来我在几个项目里系统地用尼尔森十大易用性原则来驱动测试设计,才慢慢把这种“凭感觉找问题”变成了“按清单做体检”。这篇文章就围绕这套打法展开。
1. 为什么测试环节需要一套“交互体检清单”
做可用性测试的人经常被一句话问住:你觉得这个页面哪里怪怪的?很多测试工程师下意识会说“按钮太大了”“颜色不好看”“感觉不太舒服”。这些反馈不是没价值,而是太依赖个人审美,既不好复现,也不好让开发接受。我自己也经历过这种阶段,直到把尼尔森十大易用性原则当成测试设计的出发点,才发现真正缺的不是“发现问题”,而是“发现问题时对照什么标准”。
1.1 可用性问题为什么总被当成“主观感受”
这里要先说清楚:可用性问题和视觉审美是两回事。审美偏好看个人,可用性缺陷本身却有相对客观的判断依据。比如用户在一个多步骤表单里填到第三步,突然不知道当前在第几步、前面哪一步有错误,这就是典型的“状态不可见”,属于系统反馈缺失,不是“谁看都觉得丑”的问题。
大多数测试团队在提测阶段盯的是“功能能不能跑通”,也就是操作路径是否通畅、数据是否正确。但一个表单能提交成功,不代表用户知道该怎么填、填错了怎么改、提交之后系统有没有真正收到。启动一个应用很快,但用户不清楚当前处于什么状态、加载是卡住还是正常,这些恰恰是影响留存的关键因素。
这些问题之所以总被当成“主观感受”,是因为缺少一套共同语言。设计师说“引导不强”,开发说“需求文档没写”,测试说“看起来有点乱”——三个角色各说各话。尼尔森十原则提供的就是一套通用词典:状态可见性、一致性、错误预防、识别而非回忆、灵活高效……当测试报告里写的是“系统状态可见性不足,提交按钮点击后无反馈”,要比写“感觉体验不好”有力得多,开发拿到后也基本无话可说。
1.2 用十条原则驱动测试的逻辑链条
所谓“原则驱动测试”,并不是测试时在旁边贴一张十大原则的海报,然后对着页面发呆。它是一条完整的转化链路:先理解每条原则背后要解决的用户痛点,再把痛点翻译成可观察、可验证的测试观测点,最后根据观测点设计对应的操作路径和提问话术。
讲一个我实际用过的例子。在设计某后台管理系统的测试用例时,“错误预防”这条原则被我转换成了三个观测点:删除操作有没有二次确认;保存按钮在表单不完整时有没有直接的错误提示;上传文件时有没有在拖拽阶段就校验格式和大小,而不是等上传完了才报失败。每一个观测点都直接对应一条用户可能误操作的路径,用例跑完,问题清单自然就出来了。
这套打法的核心价值在于:它让可用性测试从“满页面找毛病”变成了“带着检查项做走查”。十条原则就是十个大目录,每个目录下面可以继续拆出具体的子观测点。你不需要一开始就有很深的用户研究功底,也能产出专业度很高的可用性问题报告。
2. 从十条原则到测试观测点:逐条转化的实操思路
下面把这十条原则一条一条拆开看。我会按原则指出的核心痛点、对应测试时的观察重点、以及实际测试时可以问自己的问题来展开。每条原则都会配一个我在真实项目中碰到的场景,这样更容易明白怎么落到具体用例里。
2.1 状态可见性与真实世界匹配:让用户知道“发生了什么”,也要“听得懂”
第一条系统状态可见性,讲的是系统要在合理时间内让用户知道当前发生了什么。测试时最核心的观测点就三个:操作后有没有及时反馈、长时间处理中有没有进度提示、反馈的方式是不是足够清晰不产生误解。
我测过一个数据看板项目,导出报表按钮点击后,页面没有任何变化,既没有加载动画也没有“正在生成”的文字提示。用户连续点了五次,后台排队五个任务,最后数据报表全乱套了。这就是典型的状态可见性缺陷。测试时不要只看功能是否最终成功,还要盯住“等待期”这个容易被忽略的阶段。
第二条系统与真实世界匹配,讲的是系统要说用户听得懂的话,而不是用纯技术术语。最容易出问题的地方集中在错误提示和操作引导上。比如“请求超时”和“连接失败”这类文案,技术上是准确的,但很多普通用户根本不明白区别。我在某个内容社区App上看到过更典型的错误:上传图片失败后提示“412 Precondition Failed”,这个提示对非技术用户来说几乎等于天书。
转化为测试用例时,我一般会做一步“口语化翻译测试”:把系统里的所有提示文案、空态文案、按钮名称收集出来,让不知道产品背景的人读一遍,解释一下它是什么意思。凡是需要猜的、需要技术背景才能懂的,都会提进问题清单。
2.2 用户控制自由与一致性:留好退路,也守好惯性
用户控制与自由这条原则的核心是:误操作要能够轻松撤回。测试时重点看三类场景:有没有“取消”或“返回”能力;不可逆的操作有没有明确提示;关闭弹窗的方式是否足够直接。
某个报销系统曾经出过一个很严重的问题:用户把报销单一路填完九项,点“暂存”后离开,再回来发现草稿列表里找不到,因为“暂存”按钮的旁边就是“提交”,用户点错了但自己没察觉。这个场景说明:给了用户“暂存”功能,却没有在点错之后提供找回路径,看起来功能存在,实际上用户的控制权是落不了地的。
一致性这条原则更不陌生。同一个动作在页面的不同位置叫不同名字、同样含义的图标在不同页面代表不同操作,都会造成用户重新学习。测试时比较高效的做法是做“跨页面术语对照表”:把所有页面上表示“删除”“保存”“撤销”“更多”的词、颜色、图标全部拉出来排在一张表里,一眼就能看出哪里不一致。
我在一个较复杂的B端产品里测试时,光是“删除”这个操作就发现了三种形态(红色按钮、垃圾桶图标、菜单里的文字选项)、五个不同文案(删除、清空、移除、失效、不再显示),有的点下去直接删数据,有的只是移到回收站。这些都要归进一致性问题清单,按优先级推动统一。
2.3 错误预防与识别优于记忆:能提前拦住,就别等出错再解释
错误预防排在很多设计规范前面是有原因的。它讲的是:在错误发生之前就把它拦截下来,比错误发生后给出再完善的提示都更有效。测试时我会优先检查每一个输入框的“前置校验逻辑”:邮箱格式是在填完失焦时校验,还是提交后才告诉你错了?上传图片是选择文件那一刻就检查大小上限,还是等传了一半才失败?
某考勤系统就踩过这个坑:请假表单里的日期选择允许填过去的时间,等提交后系统才提示“起始时间不能早于今天”。用户已经填完了所有字段,最后才被拦,心情极其糟糕。如果测试时提前验证日历组件可选的日期范围,这类问题根本不会漏掉。
识别优于记忆讲的是不要强迫用户记住前面页面的信息。它最容易出现在三步以上的流程中:用户从列表页进入详情页,做了一通操作,退回列表页后,列表还是原来的状态吗?选择条件时是不是只能从一堆代码里找之前选过的某个值?账号体系里,用户在不同设备登录,之前的偏好设置还在不在?与“在用户提交表单前主动拦截”一样,绝大部分这类型的问题都需要用真实操作序列去测,而不能只看单页面截图。
2.4 灵活高效与美观极简:既要效率,也要克制
灵活性与效率这条原则,主流测试方案是关注“熟手能不能比新手走得更快”。一个内部工具如果每天被同一个用户操作五十次,那么每多一步点击都是成本损耗。测试时重点看三件事:核心高频操作有没有快捷途径;常用配置是否支持保存复用;列表页是否支持批量操作和自定义显示列。
某工单系统最初的提交流程有七步,新手需要引导,老员工简直是灾难。后来产品加了“常用原因一键填充”和“上次提交信息记忆”之后,整个流转效率提升了不少。这类优化测试时不一定是从“操作失败”中发现的,而是在计时测试中发现的:把一轮核心任务完整走一遍,记录步数和耗时,对照阈值判断效率是否可接受。
美观与极简原则常被误解为“要好看”,这个理解就偏了。在测试语境下,它的真正含义是“每个页面只保留和当前任务相关的信息,不要堆砌干扰”。我在测试某数据后台时,首页同时有七八个图表模块、两三个欢迎语、一个运营公告、一个系统升级提示,真正想看的今日订单数据被挤到第二屏。这是极简性的失效,不是审美问题。
2.5 错误恢复与帮助文档:兜底机制同样要纳入测试范围
错误恢复这一条说:错误信息要符合三个要求——明确指出发生了什么、说明原因、告诉用户下一步怎么办。我检查过很多产品的报错提示,最常见的一类错误是“网络异常,请稍后重试”,看着没毛病,实际上什么有用信息都没给:用户根本不知道是网络问题还是服务端问题,更不知道多久之后再试。
测试时可以设计一个“报错信息三件套清单”:逐条检查所有可触发的错误场景,看系统提示是否包含“发生了什么 + 大概原因 + 下一步建议”。比如上传失败时提示“文件超过10MB上限,请压缩后重试”,就比“上传失败”合格得多。另外,错误之后数据还在不在也很关键。表单提交失败,刚才填的内容被清空,这个体验问题在测试中要用“失败后刷新”的用例专门覆盖。
帮助文档是十条原则里的最后一条,说的是当用户需要帮助时,能快速找到有效内容。测试时重点看“帮助入口是否在用户需要的位置”和“文档是否对应当前场景”。很多产品把帮助文档藏在设置页第三级,用户遇到问题时根本找不到;找到了又只见操作截图,没有常见问题解答。这块很容易被测试团队当成“不在本轮范围”,但它恰恰是用户从陌生到熟悉的重要支撑。
3. 一场启发式测试的完整组织流程
原则有了、观测点有了,怎么组织一场高效的启发式测试?我把自己跑过几轮后沉淀下来的流程写在这里,供参考。这套流程一个下午就能走完,投入产出比很高。
3.1 启动前准备:明确被测范围、用户画像和核心任务
第一件事不是打开被测产品,而是把背景梳理清楚。我会先和产品经理确认三个问题:这次上线的核心用户是哪一类人?他们最重要的两三个操作路径是什么?本版本改动涉及哪些页面和流程?这三个问题决定了测试的深度和节奏。
以某内容社区App的发布流程为例,如果本次版本优化的核心用户是“新注册用户在90天内首次发布内容”,那么测试时的重点就应该放在注册引导、首次进入的引导弹窗、内容编辑器的空态、发布成功后的反馈,而不是放在已经沉淀很久的个人主页浏览上。
接着,我会提前用文档列出“核心任务清单”。一个版本一般选三到五个核心任务,比如“完成一次带图片的发帖”“修改已发布的评论”“找回登录密码”。每个任务对应一个走查路径,路径上标注需要重点观察的页面节点。测试时按任务走,而不是按页面逛,避免漏掉跨页面的状态一致性问题。
3.2 两种走查方式:页面逐屏走查 vs 核心任务走查
我的习惯是两种方式结合。
页面逐屏走查适合“查漏”:把所有页面的正常态、空态、加载态、异常态都过一遍,重点看反馈是否及时、文案是否清晰、功能是否一致。这种方式能发现很多藏在边缘状态里的体验问题,比如列表页没有任何数据时只显示一行灰字,没有引导用户去创建;再比如弱网环境下图片加载一半就卡住,既没有重试也没有超时提示。
核心任务走查适合“测链路”:把登录、搜索、下单、提交这类多步骤流程完整走一遍,重点看跨页面的连贯性。测试时要刻意把自己当成一个“水平一般的新手”,不要用内行人思维跳着操作。比如我测某后台的权限配置流程时,按新手习惯连续点了“下一步”两次,结果系统没有任何反应,也没有提示当前正在加载,多试几次之后才意识到第一次点击其实已经在提交,只是页面没有给出状态反馈。
两种走查都建议安排两个人一起做。一个人主操作,另一个人记录+补问。记录员不参与思考路线,只记录操作、时间和现象,避免主测人自己把问题“合理化”了。
3.3 问题记录模板:让每条发现都能被快速复现
启发式测试最常见的翻车现场是:测试结束后,翻看笔记本,发现只记了一堆“有点怪”“好像不太对”。所以记录模板要强制写成结构化格式。我用过比较顺手的模板是五要素:页面位置、操作路径、问题描述、违反了哪条原则(可以直接标序号)、复现步骤。
每条问题我都会按这个格式写。比如:“页面位置:订单确认页;操作路径:选择地址后点击‘提交订单’;问题描述:点击后按钮无任何加载反馈,约两秒后页面跳转,期间用户可能重复提交;违反原则:第一条(系统状态可见性);复现步骤:清空缓存后进入订单确认页,点击提交,观察按钮状态。”
记录时还要把截图和录屏一并保存。复现路径写得越具体越好,截图要把页面整体、出现问题的区域都框出来。这样后面写报告时,基本不用再重新回去翻体验环境。
4. 问题分级、报告输出与设计反哺
发现问题只是第一步。能不能推动修改,关键看两部分工作:问题定级和报告呈现。我自己见过太多测试报告写成了问题堆砌,读完后产品经理无法判断优先级、开发不知道从哪下手改。所以这里要专门说一下分级和报告的写法。
4.1 四级严重度划分:从“完全无法继续”到“可以忍受”
我习惯用四级严重度模型给可用性问题定级:
| 级别 | 定义 | 典型例子 |
|---|---|---|
| P0 阻断 | 用户无法完成任务或数据丢失,必须立即修复 | 提交按钮无反馈导致重复提交、不可逆操作无确认弹窗 |
| P1 严重 | 任务可以完成但过程非常别扭,或错误引导导致用户困惑 | 报错文案晦涩、关键功能入口不一致、等待无进度提示 |
| P2 中等问题 | 影响效率但不影响核心路径完成 | 缺少快捷键、多余信息干扰、部分文案不统一 |
| P3 轻微 | 体验瑕疵,影响不大,可在改版时顺手处理 | 个别空态不够友好、次要页面字体层级不清晰 |
需要注意的是,同一个问题在不同产品里严重度可能完全不同。删除操作用户两极分化:作为内容发布工具,误删一条已发布内容可能就是重大事故,删除操作没有二次确认就该定P0;但在一个纯草稿箱里,误删的代价相对可控,顶多到P1或P2。所以在定级时不能死套模板,要结合业务带来的实际损害来调整。
定级这一步不该由测试一个人说了算。相对合理的做法是:测试先给出建议级别,评审会上由产品经理和开发一起确认。因为“用户可能遭遇的损失”需要业务判断,“修复成本”需要开发判断,测试负责提供的,应该是问题的客观现象和影响描述。
4.2 报告的写法:结论先行、证据附后
报告结构我的固定做法是四段论:一页结论、问题清单、严重级细节、测试范围记录。
一页结论放在最前面,说明本轮测试覆盖的任务、发现的总问题数、各级别数量、最需要优先处理的3个问题是什么。这个部分不超过一页纸,让决策者一分钟之内掌握全貌。
问题清单按严重度从高到低排序,每条附上五要素描述和截图,开发可以直接对着清单一项项修复。严重级细节部分只写P0和P1的问题,每个问题配上复现路径和影响场景描述,不要把所有级别的细节都堆在这里。
测试范围记录要写清楚测了哪些版本、哪些平台、哪些任务路径。这个部分看似冗余,实际上非常重要。它决定了这份报告的有效边界,防止后续扯皮时范围被无限扩大。
写报告时还要注意:描述问题介绍的是“用户会遇到什么”,而不是“这个地方我不喜欢”。对比一下两种写法,“当用户首次进入首页,没有任何指向搜索区的引导,大部分新用户会在前两次使用时略过搜索功能”,与“首页搜索区不够明显”,后者的说服力就差很多。有场景、有影响,开发在排期时才有依据。
4.3 组织一场问题评审会,而不是丢一份文档
报告发出去不等于问题会解决。如果只是把文档丢到群里,大概率会变成“收到,我们先看一下”,然后就没有然后了。我的习惯是拿到报告后组织一次专门的问题评审会,参加的人不用多:产品经理、负责这条链路的开发、主测人,最多加一个设计同学。
评审会上按顺序过一遍P0和P1的问题。测试负责复现,产品判断业务影响,开发评估修复成本。现场直接定出三个结论:修不修、哪个版本修、谁负责。当场出结论的好处是,把“测试发现问题”的环节直接链接到“产品决策修复”的环节,中间少了反复传递的信息损耗。
和开发沟通时有个技巧值得单独拿出来说:尽量说清楚“用户的场景”,而不是只念原则。比如“这个报错用户看不懂”算是主观判断,换一种说法效率会高很多:“我在弱网下走了一遍找回密码流程,页面提示‘请求失败’,但用户不知道要去查网络还是等两分钟再试,这里如果加上‘检查网络连接后重试’的引导,用户就能自己解决。”先描述场景,再谈建议,开发通常更容易接受。
5. 用这套方法跑完几个项目之后的经验与误区
用尼尔森十原则驱动测试不是拍脑袋就能见效的,我也走过不少弯路。这一部分分享一些相对有价值的经验和踩过的坑,可以作为参考。
5.1 启发式评估是补充,不是用户测试的平替
十原则驱动的启发式测试有自己的使用边界:它适合在开发早期快速扫出体验问题,成本低、见效快,但它替代不了真实用户测试。原则评估是“专家用自己的视角看问题”,用户测试是“真实用户在真实场景里暴露真实困惑”。两者互补,不能互替。
我见过一个团队,因为这次测试结果不错,干脆砍掉了用户验证的环节。结果上线后才发现,专家认为“层级清晰”的导航,真正的新用户根本不知道展开按钮是可以点击的。原因很简单:测试者太了解产品逻辑了,“可点击性”在他眼里显而易见,但对完全陌生的用户来说,这个图标跟装饰性图案没有区别。
更稳妥的做法是:先用十原则做快速评估,把明显的问题在前置阶段修掉,然后把有限预算花在真实用户测试最关键的几个任务路径上。这样既快又稳,两边的优势都能用上。
5.2 别把原则变成“审美正确”,拍到功能上
有些团队跑偏的方向是:把十条原则当成整改大棒,什么页面都要按原则逐条对照,最后把产品改得“很规范但没有灵魂”。比如为了“美观与极简”把次要信息全部折叠,结果核心功能被藏得太深;为了“错误预防”在所有表单上加二次确认,用户正常填写时反被反复打断。这种教条化的运用会把产品改成一堆“标准答案”。
实际操作时我会额外加一个判断维度:原则要服务于核心任务。如果一个页面用户十秒钟就能完成一件事,那过度设计的所有“引导”和“确认”都是多余的。原则是高速公路护栏,不是路障。它的作用是帮助用户顺利完成目标,而不是让产品变得处处“讲道理”。
5.3 最容易空转的角落:空态、异常态、弱网态
几次项目做下来,我发现测试团队普遍在这三个状态上失分:空态、异常态、弱网态。
空态指的是列表没有数据、搜索没有结果、草稿箱为空等状态。很多产品的空态就是一行“暂无数据”,连下一步引导都没有。测试时这是个很容易被忽略的角落,因为测试数据一多,空态根本露不出来。但如果新用户第一次进入产品看到的就是“暂无数据”,他的第一反应往往是“我是不是来错地方了”。
异常态指的是接口超时、服务端错误、操作被拒绝等场景。这类问题往往要模拟错误状态才能触发,平时一团祥和的开发环境里很难重现。如果测试环境没有故障注入工具,也要至少手动试几个常见口子。
弱网态指的是网络不稳定时的体验。用户不会永远都待在信号满格的地方。弱网环境下,按钮反馈是否及时、弱网提示是否明确、重试机制是否顺畅,这些都要纳入测试范围。
我个人的实操策略是:每一轮启发式测试都强制安排20分钟专门清点这三类状态。清点时逐个页面访问,主动构造场景,把“正常路径测完了”当成开始而不是结束。
5.4 从“做一次测试”到“把原则沉淀成团队共识”
最后说一点长期价值。一次测试解决一批问题是远不够的,更有价值的是把十原则翻译成团队自己的检查清单,沉淀到日常流程里。
我推荐的做法是:每一轮测试结束后,把所有发现的问题按原则归一下类,统计一下最常见的是哪几类。比如三轮测试下来,发现“状态可见性”问题占比一直在30%以上,说明团队在这个领域系统性偏弱。那么下一轮开发提测前,就把这个类的检查项提前发给开发和设计自查,问题数量大概率会降下来。
我甚至建议把这个检查清单做成一份共享文档,允许开发和产品随时查看。文档里每一条都配有“发现过的真实问题案例”和“修复后的对比截图”,这样团队内部讨论时,大家说话都有事实依据,而不是凭感觉争来争去。
我自己用这套方法跑了大大小小接近十个项目,最大的感受是:专业感不是靠叫板来的,是靠一套稳定、可复用、能沟通的方法论撑起来的。尼尔森十大易用性原则本身不复杂,但只要把它真正落到测试用例、走查流程和报告输出中,它就能变成团队里最好用的那套通用语言。下次遇到有人问“这个体验哪里不对”,不妨先打开这份清单,从第一条开始过一遍。你会发现,那些说不清道不明的感受,原来都可以被清晰描述出来。