跳转至

工程开发从规则制定到验收交付的完整流程

版本: 2.0.0 日期: 2026-03-25 适用: 软件工程项目全生命周期 性质: 通用流程框架 + 细致操作指南


目录

  1. 流程概览
  2. 阶段一:规则制定
  3. 阶段二:设计阶段
  4. 阶段三:开发阶段
  5. 阶段四:测试阶段
  6. 阶段五:代码审查
  7. 阶段六:集成阶段
  8. 阶段七:验收阶段
  9. 阶段八:交付阶段
  10. 阶段九:运维阶段
  11. 附录:模板和检查清单

1. 流程概览

1.1 完整生命周期流程图

╔═══════════════════════════════════════════════════════════════════════════════════════╗
║                        软件工程项目全生命周期流程                                          ║
╠═══════════════════════════════════════════════════════════════════════════════════════╣
║                                                                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第一阶段:规则制定(项目启动)                                   ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 需求收集 │───▶│ 需求分析 │───▶│ 规则制定 │───▶│ 规则评审 │───▶│ 规则发布 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:需求规格说明书、开发规则文档、项目计划书、风险清单               │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第二阶段:设计(技术方案)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 架构设计 │───▶│ 接口设计 │───▶│ 数据设计 │───▶│ 安全设计 │───▶│ 设计评审 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:架构设计文档、接口规范、数据库设计、安全方案、技术选型说明         │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第三阶段:开发(编码实现)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │环境搭建  │───▶│ 编码实现 │───▶│ 单元测试 │───▶│ 代码自审 │───▶│ 提交代码 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:源代码、单元测试、开发文档、技术债务记录                             │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第四阶段:测试(质量保证)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 单元测试 │───▶│ 集成测试 │───▶│ 系统测试 │───▶│ 性能测试 │───▶│ 安全测试 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:测试用例、测试报告、缺陷报告、覆盖率报告                             │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第五阶段:代码审查(质量把关)                                 ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 提交审查 │───▶│ 自动检查 │───▶│ 人工审查 │───▶│ 审查反馈 │───▶│ 审查通过 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:审查记录、改进建议、审查报告                                       │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第六阶段:集成(系统整合)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 组件集成 │───▶│ 接口联调 │───▶│ 环境部署 │───▶│ 冒烟测试 │───▶│ 集成完成 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:集成报告、环境配置、部署脚本                                         │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第七阶段:验收(质量确认)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 功能验收 │───▶│ 性能验收 │───▶│ 安全验收 │───▶│ 用户验收 │───▶│ 验收通过 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:验收测试报告、问题清单、验收结论                                   │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第八阶段:交付(产品发布)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 版本打包 │───▶│ 文档整理 │───▶│ 发布准备 │───▶│ 正式发布 │───▶│ 交付完成 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:发布包、用户文档、运维文档、培训材料                                 │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ║
║  ┃                    第九阶段:运维(持续运营)                                     ┃  ║
║  ┃  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┃  ║
║  ┃  │ 监控告警 │───▶│ 问题处理 │───▶│ 运维优化 │───▶│ 反馈收集 │───▶│ 持续改进 │    ┃  ║
║  ┃  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘    ┃  ║
║  ┃  ┌─────────────────────────────────────────────────────────────────────────┐  ┃  ║
║  ┃  │ 输出:监控报告、问题记录、优化方案、需求收集                                 │  ┃  ║
║  ┃  └─────────────────────────────────────────────────────────────────────────┘  ┃  ║
║  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ║
║                                          ↓                                         ║
║                                    ╔══════════════════╗                            ║
║                                    ║  迭代反馈循环     ║                            ║
║                                    ╚══════════════════╝                            ║
║                                          ↑                                         ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝

1.2 各阶段详细说明

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段时间分配参考                                       │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  规则制定  ████████████  5-10%                                                    │
│  设计     ███████████████████  10-15%                                             │
│  开发     ████████████████████████████████████████████████  30-40%                 │
│  测试     ████████████████████████████████████████  20-25%                        │
│  代码审查 ███████████████████████  10-15%                                          │
│  集成验收 ███████████████████  10-15%                                              │
│  交付     ████████  5%                                                             │
│  运维     ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞  持续进行                             │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

1.3 关键里程碑定义

M0: 项目启动
    ├── 项目立项通过
    ├── 团队组建完成
    └── 开发环境准备

M1: 规则冻结    ────▶ 需求和规则文档定稿,不再变更
    ├── 需求规格说明书评审通过
    ├── 开发规则文档发布
    └── 项目计划确认

M2: 设计评审通过 ────▶ 技术设计文档通过评审
    ├── 架构设计文档完成
    ├── 接口规范确定
    ├── 数据库设计确认
    └── 安全方案通过

M3: Alpha版本  ────▶ 核心功能开发完成,可演示
    ├── 核心功能实现
    ├── 基本测试通过
    └── 内部演示

M4: Beta版本   ────▶ 功能完整,内部测试完成
    ├── 所有功能实现
    ├── 单元测试完成
    ├── 集成测试通过
    └── Bug修复完成

M5: RC版本     ────▶ 修复已知问题,准备发布
    ├── 已知Bug全部修复
    ├── 性能优化完成
    ├── 安全审查通过
    └── 发布准备完成

M6: 正式发布   ────▶ 验收通过,正式发布
    ├── 用户验收通过
    ├── 发布包构建完成
    ├── 文档完整
    └── 正式对外发布

1.4 角色与职责

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                                  项目角色                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐      │
│  │ 项目经理(PM) │    │ 产品经理(PO) │    │ 技术负责人  │    │ 开发工程师   │      │
│  │             │    │             │    │   (TL)      │    │             │      │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘      │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐      │
│  │ 测试工程师   │    │ 运维工程师   │    │  安全专员   │    │ UI/UX设计师  │      │
│  │   (QA)      │    │   (OPS)     │    │            │    │             │      │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘      │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

角色职责矩阵:

              规则  设计  开发  测试  审查  集成  验收  交付  运维
项目经理      ●    ○    ○    ○    ●    ●    ●    ●    ○
产品经理      ●    ○    ○    ○    ○    ○    ●    ○
技术负责人    ●    ●    ○    ○    ●    ●    ○    ○    ○
开发工程师    ○    ●    ●    ○    ○    ●    ○         ○
测试工程师                   ●    ○         ●    ●         ○
运维工程师                               ●    ○    ●    ●
安全专员          ●    ○         ●         ●         ○

1.5 工作流状态

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   TO DO      │────▶│   IN PROGRESS │────▶│    DONE      │
│   待开始      │     │    进行中     │     │    已完成     │
└──────────────┘     └──────────────┘     └──────────────┘
       ▲                    │                    │
       │                    ▼                    ▼
       └──────────────┐ ┌──────────────┐ ┌──────────────┐
                     │   BLOCKED    │ │  REVIEW      │
                     │    阻塞      │ │   审查中     │
                     └──────────────┘ └──────────────┘

2. 阶段一:规则制定

2.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段一目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 明确项目需求和范围                                                                 │
│  ✓ 制定开发规则和标准                                                                 │
│  ✓ 建立团队协作流程                                                                   │
│  ✓ 识别项目风险                                                                       │
│  ✓ 制定项目计划                                                                       │
└─────────────────────────────────────────────────────────────────────────────────────┘

2.2 阶段输入

输入物 来源 说明 必需性
项目立项书 管理层 项目背景、目标、预期收益 必须
产品需求文档(PRD) 产品经理 功能需求、用户场景 必须
技术可行性报告 技术团队 技术方案评估、风险分析 必须
现有系统文档 系统分析师 如有遗留系统或依赖系统 可选
历史项目总结 项目经理 经验教训、最佳实践 可选
资源预算 财务/人事 人力、设备、时间预算 必须

2.3 详细流程

2.3.1 步骤1:需求收集与分析

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              需求收集流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 干系人访谈  │───▶│ 用户调研    │───▶│ 竞品分析    │───▶│ 需求整理    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 业务负责人      • 问卷调查       • 功能对比        • 功能列表          │
│   • 最终用户        • 用户访谈       • 技术对比        • 非功能需求        │
│   • 技术团队        • 场景分析       • 优劣势分析      • 约束条件          │
│   • 运营团队                                                                 │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

操作细节

  1. 干系人访谈
  2. 访谈对象:业务负责人、最终用户、技术负责人、运营人员
  3. 访谈内容:业务痛点、期望功能、使用场景、验收标准
  4. 访谈输出:访谈记录、需求初稿

  5. 用户调研

  6. 调研方法:问卷调查、用户访谈、现场观察、原型测试
  7. 调研重点:用户习惯、操作场景、痛点问题
  8. 调研输出:用户画像、用户故事、场景描述

  9. 竞品分析

  10. 分析维度:功能对比、技术实现、用户体验、市场定位
  11. 分析方法:功能矩阵、SWOT分析、优劣势对比
  12. 分析输出:竞品分析报告、差异化建议

需求分析检查清单

- [ ] 干系人访谈已完成,访谈记录已整理
- [ ] 用户调研已完成,调研数据已分析
- [ ] 竞品分析已完成,分析报告已输出
- [ ] 功能需求已明确,优先级已划分
- [ ] 非功能需求已定义(性能、安全、可用性等)
- [ ] 约束条件已识别(技术、时间、资源等)
- [ ] 假设条件已列出,后续需验证
- [ ] 需求文档已完成初稿
- [ ] 需求评审会议已安排

2.3.2 步骤2:需求规格编写

需求规格说明书结构

# 需求规格说明书

## 1. 文档控制
| 版本 | 日期 | 修订内容 | 作者 |
|------|------|----------|------|
| 1.0 | YYYY-MM-DD | 初始版本 | xxx |

## 2. 项目概述
### 2.1 项目背景
- 业务背景
- 项目动因
- 预期收益

### 2.2 项目目标
- 业务目标
- 技术目标
- 用户价值

### 2.3 项目范围
- 功能范围
- 不包含内容
- 后续版本规划

## 3. 用户角色分析
| 角色 | 描述 | 主要需求 | 使用频率 |
|------|------|----------|----------|
| 管理员 | 系统管理员 | ... | 每天 |

## 4. 功能需求
### 4.1 功能清单
| ID | 功能名称 | 优先级 | 复杂度 | 依赖 |
|----|----------|--------|--------|------|
| F001 | 用户登录 | P0 | 低 | 无 |
| F002 | 数据导出 | P1 | 中 | F001 |

### 4.2 功能详细说明
#### F001: 用户登录
**用户故事**: 作为用户,我希望能够登录系统,以便使用系统功能。

**验收标准**:
- Given 用户在登录页面
- When 输入正确的用户名和密码
- Then 成功登录并跳转到首页
- And 显示用户信息

**功能流程**:
1. 用户访问登录页面
2. 输入用户名和密码
3. 系统验证用户信息
4. 验证成功,创建会话
5. 跳转到首页

**界面原型**: [附原型图或线框图]

**异常处理**:
- 用户名或密码错误 → 提示"用户名或密码错误"
- 账号被锁定 → 提示"账号已被锁定,请联系管理员"
- 网络异常 → 提示"网络连接失败,请稍后重试"

## 5. 非功能需求
### 5.1 性能需求
- 系统响应时间 < 3秒 (P95)
- 并发用户数 > 1000
- 数据处理量 > 10万条/分钟

### 5.2 安全需求
- 用户密码加密存储
- 通信数据加密传输
- 操作日志完整记录
- 权限控制精确到按钮级别

### 5.3 可用性需求
- 系统可用性 > 99.5%
- 故障恢复时间 < 1小时
- 数据备份频率:每天一次

### 5.4 兼容性需求
- 支持浏览器:Chrome、Firefox、Safari、Edge
- 支持操作系统:Windows 10+、macOS 12+、Linux
- 支持移动端:iOS 14+、Android 10+

## 6. 数据需求
### 6.1 数据实体
- 用户: 包含属性、关系、约束
- 订单: ...
- 产品: ...

### 6.2 数据量预估
- 用户数据: 预计1年内达到10万条
- 订单数据: 预计1年内达到100万条

## 7. 接口需求
### 7.1 外部接口
- 支付接口: 对接支付宝、微信支付
- 短信接口: 对接阿里云短信
- 物流接口: 对接顺丰、圆通

### 7.2 内部接口
- 前端调用后端API
- 后端调用第三方服务API

## 8. 约束条件
### 8.1 技术约束
- 开发语言: Python 3.12
- 框架: Django 4.2
- 数据库: PostgreSQL 14
- 部署环境: Docker + Kubernetes

### 8.2 业务约束
- 必须符合等保三级要求
- 必须符合数据安全法规定

### 8.3 时间约束
- 项目周期: 6个月
- 上线时间: YYYY-MM-DD

### 8.4 资源约束
- 开发团队: 8人
- 预算: 100万元
- 服务器: 4核8G × 3台

## 9. 假设条件
1. 用户具备基本的计算机操作能力
2. 网络环境稳定
3. 第三方接口可用性 > 99%
4. 后期可根据实际情况调整假设

## 10. 风险识别
| 风险 | 可能性 | 影响 | 应对措施 |
|------|--------|------|----------|
| ... | ... | ... | ... |

## 11. 附录
### 11.1 术语表
| 术语 | 定义 |
|------|------|
| ... | ... |

### 11.2 参考文档
- [相关标准]
- [行业文档]

2.3.3 步骤3:规则制定

开发规则制定流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              规则制定流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 编码规范    │───▶│ 开发流程    │───▶│ 协作规则    │───▶│ 质量标准    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 命名规范         • Git工作流       • 会议制度        • 代码覆盖率        │
│   • 代码格式         • 分支策略       • 沟通工具        • 测试要求          │
│   • 注释规范         • 提交规范       • 文档规范        • 性能指标          │
│   • 类型注解         • 代码审查       • 问题上报        • 安全标准          │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

编码规范详细说明

# 编码规范配置

命名规范:
  类名: 大驼峰(PascalCase)
    示例: UserManager, OrderService

  函数名: 小写+下划线(snake_case)
    示例: get_user_info, calculate_total

  变量名: 小写+下划线(snake_case)
    示例: user_name, total_amount

  常量名: 大写+下划线(UPPER_SNAKE_CASE)
    示例: MAX_RETRY_COUNT, DEFAULT_TIMEOUT

  私有成员: 前缀下划线(_private)
    示例: _internal_method, _config_data

文件组织:
  导入顺序: 标准库 -> 第三方库 -> 本地模块
    import os
    import sys

    import yaml
    import requests

    from myproject.utils import helper

  文件长度: 建议 < 500行
  函数长度: 建议 < 50行
  类长度: 建议 < 300行

注释规范:
  函数文档: Google风格或NumPy风格
    """
    函数简短描述

    详细描述(可选)

    Args:
        param1: 参数1描述
        param2: 参数2描述

    Returns:
        返回值描述

    Raises:
        Exception: 异常描述

    Example:
        >>> func(1, 2)
        3
    """

  行内注释: 简洁明了,解释"为什么"而非"是什么"
    # 使用缓存减少数据库查询

  块注释: 用于复杂逻辑说明
    # 以下算法采用动态规划实现
    # 时间复杂度: O(n^2)
    # 空间复杂度: O(n)

开发流程规范

Git工作流:
  主分支: main/master
    • 只接受经过审查的合并
    • 保持稳定可发布状态

  开发分支: develop
    • 日常开发分支
    • 功能完成后合并到主分支

  功能分支: feature/功能名
    • 从develop分支创建
    • 完成后合并回develop

  修复分支: fix/问题名
    • 从develop分支创建
    • 完成后合并回develop和main

  发布分支: release/版本号
    • 从develop分支创建
    • 用于发布准备和版本号更新

提交规范:
  格式: <type>(<scope>): <subject>

  类型(type):
    feat: 新功能
    fix: Bug修复
    docs: 文档更新
    style: 代码格式调整
    refactor: 重构
    test: 测试相关
    chore: 构建/工具链

  示例:
    feat(auth): 添加用户登录功能

    - 实现用户名密码登录
    - 添加JWT Token生成
    - 添加登录状态检查

    Closes #123

代码审查:
  触发条件: PR创建时
  参与人员: 至少1名审查者
  审查内容:
    • 功能正确性
    • 代码质量
    • 测试覆盖
    • 文档完整
    • 安全问题

  通过标准:
    • 所有审查意见已处理
    • CI检查通过
    • 无保留意见

2.3.4 步骤4:风险识别与应对

风险管理流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              风险管理流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 风险识别    │───▶│ 风险评估    │───▶│ 风险应对    │───▶│ 风险监控    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 需求风险         • 发生概率        • 规避           • 定期检查          │
│   • 技术风险         • 影响程度        • 缓解           • 状态更新          │
│   • 资源风险         • 风险等级        • 转移           • 新风险识别        │
│   • 进度风险         • 优先级排序      • 接受           • 应对措施调整      │
│   • 依赖风险                                                              │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

风险识别清单

需求风险:
  - 需求不明确或频繁变更
  - 用户期望过高
  - 业务逻辑复杂
  - 多方需求冲突

技术风险:
  - 技术选型不当
  - 技术难度低估
  - 第三方依赖不稳定
  - 技术团队能力不足
  - 性能目标难以达成

资源风险:
  - 人员流动
  - 人力不足
  - 设备/工具短缺
  - 预算不足

进度风险:
  - 时间估算不准确
  - 任务依赖复杂
  - 外部依赖延期
  - 需求变更导致返工

质量风险:
  - 测试时间不足
  - 质量标准不明确
  - 技术债务积累
  - 上线后问题频发

安全风险:
  - 数据泄露
  - 系统被攻击
  - 权限控制不当
  - 合规性问题

沟通风险:
  - 需求传递失真
  - 团队协作不畅
  - 文档不完整
  - 信息不同步

风险评估矩阵

影响程度
    高 │ R2   │ R1   │ R1   │
       │ 高-高 │ 高-高 │ 高-高 │
    ─────────┼──────┼──────┼──────
    中 │ R3   │ R2   │ R1   │
       │ 中-高 │ 中-中 │ 中-高 │
    ─────────┼──────┼──────┼──────
    低 │ R3   │ R2   │ R2   │
       │ 低-高 │ 低-中 │ 低-中 │
    ─────────┼──────┼──────┼──────
           │  低   │  中   │  高   │
                       发生概率

R1: 高风险 - 立即处理
R2: 中风险 - 重点监控
R3: 低风险 - 定期检查

2.3.5 步骤5:项目计划制定

项目计划制定流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              项目计划制定                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 工作分解    │───▶│ 时间估算    │───▶│ 资源分配    │───▶│ 计划评审    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • WBS分解         • 三点估算        • 人员分配        • 计划确认          │
│   • 任务定义        • 缓冲时间        • 设备分配        • 基线确定          │
│   • 依赖关系        • 关键路径        • 预算分配        │                  │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

WBS分解示例

项目总目标
├── 1.0 规则制定阶段
│   ├── 1.1 需求收集
│   │   ├── 1.1.1 干系人访谈
│   │   ├── 1.1.2 用户调研
│   │   └── 1.1.3 竞品分析
│   ├── 1.2 需求分析
│   │   ├── 1.2.1 功能分析
│   │   └── 1.2.2 非功能分析
│   ├── 1.3 规则制定
│   └── 1.4 需求评审
├── 2.0 设计阶段
│   ├── 2.1 架构设计
│   │   ├── 2.1.1 系统架构
│   │   ├── 2.1.2 技术选型
│   │   └── 2.1.3 接口设计
│   ├── 2.2 数据设计
│   └── 2.3 安全设计
├── 3.0 开发阶段
│   ├── 3.1 前端开发
│   │   ├── 3.1.1 页面开发
│   │   ├── 3.1.2 组件开发
│   │   └── 3.1.3 状态管理
│   ├── 3.2 后端开发
│   │   ├── 3.2.1 API开发
│   │   ├── 3.2.2 业务逻辑
│   │   └── 3.2.3 数据处理
│   └── 3.3 数据库开发
└── 4.0 测试阶段
    ├── 4.1 单元测试
    ├── 4.2 集成测试
    └── 4.3 系统测试

2.4 阶段输出

输出物 说明 模板 必需性
需求规格说明书 详细需求文档 见附录A 必须
技术选型报告 技术方案评估 见附录B 必须
开发规则文档 编码规范和流程 见附录C 必须
项目计划书 时间计划和里程碑 见附录D 必须
风险管理计划 风险清单和应对措施 见附录E 必须
资源需求清单 人员、设备、预算 - 必须
干系人沟通计划 沟通方式和频率 - 推荐

2.5 阶段验收标准

## 阶段一验收清单

### 文档完整性
- [ ] 需求规格说明书已完成并评审
- [ ] 技术选型报告已完成
- [ ] 开发规则文档已发布
- [ ] 项目计划书已确认
- [ ] 风险管理计划已制定

### 需求明确性
- [ ] 所有功能需求已明确
- [ ] 所有非功能需求已定义
- [ ] 验收标准已清晰定义
- [ ] 约束条件已全部识别

### 规则可行性
- [ ] 开发规则符合团队实际
- [ ] 技术选型经过充分评估
- [ ] 时间和资源估算合理
- [ ] 风险应对措施可行

### 团队认可
- [ ] 所有团队成员已接受规则培训
- [ ] 规则文档已获得团队认可
- [ ] 项目计划已获得管理层批准
- [ ] 干系人对规则无异议

### 基线建立
- [ ] 需求基线已建立
- [ ] 计划基线已建立
- [ ] 规则基线已建立
- [ ] 后续变更需走变更流程

2.6 阶段常见问题

问题 原因 解决方案
需求不明确 干系人沟通不足 增加访谈和调研
规则无法执行 脱离实际 根据实际情况调整
风险被忽视 没有进行风险分析 建立风险识别机制
计划不合理 估算偏差大 使用三点估算法
团队不认可 规则制定过程不透明 让团队参与制定

3. 阶段二:设计阶段

3.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段二目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 完成系统架构设计                                                                 │
│  ✓ 完成接口设计                                                                      │
│  ✓ 完成数据库设计                                                                    │
│  ✓ 完成安全设计                                                                      │
│  ✓ 通过设计评审                                                                      │
└─────────────────────────────────────────────────────────────────────────────────────┘

3.2 阶段输入

输入物 来源 说明
需求规格说明书 阶段一输出 功能和非功能需求
技术选型报告 阶段一输出 技术栈选择
系统约束条件 项目需求 技术和业务约束
参考架构 行业最佳实践 同类系统架构
设计规范 团队标准 设计文档规范

3.3 详细流程

3.3.1 步骤1:架构设计

架构设计流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              架构设计流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 架构分析    │───▶│ 架构选型    │───▶│ 架构设计    │───▶│ 架构评审    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 业务分析         • 单体/微服务     • 系统分层        • 架构合理性        │
│   • 功能分解         • 分层架构       • 模块划分        • 扩展性            │
│   • 技术约束         • 事件驱动       • 接口定义        • 性能              │
│   • 非功能需求       • CQRS模式      • 数据流设计      • 安全性            │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

架构视图模板

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              用户视图                                             │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  用户:最终用户、管理员、运维人员                                                       │
│  场景:用户使用系统、管理员配置系统、运维人员监控系统                                   │
└─────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              逻辑视图                                             │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              应用层                                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐      │   │
│  │  │   Web应用   │  │   移动端    │  │   第三方    │  │   定时任务   │      │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘      │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                             │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              业务层                                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐      │   │
│  │  │  用户服务   │  │  订单服务   │  │  支付服务   │  │  通知服务   │      │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘      │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                             │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              服务层                                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐      │   │
│  │  │  认证服务   │  │  数据服务    │  │  文件服务   │  │  缓存服务    │      │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘      │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                             │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              数据层                                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐      │   │
│  │  │   MySQL     │  │   Redis     │  │  文件存储   │  │  消息队列    │      │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘      │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

架构设计文档模板

# 系统架构设计文档

## 1. 文档信息
- 项目名称:
- 版本:
- 作者:
- 日期:

## 2. 架构概述
### 2.1 架构目标
- 高可用性: 系统可用性 > 99.5%
- 可扩展性: 支持水平扩展
- 可维护性: 模块化设计,易于维护
- 安全性: 符合安全规范

### 2.2 架构原则
- 单一职责: 每个模块只负责一项功能
- 开放封闭: 对扩展开放,对修改封闭
- 依赖倒置: 高层模块不依赖低层模块
- 接口隔离: 客户端不依赖不需要的接口

### 2.3 架构选型
- 单体架构 vs 微服务架构: 选择[单体/微服务]
- 分层架构: 采用[三层/四层/五层]架构
- 通信模式: 同步/异步/消息队列

## 3. 分层设计
### 3.1 应用层
- Web应用: [框架]
- 移动端: [技术]
- 第三方集成: [API]

### 3.2 业务层
- [服务列表]
- [业务流程]

### 3.3 服务层
- [公共服务列表]
- [技术组件]

### 3.4 数据层
- [数据库]
- [缓存]
- [存储]

## 4. 模块设计
### 4.1 模块划分
| 模块 | 职责 | 依赖 |
|------|------|------|
| 用户模块 | 用户管理、认证授权 | 基础模块 |
| 订单模块 | 订单管理、支付 | 用户模块 |
| ...

### 4.2 模块交互
[交互图/时序图]
## 5. 数据流设计
### 5.1 业务数据流
[数据流图]
### 5.2 数据同步策略
- 实时同步
- 定时同步
- 事件驱动

## 6. 技术选型
| 类型 | 技术选型 | 说明 |
|------|----------|------|
| 开发语言 | Python 3.12 | 团队熟悉 |
| Web框架 | Django 4.2 | 成熟稳定 |
| 数据库 | PostgreSQL 14 | 开源可靠 |
| 缓存 | Redis 7.0 | 高性能 |
| 消息队列 | RabbitMQ | 可靠消息 |

## 7. 非功能设计
### 7.1 性能设计
- 缓存策略
- 负载均衡
- 数据库优化

### 7.2 安全设计
- 认证授权
- 数据加密
- 安全审计

### 7.3 可用性设计
- 集群部署
- 故障转移
- 备份恢复

## 8. 部署架构
[部署架构图]
## 9. 架构演进
### 9.1 当前架构
[描述当前架构]

### 9.2 演进路线
- 阶段1: 单体架构
- 阶段2: 服务化改造
- 阶段3: 微服务架构

3.3.2 步骤2:接口设计

接口设计流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              接口设计流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 接口识别    │───▶│ 接口定义    │───▶│ 接口文档    │───▶│ 接口评审    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 功能分析         • RESTful设计    • API文档         • 接口合理性        │
│   • 实体提取         • GraphQL设计    • 数据模型        • 易用性            │
│   • 操作识别         • RPC设计       • 示例代码        • 一致性            │
│   • 依赖关系                                                              │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

RESTful API设计规范

# RESTful API设计规范

URL设计:
  - 使用名词复数表示资源
  - 层级结构不超过3层
  - 使用小写字母和连字符

  示例:
    /api/users              # 获取用户列表
    /api/users/{id}         # 获取单个用户
    /api/users/{id}/orders  # 获取用户的订单

  反例:
    /api/getUsers           # 不要使用动词
    /api/Users              # 不要使用大写
    /api/user/{id}/order/list  # 层级过深

HTTP方法使用:
  GET    /api/users           # 获取资源列表
  GET    /api/users/{id}      # 获取单个资源
  POST   /api/users           # 创建资源
  PUT    /api/users/{id}      # 全量更新资源
  PATCH  /api/users/{id}      # 部分更新资源
  DELETE /api/users/{id}      # 删除资源

  其他操作使用子资源:
  POST   /api/users/{id}/activate   # 激活用户
  POST   /api/users/{id}/deactivate  # 停用用户

查询参数:
  分页: ?page=1&size=20
  排序: ?sort=createdAt:desc
  过滤: ?status=active&type=vip
  搜索: ?keyword=test
  投影: ?fields=id,name,email

响应格式:
  成功响应:
    Status: 200 OK
    {
      "success": true,
      "data": {
        "id": "123",
        "name": "张三"
      },
      "meta": {
        "page": 1,
        "size": 20,
        "total": 100
      }
    }

  错误响应:
    Status: 400 Bad Request
    {
      "success": false,
      "error": "参数验证失败",
      "code": "VALIDATION_ERROR",
      "details": {
        "email": "邮箱格式不正确"
      },
      "requestId": "req-123456"
    }

  列表响应:
    Status: 200 OK
    {
      "success": true,
      "data": [...],
      "meta": {
        "page": 1,
        "size": 20,
        "total": 100
      }
    }

状态码使用:
  200 OK                  # 请求成功
  201 Created             # 资源创建成功
  204 No Content          # 删除成功
  400 Bad Request         # 请求参数错误
  401 Unauthorized        # 未认证
  403 Forbidden          # 无权限
  404 Not Found           # 资源不存在
  409 Conflict            # 资源冲突
  422 Unprocessable      # 参数验证失败
  429 Too Many Requests   # 请求过多
  500 Internal Error      # 服务器错误
  503 Service Unavailable  # 服务不可用

API文档模板

# API文档:用户管理

## 1. 用户列表

### 1.1 获取用户列表

**接口地址**: `GET /api/users`

**请求参数**:

| 参数 | 类型 | 必填 | 说明 | 示例 |
|------|------|------|------|------|
| page | integer | 否 | 页码,从1开始 | 1 |
| size | integer | 否 | 每页数量,默认20 | 20 |
| keyword | string | 否 | 搜索关键词 | 张三 |
| status | string | 否 | 用户状态 | active |

**请求示例**:
```http
GET /api/users?page=1&size=20&status=active
Authorization: Bearer {token}

响应示例:

{
  "success": true,
  "data": [
    {
      "id": "123",
      "name": "张三",
      "email": "zhangsan@example.com",
      "status": "active",
      "createdAt": "2024-01-01T00:00:00Z"
    }
  ],
  "meta": {
    "page": 1,
    "size": 20,
    "total": 100
  }
}

错误响应:

{
  "success": false,
  "error": "参数验证失败",
  "code": "VALIDATION_ERROR",
  "details": {
    "page": "必须大于0"
  }
}

2. 用户详情

2.1 获取用户详情

接口地址: GET /api/users/{id}

路径参数:

参数 类型 必填 说明 示例
id string 用户ID 123

响应示例:

{
  "success": true,
  "data": {
    "id": "123",
    "name": "张三",
    "email": "zhangsan@example.com",
    "phone": "13800138000",
    "avatar": "https://example.com/avatar/123.jpg",
    "status": "active",
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T00:00:00Z"
  }
}

2.2 更新用户

接口地址: PUT /api/users/{id}

请求体:

{
  "name": "李四",
  "phone": "13900139000"
}

响应示例: 同获取用户详情

3. 错误码说明

错误码 说明
VALIDATION_ERROR 参数验证失败
UNAUTHORIZED 未认证
FORBIDDEN 无权限
NOT_FOUND 资源不存在
CONFLICT 资源冲突
SERVER_ERROR 服务器错误
#### 3.3.3 步骤3:数据库设计

**数据库设计流程**:
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ 数据库设计流程 │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 实体分析 │───▶│ 模型设计 │───▶│ 物理设计 │───▶│ 设计评审 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ • 业务实体 • ER图 • 表结构 • 设计合理性 │
│ • 实体关系 • 关系定义 • 索引设计 • 性能考虑 │
│ • 实体属性 • 属性类型 • 分区设计 扩展性 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
**ER图示例**:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户 │ │ 订单 │ │ 产品 │
│ User │ │ Order │ │ Product │
├─────────────┤ ├─────────────┤ ├─────────────┤
│ id (PK) │──┐ │ id (PK) │──┐ │ id (PK) │
│ username │ │ │ user_id(FK) │ │ │ name │
│ email │ │ │ product_id │ │ │ price │
│ password │ │ │ quantity │ │ │ stock │
│ ... │ │ │ ... │ │ │ ... │
└─────────────┘ │ └─────────────┘ │ └─────────────┘
│ │
│ │
▼ ▼
┌──────────────────────────────┐
│ OrderItem │
│ (订单明细) │
├──────────────────────────────┤
│ id (PK) │
│ order_id (FK) │
│ product_id (FK) │
│ quantity │
│ price │
└──────────────────────────────┘
**表结构设计模板**:

```sql
-- 用户表
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
    email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
    password VARCHAR(255) NOT NULL COMMENT '密码(加密)',
    phone VARCHAR(20) COMMENT '手机号',
    avatar VARCHAR(500) COMMENT '头像URL',
    status SMALLINT NOT NULL DEFAULT 1 COMMENT '状态:1-正常,2-禁用',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

    INDEX idx_username (username),
    INDEX idx_email (email),
    INDEX idx_status (status)
) COMMENT '用户表';

-- 订单表
CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    order_no VARCHAR(50) NOT NULL UNIQUE COMMENT '订单号',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    total_amount DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
    status SMALLINT NOT NULL DEFAULT 1 COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

    FOREIGN KEY (user_id) REFERENCES users(id),
    INDEX idx_user_id (user_id),
    INDEX idx_order_no (order_no),
    INDEX idx_status (status),
    INDEX idx_created_at (created_at)
) COMMENT '订单表';

索引设计原则

索引设计原则:
  选择性原则:
    - 在高选择性列上建立索引
    - 唯一索引是最好的索引
    - 避免在低选择性列(如性别)上建索引

  最左前缀原则:
    - 联合索引 (a,b,c) 支持: a, ab, abc 查询
    - 不支持: b, c, bc 查询

  覆盖索引原则:
    - 索引包含查询所需的所有字段
    - 避免回表查询,提高性能

  避免过度索引:
    - 索引占用存储空间
    - 索影响INSERT/UPDATE性能
    - 只在必要的列上建立索引

  监控索引使用:
    - 定期检查索引使用情况
    - 删除未使用的索引

3.3.4 步骤4:安全设计

安全设计流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              安全设计流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 威胁分析    │───▶│ 安全方案    │───▶│ 安全实施    │───▶│ 安全评审    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 资产识别         • 认证授权        • 代码实现        • 安全测试          │
│   • 威胁建模         • 数据加密        • 配置部署        • 渗透测试          │
│   • 风险评估         • 访问控制        • 安全监控        | 安全审计          │
│   • 合规要求         • 安全审计        • 应急响应                            │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

安全设计清单

认证授权:
  认证方式:
    - 用户名密码登录
    - 手机验证码登录
    - 第三方登录(微信/QQ/GitHub)
    - JWT Token认证

  密码安全:
    - 密码复杂度要求: 至少8位,包含大小写字母、数字
    - 密码加密: bcrypt/Argon2加密
    - 密码传输: HTTPS加密传输
    - 密码重置: 邮箱/手机验证码

  会话管理:
    - Token有效期: 访问Token 2小时,刷新Token 7天
    - 单设备登录: 同一账号只能在一个设备登录
    - 异常登录检测: IP异常、设备异常时告警

  权限控制:
    - RBAC模型: 基于角色的访问控制
    - 权限粒度: 控制到菜单、按钮级别
    - 权限继承: 角色继承、部门继承
    - 数据权限: 行级数据权限控制

数据安全:
  传输加密:
    - HTTPS: 全站HTTPS
    - TLS版本: 1.3以上
    - 加密算法: AES-256

  存储加密:
    - 敏感字段加密: 密码、身份证号、银行卡号
    - 加密算法: AES-256
    - 密钥管理: 密钥定期轮换

  数据脱敏:
    - 日志脱敏: 日志中敏感信息脱敏
    - 展示脱敏: 前端展示时部分信息用*代替
    - 导出脱敏: 数据导出时敏感信息脱敏

  备份恢复:
    - 数据备份: 每天全量备份,每小时增量备份
    - 异地备份: 备份数据异地存储
    - 恢复演练: 每季度进行恢复演练

安全防护:
  输入验证:
    - 白名单验证: 只允许合法字符
    - 长度限制: 防止超长输入
    - 类型检查: 严格类型检查
    - XSS防护: HTML转义

  SQL注入防护:
    - 参数化查询: 使用参数化查询
    - ORM框架: 使用ORM框架
    - 输入验证: 严格输入验证

  CSRF防护:
    - CSRF Token: 表单加入CSRF Token
    - SameSite Cookie: Cookie设置SameSite属性
    - 验证来源: 验证请求来源

  API安全:
    - 限流: 每用户每分钟最多100次请求
    - 签名验证: 敏感接口使用签名验证
    - IP白名单: 管理接口IP白名单

  文件安全:
    - 文件类型: 只允许指定类型文件
    - 文件大小: 限制文件大小
    - 文件扫描: 上传文件扫描病毒
    - 存储隔离: 上传文件独立存储

安全审计:
  审计日志:
    - 登录日志: 记录登录时间、IP、设备
    - 操作日志: 记录增删改操作
    - 异常日志: 记录异常操作
    - 日志保留: 审计日志保留6个月

  安全监控:
    - 异常登录: 异地登录、异常时间登录告警
    - 异常操作: 频繁操作、批量操作告警
    - 攻击检测: SQL注入、XSS攻击检测
    - 性能监控: 系统性能异常告警

3.4 阶段输出

输出物 说明 模板
架构设计文档 系统架构、技术选型 见上文
接口设计文档 API规格、数据格式 见上文
数据库设计文档 表结构、索引、关系 见上文
安全设计文档 认证授权、安全方案 见上文
原型/POC 可演示的原型 可选

3.5 阶段验收标准

## 阶段二验收清单

### 文档完整性
- [ ] 架构设计文档已完成并评审
- [ ] 接口设计文档已完成
- [ ] 数据库设计文档已完成
- [ ] 安全设计文档已完成

### 设计合理性
- [ ] 架构设计满足非功能需求
- [ ] 接口设计符合RESTful规范
- [ ] 数据库设计满足性能要求
- [ ] 安全设计符合合规要求

### 可实施性
- [ ] 技术选型合理可行
- [ ] 开发团队具备相应技能
- [ ] 第三方依赖稳定可靠
- [ ] 有充分的技术储备

### 评审通过
- [ ] 架构评审已通过
- [ ] 接口评审已通过
- [ ] 数据库评审已通过
- [ ] 安全评审已通过

### 风险可控
- [ ] 技术风险已识别
- [ ] 风险应对措施已制定
- [ ] 备选方案已准备

4. 阶段三:开发阶段

4.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段三目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 完成编码实现                                                                      │
│  ✓ 完成单元测试                                                                      │
│  ✓ 代码符合规范                                                                      │
│  ✓ 代码自审完成                                                                      │
└─────────────────────────────────────────────────────────────────────────────────────┘

4.2 阶段输入

输入物 来源 说明
需求规格说明书 阶段一输出 功能需求
设计文档 阶段二输出 技术设计
接口文档 阶段二输出 API规格
数据库设计 阶段二输出 表结构
开发规则 阶段一输出 编码规范

4.3 详细流程

4.3.1 步骤1:开发环境搭建

环境搭建流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              环境搭建流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 开发工具    │───▶│ 运行环境    │───▶│ 数据库环境  │───▶│ 开发测试    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • IDE配置          • 语言环境        • 数据库安装      • 单元测试框架      │
│   • 代码格式化        • 包管理器        • 数据迁移        • 集成测试框架      │
│   • 代码检查          • 虚拟环境        • 连接配置        • Mock工具          │
│   • Git配置           • Docker使用      │                  │                  │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

开发环境检查清单

必需工具:
  IDE:
    - [ ] Visual Studio Code / PyCharm / IntelliJ IDEA
    - [ ] 代码格式化插件
    - [ ] 代码检查插件
    - [ ] Git集成插件

  版本控制:
    - [ ] Git已安装
    - [ ] Git配置完成(user.name, user.email)
    - [ ] SSH密钥已配置

  语言环境:
    - [ ] Python 3.12已安装
    - [ ] 虚拟环境已创建
    - [ ] 依赖包已安装(requirements.txt)

  数据库:
    - [ ] PostgreSQL 14已安装
    - [ ] 数据库已创建
    - [ ] 测试数据已导入

可选工具:
  - [ ] Docker
  - [ ] Redis
  - [ ] RabbitMQ
  - [ ] Nginx

测试环境:
  - [ ] pytest已安装
  - [ ] pytest-cov已安装
  - [ ] pytest-mock已安装
  - [ ] 测试数据库已配置

4.3.2 步骤2:编码实现

编码流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              编码实现流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐         │
│  │ 理解需求    │───▶│ 编码实现    │───▶│ 代码自审    │───▶│ 提交代码    │         │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘         │
│       │                  │                  │                  │                 │
│       ▼                  ▼                  ▼                  ▼                 │
│   • 阅读需求         • 按规范编码      • 检查代码风格    • 遵循提交规范      │
│   • 理解设计         • 类型注解        • 检查命名规范    • 编写提交说明      │
│   • 明确接口         │ 文档字符串      • 检查逻辑错误    │                  │
│   • 确认依赖                                                              │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

Python编码规范详细说明

"""
文件文档字符串

模块简短描述
详细描述(可选)
"""

# 1. 标准库导入
import os
import sys
from typing import Dict, List, Optional, Any, Callable
from datetime import datetime
from enum import Enum

# 2. 第三方库导入
import yaml
import requests
from pydantic import BaseModel

# 3. 本地模块导入
from app.core.config import settings
from app.models.user import User
from app.utils.helpers import format_date

# 4. 常量定义
MAX_RETRY_COUNT = 3
DEFAULT_TIMEOUT = 30
API_VERSION = "v1"

# 5. 枚举定义
class Status(Enum):
    """状态枚举"""
    ACTIVE = 1
    INACTIVE = 2
    DELETED = 3

# 6. 异常定义
class UserNotFoundError(Exception):
    """用户未找到异常"""
    pass

class ValidationError(Exception):
    """验证异常"""
    pass

# 7. 类型定义
class UserCreateRequest(BaseModel):
    """用户创建请求"""
    username: str
    email: str
    password: str

    class Config:
        schema_extra = {
            "example": {
                "username": "zhangsan",
                "email": "zhangsan@example.com",
                "password": "password123"
            }
        }

# 8. 类定义
class UserService:
    """用户服务类"""

    def __init__(self, db_session):
        """初始化

        Args:
            db_session: 数据库会话
        """
        self.db_session = db_session
        self.logger = logging.getLogger(__name__)

    def get_user(self, user_id: int) -> Optional[User]:
        """获取用户

        Args:
            user_id: 用户ID

        Returns:
            用户对象,不存在返回None

        Raises:
            UserNotFoundException: 用户不存在
        """
        user = self.db_session.query(User).filter(User.id == user_id).first()
        if not user:
            raise UserNotFoundError(f"用户 {user_id} 不存在")
        return user

    def create_user(self, request: UserCreateRequest) -> User:
        """创建用户

        Args:
            request: 创建请求

        Returns:
            创建的用户对象
        """
        # 验证用户名是否已存在
        if self.db_session.query(User).filter(User.username == request.username).first():
            raise ValidationError("用户名已存在")

        # 创建用户
        user = User(
            username=request.username,
            email=request.email,
            password=self._hash_password(request.password),
            status=Status.ACTIVE.value,
            created_at=datetime.now()
        )

        self.db_session.add(user)
        self.db_session.commit()
        self.db_session.refresh(user)

        return user

    @staticmethod
    def _hash_password(password: str) -> str:
        """哈希密码"""
        import bcrypt
        return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()

# 9. 函数定义
def format_user(user: User) -> Dict[str, Any]:
    """格式化用户信息

    Args:
        user: 用户对象

    Returns:
        格式化的用户信息字典
    """
    return {
        "id": user.id,
        "username": user.username,
        "email": user.email,
        "status": user.status,
        "created_at": user.created_at.isoformat()
    }

# 10. 主程序
if __name__ == "__main__":
    # 主程序逻辑
    pass

常见编码模式

# 1. 上下文管理器
from contextlib import contextmanager

@contextmanager
def database_session():
    """数据库会话上下文管理器"""
    session = create_session()
    try:
        yield session
        session.commit()
    except Exception:
        session.rollback()
        raise
    finally:
        session.close()

# 使用
with database_session() as session:
    user = session.query(User).first()

# 2. 装饰器
from functools import wraps
import time

def log_execution_time(func):
    """记录执行时间装饰器"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        elapsed = time.time() - start
        print(f"{func.__name__} 执行时间: {elapsed:.2f}秒")
        return result
    return wrapper

# 使用
@log_execution_time
def process_data(data):
    return data * 2

# 3. 工厂函数
def create_service(service_type: str):
    """创建服务实例工厂函数"""
    if service_type == "user":
        return UserService()
    elif service_type == "order":
        return OrderService()
    else:
        raise ValueError(f"未知的服务类型: {service_type}")

# 4. 策略模式
class PaymentStrategy(ABC):
    """支付策略抽象类"""

    @abstractmethod
    def pay(self, amount: float) -> bool:
        pass

class AlipayStrategy(PaymentStrategy):
    """支付宝支付策略"""
    def pay(self, amount: float) -> bool:
        # 支付宝支付逻辑
        return True

class WeChatPayStrategy(PaymentStrategy):
    """微信支付策略"""
    def pay(self, amount: float) -> bool:
        # 微信支付逻辑
        return True

# 5. 观察者模式
class EventPublisher:
    """事件发布者"""
    def __init__(self):
        self._subscribers = []

    def subscribe(self, callback):
        self._subscribers.append(callback)

    def publish(self, event):
        for callback in self._subscribers:
            callback(event)

4.3.3 步骤3:单元测试

TDD开发流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              TDD开发流程                                           │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐                    │
│  │   RED   │────▶│  GREEN  │────▶│ REFACTOR │────▶│  循环   │                    │
│  │ 写测试   │     │ 写代码   │     │ 重构代码 │     │         │                    │
│  └─────────┘     └─────────┘     └─────────┘     └─────────┘                    │
│       │              │              │              │                             │
│       ▼              ▼              ▼              ▼                             │
│   • 测试失败       • 测试通过      • 优化代码      • 继续下一功能              │
│   • 明确行为       • 最简实现      • 保持测试通过  │                             │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

步骤示例:

1. RED: 写测试
def test_add():
    assert add(1, 2) == 3

2. 运行测试: 失败(函数未实现)

3. GREEN: 写代码
def add(a, b):
    return a + b

4. 运行测试: 通过

5. REFACTOR: 重构(如需要)
def add(a: int, b: int) -> int:
    return a + b

6. 运行测试: 仍然通过

单元测试模板

"""
用户服务单元测试
"""
import pytest
from unittest.mock import Mock, patch
from app.services.user_service import UserService
from app.models.user import User
from app.exceptions import UserNotFoundError, ValidationError


class TestUserService:
    """用户服务测试类"""

    @pytest.fixture
    def user_service(self, db_session):
        """用户服务fixture"""
        return UserService(db_session)

    @pytest.fixture
    def sample_user(self, db_session):
        """示例用户fixture"""
        user = User(
            id=1,
            username="testuser",
            email="test@example.com",
            password="hashed_password",
            status=1
        )
        db_session.add(user)
        db_session.commit()
        return user

    def test_get_user_success(self, user_service, sample_user):
        """测试成功获取用户"""
        # 执行
        result = user_service.get_user(sample_user.id)

        # 验证
        assert result.id == sample_user.id
        assert result.username == "testuser"

    def test_get_user_not_found(self, user_service):
        """测试用户不存在"""
        # 执行并验证
        with pytest.raises(UserNotFoundError):
            user_service.get_user(999)

    def test_create_user_success(self, user_service):
        """测试成功创建用户"""
        # 准备
        request = UserCreateRequest(
            username="newuser",
            email="newuser@example.com",
            password="password123"
        )

        # 执行
        result = user_service.create_user(request)

        # 验证
        assert result.id is not None
        assert result.username == "newuser"

    def test_create_user_duplicate_username(self, user_service, sample_user):
        """测试创建用户时用户名重复"""
        # 准备
        request = UserCreateRequest(
            username="testuser",  # 已存在
            email="different@example.com",
            password="password123"
        )

        # 执行并验证
        with pytest.raises(ValidationError) as exc_info:
            user_service.create_user(request)

        assert "用户名已存在" in str(exc_info.value)

    @patch('app.services.user_service.UserService._hash_password')
    def test_password_hashing(self, mock_hash, user_service):
        """测试密码哈希"""
        # 设置mock
        mock_hash.return_value = "hashed_password"

        # 执行
        user_service.create_user(UserCreateRequest(
            username="test",
            email="test@example.com",
            password="password123"
        ))

        # 验证
        mock_hash.assert_called_once_with("password123")

4.4 代码自审检查清单

## 代码自审清单

### 功能性
- [ ] 代码实现了需求文档中的所有功能
- [ ] 边界条件已处理(空值、最大值、最小值)
- [ ] 异常情况已处理
- [ ] 业务逻辑正确

### 代码质量
- [ ] 命名清晰准确
- [ ] 逻辑简洁明了
- [ ] 无重复代码
- [ ] 函数长度适中(<50行)
- [ ] 类长度适中(<300行)
- [ ] 嵌套层次合理(<4层)

### 规范性
- [ ] 符合PEP 8规范
- [ ] 有类型注解
- [ ] 有docstring
- [ ] 导入顺序正确
- [ ] 无注释代码
- [ ] 无调试代码(print等)

### 测试
- [ ] 有对应的单元测试
- [ ] 测试覆盖主要逻辑
- [ ] 测试通过

### 安全
- [ ] 无SQL注入风险
- [ ] 无XSS风险
- [ ] 敏感数据已处理
- [ ] 输入已验证
- [ ] 错误信息不泄露敏感信息

### 性能
- [ ] 无明显的性能问题
- [ ] 数据库查询已优化
- [ ] 无不必要的循环
- [ ] 无内存泄漏风险

### 文档
- [ ] 复杂逻辑有注释
- [ ] 公开API有docstring
- [ ] 示例代码准确

4.5 阶段输出

输出物 说明
源代码 符合规范的代码
单元测试 测试用例代码
开发文档 必要的技术文档
技术债务记录 临时方案和待优化项

4.6 阶段验收标准

## 阶段三验收清单

### 功能完整性
- [ ] 所有计划功能已实现
- [ ] 所有接口已开发
- [ ] 数据库已创建

### 代码质量
- [ ] 代码符合规范
- [ ] 代码审查通过率 > 90%
- [ ] 代码复杂度符合要求
- [ ] 无严重技术债务

### 测试覆盖
- [ ] 单元测试覆盖率 > 70%
- [ ] 核心功能覆盖率 > 80%
- [ ] 所有测试通过

### 文档完整性
- [ ] API文档已完成
- [ ] 关键功能有使用说明
- [ ] 技术文档已更新

5. 阶段四:测试阶段

5.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段四目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 单元测试完成                                                                     │
│  ✓ 集成测试完成                                                                     │
│  ✓ 系统测试完成                                                                     │
│  ✓ 性能测试完成                                                                     │
│  ✓ 安全测试完成                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

5.2 阶段输入

输入物 来源
源代码 阶段三输出
单元测试 阶段三输出
需求规格 阶段一输出
设计文档 阶段二输出

5.3 详细流程

5.3.1 测试类型及流程

测试金字塔

                    /\
                   /  \
                  / E2E \                    10% - 端到端测试
                 /--------\
                /          \
               /    集成    \                  30% - 集成测试
              /--------------\
             /                  \
            /        单元         \           60% - 单元测试
           /----------------------\

单元测试详细说明

"""
单元测试示例
"""
import pytest
from app.services.calculator import Calculator
from app.models.order import Order


class TestCalculator:
    """计算器测试类"""

    def setup_method(self):
        """每个测试方法前执行"""
        self.calculator = Calculator()

    def teardown_method(self):
        """每个测试方法后执行"""
        del self.calculator

    def test_add_positive_numbers(self):
        """测试正数加法"""
        # 执行
        result = self.calculator.add(1, 2)

        # 验证
        assert result == 3
        assert result > 0

    def test_add_negative_numbers(self):
        """测试负数加法"""
        result = self.calculator.add(-1, -2)
        assert result == -3

    def test_divide_by_zero_raises_error(self):
        """测试除以零抛出异常"""
        # 执行并验证
        with pytest.raises(ZeroDivisionError):
            self.calculator.divide(10, 0)

    def test_divide_returns_correct_result(self):
        """测试除法返回正确结果"""
        result = self.calculator.divide(10, 2)
        assert result == 5

    @pytest.mark.parametrize("a,b,expected", [
        (1, 2, 3),
        (0, 0, 0),
        (-1, 1, 0),
        (100, 200, 300),
    ])
    def test_add_parametrized(self, a, b, expected):
        """参数化加法测试"""
        result = self.calculator.add(a, b)
        assert result == expected

集成测试详细说明

"""
集成测试示例
"""
import pytest
from fastapi.testclient import TestClient
from app.main import app
from app.database import get_db
from app.models.user import User


class TestUserAPI:
    """用户API集成测试"""

    @pytest.fixture
    def client(self):
        """测试客户端"""
        return TestClient(app)

    @pytest.fixture
    def test_user(self, db_session):
        """测试用户"""
        user = User(
            id=1,
            username="testuser",
            email="test@example.com"
        )
        db_session.add(user)
        db_session.commit()
        return user

    def test_get_user_by_id(self, client, test_user):
        """测试通过ID获取用户"""
        # 执行
        response = client.get(f"/api/users/{test_user.id}")

        # 验证
        assert response.status_code == 200
        data = response.json()
        assert data["success"] is True
        assert data["data"]["username"] == "testuser"

    def test_get_user_not_found(self, client):
        """测试用户不存在"""
        # 执行
        response = client.get("/api/users/999")

        # 验证
        assert response.status_code == 404
        data = response.json()
        assert data["success"] is False

    def test_create_user_success(self, client):
        """测试创建用户成功"""
        # 执行
        response = client.post("/api/users", json={
            "username": "newuser",
            "email": "newuser@example.com",
            "password": "password123"
        })

        # 验证
        assert response.status_code == 201
        data = response.json()
        assert data["success"] is True
        assert data["data"]["username"] == "newuser"

    def test_create_user_duplicate_username(self, client):
        """测试创建用户时用户名重复"""
        # 先创建一个用户
        client.post("/api/users", json={
            "username": "testuser",
            "email": "test1@example.com",
            "password": "password123"
        })

        # 再创建同用户名的用户
        response = client.post("/api/users", json={
            "username": "testuser",
            "email": "test2@example.com",
            "password": "password123"
        })

        # 验证
        assert response.status_code == 409  # Conflict
        data = response.json()
        assert "用户名已存在" in data["error"]

系统测试详细说明

"""
系统测试示例
"""
import pytest
from playwright.sync_api import Page, expect


class TestUserWorkflow:
    """用户工作流系统测试"""

    def test_complete_user_purchase_flow(self, page: Page):
        """测试完整的用户购买流程"""

        # 1. 登录
        page.goto("https://example.com/login")
        page.fill("input[name='username']", "testuser")
        page.fill("input[name='password']", "password123")
        page.click("button[type='submit']")

        # 验证登录成功
        expect(page).to_have_url("https://example.com/dashboard")

        # 2. 浏览商品
        page.goto("https://example.com/products")

        # 验证页面加载
        expect(page).to_have_title("商品列表")

        # 3. 选择商品
        page.click("text=iPhone 15 Pro")

        # 验证商品详情页
        expect(page).to_have_url("/products/iphone-15-pro")

        # 4. 添加到购物车
        page.click("button:has-text('加入购物车')")

        # 验证添加成功
        expect(page.locator(".cart-count")).to_have_text("1")

        # 5. 查看购物车
        page.click("text=购物车")

        # 验证购物车页面
        expect(page).to_have_url("/cart")
        expect(page.locator(".cart-item")).to_have_count(1)

        # 6. 结算
        page.click("button:has-text('去结算')")

        # 7. 填写收货信息
        page.fill("input[name='address']", "北京市朝阳区")
        page.fill("input[name='phone']", "13800138000")

        # 8. 提交订单
        page.click("button:has-text('提交订单')")

        # 验证订单提交成功
        expect(page).to_have_url("/orders/[0-9]+")
        expect(page.locator("text=订单提交成功")).to_be_visible()

5.3.2 测试用例设计方法

等价类划分

输入:用户年龄
有效等价类:
  - 0-17岁(未成年)
  - 18-60岁(成年)
  - 60岁以上(老年)

无效等价类:
  - 负数
  - 非数字
  - 超大数(如150岁以上)

测试用例:
  - 测试16岁(边界值)
  - 测试18岁(边界值)
  - 测试60岁(边界值)
  - 测试61岁(边界值)
  - 测试-1岁(无效)
  - 测试"abc"(无效)

边界值分析

输入范围:1-100
边界值:1, 2, 99, 100

测试用例:
  - 测试1(最小值)
  - 测试2(最小值+1)
  - 测试99(最大值-1)
  - 测试100(最大值)
  - 测试0(小于最小值)
  - 测试101(大于最大值)

5.3.3 性能测试

性能测试类型

负载测试:
  目标: 验证系统在预期负载下的性能
  方法: 逐步增加用户数,观察响应时间
  指标: 响应时间、吞吐量、资源利用率

压力测试:
  目标: 找出系统的性能瓶颈和极限
  方法: 持续增加负载直到系统崩溃
  指标: 最大并发数、崩溃点

峰值测试:
  目标: 验证系统在突发高负载下的表现
  方法: 模拟突发流量
  指标: 系统恢复能力、数据丢失情况

持久性测试:
  目标: 验证系统长时间运行的稳定性
  方法: 持续运行24小时以上
  指标: 内存泄漏、性能下降

性能测试工具

"""
性能测试示例
"""
import time
import statistics
import pytest
from locust import HttpUser, task, between


class QuickTestUser(HttpUser):
    """快速测试用户"""

    wait_time = between(1, 3)

    @task
    def view_products(self):
        self.client.get("/api/products")

    @task(3)
    def view_product(self):
        self.client.get("/api/products/1")


class PerformanceTest:
    """性能测试"""

    def test_api_response_time(self):
        """测试API响应时间"""
        times = []

        for _ in range(100):
            start = time.time()
            response = self.client.get("/api/users")
            end = time.time()

            assert response.status_code == 200
            times.append(end - start)

        # 验证平均响应时间 < 100ms
        avg = statistics.mean(times)
        p95 = statistics.quantiles(times, n=20)[18]  # 95th percentile

        assert avg < 0.1, f"平均响应时间 {avg*1000}ms 超过100ms"
        assert p95 < 0.2, f"P95响应时间 {p95*1000}ms 超过200ms"

    def test_concurrent_users(self):
        """测试并发用户"""
        import threading

        results = []
        errors = []

        def worker():
            try:
                response = self.client.get("/api/users")
                results.append(response.status_code)
            except Exception as e:
                errors.append(str(e))

        threads = []
        for _ in range(100):
            t = threading.Thread(target=worker)
            threads.append(t)
            t.start()

        for t in threads:
            t.join()

        # 验证99%的请求成功
        success_rate = len([r for r in results if r == 200]) / len(results)
        assert success_rate > 0.99, f"成功率 {success_rate*100}% 低于99%"
        assert len(errors) == 0, f"有{len(errors)}个请求异常"

5.3.4 测试报告模板

# 测试报告

## 测试概述
- 测试时间: YYYY-MM-DD HH:MM
- 测试人员: xxx
- 测试版本: v1.0.0
- 测试环境: staging

## 测试结果汇总

| 测试类型 | 用例数 | 通过 | 失败 | 跳过 | 通过率 |
|----------|--------|------|------|------|--------|
| 单元测试 | 150 | 148 | 2 | 0 | 98.7% |
| 集成测试 | 50 | 48 | 2 | 0 | 96.0% |
| 系统测试 | 20 | 20 | 0 | 0 | 100% |
| 性能测试 | 10 | 9 | 1 | 0 | 90.0% |
| 安全测试 | 15 | 15 | 0 | 0 | 100% |
| **合计** | **245** | **240** | **5** | **0** | **98.0%** |

## 失败用例详情

### 单元测试
| 用例ID | 用例名称 | 失败原因 | 负任人 | 状态 |
|--------|----------|----------|--------|------|
| UT001 | test_skill_timeout | 超时设置不合理 | 张三 | 待修复 |
| UT002 | test_order_calc | 边界条件未处理 | 李四 | 待修复 |

### 集成测试
| 用例ID | 用例名称 | 失败原因 | 责任人 | 状态 |
|--------|----------|----------|--------|------|
| IT001 | test_payment_flow | 第三方接口异常 | 王五 | 待修复 |
| IT002 | test_notification | 通知服务未启动 | 赵六 | 待修复 |

### 性能测试
| 用例ID | 用例名称 | 结果 | 说明 |
|--------|----------|------|------|
| PT001 | test_api_response | 未通过 | P95响应时间220ms超过200ms |

## 覆盖率报告

| 模块 | 行覆盖率 | 分支覆盖率 | 函数覆盖率 |
|------|----------|------------|------------|
| app/services | 85.3% | 78.2% | 92.1% |
| app/api | 82.1% | 75.6% | 88.7% |
| app/models | 90.5% | 85.2% | 95.3% |
| **总计** | **85.0%** | **78.5%** | **91.2%** |

## 问题统计

| 严重程度 | 数量 | 占比 |
|----------|------|------|
| P0-严重 | 0 | 0% |
| P1-高 | 1 | 20% |
| P2-中 | 3 | 60% |
| P3-低 | 1 | 20% |

## 建议与结论

### 建议
1. 修复失败的5个用例
2. 优化API响应时间
3. 增加边界条件测试

### 结论
当前测试通过率98.0%,覆盖率85%,建议修复P1/P2问题后可以发布。

5.4 阶段输出

输出物 说明
测试用例 所有测试用例
测试报告 测试结果和覆盖率报告
缺陷报告 测试发现的缺陷清单
测试数据 测试用数据

5.5 阶段验收标准

## 阶段四验收清单

### 测试完整性
- [ ] 单元测试已完成
- [ ] 集成测试已完成
- [ ] 系统测试已完成
- [ ] 性能测试已完成
- [ ] 安全测试已完成

### 覆盖率要求
- [ ] 代码覆盖率 > 80%
- [ ] 核心功能覆盖率 > 90%
- [ ] 需求覆盖率 100%

### 缺陷处理
- [ ] P0/P1缺陷全部修复
- [ ] P2缺陷修复率 > 80%
- [ ] P3缺陷已记录

### 性能达标
- [ ] 响应时间达标
- [ ] 并发能力达标
- [ ] 资源使用合理

### 安全合规
- [ ] 无严重安全漏洞
- [ ] 符合安全规范
- [ ] 敏感数据保护到位

6. 阶段五:代码审查

6.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段五目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 代码审查完成                                                                     │
│  ✓ 审查意见已处理                                                                   │
│  ✓ 代码质量达标                                                                     │
│  ✓ 安全审查通过                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

6.2 阶段输入

输入物 来源
源代码 阶段三输出
单元测试 阶段三输出
开发规范 阶段一输出

6.3 详细流程

6.3.1 代码审查流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              代码审查流程                                         │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐         │
│  │ 提交PR   │───▶│ 自动检查 │───▶│ 指定审查者│───▶│ 人工审查 │───▶│ 审查完成 │         │
│  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘         │
│       │              │              │              │              │                 │
│       ▼              ▼              ▼              ▼              ▼                 │
│   • 代码提交      • Lint检查      • 分配审查者    • 代码检查      • 审查通过          │
│   • 提交说明      • 格式检查      • 通知审查者    • 提出意见      │                  │
│   • 关联Issue    • 单元测试      │              • 讨论优化方案    │                  │
│                  │ 代码覆盖率    │              │                  │                  │
│                  │ 安全扫描      │              │                  │                  │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

6.3.2 审查维度

功能性审查

"""
功能性审查示例
"""
# ✅ 正确:功能实现正确
def calculate_discount(amount: float, level: int) -> float:
    """计算折扣金额

    Args:
        amount: 原价
        level: 用户等级 (1-5)

    Returns:
        折扣金额

    Raises:
        ValueError: 参数无效
    """
    if amount <= 0:
        raise ValueError("金额必须大于0")
    if level < 1 or level > 5:
        raise ValueError("等级必须在1-5之间")

    discount_rates = {1: 0.0, 2: 0.05, 3: 0.1, 4: 0.15, 5: 0.2}
    return amount * discount_rates[level]

# ❌ 错误:功能实现错误
def calculate_discount(amount: float, level: int) -> float:
    # BUG: 没有验证amount是否为负数
    # BUG: 等级5的折扣率应该是0.2,不是0.25
    discount_rates = {1: 0.0, 2: 0.05, 3: 0.1, 4: 0.15, 5: 0.25}
    return amount * discount_rates.get(level, 0)

代码质量审查

# ❌ 糟糕的代码
def d(x): return x*2 if x>0 else x/2

# ✅ 好的代码
def double_if_positive_else_halve(number: float) -> float:
    """如果是正数则翻倍,否则减半"""
    return number * 2 if number > 0 else number / 2

安全审查

# ❌ SQL注入风险
query = f"SELECT * FROM users WHERE name = '{name}'"
cursor.execute(query)

# ✅ 参数化查询
query = "SELECT * FROM users WHERE name = %s"
cursor.execute(query, (name,))

# ❌ 硬编码密钥
API_KEY = "sk-xxxxx"

# ✅ 环境变量
import os
API_KEY = os.getenv("API_KEY")

# ❌ 密码日志
logger.info(f"用户登录: user={username}, password={password}")

# ✅ 不记录敏感信息
logger.info(f"用户登录: user={username}")

性能审查

# ❌ 低效:N+1查询问题
def get_users_with_orders(user_ids):
    users = []
    for user_id in user_ids:
        user = db.query(f"SELECT * FROM users WHERE id = {user_id}")
        orders = db.query(f"SELECT * FROM orders WHERE user_id = {user_id}")
        users.append({"user": user, "orders": orders})
    return users

# ✅ 高效:批量查询
def get_users_with_orders(user_ids):
    users = db.query("SELECT * FROM users WHERE id IN (%s)"
                       % ','.join(map(str, user_ids))).all()
    user_ids_list = [u.id for u in users]
    orders = db.query("SELECT * FROM orders WHERE user_id IN (%s)"
                     % ','.join(map(str, user_ids_list))).all()

    # 构建用户-订单映射
    orders_by_user = {}
    for order in orders:
        orders_by_user.setdefault(order.user_id, []).append(order)

    # 组装结果
    return [
        {"user": user, "orders": orders_by_user.get(user.id, [])}
        for user in users
    ]

6.4 审查清单

## 代码审查清单

### 功能性
- [ ] 功能实现符合需求
- [ ] 边界条件处理正确
- [ ] 异常处理完善
- [ ] 业务逻辑正确

### 代码质量
- [ ] 命名清晰准确
- [ ] 逻辑简洁明了
- [ ] 无重复代码
- [ ] 适当抽象
- [ ] 符合DRY原则

### 测试
- [ ] 有单元测试
- [ ] 测试覆盖主要场景
- [ ] 测试通过
- [ ] 有边界测试

### 文档
- [ ] 有docstring
- [ ] 复杂逻辑有注释
- [ ] 公共API有文档
- [ ] 文档与代码一致

### 安全
- [ ] 无安全漏洞
- [ ] 输入验证
- [ ] 敏感数据保护
- [ ] 权限控制正确

### 性能
- [ ] 无明显性能问题
- [ ] 数据库查询优化
- [ ] 无内存泄漏
- [ ] 资源使用合理

### 规范性
- [ ] 符合编码规范
- [ ] 文件结构合理
- [ ] 导入顺序正确
- [ ] 无调试代码

6.5 审查意见模板

## 代码审查意见

### 总体评价
代码整体质量良好,功能实现正确。有几个小问题需要修复。

### 需要修改(必须)

1. **安全**: 第32行存在SQL注入风险
   ```python
   # 当前代码
   query = f"SELECT * FROM users WHERE name = '{name}'"

   # 建议修改为
   query = "SELECT * FROM users WHERE name = %s"
   cursor.execute(query, (name,))
   ```

2. **性能**: 第45-50行循环中重复查询数据库
   ```python
   # 当前代码:N次数据库查询
   for user_id in user_ids:
       user = db.query(f"SELECT * FROM users WHERE id = {user_id}")

   # 建议修改为:批量查询
   users = db.query("SELECT * FROM users WHERE id IN (%s)"
                  % ','.join(map(str, user_ids))).all()
   ```

### 建议改进(可选)

1. **命名**: 变量`d`名称不够清晰
   ```python
   # 当前
   def d(x): return x*2 if x>0 else x/2

   # 建议
   def double_if_positive_else_halve(number):
       return number * 2 if number > 0 else number / 2
   ```

2. **文档**: 复杂逻辑缺少注释说明
   ```python
   # 建议添加
   # 使用折扣率表计算折扣金额
   # 折扣率根据用户等级确定:1级无折扣,5级20%折扣
   ```

### 审查结论
- [ ] 需要修改后再次审查
- [ ] 建议改进已采纳,可以合并

### 审查统计
- 审查文件数: 5
- 审查行数: 350
- 发现问题: 7个
- 严重问题: 2个
- 一般问题: 5个

6.6 阶段输出

输出物 说明
审查记录 所有审查意见
修改后的代码 开发者修改后的代码
审查报告 审查统计和结论

6.7 阶段验收标准

## 阶段五验收清单

### 审查完成
- [ ] 所有PR已审查
- [ ] 审查意见已处理
- [ ] 无保留意见

### 质量达标
- [ ] 代码质量检查通过
- [ ] 安全审查通过
- [ ] 性能审查通过

### 合并条件
- [ ] CI检查全部通过
- [ ] 审查者批准合并
- [ ] 无遗留问题

7. 阶段六:集成阶段

7.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段六目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 组件集成完成                                                                     │
│  ✓ 接口联调完成                                                                     │
│  ✓ 环境部署完成                                                                     │
│  ✓ 冒烟测试完成                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

7.2 阶段输入

输入物 来源
各模块代码 阶段三输出
测试用例 阶段四输出
审查通过代码 阶段五输出

7.3 详细流程

7.3.1 集成策略

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              集成策略                                             │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌──────────────────────────────────────────────────────────────────────┐      │
│  │                      大爆炸集成 (不推荐)                              │      │
│  │                                                                      │      │
│  │  所有模块 ───────────────▶ 一次性集成 ───────────────▶ 系统测试          │      │
│  │      │                    │                            │             │      │
│  │      ▼                    ▼                            ▼             │      │
│  │   问题定位困难              集成问题多                    发布延期     │      │
│  └──────────────────────────────────────────────────────────────────────┘      │
│                                                                                     │
│  ┌──────────────────────────────────────────────────────────────────────┐      │
│  │                      持续集成 (推荐)                                 │      │
│  │                                                                      │      │
│  │  ┌────────┐   ┌────────┐   ┌────────┐   ┌────────┐   ┌────────┐      │      │
│  │  │提交代码 │─▶│自动构建 │─▶│自动测试 │─▶│代码审查 │─▶│集成测试 │      │      │
│  │  └────────┘   └────────┘   └────────┘   └────────┘   └────────┘      │      │
│  │       │           │           │           │           │       │      │
│  │       ▼           ▼           ▼           ▼           ▼       │      │
│  │    每次提交      构建成功    测试通过    审查通过    集成成功       │      │
│  │    持续集成      即时反馈    快速定位    代码质量    系统稳定       │      │
│  └──────────────────────────────────────────────────────────────────────┘      │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

7.3.2 CI/CD配置

GitHub Actions配置示例

# .github/workflows/ci.yml

name: CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main, develop]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.12'
          cache: 'pip'

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          pip install flake8 black mypy

      - name: Lint with flake8
        run: |
          flake8 . --count --select=E9,F63,F7,F401 --show-source --statistics

      - name: Check code formatting with black
        run: |
          black --check .

      - name: Type check with mypy
        run: |
          mypy . --ignore-missing-imports

  test:
    runs-on: ubuntu-latest
    needs: lint

    services:
      postgres:
        image: postgres:14
        env:
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: test_db
        options: >-
          --health-cmd pg_isready
          --interval 10s
          --timeout 5s
          --retries 5

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.12'
          cache: 'pip'

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          pip install pytest pytest-cov

      - name: Run tests
        run: |
          pytest tests/ --cov=app --cov-report=xml --cov-report=html --junitxml=junit.xml

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

      - name: Archive test results
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: test-results
          path: |
            htmlcov/
            junit.xml

  security:
    runs-on: ubuntu-latest
    needs: lint
    steps:
      - uses: actions/checkout@v3

      - name: Run security scan
        uses: PyCQA/bandit-action@v1
        with:
          python-version: '3.x'

      - name: Upload security report
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: security-report
          path: output/report.html

7.3.3 集成测试环境

Docker Compose配置

# docker-compose.yml

version: '3.8'

services:
  app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://postgres:5432/testdb
      - REDIS_URL=redis:6379/0
    depends_on:
      - postgres
      - redis
    volumes:
      - ./app:/app

  postgres:
    image: postgres:14
    environment:
      POSTGRES_DB: testdb
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7
    ports:
      - "6379:6379"

volumes:
  postgres_data:

7.4 阶段输出

输出物 说明
集成报告 集成测试结果
环境配置 部署环境配置
部署脚本 自动化部署脚本
冒烟测试报告 冒烟测试结果

7.5 阶段验收标准

## 阶段六验收清单

### 集成完成
- [ ] 所有模块已集成
- [ ] 接口联调通过
- [ ] 数据流转正常

### 测试通过
- [ ] 集成测试通过
- [ ] 冒烟测试通过
- [ ] 无P0/P1缺陷

### 环境就绪
- [ ] 测试环境已部署
- [ ] 预发环境已部署
- [ ] 生产环境已准备

8. 阶段七:验收阶段

8.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段七目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 功能验收完成                                                                     │
│  ✓ 性能验收完成                                                                     │
│  ✓ 安全验收完成                                                                     │
│  ✓ 用户验收完成                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

8.2 详细流程

8.2.1 功能验收

功能验收流程:
  验收准备:
    - 准备验收环境
    - 准备测试数据
    - 准备验收用例

  执行验收:
    - 按验收用例执行
    - 记录验收结果
    - 收集问题

  结果评估:
    - 统计验收通过率
    - 分析问题原因
    - 制定修复计划

  问题修复:
    - 修复验收发现的问题
    - 回归测试
    - 重新验收

验收用例模板:
  用例ID: TC001
  用例名称: 用户登录功能验收
  验收步骤:
    1. 打开登录页面
    2. 输入正确的用户名和密码
    3. 点击登录按钮
  预期结果:
    - 登录成功
    - 跳转到首页
    - 显示用户信息
  实际结果: [待填写]
  状态: [通过/失败]

8.2.2 性能验收

性能验收指标:
  响应时间:
    - 首页加载: < 2秒 (P95)
    - API响应: < 100ms (P95)
    - 文件上传: < 5秒 (P95)

  并发能力:
    - 支持并发用户: > 1000
    - TPS: > 1000

  资源使用:
    - CPU使用率: < 70%
    - 内存使用: < 4GB
    - 数据库连接数: < 100

  稳定性:
    - 系统可用性: > 99.5%
    - 故障恢复时间: < 1小时

性能测试方法:
  基准测试:
    - 在标准负载下测试
    - 记录基准数据
    - 与基准数据对比

  负载测试:
    - 模拟预期负载
    - 逐步增加负载
    - 记录性能拐点

  压力测试:
    - 持续增加负载
    - 找到系统极限
    - 记录崩溃点

8.2.3 安全验收

安全验收清单:
  认证授权:
    - [ ] 用户名/密码认证正常
    - [ ] Token认证正常
    - [ ] 权限控制正确
    - [ ] 会话超时正常
    - [ ] 单点登录正常

  输入验证:
    [ ] SQL注入测试通过
    [ ] XSS攻击测试通过
    [ ] CSRF攻击测试通过
    [ ] 文件上传验证通过
    [ ] 命令注入测试通过

  数据安全:
    [ ] 敏感数据已加密
    [ ] 日志不包含敏感信息
    [ ] 备份数据已加密
    [ ] 数据传输已加密

  安全扫描:
    [ ] 依赖漏洞扫描通过
    [ ] 代码安全扫描通过
    [ ] 网络安全扫描通过

8.2.4 用户验收测试 (UAT)

# UAT测试计划

## 测试环境
- 环境类型: 预发布环境
- 测试数据: 生产数据脱敏副本
- 测试设备: 标准测试设备

## 测试场景

### 场景1: 用户登录
**验收人**: 终端用户
**目标**: 验证用户登录功能

**步骤**:
1. 打开应用登录页面
2. 输入用户名和密码
3. 点击登录按钮
4. 验证登录结果

**验收标准**:
- 能成功登录
- 登录后跳转到正确页面
- 显示正确的用户信息

**结果**: □ 通过 □ 不通过

**备注**:

---

### 场景2: 核心业务流程
**验收人**: 业务代表

**验收标准**:
- 能完成完整业务流程
- 各环节数据正确
- 流程耗时在可接受范围内

8.3 阶段输出

输出物 说明
验收测试报告 所有验收结果
问题清单 需修复的问题
验收结论 是否通过验收

8.4 阶段验收标准

## 阶段七验收清单

### 功能验收
- [ ] 所有核心功能验收通过
- [ ] 边界情况验收通过
- [ ] 异常处理验收通过

### 性能验收
- [ ] 所有性能指标达标
- [ ] 性能测试报告通过

### 安全验收
- [ ] 安全测试全部通过
- [ ] 无严重安全漏洞
- [ ] 符合合规要求

### UAT验收
- [ ] 用户测试场景通过
- [ ] 用户满意度调查合格
- [ ] 用户签字确认

### 缺陷处理
- [ ] P0/P1缺陷全部修复
- [ ] P2缺陷修复率 > 80%

9. 阶段八:交付阶段

9.1 阶段目标

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              阶段八目标                                              │
├─────────────────────────────────────────────────────────────────────────────────────┤
│  ✓ 版本打包完成                                                                     │
│  ✓ 文档整理完成                                                                     │
│ ✓ 发布准备完成                                                                     │
│ ✓ 正式发布完成                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

9.2 详细流程

9.2.1 版本打包

# 版本打包流程

# 1. 更新版本号
echo "请输入版本号 (如: 1.0.0):"
read VERSION

# 更新__version__.py
sed -i "s/__version__ = .*/__version__ = \"$VERSION\"/" app/__init__.py

# 2. 更新CHANGELOG
cat >> CHANGELOG.md << EOF
## [$VERSION] - $(date +%Y-%m-%d)

### 新增
- 功能1
- 功能2

### 改进
- 改进1
- 改进2

### Bug修复
- 修复1
- 修复2

EOF

# 3. 构建发布包
python setup.py sdist bdist_wheel

# 4. 生成校验和
sha256sum dist/* > dist/checksums.txt

# 5. 签名(如需要)
gpg --detach-sign --local-user $GPG_KEY_ID dist/*

9.2.2 文档整理

文档清单

必需文档:
  - README.md: 项目介绍和快速开始
  - CHANGELOG.md: 版本变更记录
  - INSTALL.md: 安装指南
  - UPGRADE.md: 升级指南
  - API.md: API文档

可选文档:
  - ARCHITECTURE.md: 架构文档
  - DEVELOPMENT.md: 开发指南
  - TROUBLESHOOTING.md: 故障排除
  - CONTRIBUTING.md: 贡献指南
  - LICENSE: 许可证文件

用户文档:
  - 用户手册
  - 快速入门指南
  - 视频教程
  - FAQ

9.2.3 发布流程

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              发布流程                                               │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐         │
│  │ 创建标签 │───▶│ 构建包   │───▶│ 测试验证 │───▶│ 发布到仓库 │───▶│ 发布通知 │         │
│  └─────────┘    └─────────┘    └─────────┘    └─────────┘    └─────────┘         │
│       │              │              │              │              │                 │
│       ▼              ▼              ▼              ▼              ▼                 │
│   git tag        build        smoke test   GitHub Release   邮件通知          │
│   v1.0.0        wheel/zip     install      PyPI release   发布文章          │
│                             安装验证                                    │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

发布脚本示例

#!/bin/bash
set -e

VERSION=$1

echo "=========================================="
echo "开始发布流程 v$VERSION"
echo "=========================================="

# 1. 运行所有测试
echo "步骤1: 运行测试"
pytest tests/ -v --cov=app
if [ $? -ne 0 ]; then
    echo "测试失败,发布终止"
    exit 1
fi

# 2. 代码检查
echo "步骤2: 代码检查"
flake8 app/
if [ $? -ne 0 ]; then
    echo "代码检查失败,发布终止"
    exit 1
fi

# 3. 构建包
echo "步骤3: 构建发布包"
python setup.py sdist bdist_wheel

# 4. 检查包
echo "步骤4: 检查包
twine check dist/*

# 5. 发布到GitHub
echo "步骤5: 发布到GitHub"
git tag -a v$VERSION -m "Release v$VERSION"
git push origin v$VERSION

# 6. 发布到PyPI(可选)
read -p "是否发布到PyPI? (y/n) " -n
if [ "$REPLY" = "y" ]; then
    echo "步骤6: 发布到PyPI"
    twine upload dist/*
fi

echo "=========================================="
echo "发布完成 v$VERSION"
echo "=========================================="

9.3 发布说明模板

# [项目名称] v[版本号] 发布说明

**发布日期**: YYYY-MM-DD
**代号**: [可选版本代号]

---

## 📊 发布概览

本次发布包含 [主要特性] 个新功能,[优化内容] 个优化,以及 [修复数量] 个bug修复。

---

## ✨ 新增功能

- 🎉 **[功能1]**: [简要描述]
  - 功能详情
  - 使用示例

- 🎉 **[功能2]**: [简要描述]

---

## 🚀 性能优化

- ⚡ [优化1]: 性能提升 [具体指标]
- ⚡ [优化2]: 内存占用减少 [具体指标]

---

## 🐛 Bug修复

- 🐛 **[修复1]**: [问题描述]
- 🐛 **[修复2]**: [问题描述]

---

## 🔧 改进

- 📝 **[改进1]**: [改进内容]
- 🔧 **[改进2]**: [改进内容]

---

## ⚠️ 破坏性变更

- ⚠️ **[变更1]**: [影响说明]
  - 迁移指南: [迁移步骤]

---

## 📦 安装升级

### 新安装
```bash
pip install {project-name}=={version}

从旧版本升级

pip install --upgrade {project-name}=={version}

从源码安装

git clone https://github.com/{org}/{project}.git
cd {project}
git tag v{version}
pip install .

📚 文档更新

  • ✅ [更新1]: API文档更新
  • ✅ [更新2]: 使用指南更新
  • ✅ [更新3]: 架构文档更新

🤝 贡献者

感谢以下贡献者参与本次版本开发: - @contributor1 - @contributor2


📈 下一步计划


💬 反馈与支持


⏭️ 版本历史

版本 日期 说明
v1.0.0 YYYY-MM-DD 首次正式发布
v0.9.0 YYYY-MM-DD Beta版本
v0.1.0 YYYY-MM-DD Alpha版本
---

## 附录:模板和检查清单

### 附录A:需求规格说明书模板

```markdown
# 需求规格说明书

## 1. 文档控制
## 2. 项目概述
### 2.1 项目背景
### 2.2 项目目标
### 2.3 项目范围

## 3. 用户角色分析
## 4. 功能需求
### 4.1 功能清单
### 4.2 功能详细说明

## 5. 非功能需求
### 5.1 性能需求
### 5.2 安全需求
### 5.3 可用性需求

## 6. 数据需求
## 7. 接口需求
## 8. 约束条件
## 9. 假设条件
## 10. 风险识别
## 11. 附录
### 11.1 术语表
### 11.2 参考文档

附录B:项目计划模板

# 项目计划

## 1. 项目信息
## 2. 项目目标
## 3. 里程碑
## 4. 工作分解结构(WBS)
## 5. 甘特图
## 6. 资源分配
## 7. 风险管理
## 8. 沟通计划

附录C:代码审查清单

# 代码审查清单

## 功能性
## 代码质量
## 测试
## 文档
## 安全
## 性能
## 规范性

附录D:测试报告模板

# 测试报告

## 测试概述
## 测试结果
## 失败用例详情
## 覆盖率报告
## 性能测试结果
## 建议与结论

附录E:发布说明模板

# 发布说明模板

## 发布概览
## 新增功能
## 性能优化
## Bug修复
## 改进
## 破坏性变更
## 安装升级
## 文档更新
## 贡献者
## 下一步计划
## 版本历史

附录F:完整阶段检查清单

# 完整阶段检查清单

## 阶段一:规则制定
- [ ] 需求文档已完成
- [ ] 开发规则已发布
- [ ] 项目计划已确认
- [ ] 风险清单已制定

## 阶段二:设计阶段
- [ ] 架构设计已完成
- [ ] 接口设计已完成
- [ ] 数据库设计已完成
- [ ] 安全设计已完成
- [ ] 设计评审已通过

## 阶段三:开发阶段
- [ ] 所有功能已实现
- [ ] 代码符合规范
- [ ] 单元测试已完成
- [ ] 代码自审已完成
- [ ] 代码已提交

## 阶段四:测试阶段
- [ ] 单元测试已通过
- [ ] 集成测试已通过
- [ ] 系统测试已通过
- [ ] 性能测试已通过
- [ ] 安全测试已通过

## 阶段五:代码审查
- [ ] 代码审查已完成
- [ ] 审查意见已处理
- [ ] 审查批准合并
- [ ] CI检查全部通过

## 阶段六:集成阶段
- [ ] 组件集成完成
- [ ] 接口联调通过
- [ ] 环境部署完成
- [ ] 冒烟测试通过

## 阶段七:验收阶段
- [ ] 功能验收通过
- [ ] 性能验收通过
- [ ] 安全验收通过
- [ ] 用户验收通过
- [ ] 验收报告完成

## 阶段八:交付阶段
- [ ] 版本打包完成
- [ ] 文档整理完成
- [ ] 发布准备完成
- [ ] 正式发布完成
- [ ] 用户通知完成

## 阶段九:运维阶段
- [ ] 监控配置完成
- [ ] 告警配置完成
- [ ] 备份策略制定
- [ ] 回滚方案准备

文档版本: 2.0.0 最后更新: 2026-03-25 适用范围: 所有软件工程项目 使用说明: 本文档提供通用框架,项目可根据实际情况剪裁