夜雨聆风学习资料网

ARTICLE · 1125694

从十大领域到需求文档结构:为什么不同项目不应该使用同一套模板?

从十大领域到需求文档结构:为什么不同项目不应该使用同一套模板?

前一篇文章中,我整理了“企业软件解决方案设计的十大领域”。

它试图回答一个基础问题:

设计企业软件解决方案时,我们需要从哪些专业维度思考,才能避免只看页面和功能,而忽略流程、数据、规则、状态、集成和控制?

随后,我又把十大领域转化成了一张产品需求文档(PRD)和功能需求文档(FRD)的设计思考框架。

它进一步回答:

面对一个具体需求,我们应该按照什么路径提出问题,才能逐步形成完整、可开发、可测试的系统方案?

但真正开始写FRD时,还会遇到第三个问题:

不同项目的FRD,应该使用完全相同的结构吗?

实际项目中,新建系统、现有系统增强和系统替换迁移,承担的设计任务并不相同。

同样,一个以状态流转为核心的需求,与一个以数据、计算或系统集成为核心的需求,需要展开的内容也不会完全一样。

如果所有项目都套用同一份模板,通常会产生两个相反的结果。

一种是文档包含大量看似完整的章节,却没有回答当前项目真正困难的问题。

另一种是文档只记录页面、字段和几个功能点,没有覆盖数据、规则、状态、权限、异常和验收。

FRD需要稳定的专业底座,但不应该有一套对所有项目完全相同的目录。

比较合理的结构是:

• 所有FRD都需要具备的固定结构。

• 由项目性质决定的变更模式。

• 从十大领域中选择的可选深化内容。

最终形成:

固定结构+一种变更模式+若干可选深化包=当前项目适用的FRD结构。


一、先把三层知识框架连接起来

在继续讨论FRD结构之前,需要先说明十大领域、PRD/FRD思考框架和本文之间的关系。

它们不是三套彼此独立的方法,而是同一棵知识树的三个层级。

1.十大领域是一张知识地图

企业软件解决方案设计的十大领域包括:

• 业务流程方案。

• 功能与业务规则。

• 数据方案。

• 工作流与状态管理。

• 集成方案。

• 权限与安全控制。

• 交互与用户体验。

• 报表与分析。

• 自动化与智能化。

• 非功能需求与技术约束。

这十个领域回答的是:

一个完整的企业软件解决方案,需要具备哪些方面的专业知识?

它们是横向的知识分类,帮助我们从不同角度观察同一个需求。

例如,一项审批功能表面上属于工作流与状态管理,但同时会涉及:

• 业务流程中的责任分工。

• 功能与业务规则中的审批条件。

• 数据方案中的审批记录。

• 权限与安全控制中的职责分离。

• 自动化与智能化中的通知和超时处理。

因此,十大领域不是十个彼此隔离的模块,而是十个相互关联的设计视角。

2.PRD/FRD思考框架是一条分析路径

PRD/FRD设计思考框架把十大领域重新组织成六个分析阶段:

• 方向与范围。

• 端到端业务与协作。

• 功能、规则与状态。

• 数据与用户体验。

• 集成、权限与控制。

• 输出、自动化与交付质量。

这六个阶段回答的是:

在分析一个具体需求时,应该按照什么顺序把问题想清楚?

因此:

十大领域说明要掌握什么,PRD/FRD思考框架说明怎样把这些知识应用到具体需求中。

3.FRD结构配置解决怎样落到文档

本文继续向下回答:

当分析完成以后,应该怎样根据项目性质,把结果组织成适合当前项目的FRD?

这一步不再增加新的知识领域,而是解决文档结构选择问题。

整条知识路径可以概括为:


二、所有FRD都应该具备什么

FRD可以根据项目调整,但不能完全自由发挥。

无论项目属于哪一种变更模式,都有一些内容必须经过判断。这些内容构成FRD的固定结构。

固定不等于每个部分都要写得很长,而是不能在没有判断的情况下直接遗漏。

如果某项内容不适用,可以明确说明原因。

1.文档信息与变更记录

至少应该包括:

• 文档版本。

• 当前状态。

• 负责人。

• 修改日期。

• 本次主要变化。

• 评审和确认状态。

对于持续更新的FRD,这些内容不是行政信息。

它们决定团队看到的是不是同一版本,也帮助开发、测试和业务识别哪些决定已经改变。

2.背景、目标与范围

这一部分需要回答:

• 为什么做。

• 要解决什么业务问题。

• 谁会使用或受到影响。

• 期望产生什么业务结果。

• 本次做什么。

• 本次不做什么。

• 存在哪些假设、约束和依赖。

“提升效率”“优化体验”“加强管理”不构成完整目标。

即使暂时无法量化,也应该说明希望改变什么可观察的业务结果。

3.用户、角色与业务场景

FRD不能只有功能清单,还需要说明功能出现在哪个业务场景中。

至少应该回答:

• 谁触发业务。

• 什么事件触发。

• 业务从哪里开始。

• 经过哪些关键步骤。

• 最终产生什么业务结果。

• 有哪些正常、替代和异常场景。

如果一项功能找不到明确的使用者、触发事件和业务结果,它很可能还没有被真正定义。

4.端到端业务流程与系统边界

这一部分承接十大领域中的“业务流程方案”。

它需要说明:

• 业务如何端到端运行。

• 哪些步骤由用户完成。

• 哪些步骤由当前系统完成。

• 哪些步骤由外部系统完成。

• 每个环节的输入和输出是什么。

• 系统责任从哪里开始,到哪里结束。

• 上下游团队或系统分别负责什么。

这部分不一定需要非常复杂的流程图,但必须让读者理解功能为什么存在于当前流程中。

5.功能与系统行为

每项核心功能至少需要说明:

• 谁或什么系统触发。

• 触发事件是什么。

• 前置条件是什么。

• 用户执行什么动作。

• 系统作出什么响应。

• 输入和输出是什么。

• 数据和状态发生什么变化。

• 最终产生什么业务结果。

FRD不能只写“支持新增、修改、删除、提交和审批”。

这些词只说明了操作名称,没有说明:

• 什么情况下允许操作。

• 什么情况下禁止操作。

• 操作以后系统发生什么变化。

• 失败以后如何处理。

功能名称不是功能设计,系统行为才是功能设计。

6.数据、规则、状态和权限影响

并不是每个需求都需要完整的数据模型、状态机或权限矩阵,但每个需求都应该扫描这些方面是否受到影响。

至少需要判断:

• 是否新增或修改业务对象。

• 是否新增或修改字段。

• 是否改变计算或判断规则。

• 是否改变对象状态。

• 是否改变角色和操作权限。

• 是否影响上下游系统。

• 是否需要留下新的审计证据。

简单需求可以在功能说明中回答。

复杂需求则需要调用相应的可选深化包。

7.异常、纠错与恢复

正常路径能够运行,不代表方案已经完整。

FRD至少应该判断:

• 输入错误怎么办。

• 重复提交怎么办。

• 权限不足怎么办。

• 当前状态不允许操作时怎么办。

• 系统处理中断怎么办。

• 外部系统失败怎么办。

• 部分成功怎么办。

• 用户撤回或业务驳回怎么办。

• 取消、作废和冲销以后怎么办。

• 是否允许人工补救。

更重要的问题是:

处理失败、撤销或冲销以后,数据和状态应该回到哪里?

8.非功能需求与技术约束

这一部分承接十大领域中的“非功能需求与技术约束”。

至少应该判断:

• 响应时间。

• 数据量。

• 并发。

• 可用性。

• 可靠性。

• 安全。

• 可维护性。

• 可扩展性。

• 兼容性。

• 现有平台和架构限制。

如果暂时没有明确指标,可以标记为待确认,但不应使用“响应快速”“性能良好”“系统稳定”等无法验证的表达。

9.验收标准与未确认问题

每项关键需求都应该能够回答:

• 如何证明已经实现。

• 正常路径如何验证。

• 禁止路径如何验证。

• 异常和恢复如何验证。

• 权限差异如何验证。

• 数据和业务结果如何核对。

同时,需要区分:

• 已确认的决定。

• 暂时采用的假设。

• 尚未回答的问题。

• 已识别的风险。

• 需要谁继续确认。

不能被验证的需求,通常还不是一项完整的系统要求。


三、三种变更模式分别改变什么

固定结构保证FRD具备基本专业质量,变更模式则决定FRD还需要承担什么额外任务。

三种变更模式不是新的解决方案领域。

它们回答的是:

当前项目面对的是什么性质的改变?

1.新建系统或新模块

新建系统没有稳定的目标行为可以参考。

FRD需要帮助业务、产品、开发和测试建立共同理解。

除了固定结构以外,通常还需要增加:

• 目标业务模式。

• 核心业务概念和术语。

• 完整功能地图。

• 用户角色和职责。

• 完整的端到端目标流程。

• 业务对象及其关系。

• 对象生命周期。

• 初始权限模型。

• 系统边界和上下游关系。

• 初始配置和基础数据。

• 上线后的运营与支持方式。

它主要回答:

这个系统从一开始应该怎样成立?

新建系统中,很多争议并不是字段应该放在哪里,而是业务本身尚未形成统一定义。

如果业务对象、责任和规则没有先定义清楚,页面写得越详细,返工可能越多。

2.现有系统增强或修改

已有系统已经存在稳定的用户、数据、代码和运行方式。

FRD不一定需要重新描述整个系统,但必须把变化及其影响讲清楚。

除了固定结构以外,通常还需要增加:

• 当前系统行为。

• 当前存在的问题。

• 当前与目标差异。

• 功能变更摘要。

• 受影响流程。

• 受影响字段、规则和状态。

• 受影响接口和报表。

• 必须保持不变的行为。

• 旧记录兼容方式。

• 回归测试范围。

• 发布和启用方式。

• 必要时的回退方案。

它主要回答:

具体改变什么,会影响什么,什么必须保持不变?

现有系统增强可以采用差异方式编写,但不能因为只写变化而失去必要上下文。

字段设计也不能因为属于旧系统改造而自动简化。只要字段的来源、校验、联动、权限或生命周期发生变化,就仍然需要详细定义。

旧系统代码可以帮助还原当前行为,但不能自动成为未来需求。

代码中可能包含:

• 真实业务规则。

• 旧平台限制。

• 临时补丁。

• 历史兼容逻辑。

• 已经不再合理的处理方式。

FRD需要区分哪些应该保留,哪些应该重新设计。

3.系统替换与迁移

系统替换既不是单纯定义新系统,也不是修改旧系统。

它同时面对两个问题:

• 未来应该怎样运行。

• 现有业务怎样安全地进入未来方案。

除了固定结构以外,通常还需要增加:

• 旧系统能力盘点。

• 新旧方案差距分析。

• 保留、替换、重新设计和废弃决定。

• 新旧业务对象映射。

• 新旧字段映射。

• 数据转换和清洗规则。

• 历史数据范围。

• 未完成业务处理。

• 余额和关联关系处理。

• 新旧规则生效边界。

• 数据核对与业务对账。

• 上线切换。

• 并行运行。

• 回退方案。

• 旧系统停用和历史查询。

它主要回答:

目标方案怎样运行,以及当前业务怎样安全地走到目标方案?

迁移项目中最危险的误区,是只设计未来状态,却没有定义现在怎样过去。

一个设计正确的新系统,并不自动意味着它可以安全上线。


四、八个可选深化包来自哪里

变更模式决定项目是在定义、改变还是转换,但不能决定所有FRD内容。

同样是现有系统增强,有的项目主要修改状态流程,有的主要调整数据和计算规则,有的则主要涉及系统集成。

因此,需要根据当前项目的主要设计复杂度,从十大领域中选择需要深入展开的内容。

本文将这些内容称为“可选深化包”。

它们不是新的知识分类,也不是对十大领域的替代。

十大领域中的“业务流程方案”和“非功能需求与技术约束”已经进入FRD固定结构。

“功能与业务规则”中的基本功能行为同样属于固定内容,而复杂规则、计算和配置则按需要继续深化。

由此形成八个可选深化包。

1.功能与业务规则深化包

适用于存在复杂计算、资格判断、额度、优先级或可配置规则的需求。

通常需要增加:

• 业务规则清单。

• 条件和结果。

• 决策表。

• 计算公式。

• 输入参数。

• 精度和舍入。

• 规则优先级。

• 规则冲突处理。

• 生效日期和适用范围。

• 参数配置。

• 修改权限和审批。

• 规则版本。

• 计算示例。

• 零值、负数、空值和边界值处理。

如果规则可能发生变化,需要进一步判断:

这项规则应该写入程序,还是由授权用户进行配置?

2.数据方案深化包

适用于主数据、交易数据、复杂表单、历史数据、数据迁移和数据质量要求较高的场景。

通常需要增加:

• 核心业务对象。

• 对象定义。

• 对象之间的关系。

• 唯一标识。

• 重复判断依据。

• 权威数据来源。

• 数据所有权。

• 字段字典。

• 必填、默认值和自动带值。

• 字段校验和联动。

• 生效与失效。

• 作废、归档和删除。

• 历史版本。

• 数据质量。

• 数据保留要求。

字段字典不应该只有字段名称和类型。

它还应该说明字段代表什么业务事实、从哪里来、由谁维护,以及在什么条件下允许变化。

3.工作流与状态管理深化包

适用于审批、工单、订单、任务、多阶段处理和对象生命周期。

通常需要增加:

• 状态名称和业务含义。

• 状态进入与退出条件。

• 允许和禁止的状态转换。

• 状态转换矩阵。

• 不同角色在不同状态下允许的操作。

• 任务分配和待办。

• 通知、超时和升级。

• 撤回、驳回和重新打开。

• 并行任务。

• 流程完成后的状态恢复。

状态设计不能只画一张正常路径图。

真正的风险通常存在于非法跳转、重复触发、并发操作和异常恢复中。

4.集成方案深化包

适用于接口、文件交换、消息、批量任务和跨系统数据同步。

通常需要增加:

• 上下游系统和责任边界。

• 调用方向。

• 触发时点。

• 实时或批量处理。

• 请求和响应。

• 字段映射。

• 编码、币种和单位转换。

• 成功确认。

• 重复控制和幂等。

• 超时、重试和补发。

• 部分成功。

• 错误记录。

• 接口对账。

• 监控与告警。

• 身份验证和授权。

• 集成失败后的业务状态。

接口能够传送数据,只能证明技术连接存在。

业务是否完整,还要看失败以后怎样处理,以及两边的数据能否长期保持一致。

5.权限与安全控制深化包

适用于财务、审批、敏感数据、多公司、多组织和受监管业务。

通常需要增加:

• 角色权限矩阵。

• 公司和组织范围。

• 数据权限。

• 状态权限。

• 操作权限。

• 字段权限。

• 职责分离。

• 禁止自批。

• 代理和紧急授权。

• 特殊修改。

• 审计日志。

• 原值和新值。

• 操作原因。

• 敏感数据保护。

• 数据保留要求。

权限不能只控制用户能否打开页面。

还要控制用户能看到什么数据、在什么状态下执行什么操作,以及关键操作是否留下足够证据。

6.交互与用户体验深化包

适用于复杂表单、大量人工操作、移动端、搜索选择和容易误操作的任务。

通常需要增加:

• 用户任务流。

• 页面入口。

• 页面状态。

• 字段显示和联动。

• 必填、默认值和只读条件。

• 搜索、筛选和选择。

• 排序和分页。

• 批量操作。

• 错误提示。

• 防误操作。

• 空状态和加载状态。

• 成功反馈。

• 设备和可访问性要求。

用户体验不能代替业务规则,但不合理的交互可能导致正确的规则被错误执行。

7.报表与分析深化包

适用于查询、报表、管理看板、异常监控和数据导出。

通常需要增加:

• 输出使用者。

• 使用目的。

• 支持什么业务判断。

• 指标定义。

• 计算口径。

• 数据来源。

• 统计时间点。

• 更新频率。

• 查询维度和筛选条件。

• 逐层查看。

• 导出和订阅。

• 数据权限。

• 异常阈值。

报表需求不能止于“需要一张报表”。

首先需要确认:

使用者准备根据这份输出作出什么决定,或者采取什么行动?

8.自动化与智能化深化包

适用于自动编号、自动计算、自动匹配、自动分派、智能推荐和人工智能(AI)判断。

通常需要增加:

• 自动化触发条件。

• 自动执行内容。

• 输入数据。

• 判断依据。

• 输出结果。

• 阈值或置信度。

• 人工确认点。

• 无法判断时的替代路径。

• 人工覆盖权限。

• 覆盖原因。

• 错误结果纠正。

• 审计和可追溯。

• 质量监控。

• 反馈闭环。

自动化设计不能只描述系统在理想情况下做什么。

它还需要回答:

系统什么时候不应该自动决定,以及人如何发现、解释和纠正错误结果?


五、为什么不能把选中的内容简单相加

三种变更模式和八个可选深化包,并不意味着需要维护二十四套FRD模板。

变更模式是单选,可选深化包通常是多选。

一个系统替换项目可能同时涉及:

• 数据方案。

• 工作流与状态管理。

• 功能与业务规则。

• 集成方案。

• 权限与安全控制。

如果把不同深化包直接拼接,文档会产生大量重复。

1.按照业务决定合并

例如:

• 工作流与状态管理会问某个状态下允许什么操作。

• 权限与安全控制会问什么角色可以执行该操作。

• 数据方案会问什么状态下哪些字段可以修改。

这三个问题不应该分别回答,而可以合并成一张:

角色、状态、操作和字段权限矩阵。

类似的合并还包括:

• 数据方案与集成方案合并为接口字段映射。

• 数据方案与功能规则合并为字段校验和计算规则。

• 工作流状态与异常处理合并为状态恢复矩阵。

• 权限控制与审计要求合并为权限和证据矩阵。

• 报表分析与数据方案合并为指标定义和数据来源。

• 系统迁移与数据方案合并为新旧对象映射和迁移核对。

专业的FRD结构不是模块的简单堆叠,而是把相互关联的设计决定放进同一个可验证的表达中。

2.按照依赖关系补充

某些内容即使没有被主动选择,也可能因为项目特征而成为必要内容。

例如:

• 工作流与状态管理通常需要检查状态权限和审计。

• 集成方案必须检查字段映射、重复控制和失败恢复。

• 自动化与智能化必须检查人工干预和错误纠正。

• 报表与分析必须检查指标口径和数据来源。

• 数据迁移必须检查核对和回退。

• 审批必须检查职责分离和禁止自批。

依赖检查的目的不是扩大范围,而是防止方案只完成一半。

3.按照理解和交付顺序重组

最终FRD不应该按照可选深化包的选择顺序排列。

更合理的阅读顺序通常是:

• 为什么做。

• 做什么和不做什么。

• 当前如何运行。

• 目标如何运行。

• 用户和系统执行什么操作。

• 数据、规则和状态如何变化。

• 权限、集成和控制如何工作。

• 异常和失败以后如何恢复。

• 历史业务如何迁移。

• 系统需要达到什么运行标准。

• 如何测试和验收。

这个顺序更接近业务确认、开发理解和测试验证系统的方式。


六、实际项目中怎样选择FRD结构

不需要在项目开始时把所有深化包都选上。

更实用的做法,是从项目最主要的设计任务和风险开始。

1.先确定变更模式

先回答:

• 这次是在定义一个新系统吗?

• 是在改变一个已有系统吗?

• 还是在用新方案替换旧方案,并处理迁移?

如果三种情况同时存在,选择对FRD结构影响最大的模式作为主模式,其他情况作为附加条件处理。

2.保留固定结构

无论项目时间多紧,至少需要覆盖:

• 背景、目标与范围。

• 用户、角色与场景。

• 端到端业务流程。

• 功能与系统行为。

• 数据、规则、状态和权限影响。

• 异常、纠错与恢复。

• 非功能要求与技术约束。

• 验收标准和未确认问题。

内容可以精简,但关键问题不能在未经判断的情况下被省略。

3.选择主要深化包

根据需求判断复杂度主要来自哪里:

• 功能与业务规则。

• 数据方案。

• 工作流与状态管理。

• 集成方案。

• 权限与安全控制。

• 交互与用户体验。

• 报表与分析。

• 自动化与智能化。

深化包应该由真实风险触发,而不是为了让文档看起来完整。

4.执行依赖检查

检查已经选择的内容是否自然触发其他设计要求。

依赖检查后,可以出现三种结果:

• 必须补充的设计内容。

• 建议进一步考虑的内容。

• 当前明确不适用的内容。

不是每个依赖都需要增加完整章节。有时只需要在现有章节中增加一个必要的控制点。

5.合并重复并删除无关内容

结构形成以后,再反向检查:

• 这个章节是否影响方案决定?

• 开发是否需要它?

• 测试是否需要它?

• 业务是否需要确认它?

• 如果删除,会不会增加误解或风险?

如果答案都是否定的,就不应该为了模板完整而保留。

高质量FRD不是内容最多的文档,而是在当前项目中没有关键遗漏,也没有无效负担的文档。


七、这套方法真正稳定下来的是什么

FRD不应该完全固定,但也不能每次从空白开始。

真正应该稳定下来的,是三个层次。

1.稳定的知识地图

十大领域帮助我们持续扫描:

• 流程。

• 功能和规则。

• 数据。

• 状态。

• 集成。

• 权限。

• 用户体验。

• 报表。

• 自动化。

• 非功能要求。

无论项目怎样变化,这张知识地图都不需要重新发明。

2.稳定的分析路径

PRD/FRD思考框架帮助我们从:

• 为什么做。

• 为谁做。

• 业务怎样运行。

• 系统做什么。

• 数据和状态怎样变化。

• 系统怎样协作和控制。

• 最终怎样验证。

逐步形成完整方案。

3.可以调整的文档结构

固定结构保证基本质量。

变更模式决定FRD是在定义、改变还是转换。

可选深化包决定哪些知识领域需要展开到足够深度。

因此,FRD结构可以变化,但背后的判断逻辑应该稳定。


八、最后的判断

FRD既不是页面说明书,也不是把所有需求材料集中到一份文档中。

它应该建立一套从业务决定到系统行为的可执行关系:

• 为什么需要这个能力。

• 谁在什么场景下使用。

• 系统允许什么、禁止什么。

• 数据和状态怎样变化。

• 出错以后怎样恢复。

• 如何证明结果正确。

在这套知识树中:

• 十大领域帮助我们看见完整的解决方案。

• PRD/FRD思考框架帮助我们按照业务逻辑逐层提出问题。

• 三种变更模式帮助我们判断文档是在定义、改变还是转换。

• 八个可选深化包帮助我们决定哪些领域需要进一步展开。

• 固定结构保证FRD具备最基本的专业质量。

最终,我们不需要为每一种项目建立一份新的模板。

真正需要建立的是一套能够根据项目性质选择内容、发现遗漏、合并重复并形成可交付结构的方法。

FRD的结构不应该由过去的模板决定,而应该由当前项目必须作出的设计决定来决定。

相关学习资料