把功能要求写成验收项,核心做法是先把“要做什么”改写成“在什么条件下、执行什么操作、看到什么可观察结果”。验收项不是功能描述,而是双方对“做完没有”的共同判定标准。起点是先找出一条最模糊的功能要求,把它拆成前置条件、操作步骤、预期结果和判定方式四部分。
功能要求回答“系统应该具备什么能力”,验收项回答“怎样确认这个能力已经具备”。例如“支持用户注册”是功能要求,无法直接判定通过或失败;“输入未注册邮箱、点击发送验证码、页面提示已发送且数据库新增一条待验证记录”才接近验收项。
判断一条内容是否够格当验收项,可以看它是否满足三点:结果能被观察或测量;执行者不依赖开发者的口头解释也能操作;通过和失败有明确分界。缺少任何一点,都应继续拆分。
推荐用固定结构书写,便于逐条核对:
假设一条要求是“文章支持定时发布”,可以写成:前置条件为已创建文章并设置未来时间;操作为保存并等待到达设定时间;预期结果为前台在设定时间后可访问该文章,提前访问返回未找到;判定方式为分别在设定时间前后各访问一次并记录结果。这里的时间点、时区和提前访问的返回状态都需要事先约定,否则不同人测试会得出不同结论。
验收项不是越细越好。拆得过细会增加编写和维护成本,拆得过粗则容易在交付时扯皮。可以用两个维度取舍:
边界条件是最容易被漏掉的部分。常见检查项包括:空输入、超长输入、重复提交、无权限访问、网络中断后重试、并发操作同一份数据。把这些写成独立验收项,比在一条里堆叠描述更容易执行。
执行后如果出现“功能能用但验收不通过”,先判断是验收项写得过严,还是功能确实未达到约定。前者应调整文字并说明理由,后者应记录为待修复项,而不是当场口头放宽标准。
“界面友好”“加载快速”“兼容主流浏览器”都缺少判定依据。可以改为指定需要检查的页面、操作路径和可观察结果;如果确实无法量化,就把它降为设计原则,不列入必须通过的验收项。另一个常见问题是把多个功能塞进一条,导致部分通过时无法记录状态,应按操作对象或结果类型拆开。
下一步,从当前需求文档中挑出三条最模糊的功能要求,按前置条件、操作步骤、预期结果、判定方式改写成验收项,再请一位不熟悉该项目的人试读并指出需要追问的地方。