Sparkle CodesSparkle
归档

文档质量

x
xpx
Apr 15, 2026
Editorial Insight

一、目前前沿软件工程更看重哪些“前置文档”

当前比较前沿的软件工程趋势,普遍会把这些能力前置到立项和设计阶段:

  1. 需求对齐前置:先明确业务目标、用户问题、成功指标,再谈功能。PRD/SRS 仍然核心。(atlassian.com)
  2. 架构与质量属性前置:不只写功能,还要在设计阶段写清可扩展性、可靠性、性能、成本、运维方式。Azure 和 Google Cloud 都强调功能与非功能需求要一起进入架构设计。(Microsoft Learn)
  3. 安全前置(Shift Left Security):威胁建模在设计阶段开展,而不是上线前临时补安全。Microsoft SDL 明确把 threat modeling 放在前期设计流程里。(Microsoft)
  4. 决策可追溯:越来越多团队用 RFC + ADR 组合,先讨论方案,再沉淀最终决策,避免“为什么这么做”日后说不清。(Spotify Engineering)
  5. 轻文档、持续维护:现代工程不鼓励一次写完就废弃的大文档,而强调文档要清晰、可维护、跟随系统变化更新。(atlassian.com)
  6. AI 协作背景下更重“边界与标准”:GitHub 对 Copilot 的公开建议也强调,团队需要明确规范、审查和验证,说明前置文档对 AI 辅助开发反而更重要。(GitHub Docs)

二、项目开发前建议准备的核心文档,以及各自职责

1. 立项说明 / 项目章程(Project Charter)

职责:回答“为什么要做这个项目”

通常包括:

  • 项目背景
  • 业务目标
  • 范围边界
  • 关键干系人
  • 预算/周期/资源约束
  • 里程碑

它的主要作用不是写技术,而是确定项目是否值得做,以及谁拍板、谁负责、做到什么程度算成功。 这类文档能防止项目一开始就目标模糊、职责不清,后续 PRD 和设计文档都应以它为上位依据。关于文档需要支持跨团队沟通和共同语言,Google Cloud 的文档与架构指导有明确强调。(Google Cloud Documentation)

一句话职责: 立项说明管“立不立、谁负责、做到哪一步”。


2. 需求文档(PRD / BRD / SRS)

职责:回答“要做什么”

这是开发前最核心的一份文档,但不同组织名称不同:

  • BRD:偏业务需求,讲商业目标和业务流程
  • PRD:偏产品需求,讲用户、功能、行为、验收目标
  • SRS:偏系统/软件需求,强调清晰、完整、可验证

Atlassian 把 PRD 定义为用于说明产品目的、功能、行为和成功标准,帮助跨职能团队对齐;IBM 和 Perforce 都强调“好需求”应当清晰、可验证,并能作为后续设计、计划、测试的依据。(atlassian.com)

通常应包含:

  • 背景与目标
  • 目标用户与场景
  • 核心功能需求
  • 非功能需求概要
  • 不做什么
  • 验收标准
  • 成功指标(如 DAU、转化率、响应时间)

一句话职责: 需求文档管“做什么、不做什么、做到什么算达标”。


3. 范围说明 / 版本范围文档(Scope / Release Scope)

职责:回答“这次到底做哪一部分”

很多项目失败不是因为没需求,而是需求太多、边界不清。 所以在 PRD 之外,现代团队常单独维护一份范围文档,明确:

  • MVP(最小可用版本)范围
  • 本期版本范围
  • 延后项 / Backlog
  • 依赖项
  • 风险项
  • 上线前必须完成 vs 可后补

Atlassian 的 PRD 模板也强调 assumptions、scoping、user stories 等内容需要显式化。(atlassian.com)

一句话职责: 范围文档管“这次上线到底交付哪些内容”。


4. 方案讨论文档(RFC)

职责:回答“几个可选方案里,应该优先讨论哪一个”

RFC(Request for Comments)在现代工程团队里很常见,尤其是平台、中后台、架构调整、基础设施升级、跨团队技术变更。Spotify 的公开实践就提到,团队通常通过 RFC 先展开讨论,再把最终决定沉淀为 ADR。(Spotify Engineering)

RFC 一般包括:

  • 问题定义
  • 目标与非目标
  • 候选方案
  • 方案对比
  • 风险与取舍
  • 征求意见对象
  • 最终建议

RFC 的重点不是“定案”,而是让意见在决策前暴露出来。

一句话职责: RFC 管“把重要技术问题拿出来讨论透”。


5. 技术设计文档 / 详细设计文档(Technical Design Doc)

职责:回答“系统具体怎么设计和实现”

这是开发前技术团队最关键的落地文档之一。Google 的工程实践和 Azure Well-Architected 都非常强调设计文档的作用:用它收集反馈、对齐实现方案,并说明设计选择及其依据。(google.github.io)

通常包含:

  • 系统目标
  • 架构图、模块划分
  • 数据流 / 调用链
  • 数据模型
  • 接口设计
  • 异常处理
  • 可观测性设计
  • 容灾、扩容、回滚
  • 与现有系统的集成方式

Azure 还特别强调,设计规格不仅要覆盖功能选择,也要覆盖非功能设计以及日常、临时、应急运维场景。(Microsoft Learn)

一句话职责: 技术设计文档管“工程上怎么搭、模块怎么分、接口怎么连”。


6. 架构设计说明 / 非功能需求文档(Architecture Spec / NFR)

职责:回答“系统要达到怎样的质量水平”

这是很多团队最容易漏掉、但最影响后期质量的一份。 前沿工程实践里,非功能需求不会再被当作附录,而是要在架构设计里明确写出来。Google Cloud、Azure、AWS 都强调,要在设计阶段考虑可靠性、性能、成本、运维效率、安全等质量属性及其权衡。(Google Cloud Documentation)

典型内容:

  • 性能目标:响应时间、吞吐量、并发
  • 可靠性目标:SLA/SLO、RTO/RPO
  • 扩展性:水平扩展策略
  • 安全:权限、加密、审计
  • 成本约束
  • 运维要求:告警、日志、监控、值班

一句话职责: NFR/架构规格管“系统不仅要能用,还要好用、稳、快、安全、可运维”。


7. 安全文档 / 威胁建模(Threat Model / Security & Compliance)

职责:回答“系统会被怎样攻击,我们怎么提前防”

这是现代软件工程里最明显的“前置化”文档之一。 Microsoft SDL 指出,威胁建模是核心环节,要尽早识别威胁、漏洞和对策,从而降低后期修复成本。(Microsoft Learn)

通常包含:

  • 资产识别
  • 攻击面
  • 信任边界
  • 数据流图
  • 潜在威胁(如伪造、篡改、越权、泄露)
  • 风险等级
  • 缓解措施
  • 合规要求

这类文档尤其适用于:

  • 涉及用户数据
  • 涉及支付、身份认证
  • 面向公网
  • 有第三方接入
  • AI/数据平台项目

一句话职责: 安全文档管“提前发现风险,别把漏洞带进开发和上线”。


8. 架构决策记录(ADR)

职责:回答“为什么最终选了这个方案”

ADR 不是用来讨论,而是用来记录已经做出的关键决策。Google Cloud 和 AWS 都明确指出,ADR 用于记录关键选项、决策背景和后果,帮助团队追踪架构演进。(Google Cloud Documentation)

典型内容:

  • 决策标题
  • 背景
  • 可选方案
  • 决策结果
  • 原因
  • 影响与后果
  • 状态(提议/接受/废弃)

例如:

  • 为什么选 PostgreSQL 而不是 MongoDB
  • 为什么采用事件驱动而不是同步调用
  • 为什么先单体后拆微服务

一句话职责: ADR 管“把重要决定和理由留下来,防止团队遗忘”。


9. 测试策略 / 验收方案(Test Strategy / UAT Plan)

职责:回答“怎么证明它真的满足要求”

虽然测试通常在开发后期执行,但测试策略最好在开发前就定。 因为需求是否可验证,会直接影响设计质量。IBM 和 Perforce 都强调需求应当可验证;AWS 也强调非功能测试应评估性能、可靠性、可用性等质量属性。(IBM)

可包含:

  • 测试范围
  • 测试层次(单元、集成、端到端)
  • 验收标准
  • 性能/安全/可靠性测试要求
  • 测试环境
  • 发布门禁

一句话职责: 测试策略管“以后怎么验收、怎么证明设计没问题”。


10. 交付计划 / 实施计划(Delivery Plan)

职责:回答“按什么节奏落地”

它一般包括:

  • 里程碑
  • 人员分工
  • 风险与依赖
  • 发布计划
  • 回滚计划
  • 沟通机制

这份文档偏项目管理,但对工程落地很重要。 否则即使需求、设计都完整,也容易因为依赖、资源、节奏问题失控。

一句话职责: 交付计划管“谁在什么时候交付什么”。


三、这些文档之间的关系

可以把它们理解成一条链:

项目章程 → 说明为什么做、谁负责

需求文档(PRD/SRS) → 说明做什么、目标是什么

范围文档 → 说明这次版本做多少

RFC → 讨论可选技术/方案

技术设计文档 / 架构规格 → 说明怎么实现、质量要求是什么

安全文档 / 威胁建模 → 说明主要风险与安全控制

ADR → 记录最终关键决策

测试策略 / 交付计划 → 说明怎么验证、怎么落地


四、不同规模项目,文档要求也不一样

小型项目 / 教学项目 / 原型

可以最小化为 4 份:

  • 项目说明
  • 需求清单
  • 技术设计简稿
  • 测试与上线清单

中型业务系统

建议至少 6 份:

  • 项目章程
  • PRD/SRS
  • 范围文档
  • 技术设计文档
  • 安全文档/威胁建模
  • 测试策略

大型平台 / 金融 / 医疗 / 政务 / AI 系统

建议完整配置:

  • 项目章程
  • BRD/PRD/SRS
  • RFC
  • 架构规格
  • NFR
  • 安全文档
  • ADR
  • 测试策略
  • 发布/回滚方案
  • 合规与审计材料

五、一个很实用的职责划分办法

你可以用下面这个标准区分文档,不容易写重:

  • PRD/SRS:定义问题与需求
  • 设计文档:定义实现方案
  • NFR/架构规格:定义质量目标
  • 安全文档:定义风险与控制
  • ADR:定义“为什么这么选”
  • 测试策略:定义“怎么验证”
  • 交付计划:定义“怎么推进”

这样就不会出现一份文档又写需求、又写架构、又写计划,最后谁都看不懂。


六、给你的最终建议

如果你想按照目前较前沿的软件工程实践来组织项目启动前文档,我建议采用这套“最实用组合”:

  1. 项目章程:统一目标、范围、角色
  2. PRD/SRS:统一需求与验收标准
  3. 技术设计文档:统一实现方式
  4. NFR + 安全文档:统一质量底线
  5. ADR:沉淀关键技术决策
  6. 测试策略 + 发布计划:保证能验证、能交付

这套组合的优点是: 既不臃肿,又覆盖现代工程最重视的需求、架构、安全、决策追踪和交付控制。

如果你愿意,我可以下一步直接帮你整理成一张**“项目开发前文档清单表(文档名 / 核心内容 / 负责人 / 输出时机)”**,适合你拿去教学或团队内部使用。

BACK TO BLOG
The End of Interaction