上篇文章讲了产品说明书——愿景、蓝图、方向。但蓝图再漂亮,没有施工图纸,房子也盖不起来。今天聊聊软件需求说明书:怎么把"做什么"变成"怎么做"。
1 | 产品说明书的局限
产品说明书解决的是"做什么"的问题。比如,你要开发一个财务总账系统,产品说明书会告诉你:这个系统要支持凭证录入、报表生成、期末结账。它的目标用户是财务人员,核心流程是从业务单据到凭证再到报表。
但怎么支持凭证录入?
用户打开界面看到什么?点击"新增"按钮后发生什么?凭证日期是自动带出当天还是可以选择历史日期?摘要字段最多多少字符?科目编码是下拉选择还是弹出窗口选择?如果用户输错了科目,系统怎么提示?
这些问题,产品说明书回答不了。产品说明书是概念设计,是方向性的。你再往下走,就需要更细的规范。
这就是软件需求说明书。
2 | 软件需求说明书是施工图纸
如果说产品说明书是建筑师的设计方案——这个楼要几层、什么风格、多大面积,那软件需求说明书就是施工队的图纸。
施工队是另外一拨人,设计这件事和他们没啥关系,他们只看施工图纸。图纸上说:这面墙砌多厚、砌多高、这个墙和那个墙中间要留多少间隔。工人们不需要猜,不需要想,按图施工就行。
软件需求说明书也是这个逻辑,它是最接地气的规范。程序员(或AI编程工具)拿到它,不需要问产品经理"这里是什么意思",不需要猜"这个地方该怎么处理"。图纸上写得明明白白,照着做,一行行代码去实现就行了,不用动脑子。
如果有变更怎么办?提出来,评审,看清楚对其他地方有什么影响,然后改图纸。牵一发动全身,这是施工图纸的特点。
下图就是海龙老师在开发时,要求AI先写软件需求,别急着开发,先写文档。

3 | 软件需求说明书写什么
软件需求说明书的核心,是把每一个功能拆到不能再拆。
用例——用户怎么用这个功能?一步步操作是什么?从打开界面到完成任务,中间经过哪些步骤?
UI元素——界面上有什么元素?如何新增、保存按钮在哪、输入框有几个、用户点击"提交"后,页面怎么跳转?
字段要求——每个输入字段是什么类型?字符、数字、日期还是下拉选择?如果是下拉框,有几个选项?每个选项的值是什么?输入不符合要求,怎么校验?
CRUD——这个功能支持哪些操作?新增、查询、修改、删除?修改时哪些字段可以改、哪些不能改?有没有关联数据需要级联处理?
异常处理——用户忽然关闭窗口怎么办?输入了错误数据怎么办?网络超时怎么办?每一种异常都要有对应的处理方案,不能留空白让程序员自由发挥,现在随着开发脚手架的成熟,都不需要写到软件需求里面了。
业务规则——金额不能超过预算、报销日期不能早于申请日期、审批必须按岗位层级进行。这些规则要写成表格,触发条件、系统行为,一条条列清楚。
完整性检查——提交前要做哪些校验?必填项有没有填?关联数据有没有缺失?校验不通过,提示信息是什么?
写软件需求说明书是一个非常专业、艺术性的工作,海龙老师只列出了一部分内容,感兴趣的同学可以去网上找资料学习。
下图是20年前海龙老师进入软件研发领域时,看了好多遍的书。

这些东西,才是写代码的核心规范。
4 | AI时代的软件需求规范
有些粉丝也是IT从业者,看到这里会有个疑问,上面写的软件需求是针对传统软件开发的,过度的结构化、扣细节、缺少为什么的描写、死板的一步步线性处理,没有反馈流程,但是,目前是AI时代了,AI具有功能设计能力了,怎么还要这么写呢?
确实如此,上面的文章只是让大家理解软件设计是怎么回事,在AI时代,软件需求说明书应该是另外一个写法。海龙老师重新思考了一下,AI时代,编写软件需求的核心改变是应该将需求作为对话的起点,AI应该理解意图、挑战假设、提出更好的方案,而不是100%的执行。
简单来说,可以分为三层:
第一层:战略意图(Why)
这个功能解决什么问题
成功指标是什么
不做什么(边界)
AI可以挑战的假设
第二层:核心用例(What)
关键场景(不超过5个)
验收标准(可测试)
边界条件(异常情况)
第三层:执行细节(How)—— 这部分让AI自己推理
技术约束(必须用的技术栈)
设计规范(UI/UX原则)
非功能需求(性能、安全)
内容所限,就不在这里详细说明了,同样,海龙老师把这个技能开发成了SKILL,发布到知识星球上,大家可以下载、注册、使用。


结语
不少粉丝朋友在各种场合吐槽AI,说AI不懂他,AI不理解他说的话。我让他把截图发过来,我一看,大吃一惊,AI编程是因为AI掌握了编程的知识(这个所谓的掌握是文字概率的训练结果),所以,你驾驭AI,就要用它掌握的知识来进行沟通,要用术语、专业词汇来描述,这样大家才在一个频道上对话,而不是鸡对鸭讲,越讲越乱。
但是,很多人都是初次踏入IT行业,没有积累,这时候怎么办呢?就可以借助海龙老师的方法,一步步来,先让AI写产品需求、再让AI写软件需求,每次写的时候,都可以借鉴海龙老师开发的SKILL,这样就能让AI照猫画虎、描出一个大概的样子,然后再让AI照着这个样子去开发,这才是正确的入门方法。
夜雨聆风