跳转到内容

技术方案设计规范

技术方案编写模板、方案选型、非功能需求


规则:技术方案是开发前的设计共识,必须使用统一模板编写,确保信息完整、可评审、可追溯。

[Requirement] 所有涉及新模块、新接口、数据结构变更、外部依赖引入的工作,必须先产出技术方案文档。

[Requirement] 方案文档须在开发启动前完成评审,评审通过后方可编码。

[Standard] 方案文档使用 Markdown 格式,存放于 docs/design/ 目录,命名格式 YYYYMMDD-<需求简称>-design.md。

[Default] 模板章节固定为以下 8 节,不允许省略关键章节。

方案文档模板:

# <需求名称> 技术方案
 
## 1. 背景与目标
- 业务背景:
- 技术目标:
- 非目标(明确不做什么):
 
## 2. 需求概述
- 关联需求:REQ-XXX
- 核心功能点:
- 验收标准链接:
 
## 3. 现状分析
- 当前架构/实现:
- 存在的问题:
 
## 4. 方案设计
### 4.1 整体架构
(架构图)
 
### 4.2 模块划分
| 模块 | 职责 | 负责人 |
|------|------|--------|
 
### 4.3 接口设计
(接口列表、请求/响应结构)
 
### 4.4 数据模型
(表结构、字段说明、索引)
 
### 4.5 关键流程
(时序图/流程图)
 
## 5. 方案选型
(见"选型比较方法"章节)
 
## 6. 非功能需求
(见"非功能需求"章节)
 
## 7. 风险评估
(见"风险评估"章节)
 
## 8. 排期与任务拆分
| 任务 | 负责人 | 估算 | 依赖 |
|------|--------|------|------|

[Suggestion] 方案文档控制在 5-15 页内,过长说明需求粒度过大或文档冗余。

反模式:

  • ❌ 不写方案直接编码,边写边想,返工率高。
  • ❌ 方案只有架构图没有接口和数据设计,开发时全靠猜。
  • ❌ 方案文档写完就归档,开发中变更不更新文档。

规则:技术选型必须有比较过程,至少列出 2 个候选方案并基于统一维度打分,禁止”我觉得 X 好”式选型。

[Requirement] 选型必须列出至少 2 个候选方案,逐一分析优缺点,禁止只写一个方案直接通过。

[Standard] 使用决策矩阵打分,维度包括:功能匹配度、性能、可维护性、学习成本、社区活跃度、团队熟悉度。

[Standard] 每个维度权重由团队共识确定,打分采用 1-5 分制,加权总分最高者为推荐方案。

[Caution] 选型须考虑团队技术栈与运维能力,避免引入”技术先进但无人能维护”的方案。

决策矩阵示例(消息队列选型):

维度权重KafkaRabbitMQRedis Stream
功能匹配度30%543
性能20%534
可维护性15%345
学习成本15%245
团队熟悉度20%345
加权总分100%3.853.854.4

结论:Redis Stream 加权总分最高,推荐使用。但需补充说明:当消息量超过 10w/s 或需要持久化回溯时,应重新评估 Kafka。

[Suggestion] 选型结论须注明”适用边界”,说明在什么条件下该选型成立、什么条件下需重新评估。

反模式:

  • ❌ “Kafka 性能好,就用 Kafka”——没有比较,没有考虑团队能力。
  • ❌ 选了最火的技术,但团队没人会,上线后无人维护。
  • ❌ 选型只看性能,忽略了运维成本和学习曲线。

规则:技术方案除功能外,必须明确非功能需求(NFR),并给出可量化的指标与验证方法。

[Requirement] 方案文档必须包含性能、可用性、安全性、可观测性四类非功能需求,缺一不可。

[Requirement] 每条非功能需求必须有量化指标和验证方法,禁止”高性能""高可用”等无指标描述。

[Standard] 非功能需求须与业务场景匹配,不盲目追求超出业务需要的指标(如内部管理系统要求 99.99% 可用性)。

非功能需求模板:

类别指标目标值验证方法
性能接口响应时间 P95≤ 500ms压测报告
性能并发能力≥ 100 QPS压测报告
可用性服务可用性≥ 99.9%监控月报
可用性故障恢复时间 (RTO)≤ 5 分钟故障演练
安全性敏感数据传输HTTPS 加密安全扫描
安全性SQL 注入防护0 高危漏洞安全扫描
可观测性关键链路覆盖率≥ 90%链路追踪检查
可观测性告警响应时间≤ 10 分钟告警记录

各业务场景的非功能需求参考:

业务场景可用性响应时间 P95数据一致性
对外 C 端交易99.95%≤ 300ms强一致
内部管理后台99.5%≤ 1s最终一致
数据报表99%≤ 5sT+1 可接受
实时消息99.9%≤ 200ms最终一致

[Caution] 非功能需求不是越高越好,超出业务需要的指标会带来不必要的成本与复杂度。

反模式:

  • ❌ “系统要高性能、高可用、高安全”——没有量化指标。
  • ❌ 内部工具要求 99.99% 可用性,成本远超业务价值。
  • ❌ 方案写了非功能需求,但排期里没有对应的验证任务。

规则:技术方案必须识别风险并给出应对措施,禁止”没有风险”的乐观评估。

[Requirement] 方案文档必须包含风险评估章节,至少识别 3 项风险并给出应对措施。

[Standard] 风险评估采用”概率 × 影响”矩阵,划分为高/中/低三个等级。

[Standard] 高风险项必须有明确的缓解措施和负责人,中风险项须有监控或预案。

[Caution] 风险评估须在开发中持续更新,新发现的风险及时补充到文档。

风险评估矩阵:

概率\影响低中高
高中高极高
中低中高
低低低中

风险评估表示例:

风险项概率影响等级缓解措施负责人
微信支付接口联调不顺利中高高提前申请沙箱环境,预留 2 天联调缓冲张三
数据库性能瓶颈低高中提前压测,准备分表预案李四
第三方 SDK 版本不兼容中中中先做技术验证(POC),确认后再大规模使用王五
关键人员请假低高中关键模块双人备份,文档齐全全员

风险等级处理策略:

等级处理策略
极高必须有缓解措施,否则不允许开发
高有缓解措施 + 负责人,每日跟踪
中有监控或预案,每周跟踪
低记录在案,按需关注

反模式:

  • ❌ 风险评估写”暂无风险”——这是最大的风险。
  • ❌ 识别了风险但没有应对措施,等于没识别。
  • ❌ 高风险项没有负责人,出问题后无人负责。

规则:技术方案评审须聚焦设计合理性与可落地性,评审通过后方可开发。

[Requirement] 评审须至少包含:方案作者、模块负责人、架构师(或资深研发)、测试代表。

[Requirement] 评审结论必须为:通过 / 有条件通过 / 打回,不允许”原则通过”这种模糊结论。

[Standard] 评审前须提前 1 个工作日发出方案文档,评审会聚焦讨论而非宣读。

[Standard] 评审记录须包含:结论、修改项、负责人、截止时间,归档至方案文档末尾。

评审检查清单:

检查项通过标准
完整性模板 8 节齐全,无空章节
正确性接口、数据模型、流程与需求一致
可行性技术方案可实现,无不可控外部依赖
非功能需求性能、可用性、安全、可观测性有量化指标
风险高风险项有缓解措施与负责人
排期任务拆分合理,估算可信,依赖清晰
可测试性验收标准可转化为测试用例

评审结论模板:

## 评审记录
评审时间:2024-10-14
评审人:张三、李四、王五、赵六
结论:有条件通过
修改项:
1. [中] 补充支付失败的重试机制设计 — 张三 — 10-15 前
2. [低] 数据库索引设计需补充覆盖查询场景 — 李四 — 10-15 前
验证:以上修改项完成后,由李四确认即视为通过。

反模式:

  • ❌ 评审会变成方案宣讲会,评审人现场才看文档。
  • ❌ 评审结论”原则通过,但有些地方需要改”——哪些地方?谁改?什么时候改完?都不清楚。
  • ❌ 评审只看架构图,不看接口和数据设计,开发时才发现问题。