把功能要求写成验收项,核心不是把需求描述得更长,而是把它改写成“谁在什么条件下执行什么操作,系统应产生什么可观察结果”。如果一条要求无法被第三方按照固定步骤复现出通过或失败,它就还停留在愿望层面,不能直接进验收清单。
很多网站建设论坛里的需求帖会把功能写得很细,例如“会员中心要好看、好用、响应快、支持各种登录方式”。这些词看起来具体,实际无法判定。验收项要解决的是判定问题,不是表达问题。
一个典型误解是:只要把界面元素、字段、按钮都列出来,就算验收标准。实际上,列出按钮只说明“有什么”,没有说明“做到什么程度算完成”。例如“有搜索框”不是验收项,“在标题和正文中搜索关键词,结果按发布时间倒序显示,无结果时显示空状态提示”才接近可验收。
一条可执行的验收项,通常包含以下四个要素。缺一项,验收时就容易变成扯皮。
例如原始要求是“文章支持定时发布”。可以改写成:前置条件为编辑账号已登录且拥有发布权限;操作步骤为新建文章,将发布时间设置为未来某一时刻并保存;预期结果为保存后文章状态显示为待发布,到达设定时间后前台可访问;判定边界为若设定时间早于当前时间,应提示时间无效且不保存。
验收项里最危险的是“友好”“流畅”“美观”“安全”“兼容”这类词。它们不是不能出现,而是必须落到可观察的结果上。
“页面要快”可以改成“在指定测试网络条件下,首页主要文档返回时间不超过约定值”。这里必须注意:具体数值应由项目双方根据服务器、带宽和业务场景约定,不能由开发方单方面宣称,也不能把某个通用数字当成所有项目的验收线。
“兼容主流浏览器”可以改成一份浏览器与版本清单,并写明每个浏览器上必须通过的核心路径,例如注册、登录、下单、支付回调。清单之外的浏览器出现样式差异,是否算缺陷,要提前约定。
“安全”可以拆成可检查项,例如:未登录用户直接访问后台地址应被拒绝;普通用户不能通过修改 URL 参数查看他人订单;表单提交包含服务端校验,不能只靠前端 JavaScript。这些都比“系统要安全”更接近验收语言。
同一个功能要求,可能同时涉及三类验收,混在一起写会导致责任不清。
如果一条验收项写“文章发布后前台要显示且打开要快”,功能问题和性能问题就缠在一起。更稳妥的写法是拆成两条:一条验收发布后前台是否可访问、标题与正文是否一致;另一条验收在约定测试条件下页面返回时间是否满足约定。这样出现问题时,能判断是功能缺陷还是性能未达标。
拿到一条模糊要求后,按下面顺序处理,通常几分钟就能判断它能不能进验收清单。
假设某条要求是“后台可以导出用户列表”。按上述步骤可改写为:管理员登录后台,进入用户列表页,选择导出范围并点击导出;系统生成包含约定字段的文件,字段顺序与页面列表一致;若当前筛选结果为空,应提示无数据可导出而不是生成空文件。这里“约定字段”必须在开发前由需求方确认,不能等到验收时再临时增加。
完成改写后,重点检查三件事。第一,是否存在无法验证的形容词,如果有,继续拆成可观察结果。第二,是否把“可能原因”写成了“确定结论”,例如把“导出失败”直接归因于服务器配置,验收项只应描述现象和期望,不应预设原因。第三,是否遗漏了失败路径。只写成功路径的验收项,上线后遇到异常输入往往无人负责。
如果一条要求经过改写仍然无法写出预期结果,通常说明需求本身还没有想清楚,应先回到业务方确认规则,而不是靠开发人员猜测。下一步,可以挑出当前争议最大的一条功能要求,按前置条件、操作步骤、预期结果、判定边界四栏写成表格,再让开发和需求方分别确认一次。