先给有条件的结论:如果后台显示提交成功、接口返回正常、页面没有报错,但用户仍然完不成任务,那么验收对象不应是“操作是否成功”,而应是“任务是否闭环”。只有当你能拿到用户端可复现的失败证据,并排除环境差异、数据延迟和权限范围三种解释后,才可以把问题定性为流程缺陷。
看似成功通常发生在三个不同层级,混在一起看就会得出错误结论。
验收动作:对同一个操作,分别记录系统层、数据层、任务层各看到什么。如果前两层通过、第三层失败,问题多半不在提交逻辑,而在结果呈现、状态同步或后续入口。这个判断会直接决定你下一步是查前端、查数据同步,还是查权限配置,而不是盲目回滚整个功能。
用户任务未完成,未必是功能坏了。以下三种解释都会产生“看起来成功”的现象,需要用不同证据排除。
证据是同一账号、同一数据、同一时间,在不同浏览器、不同网络或登录状态下结果不同。若只在某一环境失败,优先查缓存、脚本加载和登录态,而不是改后端。
证据是等待一段时间后任务自行完成,且失败集中在高峰时段。此时要记录失败发生到成功的间隔,而不是直接判定为偶发 bug。
证据是操作者本人能看到结果,被授权方或另一角色看不到。若如此,验收标准要改成“目标角色能否完成”,而不是“操作者能否完成”。
假设一个场景:编辑提交内容后提示成功,但前台访问仍显示旧内容。若换一个未登录浏览器能看到新内容,说明是缓存或登录态问题;若等待后出现,说明是同步延迟;若只有特定角色看不到,说明是权限或发布范围问题。三种原因对应三种修复动作,选错方向会让下一次验收继续误判。
如果用户任务本身没有明确定义,那么“任务未完成”就无法验收。反例是:团队把“提交成功”当作任务完成,而用户真正想要的是“提交后可撤回或可修改”。此时后台一切正常,用户仍认为失败,但这不是缺陷,而是验收标准缺失。遇到这种情况,先补一条可观察的完成条件,例如“提交后能在列表中找到该记录并再次打开”,再谈修复。没有这条条件,任何证据都无法区分是功能问题还是预期问题。
不要先改代码。先做一件事:把失败样本固定下来,包括操作账号、操作时间、操作前后状态、目标角色看到的结果。然后按下面的顺序推进。
这个顺序的结果会直接影响下一步:能稳定复现就进入修复;只在特定角色失败就改权限或范围;只在特定时间失败就查同步与负载。若跳过固定样本这一步,后续比较会混入季节、需求变化和数据采集差异,前后对比就失去意义。验收的终点不是“操作成功”,而是用户能凭自己拿到结果,并且你能用证据说明这一点。