把功能要求写成验收项,核心是让每条要求都包含“触发条件、操作、可观察结果、判定标准”四要素。只写“支持用户注册”“后台可管理订单”这类描述,开发只能猜,测试只能凭感觉,最后必然出现“功能能用但不符合预期”的争议。验收项不是重复需求,而是把需求翻译成任何人都能复现并判定通过或失败的检查步骤。
很多人把验收项写成功能说明书,例如“登录页要有用户名、密码、记住我、忘记密码,点击登录后进入首页”。这段话信息不少,但它仍然不是验收项,因为它没有说明失败条件。如果密码错误,页面应该怎样?如果账号被禁用,提示什么?如果连续输错多次,是否锁定?没有这些边界,开发实现成什么样都算“做完了”。
验收项和功能描述的区别在于:功能描述回答“做什么”,验收项回答“怎么证明做到了”。前者可以模糊,后者必须可判定。一个实用的判断方法是,把验收项交给没有参与需求讨论的人,他能否在不问任何问题的情况下执行并给出通过或失败结论。如果不能,这条验收项就还不合格。
以“用户可以通过邮箱重置密码”为例,按下面四步拆解。
这四步写完后,还需要补异常分支。例如邮箱未注册时,页面应给出统一提示还是不提示,这属于产品决策,必须在验收项里写明,否则开发两种做法都合理。异常分支往往比正常流程更容易产生争议,不能省略。
判定条件要尽量避开“正常”“友好”“快速”这类无法测量的词。可以改成可观察的现象:
如果某项确实无法在验收阶段判定,例如性能表现,就单独列为非功能验收项,写明测量方法和可接受范围,不要混在功能验收项里含糊带过。
假设要验收“文章发布”功能,可以写成这样一条:
前置:以编辑角色登录后台。操作:新建文章,填写标题和正文,选择分类,点击发布。预期:前台文章列表出现该文章,标题和正文与输入一致,发布时间为当前时间;后台文章状态显示为已发布。异常:标题为空时点击发布,页面提示标题不能为空,且不产生新文章记录。判定:正常流程与异常流程均符合上述现象记为通过。
这条验收项可以直接交给测试人员执行。如果执行时发现“标题为空仍能发布”,那就是明确的不通过,而不是理解分歧。适用条件是需求已经确定,且团队认可这套判定口径;如果产品还在探索阶段,验收项可以先粗后细,但进入开发前必须补齐可判定部分。
开发过程中如果发现某条验收项无法实现,或者实现成本远高于预期,不要直接删掉,而应回到需求层面确认:这个行为是否真的必要,替代方案是什么,替代后的判定标准是什么。修改后的验收项要同步给开发和测试,避免三方各持一个版本。
另外,验收项不是越多越好。一个功能拆成几十条细碎检查,维护成本会超过收益。通常按主要流程和关键异常分支组织,每条覆盖一个可独立判定的行为即可。判断标准是:这条验收项失败时,能否明确指出是哪个行为出了问题。
下一步,挑出当前项目里争议最多的一条功能要求,按前置条件、操作步骤、预期结果、判定标准四栏写成一条验收项,再让开发和测试分别读一遍,看他们是否得出相同的通过或失败结论。如果结论不一致,说明这条验收项还需要继续拆。