📋 PRD 文档标准模板

基于 OpenClaw + Claude Code 的端到端研发自动化系统

文档版本: v2.0
创建日期: 2026 年 3 月 13 日
适用场景: AI 驱动的全流程自动化研发
协同模式: 人机协同
🎯

项目概述与背景

SECTION 01

1.1 项目愿景

构建一个基于 OpenClaw(任务编排引擎)+ Claude Code(AI 编程助手)的端到端研发自动化系统,实现从需求分析到生产部署的全流程自动化,支持各研发角色的岗位 Agents 协同工作,在关键节点保留人机协同能力,提升研发效率 10 倍以上。

1.2 核心目标

  • 实现需求→PRD→技术方案→API 设计→编码→测试→部署的全链路自动化
  • 为产品经理、架构师、前后端开发、测试、DevOps 等角色提供专用 Agents
  • 在关键决策点支持人工审核与干预(人机协同)
  • 集成 Jenkins + Docker + K8S(KubeSphere) 实现自动化部署
  • 通过 UI 自动化测试完成最终验收
  • 建立完整的研发质量门禁与追溯体系

1.3 系统边界

范围 包含内容 不包含内容
需求阶段 需求收集、分析、PRD 自动生成 市场调研、竞品分析
设计阶段 技术方案设计、API 协议设计、原型生成 UI/UX 创意设计
开发阶段 AI Coding、单元测试生成、代码审查 手工编码(除非人机协同模式)
测试阶段 单元测试、集成测试、UI 自动化测试 性能测试、安全渗透测试
部署阶段 CI/CD 流水线、容器化部署、K8S 编排 基础设施 provisioning
💡 关键说明:本系统定位为研发效能提升工具,而非完全替代人类工程师。在架构决策、复杂业务逻辑、创新设计等场景下,系统提供智能建议并等待人工确认。
👥

用户故事与角色定义

SECTION 02

2.1 角色矩阵

📝 产品经理 Agent 💻 后端开发 Agent 🎨 前端开发 Agent 🧪 测试工程师 Agent 🚀 DevOps 工程师 Agent 🖼️ UI 设计师 Agent 🏗️ 系统架构师 Agent

2.2 用户故事地图

US-001 P0 - 高优先级

作为 产品经理 Agent,
我希望 能够接收原始需求输入并自动生成结构化 PRD 文档,
以便于 快速将模糊需求转化为可执行的产品规格说明。

验收标准:

  • 支持自然语言需求输入(文本/语音转文字)
  • 自动识别功能点、业务规则、约束条件
  • 生成符合标准模板的 PRD 文档(含用户故事、业务流程、原型描述)
  • 输出前需经过人工确认环节(人机协同)
US-002 P0 - 高优先级

作为 系统架构师 Agent,
我希望 基于 PRD 自动生成后端技术方案设计文档,
以便于 明确系统架构、技术选型、数据库设计、接口规范。

验收标准:

  • 根据业务复杂度推荐合适的架构模式(单体/微服务)
  • 生成 ER 图、时序图、架构图
  • 定义技术栈(语言、框架、中间件)
  • 输出数据库表结构设计
US-003 P0 - 高优先级

作为 前端开发 Agent,
我希望 基于 PRD 和原型规范生成前端技术方案,
以便于 明确组件结构、状态管理、路由设计、API 对接方案。

验收标准:

  • 生成组件树结构和依赖关系图
  • 定义状态管理方案(Redux/Zustand/Pinia)
  • 规划页面路由和权限控制
  • 制定与后端的 API 对接协议
US-004 P1 - 中优先级

作为 后端开发 Agent,
我希望 根据 API 接口协议自动生成 CRUD 代码和业务逻辑,
以便于 快速实现 RESTful API 服务。

验收标准:

  • 基于 OpenAPI/Swagger 规范生成 Controller、Service、DAO 层代码
  • 自动生成数据验证逻辑和异常处理
  • 集成单元测试用例
  • 代码符合团队编码规范并通过静态检查
US-005 P1 - 中优先级

作为 前端开发 Agent,
我希望 根据原型规范和 API 协议生成前端页面代码,
以便于 快速构建用户界面并完成数据对接。

验收标准:

  • 基于 Figma/Sketch 设计规范生成 React/Vue 组件
  • 自动调用后端 API 并处理响应数据
  • 实现表单验证、错误提示、加载状态
  • 适配响应式布局和主流浏览器
US-006 P0 - 高优先级

作为 测试工程师 Agent,
我希望 自动生成单元测试、集成测试和 UI 自动化测试脚本,
以便于 确保代码质量和功能正确性。

验收标准:

  • 基于代码自动生成单元测试(覆盖率≥80%)
  • 根据 API 协议生成集成测试用例
  • 使用 Playwright/Cypress 生成 UI 自动化测试脚本
  • 测试失败时自动生成诊断报告
US-007 P0 - 高优先级

作为 DevOps 工程师 Agent,
我希望 自动配置 CI/CD 流水线并完成容器化部署,
以便于 实现代码提交到生产环境的自动化发布。

验收标准:

  • 自动生成 Jenkins Pipeline 脚本
  • 构建 Docker 镜像并推送到镜像仓库
  • 生成 K8S Deployment、Service、Ingress 配置
  • 通过 KubeSphere 完成多环境部署(dev/test/prod)
  • 集成健康检查和回滚机制
US-008 P2 - 低优先级

作为 项目经理(人类),
我希望 在关键节点进行人工审核和决策,
以便于 控制项目风险并确保方向正确。

验收标准:

  • PRD 生成后需人工确认才能进入下一阶段
  • 技术方案设计需架构师审批
  • API 接口变更需相关方评审
  • 生产环境部署需手动触发或审批
  • 提供可视化的审批工作流界面
🔄

业务流程与流程规范

SECTION 03

3.1 端到端研发全流程

需求输入
PRD 设计
技术方案
API 协议
AI Coding
Unit Test
集成测试
CI/CD
K8S 部署
UI 验收

3.2 详细流程说明

阶段 输入 处理过程 输出 责任人 人机协同点
1. 需求收集 业务方口头/文档需求 OpenClaw 解析需求,Claude Code 提取关键信息 原始需求清单 产品经理 需求优先级确认
2. PRD 设计 原始需求清单 PM Agent 生成用户故事、业务流程、原型描述 结构化 PRD 文档 产品经理 Agent PRD 评审与批准
3. 技术方案 PRD 文档 架构师 Agent 设计系统架构、数据库、接口 技术方案设计文档 架构师 Agent 架构方案评审
4. API 协议 技术方案文档 前后端 Agent 协商生成 OpenAPI 规范 API 接口文档 (Swagger) 前后端开发 Agent 接口评审会议
5. AI Coding API 文档 + 技术方案 Claude Code 生成前后端代码 源代码 + 单元测试 前后端开发 Agent Code Review
6. 单元测试 源代码 QA Agent 生成并执行单元测试 测试报告(覆盖率) 测试工程师 Agent 阈值设定(≥80%)
7. 集成测试 通过单元测试的代码 QA Agent 执行 API 集成测试 集成测试报告 测试工程师 Agent 缺陷修复确认
8. CI/CD 通过测试的代码 DevOps Agent 触发 Jenkins Pipeline Docker 镜像 DevOps 工程师 Agent 部署审批
9. K8S 部署 Docker 镜像 DevOps Agent 部署到 KubeSphere 运行中的应用 DevOps 工程师 Agent 生产环境发布
10. UI 验收 部署的应用 QA Agent 执行 UI 自动化测试 验收测试报告 测试工程师 Agent 最终验收签字

3.3 流程门禁规则

⚠️ 质量门禁:每个阶段必须满足以下条件才能进入下一阶段
  • PRD 阶段:所有用户故事必须有明确的验收标准
  • 设计阶段:技术方案必须通过架构评审委员会审核
  • 开发阶段:代码必须通过 SonarQube 质量扫描(无 Blocker/Critical 问题)
  • 测试阶段:单元测试覆盖率≥80%,集成测试通过率 100%
  • 部署阶段:必须通过预发环境验证
  • 验收阶段:UI 自动化测试通过率 100%
📦

功能需求详细说明

SECTION 04

4.1 需求管理模块

功能 ID 功能名称 描述 优先级
F-REQ-001 需求导入 支持文本、Word、Excel、语音转文字等多种需求输入格式 P0
F-REQ-002 需求解析 使用 NLP 技术自动提取功能点、业务规则、约束条件 P0
F-REQ-003 需求分类 自动将需求归类为功能性需求、非功能性需求、技术需求 P1
F-REQ-004 需求追溯 建立需求 -PRD- 设计 - 代码 - 测试的双向追溯矩阵 P1

4.2 PRD 生成模块

功能 ID 功能名称 描述 优先级
F-PRD-001 用户故事生成 基于需求自动生成标准格式的用户故事(As a...I want...So that...) P0
F-PRD-002 业务流程建模 自动生成 BPMN 流程图或 UML 活动图 P0
F-PRD-003 原型描述生成 生成页面原型文字描述和交互说明 P1
F-PRD-004 验收标准定义 为每个用户故事生成 Given-When-Then 格式的验收标准 P0
F-PRD-005 PRD 版本管理 支持 PRD 多版本对比和变更历史追溯 P1

4.3 技术方案设计模块

功能 ID 功能名称 描述 优先级
F-ARCH-001 架构模式推荐 根据业务复杂度推荐单体/微服务/Serverless 架构 P0
F-ARCH-002 技术栈选型 基于团队技术栈和项目需求推荐编程语言、框架、中间件 P0
F-ARCH-003 数据库设计 生成 ER 图、建表 SQL、索引优化建议 P0
F-ARCH-004 架构图生成 自动生成系统架构图、部署架构图、数据流图 P1
F-ARCH-005 风险评估 识别技术风险点并提供缓解措施建议 P2

4.4 AI 编码模块

功能 ID 功能名称 描述 优先级
F-CODE-001 后端代码生成 基于 API 协议生成 Controller、Service、DAO 层代码 P0
F-CODE-002 前端代码生成 基于原型规范生成 React/Vue 组件和页面 P0
F-CODE-003 单元测试生成 为生成的代码自动编写单元测试用例 P0
F-CODE-004 代码审查 使用 SonarQube 等工具进行代码质量检查 P1
F-CODE-005 代码重构建议 识别代码异味并提供重构建议 P2

4.5 测试自动化模块

功能 ID 功能名称 描述 优先级
F-TEST-001 单元测试执行 自动运行单元测试并生成覆盖率报告 P0
F-TEST-002 集成测试生成 基于 API 文档生成 Postman/Newman 测试集合 P0
F-TEST-003 UI 测试生成 使用 Playwright/Cypress生成UI自动化测试脚本 P0
F-TEST-004 测试报告生成 聚合各阶段测试结果生成综合质量报告 P1
F-TEST-005 缺陷自动诊断 分析测试失败原因并定位问题代码 P2

4.6 CI/CD 部署模块

功能 ID 功能名称 描述 优先级
F-DEPLOY-001 Jenkins Pipeline 生成 自动生成声明式 Pipeline 脚本 P0
F-DEPLOY-002 Docker 镜像构建 生成 Dockerfile 并构建优化后的镜像 P0
F-DEPLOY-003 K8S 资源配置 生成 Deployment、Service、Ingress、ConfigMap 等 YAML P0
F-DEPLOY-004 多环境管理 支持 dev/test/staging/prod多环境配置和部署 P1
F-DEPLOY-005 灰度发布 支持蓝绿部署、金丝雀发布策略 P2
F-DEPLOY-006 自动回滚 部署失败时自动回滚到上一稳定版本 P1
🎨

原型设计规范

SECTION 05

5.1 原型设计原则

  • 一致性:遵循统一的设计语言和组件规范
  • 可用性:确保用户操作流程直观、高效
  • 可访问性:符合 WCAG 2.1 AA 标准
  • 响应式:适配桌面、平板、手机等多端设备
  • 性能优先:考虑加载速度和渲染性能

5.2 设计规范要素

要素类别 规范要求 示例值
色彩系统 主色、辅助色、中性色、语义色定义 Primary: #1890ff, Success: #52c41a, Warning: #faad14, Error: #f5222d
字体规范 字体家族、字号、字重、行高 Font: 'Inter', -apple-system; H1: 32px/Bold; Body: 14px/Regular
间距系统 基于 8px 栅格系统的间距规范 Spacing: 8px, 16px, 24px, 32px, 48px, 64px
圆角规范 按钮、卡片、输入框等圆角值 Small: 4px, Medium: 8px, Large: 12px, Full: 999px
阴影层级 不同 elevation 的阴影效果 Shadow1: 0 2px 8px rgba(0,0,0,0.1); Shadow3: 0 8px 24px rgba(0,0,0,0.15)
组件库 使用的 UI 组件库及版本 Ant Design 5.x / Element Plus 2.x / Material UI 5.x

5.3 页面原型模板

# 页面原型描述模板(YAML 格式)
page_id: user_management
page_name: 用户管理页面
route: /admin/users
layout: AdminLayout
components:
  - id: search_bar
    type: SearchBar
    position: top
    fields:
      - {name: username, label: 用户名,type: input}
      - {name: role, label: 角色,type: select, options: [admin, user, guest]}
      - {name: status, label: 状态,type: radio, options: [active, inactive]}
  
  - id: action_toolbar
    type: Toolbar
    position: top-right
    actions:
      - {label: 新增用户,icon: plus, action: openModal('create')}
      - {label: 批量删除,icon: delete, action: batchDelete}
      - {label: 导出 Excel, icon: export, action: exportData}
  
  - id: user_table
    type: DataTable
    dataSource: GET /api/v1/users
    columns:
      - {key: id, title: ID, width: 80}
      - {key: username, title: 用户名,width: 150}
      - {key: email, title: 邮箱,width: 200}
      - {key: role, title: 角色,width: 100, render: badge}
      - {key: status, title: 状态,width: 100, render: switch}
      - {key: created_at, title: 创建时间,width: 180}
      - {key: actions, title: 操作,width: 200, render: actionButtons}
    pagination:
      pageSize: 20
      showSizeChanger: true
  
  - id: create_modal
    type: Modal
    title: 新增用户
    form:
      - {field: username, label: 用户名,required: true, validator: minLength(3)}
      - {field: email, label: 邮箱,required: true, validator: email}
      - {field: password, label: 密码,required: true, type: password}
      - {field: role, label: 角色,type: select, required: true}
    submit: POST /api/v1/users
  
interactions:
  - trigger: row.click
    action: navigateTo('/admin/users/{id}')
  - trigger: delete.click
    action: confirmDelete → DELETE /api/v1/users/{id}
  - trigger: status.switch
    action: PATCH /api/v1/users/{id}/status

5.4 交互行为规范

交互类型 触发条件 反馈方式 异常处理
表单提交 用户点击提交按钮 显示 loading 状态 → 成功 Toast/失败 Alert 字段级错误提示 + 聚焦到第一个错误字段
数据删除 用户点击删除按钮 弹出二次确认对话框 取消操作/确认后显示删除结果
列表刷新 下拉刷新或筛选条件变化 显示骨架屏或 loading 动画 超时 30s 显示重试按钮
文件上传 拖拽或选择文件 显示上传进度条 格式错误/大小超限即时提示
模态框打开 点击触发动作 淡入动画 + 背景遮罩 ESC 键或点击遮罩关闭(可配置)
✅ 最佳实践:原型描述应足够详细,使前端 Agent 能够直接生成可运行的代码,减少人工调整成本。建议使用 YAML/JSON 等结构化格式而非纯文本描述。
🔌

API 接口设计规范

SECTION 06

6.1 API 设计原则

  • RESTful 风格:遵循资源导向的 URI 设计和 HTTP 动词语义
  • 版本控制:URI 中包含版本号(/api/v1/resource)
  • 统一响应格式:所有接口返回统一的 JSON 结构
  • 幂等性:PUT/DELETE 操作保证幂等
  • 分页规范:列表接口统一使用 page/size 参数
  • 错误码体系:建立全局统一的错误码字典

6.2 统一响应格式

// 成功响应
{
  "code": 200,
  "message": "success",
  "data": { ... },
  "timestamp": 1710316800000,
  "traceId": "0a1b2c3d4e5f"
}

// 失败响应
{
  "code": 40001,
  "message": "参数验证失败:email 格式不正确",
  "data": null,
  "errors": [
    {"field": "email", "message": "无效的邮箱格式"}
  ],
  "timestamp": 1710316800000,
  "traceId": "0a1b2c3d4e5f"
}

6.3 API 接口示例

GET /api/v1/users

描述:获取用户列表(分页)

请求参数:

{
  "query": {
    "page": 1,
    "size": 20,
    "username": "可选 - 用户名模糊搜索",
    "role": "可选 - 角色过滤",
    "status": "可选 - 状态过滤"
  }
}

响应示例:

{
  "code": 200,
  "data": {
    "list": [
      {"id": 1, "username": "admin", "email": "admin@example.com", "role": "admin"}
    ],
    "pagination": {
      "total": 100,
      "page": 1,
      "size": 20,
      "totalPages": 5
    }
  }
}
POST /api/v1/users

描述:创建新用户

请求体:

{
  "username": "newuser",
  "email": "newuser@example.com",
  "password": "SecurePass123!",
  "role": "user"
}

响应示例:

{
  "code": 201,
  "message": "创建成功",
  "data": {"id": 101, "username": "newuser"}
}
PUT /api/v1/users/{id}

描述:更新用户信息(全量更新)

路径参数:id (用户 ID)

请求体:

{
  "username": "updateduser",
  "email": "updated@example.com",
  "role": "admin",
  "status": "active"
}
DELETE /api/v1/users/{id}

描述:删除用户

路径参数:id (用户 ID)

响应示例:

{
  "code": 200,
  "message": "删除成功"
}

6.4 OpenAPI 规范模板

# OpenAPI 3.0 规范示例
openapi: 3.0.3
info:
  title: 用户管理系统 API
  version: 1.0.0
  description: 端到端研发自动化系统的用户管理模块

servers:
  - url: https://api.example.com/api/v1
    description: 生产环境
  - url: https://test-api.example.com/api/v1
    description: 测试环境

paths:
  /users:
    get:
      summary: 获取用户列表
      tags: [Users]
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: size
          in: query
          schema:
            type: integer
            default: 20
            maximum: 100
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserListResponse'
    
    post:
      summary: 创建用户
      tags: [Users]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserRequest'
      responses:
        '201':
          description: 创建成功

components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
        username:
          type: string
        email:
          type: string
          format: email
        role:
          type: string
          enum: [admin, user, guest]
        status:
          type: string
          enum: [active, inactive]
🏗️

技术方案设计(前后端)

SECTION 07

7.1 后端技术方案

技术分层 技术选型 说明
编程语言 Java 17 / Python 3.11 / Node.js 20 根据团队技术栈选择
Web 框架 Spring Boot 3.x / FastAPI / NestJS 提供 RESTful API 服务
ORM 框架 MyBatis-Plus / SQLAlchemy / Prisma 数据库对象关系映射
数据库 MySQL 8.0 / PostgreSQL 15 关系型数据存储
缓存 Redis 7.x 会话管理、热点数据缓存
消息队列 RabbitMQ / Kafka 异步任务处理、事件驱动
认证授权 Spring Security + JWT / Auth0 用户认证和权限控制
API 文档 Swagger/OpenAPI 3.0 自动生成 API 文档
日志 Logback + ELK Stack 集中式日志管理
监控 Prometheus + Grafana 系统指标监控和告警

7.2 后端目录结构规范

src/
├── controller/           # 控制器层(HTTP 接口)
│   ├── UserController.java
│   └── AuthController.java
├── service/              # 服务层(业务逻辑)
│   ├── UserService.java
│   └── impl/
│       └── UserServiceImpl.java
├── repository/           # 数据访问层
│   ├── UserRepository.java
│   └── mapper/
│       └── UserMapper.xml
├── entity/               # 实体类
│   ├── User.java
│   └── Role.java
├── dto/                  # 数据传输对象
│   ├── request/
│   │   └── CreateUserRequest.java
│   └── response/
│       └── UserResponse.java
├── config/               # 配置类
│   ├── SecurityConfig.java
│   └── SwaggerConfig.java
├── exception/            # 异常处理
│   ├── GlobalExceptionHandler.java
│   └── BusinessException.java
├── common/               # 公共组件
│   ├── constants/
│   ├── utils/
│   └── enums/
└── resources/
    ├── application.yml
    └── db/migration/     # Flyway/Liquibase 迁移脚本

7.3 前端技术方案

技术分层 技术选型 说明
前端框架 React 18 / Vue 3 / Angular 17 组件化开发框架
开发语言 TypeScript 5.x 类型安全的 JavaScript 超集
构建工具 Vite 5.x / Webpack 5 快速开发和打包
状态管理 Zustand / Redux Toolkit / Pinia 全局状态管理
UI 组件库 Ant Design 5 / Element Plus / MUI 企业级 UI 组件库
路由管理 React Router 6 / Vue Router 4 前端路由和权限控制
HTTP 客户端 Axios / TanStack Query API 请求和数据缓存
表单处理 React Hook Form / VeeValidate 表单验证和管理
CSS 方案 Tailwind CSS / Styled Components 样式管理和原子化 CSS
测试框架 Vitest + Testing Library 单元测试和组件测试
E2E 测试 Playwright / Cypress 端到端自动化测试

7.4 前端目录结构规范

src/
├── components/           # 通用组件
│   ├── common/
│   │   ├── Button.tsx
│   │   ├── Modal.tsx
│   │   └── Table.tsx
│   └── business/
│       ├── UserForm.tsx
│       └── UserTable.tsx
├── pages/                # 页面组件
│   ├── users/
│   │   ├── UserList.tsx
│   │   └── UserDetail.tsx
│   └── login/
│       └── LoginPage.tsx
├── hooks/                # 自定义 Hooks
│   ├── useAuth.ts
│   └── useUsers.ts
├── store/                # 状态管理
│   ├── authStore.ts
│   └── userStore.ts
├── services/             # API 服务
│   ├── api.ts
│   ├── userService.ts
│   └── auth.service.ts
├── types/                # TypeScript 类型定义
│   ├── user.ts
│   └── api.d.ts
├── utils/                # 工具函数
│   ├── request.ts
│   └── validators.ts
├── styles/               # 全局样式
│   ├── variables.css
│   └── global.css
├── assets/               # 静态资源
│   ├── images/
│   └── icons/
├── router/               # 路由配置
│   └── index.tsx
├── App.tsx
└── main.tsx

7.5 数据库设计规范

规范项 要求 示例
命名规范 小写字母 + 下划线,复数形式 users, user_profiles
主键 使用 BIGINT 自增或 UUID id BIGINT PRIMARY KEY AUTO_INCREMENT
时间字段 统一使用 created_at, updated_at created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
软删除 使用 deleted_at 字段标记 deleted_at TIMESTAMP NULL
索引 外键、查询字段、排序字段建索引 INDEX idx_username (username)
字符集 统一使用 utf8mb4 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

7.6 系统架构图

📱 客户端层
Web Browser / Mobile App / Third-party Systems
🌐 网关层
Nginx / Kong API Gateway (负载均衡、限流、鉴权)
⚙️ 应用服务层
Spring Boot / FastAPI Microservices (Docker 容器化)
🗄️ 数据层
MySQL Cluster
Redis Cache
📨 消息层
RabbitMQ/Kafka
Event Bus
📊 监控层
Prometheus
ELK Stack
🧪

测试策略与验收标准

SECTION 08

8.1 测试金字塔模型

E2E 测试
10% 覆盖率
集成测试
20% 覆盖率
单元测试
70% 覆盖率 (目标≥80%)

8.2 单元测试规范

项目 规范要求
测试框架 JUnit 5 (Java) / pytest (Python) / Jest (JS)
Mock 工具 Mockito / unittest.mock / Jest Mock
覆盖率要求 行覆盖率≥80%, 分支覆盖率≥70%
命名规范 should_预期行为_当条件下 (should_returnUser_whenIdValid)
AAA 模式 Arrange(准备) → Act(执行) → Assert(断言)
测试隔离 每个测试独立,不依赖其他测试状态

8.3 单元测试示例

// Java + JUnit 5 + Mockito 示例
class UserServiceTest {
    
    @Mock
    private UserRepository userRepository;
    
    @InjectMocks
    private UserService userService;
    
    @Test
    void should_returnUser_when_validIdProvided() {
        // Arrange
        Long userId = 1L;
        User mockUser = new User(userId, "admin", "admin@example.com");
        when(userRepository.findById(userId)).thenReturn(Optional.of(mockUser));
        
        // Act
        User result = userService.getUserById(userId);
        
        // Assert
        assertNotNull(result);
        assertEquals("admin", result.getUsername());
        verify(userRepository, times(1)).findById(userId);
    }
    
    @Test
    void should_throwException_when_userNotFound() {
        // Arrange
        Long userId = 999L;
        when(userRepository.findById(userId)).thenReturn(Optional.empty());
        
        // Act & Assert
        assertThrows(UserNotFoundException.class, () -> {
            userService.getUserById(userId);
        });
    }
}

8.4 集成测试规范

测试类型 测试工具 测试范围
API 集成测试 Postman + Newman / RestAssured 验证 API 接口功能和数据一致性
数据库集成测试 Testcontainers / H2 Database 验证数据库操作和事务管理
服务间集成 WireMock / Mountebank 模拟外部服务依赖
消息队列测试 Embedded RabbitMQ / Kafka 验证消息生产和消费

8.5 UI 自动化测试规范

项目 规范要求
测试框架 Playwright / Cypress / Selenium
元素定位 优先使用 data-testid 属性
等待策略 使用智能等待(auto-wait),避免硬编码 sleep
测试数据 使用 Factory 模式生成测试数据
截图对比 关键页面进行视觉回归测试
跨浏览器 Chrome, Firefox, Safari, Edge
响应式测试 Desktop (1920x1080), Tablet (768x1024), Mobile (375x667)

8.6 UI 自动化测试示例

// Playwright + TypeScript 示例
import { test, expect } from '@playwright/test';

test.describe('User Management', () => {
  
  test.beforeEach(async ({ page }) => {
    // 登录
    await page.goto('/login');
    await page.fill('[data-testid="username"]', 'admin');
    await page.fill('[data-testid="password"]', 'password123');
    await page.click('[data-testid="login-btn"]');
    await expect(page).toHaveURL('/dashboard');
  });

  test('should display user list', async ({ page }) => {
    await page.goto('/admin/users');
    
    // 验证表格存在
    await expect(page.locator('[data-testid="user-table"]')).toBeVisible();
    
    // 验证至少有一行数据
    const rows = page.locator('[data-testid="user-row"]');
    await expect(rows.count()).toBeGreaterThan(0);
  });

  test('should create new user', async ({ page }) => {
    await page.goto('/admin/users');
    
    // 点击新增按钮
    await page.click('[data-testid="add-user-btn"]');
    
    // 填写表单
    await page.fill('[data-testid="username-input"]', 'testuser');
    await page.fill('[data-testid="email-input"]', 'test@example.com');
    await page.selectOption('[data-testid="role-select"]', 'user');
    
    // 提交表单
    await page.click('[data-testid="submit-btn"]');
    
    // 验证成功提示
    await expect(page.locator('.toast-success')).toContainText('创建成功');
    
    // 验证新用户在列表中
    await expect(page.locator('text=testuser')).toBeVisible();
  });

  test('should delete user', async ({ page }) => {
    await page.goto('/admin/users');
    
    // 点击删除按钮
    await page.click('[data-testid="delete-user-1"]');
    
    // 确认删除
    await page.click('[data-testid="confirm-delete"]');
    
    // 验证删除成功
    await expect(page.locator('.toast-success')).toContainText('删除成功');
    await expect(page.locator('text=testuser')).not.toBeVisible();
  });
});

8.7 验收标准清单

  • 所有 P0 级别用户故事的验收标准 100% 通过
  • 单元测试覆盖率≥80%(行覆盖),≥70%(分支覆盖)
  • 集成测试通过率 100%
  • UI 自动化测试通过率 100%
  • 无 Critical/Blocker 级别的 Bug
  • 性能指标满足要求(P95 响应时间<500ms)
  • 安全扫描无高危漏洞
  • 兼容性测试通过(主流浏览器 + 移动端)
  • 文档完整(API 文档、部署文档、用户手册)
  • 代码审查通过(无 Major 以上问题)
🚀

CI/CD 与自动化部署流程

SECTION 09

9.1 CI/CD 流水线设计

代码提交
代码审查
单元测试
构建镜像
集成测试
部署测试
UI 验收
生产发布

9.2 Jenkins Pipeline 模板

// Jenkins Declarative Pipeline
pipeline {
    agent any
    
    environment {
        DOCKER_REGISTRY = 'registry.example.com'
        IMAGE_NAME = 'myapp-backend'
        KUBE_CONFIG = credentials('kubeconfig')
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/org/repo.git'
            }
        }
        
        stage('Code Review') {
            steps {
                sh 'sonar-scanner -Dsonar.projectKey=myapp'
                script {
                    def qualityGate = waitForQualityGate()
                    if (qualityGate.status != 'OK') {
                        error "Pipeline aborted due to quality gate failure: ${qualityGate.status}"
                    }
                }
            }
        }
        
        stage('Unit Test') {
            steps {
                sh 'mvn test -DskipITs'
                junit 'target/surefire-reports/*.xml'
                publishCoverage adapters: [jacocoAdapter('target/jacoco.exec')]
            }
        }
        
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}")
                }
            }
        }
        
        stage('Push Image') {
            steps {
                script {
                    docker.withRegistry("https://${DOCKER_REGISTRY}", 'docker-credentials') {
                        docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}").push()
                    }
                }
            }
        }
        
        stage('Deploy to Test') {
            steps {
                sh """
                    kubectl --namespace=test set image deployment/myapp \
                    myapp=${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}
                    kubectl --namespace=test rollout status deployment/myapp
                """
            }
        }
        
        stage('Integration Test') {
            steps {
                sh 'newman run tests/postman_collection.json -e tests/test_environment.json'
            }
        }
        
        stage('UI Automation Test') {
            steps {
                sh 'npx playwright test --reporter=html'
                publishHTML([
                    allowMissing: false,
                    alwaysLinkToLastBuild: true,
                    keepAllHistory: true,
                    reportDir: 'playwright-report',
                    reportFiles: 'index.html',
                    reportName: 'Playwright Report'
                ])
            }
        }
        
        stage('Deploy to Production') {
            when {
                branch 'main'
                expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' }
            }
            steps {
                input message: 'Deploy to production?', ok: 'Deploy'
                sh """
                    kubectl --namespace=production set image deployment/myapp \
                    myapp=${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}
                    kubectl --namespace=production rollout status deployment/myapp
                """
            }
        }
    }
    
    post {
        always {
            cleanWs()
        }
        success {
            slackSend channel: '#deployments', color: 'good', message: "Build ${BUILD_NUMBER} succeeded!"
        }
        failure {
            slackSend channel: '#deployments', color: 'danger', message: "Build ${BUILD_NUMBER} failed!"
        }
    }
}

9.3 Dockerfile 模板

# 多阶段构建 - Java Spring Boot 示例
# Stage 1: Build
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# Stage 2: Runtime
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app

# 创建非 root 用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 复制构建产物
COPY --from=builder /app/target/*.jar app.jar

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
  CMD wget -qO- http://localhost:8080/actuator/health || exit 1

# 切换用户
USER appuser

EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

9.4 K8S 资源配置模板

# Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: production
  labels:
    app: myapp
    version: v1.0.0
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: registry.example.com/myapp-backend:latest
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "production"
        - name: DB_HOST
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: host
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /actuator/health/liveness
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health/readiness
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 5
---
# Kubernetes Service
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  namespace: production
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP
---
# Kubernetes Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: production
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - myapp.example.com
    secretName: myapp-tls
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

9.5 KubeSphere 部署流程

步骤 操作 说明
1 创建项目(Namespace) 在 KubeSphere 控制台创建 dev/test/prod 项目空间
2 配置镜像仓库凭证 添加 Docker Registry 密钥用于拉取私有镜像
3 创建工作负载 导入 Deployment YAML 或可视化创建
4 配置服务发现 创建 Service 和 Ingress 暴露应用
5 配置 ConfigMap/Secret 管理应用配置和敏感信息
6 设置 HP A 配置水平 Pod 自动伸缩(CPU/Memory 阈值)
7 启用监控告警 集成 Prometheus + Grafana 监控面板
8 配置日志收集 集成 Fluent Bit + Elasticsearch 日志系统
✅ 部署最佳实践:采用 GitOps 模式,将所有 K8S 资源配置纳入版本控制,使用 ArgoCD 实现声明式持续部署。
🤝

人机协同机制说明

SECTION 10

10.1 人机协同设计原则

  • AI 主导执行:常规任务由 AI Agent 自主完成,提高效率
  • 人类监督决策:关键节点设置人工审核点,控制风险
  • 透明可解释:AI 决策过程可追溯、可理解
  • 灵活可干预:人类可随时介入并接管控制权
  • 持续学习:从人类反馈中优化 AI 行为

10.2 人机协同节点矩阵

研发阶段 AI 自动化程度 人工介入点 介入方式
需求分析 70% 自动解析 需求优先级确认、模糊需求澄清 在线评审会议 + 批注
PRD 设计 80% 自动生成 PRD 终稿审批、验收标准确认 电子签名审批流
技术方案 60% 自动设计 架构选型评审、技术风险评估 架构委员会投票
API 设计 90% 自动生成 接口变更评审、Breaking Change 确认 API 评审会议
代码开发 85% 自动生成 Code Review、复杂逻辑审核 GitHub PR Review
测试执行 95% 自动执行 测试用例评审、缺陷定级 测试管理平台
部署发布 80% 自动部署 生产环境发布审批、紧急回滚决策 一键审批 + 电话确认

10.3 审批工作流设计

AI 完成任务
提交审批请求
通知审批人
审批人审核
通过?
进入下一环节
驳回修改

10.4 人机交互界面规范

界面类型 功能描述 技术实现
任务看板 展示 AI Agent 当前任务状态和进度 React + WebSocket 实时更新
审批中心 待审批事项列表和详情查看 Vue + Element Plus 表单
对话界面 与 AI Agent 自然语言交互 Chat UI + OpenClaw IM 集成
差异对比 AI 生成内容与人工修改对比 Monaco Editor Diff View
追溯视图 需求 - 设计 - 代码 - 测试双向追溯 D3.js 知识图谱可视化
质量仪表盘 实时展示代码质量、测试覆盖率等指标 Grafana 嵌入式面板

10.5 异常处理与升级机制

⚠️ 异常分级处理:
异常级别 定义 处理方式 响应时限
L1 - 提示 AI 可自动处理的轻微问题 记录日志,继续执行 无需人工介入
L2 - 警告 需要人工确认的非阻塞问题 发送通知,等待确认 4 小时内响应
L3 - 错误 阻塞流程的关键问题 暂停流程,立即通知负责人 30 分钟内响应
L4 - 严重 影响生产环境的重大问题 触发应急预案,升级至管理层 15 分钟内响应

10.6 反馈学习循环

AI 执行任务
人类审核结果
提供反馈(通过/修改/驳回)
反馈数据入库
微调 AI 模型
AI 能力提升

10.7 人机协同最佳实践

  • 设置合理的自动化阈值,避免过度依赖 AI
  • 建立清晰的职责边界,明确 AI 和人类的分工
  • 定期回顾人机协同效果,持续优化流程
  • 为团队成员提供 AI 工具使用培训
  • 鼓励人类工程师专注于创造性、战略性工作
  • 建立 AI 失误的容错机制和快速恢复流程
  • 保持对 AI 输出的批判性思维,不盲目信任
📚

附录与参考资料

APPENDIX

A. 术语表

术语 英文 定义
PRD Product Requirement Document 产品需求文档,描述产品功能、业务逻辑、用户体验等
OpenClaw - 开源任务编排引擎,用于协调多个 AI Agent 协同工作
Claude Code - Anthropic 公司开发的 AI 编程助手
CI/CD Continuous Integration/Continuous Deployment 持续集成/持续部署,自动化软件交付流程
K8S Kubernetes 容器编排平台,用于自动化容器应用的部署、扩展和管理
Agent Intelligent Agent 智能代理,能够感知环境并采取行动的自主实体

B. 参考文档

  • IEEE 830-1998 软件需求规格说明标准
  • Google SRE Handbook - https://sre.google/sre-book/table-of-contents/
  • The Twelve-Factor App - https://12factor.net/
  • OpenAPI Specification 3.0 - https://swagger.io/specification/
  • Kubernetes 官方文档 - https://kubernetes.io/docs/
  • Jenkins Pipeline 文档 - https://www.jenkins.io/doc/book/pipeline/
  • Playwright 测试框架 - https://playwright.dev/
  • 敏捷开发用户故事指南 - https://www.atlassian.com/agile/project-management/user-stories

C. 模板使用说明

📖 使用指南:
  1. 根据具体项目特点裁剪本模板内容
  2. 填充实际的业务需求和技术细节
  3. 组织相关干系人评审 PRD 文档
  4. 在研发过程中持续更新和维护
  5. 项目结束后复盘模板适用性并优化