把功能要求写成验收项,核心是把它从“想要什么”改写成“在什么条件下、执行什么操作、看到什么可观察结果”。对已有博客页面或项目做改进时,每一条验收项都应能由另一个人独立执行并给出通过或不通过的结论,而不是依赖“感觉更好用了”这类主观判断。
假设你正在改进一个已有博客,原始功能要求是“文章页要支持目录导航”。这句话无法验收,因为“支持”没有边界。可以按下面四步改写。
改写后得到类似验收项:当文章包含两个及以上二级标题时,文章页显示目录;点击目录项后页面滚动至对应标题,标题顶部不被遮挡,且目录项呈现选中状态。这条描述没有规定用什么技术实现,只约束了用户可感知的结果,因此适合在原有项目上做增量改进。
无论功能大小,一条可执行的验收项通常包含以下要素,缺一项就容易在验收时产生分歧。
把功能要求写成验收项时,最容易出现三类问题。
第一类是把手段当结果,例如“用某个前端库实现目录”。技术选型可以写在实现说明里,但验收项应描述用户看到的行为。否则更换实现方式后,原验收项就失效了。
第二类是把多个功能塞进一条,例如“目录正常、分享正常、评论正常”。这种条目一旦不通过,无法快速定位问题。应按功能拆成独立条目,每条只验证一个结果。
第三类是缺少边界条件。例如只写“移动端显示正常”,却没有说明在哪些宽度、哪些内容长度下检查。可以改为:在 375 像素宽度下,目录可展开和收起,展开后不遮挡正文首行。
如果项目已经存在,不必重写全部文档。可以只针对本次要改的功能,建立一张验收清单,每行包含编号、前置条件、操作、预期结果和判断标准。开发前与提出需求的人逐条确认,开发后由未参与实现的人按清单执行。
执行时记录实际结果,而不是只写“通过”。遇到不通过,写明在哪一步、看到什么、与预期差在哪里。这样下一次修改时,能直接判断是回归问题还是新问题。
对于无法自动判断的视觉或交互结果,可以保留人工验收,但要把判断标准写得足够具体,例如“目录展开后,正文首行仍可见”“选中项颜色与未选中项有明显差异”。如果团队有自动化测试能力,再把其中稳定、可重复的条目转为脚本检查,不必一开始就追求全自动。
下一步,挑出当前项目里最模糊的一条功能要求,按前置条件、操作、预期结果、判断标准四栏改写,然后请另一个人只读这条验收项并实际操作一次;如果他需要额外追问才能判断通过与否,就继续补充,直到这条验收项可以独立执行。