把功能要求写成验收项,核心是先把“想要什么”改写成“在什么条件下、执行什么操作、看到什么可观察结果”。验收项不是功能描述,而是一条可判定真假的检查语句。常见误解是:功能列表写得越细,验收就越清楚。实际上,如果只写“支持会员注册”“支持文章发布”,开发和验收双方仍会各自理解,最后容易在“算不算完成”上扯皮。
功能点回答的是“系统有什么”,验收项回答的是“怎样证明它能用”。比如“支持表单提交”只是功能点;“在必填项为空时点击提交,页面停留在当前表单并显示对应字段的提示,且不产生新记录”才是验收项。后者包含前置条件、操作、预期结果和判断依据,任何一方都能独立复现。
细不等于可验收。把“注册”拆成手机号、验证码、密码、昵称四条,仍然没有说明验证码错误时怎么办、重复手机号如何处理、成功后跳到哪里。验收项要的是可观察的边界,而不是把名词拆碎。
可以套用一个短句式:当(前置条件)时,执行(操作),应当(可观察结果),通过(检查方式)确认。这个句式不追求文采,追求的是可复现。
实际项目中常见两种做法。一种是在开发前把功能要求逐条转成验收项,双方确认后再动手;另一种是先开发,验收时再对照功能列表临时判断。两者适用条件不同。
判断标准不是哪种更先进,而是看变更成本:改一条要求的代价越高,就越应该在开发前把它写成验收项。
写完一条验收项后,逐项检查:
假设有一条要求是“支持文章草稿”。可以改写成:当已登录作者在编辑页填写标题和正文后点击保存草稿,应当提示保存成功,并在文章列表中看到该文章处于草稿状态;刷新页面后草稿内容仍可打开继续编辑。这里的前置条件、操作、预期结果和检查方式都齐了,开发与验收可以各自复现。
如果双方对结果理解不同,先回到验收项本身,而不是争论感受。检查这条验收项是否同时满足三点:前置条件明确、操作可复现、结果可观察。缺任何一点,都应先补充文字再判断,而不是直接判定通过或不通过。对于无法用页面观察的结果,例如数据是否写入,应约定一种可核对的检查方式,例如查看后台列表或由开发方提供查询结果,并把这种方式写进验收项。
下一步,挑出当前项目里争议最大的一条功能要求,按上面的四步改写成一条验收项,再让相关方确认前置条件和预期结果是否一致。