第4章:需求文档编写——如何写出清晰、完整、一致的需求规格说明书(SRS)

说实话,我见过太多项目死在需求文档上。

有的写得像天书,开发看完一脸懵。有的漏洞百出,测试都不知道该测什么。还有的,嗯,干脆就没写。

我自己带团队那会儿,最怕听到一句话:「需求都在我脑子里,你们先做着。」结果呢?返工率高达60%。

所以这一章,咱们就聊聊怎么把需求文档写明白。说白了,就是一份能让所有人——产品、开发、测试、运营——都看懂且不吵架的文档。

4.1 需求规格说明书(SRS)到底是什么?

SRS,全称 Software Requirements Specification。它不是产品经理的「自嗨笔记」,而是整个项目的「宪法」。

我个人的习惯是:SRS 必须回答三个问题——系统要做什么?在什么条件下做?做到什么程度算好?

核心三要素:

  • 清晰:每句话只有一个解释,没有歧义
  • 完整:覆盖所有功能、性能、约束条件
  • 一致:前后不矛盾,术语统一

你想想看,如果文档里写着「系统应快速响应用户请求」,那「快速」是多快?2秒还是200毫秒?这就是典型的模糊表述,必须避免。

4.2 SRS 的标准结构(附模板)

我这些年用过不少模板,最顺手的是基于 IEEE 830 标准改良的版本。下面这个模板,我几乎每个项目都会微调后使用。

章节 内容 常见坑点
1. 引言 目的、范围、定义、参考文献 范围写得太宽,什么都往里塞
2. 总体描述 产品视角、用户特征、约束条件 忽略非功能需求,比如并发量
3. 具体需求 功能需求、接口需求、性能需求 功能描述太抽象,无法测试
4. 验收标准 每个需求的通过条件 验收标准写成了「开发自测」
5. 附录 术语表、变更记录、待办事项 变更记录没人维护

小技巧:我习惯在引言里加一段「不做什么」。比如「本系统不涉及支付功能」。这能有效避免需求蔓延。

4.3 如何写出「清晰」的需求?

清晰,是SRS的第一生命线。怎么做到?我总结了三条铁律。

4.3.1 用「主语+谓语+宾语+条件+结果」句式

举个例子:

❌ 模糊版:「用户登录后可以看到订单。」

✅ 清晰版:「当已登录用户访问‘我的订单’页面时,系统应展示该用户最近30天内的所有订单,按时间倒序排列,每页显示20条。」

看到了吗?多了条件、范围、排序规则、分页数量。开发拿到这种需求,直接就能写代码。

4.3.2 量化一切可量化的指标

我在项目中遇到过最典型的案例:客户说「系统要快」。结果上线后,客户觉得慢,开发觉得已经很快了。为什么?因为没有量化。

正确的写法是:

  • 页面加载时间 ≤ 1.5秒(在4G网络下)
  • API响应时间 ≤ 200ms(P95)
  • 并发用户数 ≥ 1000

4.3.3 使用「必须/应当/可以」等关键词

这是IEEE 830里的规范,我一直在用:

  • 必须(shall):强制要求,不实现就不能上线
  • 应当(should):建议实现,但可以协商
  • 可以(may):可选功能,锦上添花

注意:千万不要混用。我曾经见过一份文档里「必须」和「应当」混着写,结果开发把「应当」当「必须」做了,工期翻了一倍。

4.4 如何保证「完整性」?

完整性,说白了就是「别漏东西」。我有个笨办法,但很管用——需求检查清单。

每次写完SRS,我都会对照这个清单过一遍:

  1. 所有用户角色都覆盖了吗?(普通用户、管理员、访客)
  2. 所有状态都考虑了吗?(正常、异常、边界)
  3. 所有输入都有验证规则吗?(格式、长度、范围)
  4. 所有输出都有格式定义吗?(JSON结构、错误码)
  5. 所有非功能需求都列了吗?(性能、安全、可维护性)

嗯,这里要注意一点:完整性不等于「事无巨细」。比如「用户点击按钮后按钮变灰」这种UI细节,可以放到设计稿里,不需要写进SRS。

4.5 如何保证「一致性」?

一致性,是SRS里最容易出问题的地方。我见过最离谱的:文档前面说「用户ID是邮箱」,后面又说「用户ID是手机号」。

怎么避免?三个方法:

4.5.1 建立术语表

在附录里维护一个术语表,所有关键概念统一定义。比如:

术语定义
用户已注册并登录的账户
访客未登录的浏览者
订单用户提交并支付成功的交易记录

4.5.2 使用「唯一引用编号」

每个需求都给它一个编号,比如 REQ-FUNC-001。这样在文档里引用时,直接写编号,不会混淆。

4.5.3 做一次「交叉检查」

我习惯的做法是:把文档打印出来,用两种颜色的笔。一种颜色标功能需求,另一种标非功能需求。然后看它们之间有没有冲突。比如功能需求说「支持视频上传」,非功能需求说「单文件不超过10MB」,这就不一致——视频10MB能传几秒?

4.6 最佳实践总结

最后,分享几个我踩过坑之后总结出来的经验:

  • 写完后找「局外人」评审:找一个不熟悉项目的人读一遍,如果他看不懂,那就是文档的问题。
  • 版本控制要严格:每次修改都要更新版本号,并在变更记录里写明「改了啥、为什么改、谁改的」。
  • 不要用「等等」这个词:比如「支持Excel、PDF等格式」。这个「等」字,就是未来的坑。
  • 每个需求都要可测试:如果你写了一个需求,但想不出怎么测试它,那这个需求就不合格。

一句话总结:好的SRS,是让开发看完直接写代码,测试看完直接写用例,产品看完直接拍板——而且三方不吵架。

我曾经因为一份写得稀烂的SRS,导致项目延期两个月。从那以后,我花在写文档上的时间,从来不少于总工时的20%。你想想看,前期多花两天写清楚,后期省下两周改bug,这笔账怎么算都划算。

下一章,咱们聊聊功能定义——怎么把SRS里的需求,变成开发能直接落地的功能列表。