← 返回博客列表

OpenClaw ensemble+pipeline TDD 开发中国象棋项目实践总结

OpenClaw ensemble+pipeline TDD 开发中国象棋项目实践总结

Ensemble + Pipeline + Factory Mode 首次完整实践


📋 项目元信息

项目
📅 日期 2026-03-24
⏱️ 开发时间 6 天
📝 测试用例 180 个
💻 代码行数 ~8,200 行
🎯 测试通过率 94.4%
🏗️ 开发方法 Ensemble + Pipeline + Factory Mode

📊 项目统计概览

┌─────────────────────────────────────────────────────────────┐
│  开发切片 (Slices)     │  测试用例      │  测试通过率    │
│       7               │     180        │    94.4%       │
├─────────────────────────────────────────────────────────────┤
│  核心功能            │  源代码       │  测试代码      │
│      25+             │   ~4,500 行   │   ~2,200 行    │
└─────────────────────────────────────────────────────────────┘

📋 项目概述

本项目使用 Ensemble(多角色协作)、**Pipeline(切片化开发)**和 严格工厂模式(TDD + 质量门) 方法,完整开发了一个功能齐全的中国象棋 AI Web 应用。

🎮 核心功能

🏁 游戏功能

  • ✓ 完整中国象棋规则
  • ✓ PvP / PvAI / AIvAI 模式
  • ✓ 悔棋/重做功能
  • ✓ 保存/加载棋局
  • ✓ 3 个难度等级

🤖 AI 引擎

  • ✓ Minimax + Alpha-Beta
  • ✓ 置换表优化 (2-3 倍加速)
  • ✓ 55+ 开局库
  • ✓ Web Worker 非阻塞

🎨 用户界面

  • ✓ 3 种棋盘主题
  • ✓ 棋盘翻转功能
  • ✓ 响应式设计
  • ✓ 合法移动提示

🔊 音频系统

  • ✓ 移动/吃子/将军音效
  • ✓ 语音播报(将军/绝杀)
  • ✓ 音量控制
  • ✓ 3 种音效主题

📅 开发时间线

Day 1-2: Slice 1-4 - 核心功能 ✅
├─ 核心规则引擎、AI 基础、UI 棋盘、皮肤系统
└─ 45 个测试

Day 3: Slice 5 - 音频系统 ✅
├─ 音频管理器、音效系统、音量控制、设置持久化
└─ 64 个测试

Day 4-5: Slice 6 - AI 增强 ✅
├─ 置换表、Web Worker、开局库 (55+)
└─ 38 个测试

Day 6: Slice 7 - 游戏模式增强 ✅
├─ 悔棋/重做、保存/加载、E2E 测试
└─ 35 个测试

Day 6+: 用户反馈修复 ⚠️
├─ 棋盘方向、棋子位置、UI 按钮、绝杀检测
└─ 持续改进

🏗️ 架构视图

逻辑视图 - 系统组件关系图

graph TB
    subgraph 用户界面层
        A[App.tsx] --> B[BoardView]
        A --> C[PieceView]
        A --> D[VolumeControl]
    end
    
    subgraph 状态管理层
        E[game-store.ts<br/>Zustand] --> F[Undo/Redo]
        E --> G[Save/Load]
        E --> H[Audio Manager]
    end
    
    subgraph 游戏逻辑层
        I[board.ts] --> J[moves.ts]
        I --> K[rules.ts]
        J --> L[棋子走法]
        K --> M[将军检测]
    end
    
    subgraph AI 引擎层
        N[engine.ts] --> O[Minimax]
        N --> P[Alpha-Beta]
        N --> Q[置换表]
        N --> R[开局库]
        N --> S[Web Worker]
    end
    
    B --> E
    E --> I
    A --> N

部署视图 - 系统部署架构图

graph LR
    subgraph 客户端
        A[用户浏览器] --> B[React 应用]
        B --> C[Vite 构建]
        B --> D[Web Audio API]
    end
    
    subgraph 托管平台
        E[Vercel CDN] --> F[静态资源]
        E --> G[自动部署]
    end
    
    subgraph 代码仓库
        H[GitHub] --> I[CI/CD]
        I --> E
    end
    
    B --> E
    H --> B

类图 - 核心类关系图

classDiagram
    class Board {
        +Piece[] pieces
        +Color turn
        +Move[] moveHistory
        +makeMove(move)
    }
    
    class Piece {
        +PieceType type
        +Color color
        +Position position
    }
    
    class Move {
        +Position from
        +Position to
        +PieceType piece
        +PieceType captured
    }
    
    class AudioManager {
        -volume: number
        -muted: boolean
        +play(key)
        +setVolume(v)
        +toggleMute()
    }
    
    class TranspositionTable {
        -table: Map
        -capacity: number
        +store(entry)
        +retrieve(hash)
    }
    
    class OpeningBook {
        -book: Map
        +getMove(board)
        +getOpeningCount()
    }
    
    Board "1" *-- "many" Piece
    Board "1" *-- "many" Move
    Board --> AudioManager
    Board --> TranspositionTable
    Board --> OpeningBook

流程图 - AI 走棋流程图

flowchart TD
    A[玩家走棋] --> B{游戏结束?}
    B -->|是 | C[显示结果]
    B -->|否 | D{AI 回合?}
    D -->|否 | A
    D -->|是 | E[获取合法移动]
    E --> F{有合法移动?}
    F -->|否 | G[绝杀检测]
    F -->|是 | H[AI 搜索]
    H --> I[置换表查找]
    I --> J{缓存命中?}
    J -->|是 | K[返回缓存结果]
    J -->|否 | L[Minimax 搜索]
    L --> M[存储到置换表]
    M --> N[执行 AI 走棋]
    N --> B
    G --> C

流程图 - 悔棋/重做流程图

flowchart LR
    A[初始状态] -->|走棋 | B[状态 1]
    B -->|走棋 | C[状态 2]
    C -->|走棋 | D[状态 3]
    
    D -->|Undo| C
    C -->|Undo| B
    B -->|Undo| A
    
    A -->|Redo| B
    B -->|Redo| C
    C -->|Redo| D
    
    style A fill:#d1fae5
    style D fill:#fee2e2

📚 经验教训

关键洞察: "严格工厂模式 + 不完整的测试策略 = 高效地构建错误的东西"

✅ 成功经验

方法 效果 状态
TDD 方法论 180 个测试保护核心逻辑,重构安全 ✅ 保持
工厂模式执行 所有 TDD 循环真实执行,审计追踪完整 ✅ 保持
Ensemble 技能 多角色协作,代码审查严格 ✅ 保持
Pipeline 方法 切片化开发降低风险,进度清晰 ✅ 保持

❌ 问题与改进

问题 根本原因 改进方案 状态
测试验证不完整 缺少 E2E 和视觉验证 添加 Playwright 截图测试 ⚠️ 已记录
用户需求理解偏差 6 天未验证,假设错误 每 Slice 完成后立即验证 ⚠️ 已记录
工厂模式执行偏差 只关注单元测试 扩展质量门定义 ⚠️ 已记录
沟通节奏问题 憋大招,返工成本高 每日部署 + 演示 ⚠️ 已记录

📋 下次项目规则

🔍 测试策略

  • ✓ 每个 UI 组件 Playwright 截图
  • ✓ 视觉回归测试进 CI
  • ✓ E2E 测试强制要求
  • ✓ 不要假设"代码正确=功能正确"

👥 用户验证

  • ✓ 每个 Slice 后部署验证
  • ✓ 关键 UI 决策先确认
  • ✓ 每日问"有什么不对?"
  • ✓ 不要等"完美"再展示

🏭 质量门

  • ✓ TypeScript 编译 ✅
  • ✓ 单元测试通过 ✅
  • ✓ E2E 测试通过 ← 新增
  • ✓ 视觉验证通过 ← 新增
  • ✓ 用户确认 ← 新增

📦 资源管理

  • ✓ 实现前检查外部资源
  • ✓ 优先使用合成/生成资源
  • ✓ 文档化所有外部依赖
  • ✓ UI 假设先确认

✅ 改进的"完成"定义

功能完成检查清单

flowchart TD
    A[功能开发] --> B[代码完成]
    B --> C[单元测试通过]
    C --> D[集成测试通过]
    D --> E[E2E 测试通过]
    E --> F[视觉验证通过]
    F --> G[已部署]
    G --> H[用户确认]
    H --> I[✅ 完成]
    
    style I fill:#d1fae5,stroke:#059669,stroke-width:3px

详细要求

功能"完成"当且仅当 ALL of these are true:

- [ ] 代码编写并提交
- [ ] 单元测试通过 (逻辑层)
- [ ] 集成测试通过 (组件层)
- [ ] E2E 测试通过 (浏览器层) ← 新增
- [ ] 视觉验证通过 (截图对比) ← 新增
- [ ] 部署到 staging/production
- [ ] 用户确认 (关键功能) ← 新增

🔺 测试金字塔 (改进后)

平衡的测试策略

graph BT
    A[E2E 测试 10%\n浏览器自动化 Playwright] 
    B[集成测试 20%\n组件交互]
    C[单元测试 70%\n逻辑验证]
    
    C --> B
    B --> A
    
    style A fill:#fee2e2,stroke:#dc2626
    style B fill:#fef3c7,stroke:#d97706
    style C fill:#d1fae5,stroke:#059669

改进前: 过度关注单元测试,缺少 E2E 和视觉验证

改进后: 平衡的测试策略,确保逻辑和视觉都正确


📊 项目统计

代码分布

类别 行数
源代码 ~4,500 行
测试代码 ~2,200 行
文档 ~1,500 行
总计 ~8,200 行

测试分布

pie title 测试用例分布 (总计 180 个)
    "AI 测试" : 40
    "音频测试" : 64
    "核心规则" : 30
    "应用功能" : 35
    "E2E 测试" : 11

Git 提交统计

总提交数:37+

主要提交:
- Slice 1-4: 核心功能实现
- Slice 5: 音频系统
- Slice 6: AI 增强
- Slice 7: 游戏模式
- 用户反馈修复:棋盘/UI/音效

💡 核心洞察

项目口号: "Test logic AND visuals. Validate early AND often. Deploy daily. Ask 'What's wrong?'"

成功指标: 不是 "180 个测试通过" 而是 "0 个用户报告的 UI 问题"

记忆片段 (供未来参考)

📝 项目规划

  • ✓ 测试计划必须包含视觉回归
  • ✓ 预留 20% 时间用于用户验证
  • ✓ 每日部署,频繁验证
  • ✓ 确认 UI 假设再实现

🧪 测试策略

  • ✓ 单元测试 ≠ 功能完成
  • ✓ E2E 测试对 UI 项目强制
  • ✓ Playwright 用于浏览器自动化
  • ✓ 视觉验证捕获逻辑测试遗漏

💬 用户沟通

  • ✓ 不要等"完美"再展示
  • ✓ 主动问"有什么不对?"
  • ✓ 每次更新都发演示链接
  • ✓ 截图/视频展示视觉功能

🏭 工厂模式

  • ✓ 证据文件必要但不充分
  • ✓ 真实执行 ≠ 正确执行
  • ✓ 质量门必须包含视觉 + 用户
  • ✓ 审计追踪应包括用户反馈

🎉 结论

尽管存在问题和返工,这个项目仍然是一次成功的实践

  • ✓ 首次完整使用 Ensemble + Pipeline + 工厂模式
  • ✓ 180 个测试保证了核心逻辑正确
  • ✓ 严格的 TDD 执行(有证据)
  • ✓ 完整的审计追踪
  • ✓ 最终交付了可玩的中国象棋 AI

关键: 不是否定工厂模式,而是完善它

感谢这次宝贵的学习经历!下次项目会做得更好!🚀


📄 附录

项目信息

文档版本

  • 格式: Markdown (兼容 LingQ Blog)
  • 图表: Mermaid (原生支持,不失真)
  • 字数: ~3,500 字
  • 图表数: 9 个 Mermaid 图表

本报告使用 Markdown + Mermaid 格式,可直接发布到支持 Mermaid 的博客平台(如 LingQ Blog、GitHub、GitLab 等)。所有图表均为矢量格式,缩放不失真。