claudecode-omc 4.7.4 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +50 -0
- package/agents/test-engineer.md +74 -0
- package/bridge/cli.cjs +9335 -117
- package/dist/cli/index.js +201 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/testing/analyzers/complexity.d.ts +18 -0
- package/dist/testing/analyzers/complexity.d.ts.map +1 -0
- package/dist/testing/analyzers/complexity.js +121 -0
- package/dist/testing/analyzers/complexity.js.map +1 -0
- package/dist/testing/analyzers/coverage.d.ts +13 -0
- package/dist/testing/analyzers/coverage.d.ts.map +1 -0
- package/dist/testing/analyzers/coverage.js +99 -0
- package/dist/testing/analyzers/coverage.js.map +1 -0
- package/dist/testing/analyzers/quality-scorer.d.ts +8 -0
- package/dist/testing/analyzers/quality-scorer.d.ts.map +1 -0
- package/dist/testing/analyzers/quality-scorer.js +128 -0
- package/dist/testing/analyzers/quality-scorer.js.map +1 -0
- package/dist/testing/analyzers/types.d.ts +56 -0
- package/dist/testing/analyzers/types.d.ts.map +1 -0
- package/dist/testing/analyzers/types.js +2 -0
- package/dist/testing/analyzers/types.js.map +1 -0
- package/dist/testing/cli/agent-integration.d.ts +20 -0
- package/dist/testing/cli/agent-integration.d.ts.map +1 -0
- package/dist/testing/cli/agent-integration.js +60 -0
- package/dist/testing/cli/agent-integration.js.map +1 -0
- package/dist/testing/cli/commands.d.ts +100 -0
- package/dist/testing/cli/commands.d.ts.map +1 -0
- package/dist/testing/cli/commands.js +250 -0
- package/dist/testing/cli/commands.js.map +1 -0
- package/dist/testing/cli/ultraqa-integration.d.ts +13 -0
- package/dist/testing/cli/ultraqa-integration.d.ts.map +1 -0
- package/dist/testing/cli/ultraqa-integration.js +68 -0
- package/dist/testing/cli/ultraqa-integration.js.map +1 -0
- package/dist/testing/detectors/go.d.ts +3 -0
- package/dist/testing/detectors/go.d.ts.map +1 -0
- package/dist/testing/detectors/go.js +38 -0
- package/dist/testing/detectors/go.js.map +1 -0
- package/dist/testing/detectors/index.d.ts +8 -0
- package/dist/testing/detectors/index.d.ts.map +1 -0
- package/dist/testing/detectors/index.js +46 -0
- package/dist/testing/detectors/index.js.map +1 -0
- package/dist/testing/detectors/package-json.d.ts +3 -0
- package/dist/testing/detectors/package-json.d.ts.map +1 -0
- package/dist/testing/detectors/package-json.js +52 -0
- package/dist/testing/detectors/package-json.js.map +1 -0
- package/dist/testing/detectors/python.d.ts +3 -0
- package/dist/testing/detectors/python.d.ts.map +1 -0
- package/dist/testing/detectors/python.js +37 -0
- package/dist/testing/detectors/python.js.map +1 -0
- package/dist/testing/detectors/rust.d.ts +3 -0
- package/dist/testing/detectors/rust.d.ts.map +1 -0
- package/dist/testing/detectors/rust.js +39 -0
- package/dist/testing/detectors/rust.js.map +1 -0
- package/dist/testing/generators/contract.d.ts +14 -0
- package/dist/testing/generators/contract.d.ts.map +1 -0
- package/dist/testing/generators/contract.js +163 -0
- package/dist/testing/generators/contract.js.map +1 -0
- package/dist/testing/generators/e2e.d.ts +34 -0
- package/dist/testing/generators/e2e.d.ts.map +1 -0
- package/dist/testing/generators/e2e.js +74 -0
- package/dist/testing/generators/e2e.js.map +1 -0
- package/dist/testing/generators/go.d.ts +12 -0
- package/dist/testing/generators/go.d.ts.map +1 -0
- package/dist/testing/generators/go.js +144 -0
- package/dist/testing/generators/go.js.map +1 -0
- package/dist/testing/generators/nodejs.d.ts +12 -0
- package/dist/testing/generators/nodejs.d.ts.map +1 -0
- package/dist/testing/generators/nodejs.js +37 -0
- package/dist/testing/generators/nodejs.js.map +1 -0
- package/dist/testing/generators/python.d.ts +12 -0
- package/dist/testing/generators/python.d.ts.map +1 -0
- package/dist/testing/generators/python.js +163 -0
- package/dist/testing/generators/python.js.map +1 -0
- package/dist/testing/generators/react.d.ts +12 -0
- package/dist/testing/generators/react.d.ts.map +1 -0
- package/dist/testing/generators/react.js +31 -0
- package/dist/testing/generators/react.js.map +1 -0
- package/dist/testing/generators/rust.d.ts +11 -0
- package/dist/testing/generators/rust.d.ts.map +1 -0
- package/dist/testing/generators/rust.js +138 -0
- package/dist/testing/generators/rust.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +11 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/integrations/autopilot.d.ts +42 -0
- package/dist/testing/integrations/autopilot.d.ts.map +1 -0
- package/dist/testing/integrations/autopilot.js +55 -0
- package/dist/testing/integrations/autopilot.js.map +1 -0
- package/dist/testing/integrations/cicd.d.ts +26 -0
- package/dist/testing/integrations/cicd.d.ts.map +1 -0
- package/dist/testing/integrations/cicd.js +162 -0
- package/dist/testing/integrations/cicd.js.map +1 -0
- package/dist/testing/integrations/giskard/behavioral-tests.d.ts +4 -0
- package/dist/testing/integrations/giskard/behavioral-tests.d.ts.map +1 -0
- package/dist/testing/integrations/giskard/behavioral-tests.js +66 -0
- package/dist/testing/integrations/giskard/behavioral-tests.js.map +1 -0
- package/dist/testing/integrations/giskard/types.d.ts +35 -0
- package/dist/testing/integrations/giskard/types.d.ts.map +1 -0
- package/dist/testing/integrations/giskard/types.js +2 -0
- package/dist/testing/integrations/giskard/types.js.map +1 -0
- package/dist/testing/integrations/promptfoo/config-generator.d.ts +5 -0
- package/dist/testing/integrations/promptfoo/config-generator.d.ts.map +1 -0
- package/dist/testing/integrations/promptfoo/config-generator.js +44 -0
- package/dist/testing/integrations/promptfoo/config-generator.js.map +1 -0
- package/dist/testing/integrations/promptfoo/types.d.ts +36 -0
- package/dist/testing/integrations/promptfoo/types.d.ts.map +1 -0
- package/dist/testing/integrations/promptfoo/types.js +2 -0
- package/dist/testing/integrations/promptfoo/types.js.map +1 -0
- package/dist/testing/integrations/ralph.d.ts +65 -0
- package/dist/testing/integrations/ralph.d.ts.map +1 -0
- package/dist/testing/integrations/ralph.js +69 -0
- package/dist/testing/integrations/ralph.js.map +1 -0
- package/dist/testing/performance/cache-manager.d.ts +16 -0
- package/dist/testing/performance/cache-manager.d.ts.map +1 -0
- package/dist/testing/performance/cache-manager.js +39 -0
- package/dist/testing/performance/cache-manager.js.map +1 -0
- package/dist/testing/performance/parallel-generator.d.ts +23 -0
- package/dist/testing/performance/parallel-generator.d.ts.map +1 -0
- package/dist/testing/performance/parallel-generator.js +31 -0
- package/dist/testing/performance/parallel-generator.js.map +1 -0
- package/dist/testing/types.d.ts +23 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +2 -0
- package/dist/testing/types.js.map +1 -0
- package/docs/2026-03-06-llm-testing-system-phase1.md +0 -0
- package/docs/plans/2026-03-06-llm-testing-system-design.md +311 -0
- package/docs/plans/2026-03-06-llm-testing-system-phase1.md +1268 -0
- package/docs/plans/2026-03-06-llm-testing-system-phase2.md +3053 -0
- package/docs/plans/2026-03-06-llm-testing-system-phase3.md +1830 -0
- package/docs/testing/PHASE2.md +266 -0
- package/docs/testing/PHASE3.md +601 -0
- package/docs/testing/README.md +634 -0
- package/package.json +1 -1
- package/skills/test-gen/skill.md +531 -0
- package/skills/ultraqa.md +58 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class ParallelGenerator {
|
|
2
|
+
maxConcurrency;
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.maxConcurrency = options.maxConcurrency;
|
|
5
|
+
}
|
|
6
|
+
async generate(files) {
|
|
7
|
+
const startTime = Date.now();
|
|
8
|
+
const results = [];
|
|
9
|
+
// Process files in batches based on maxConcurrency
|
|
10
|
+
for (let i = 0; i < files.length; i += this.maxConcurrency) {
|
|
11
|
+
const batch = files.slice(i, i + this.maxConcurrency);
|
|
12
|
+
const batchResults = await Promise.all(batch.map(async (file) => {
|
|
13
|
+
// Simulate test generation
|
|
14
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
15
|
+
return { file, success: true };
|
|
16
|
+
}));
|
|
17
|
+
results.push(...batchResults);
|
|
18
|
+
}
|
|
19
|
+
const totalTime = Date.now() - startTime;
|
|
20
|
+
return {
|
|
21
|
+
generatedTests: results,
|
|
22
|
+
totalTime,
|
|
23
|
+
maxConcurrentTasks: this.maxConcurrency,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function generateTestsInParallel(options) {
|
|
28
|
+
const generator = new ParallelGenerator({ maxConcurrency: options.maxConcurrency });
|
|
29
|
+
return generator.generate(options.files);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=parallel-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-generator.js","sourceRoot":"","sources":["../../../src/testing/performance/parallel-generator.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,iBAAiB;IACpB,cAAc,CAAS;IAE/B,YAAY,OAAiC;QAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAe;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAA8C,EAAE,CAAC;QAE9D,mDAAmD;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,2BAA2B;gBAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjC,CAAC,CAAC,CACH,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEzC,OAAO;YACL,cAAc,EAAE,OAAO;YACvB,SAAS;YACT,kBAAkB,EAAE,IAAI,CAAC,cAAc;SACxC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA6B;IAE7B,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACpF,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface TechStack {
|
|
2
|
+
frontend?: {
|
|
3
|
+
framework: 'react' | 'vue' | 'svelte' | 'none';
|
|
4
|
+
testFramework?: 'vitest' | 'jest' | 'none';
|
|
5
|
+
};
|
|
6
|
+
backend?: {
|
|
7
|
+
language: 'nodejs' | 'python' | 'go' | 'rust';
|
|
8
|
+
testFramework?: string;
|
|
9
|
+
};
|
|
10
|
+
databases?: string[];
|
|
11
|
+
apis?: ('rest' | 'graphql' | 'grpc')[];
|
|
12
|
+
}
|
|
13
|
+
export interface TestGenerationOptions {
|
|
14
|
+
filePath: string;
|
|
15
|
+
techStack: TechStack;
|
|
16
|
+
complexity?: 'simple' | 'complex';
|
|
17
|
+
}
|
|
18
|
+
export interface TestGenerationResult {
|
|
19
|
+
testFilePath: string;
|
|
20
|
+
testCode: string;
|
|
21
|
+
framework: string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;KAC5C,CAAC;IACF,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;QAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":""}
|
|
File without changes
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# LLM 驱动的持续开发测试系统设计
|
|
2
|
+
|
|
3
|
+
**日期**: 2026-03-06
|
|
4
|
+
**状态**: 已批准
|
|
5
|
+
**作者**: Claude Opus 4.6
|
|
6
|
+
|
|
7
|
+
## 概述
|
|
8
|
+
|
|
9
|
+
为 oh-my-claudecode 构建一个完整的测试系统,支持 LLM 驱动的持续开发和迭代。系统通过自动测试生成、覆盖率分析、行为驱动开发(BDD)和测试驱动开发(TDD)的结合,以及 AI 代码审查和持续重构,实现大模型对复杂应用的持续迭代能力。
|
|
10
|
+
|
|
11
|
+
## 目标
|
|
12
|
+
|
|
13
|
+
### 主要目标(按优先级)
|
|
14
|
+
1. **测试覆盖率 80%+**:在不需要大量手动编写测试的情况下达到高覆盖率
|
|
15
|
+
2. **持续迭代保护**:每次代码改进都有测试保证不会退化
|
|
16
|
+
3. **降低测试成本**:减少测试编写的时间和精力投入
|
|
17
|
+
4. **自动验证**:LLM 生成代码后自动验证正确性
|
|
18
|
+
|
|
19
|
+
### 技术需求
|
|
20
|
+
- 支持多语言:Node.js、Python、Go、Rust
|
|
21
|
+
- 支持多框架:React (Tauri/Electron/Web)
|
|
22
|
+
- 支持多数据库:PostgreSQL、MySQL、MongoDB
|
|
23
|
+
- 支持多 API 类型:REST、GraphQL、gRPC
|
|
24
|
+
- 支持多 LLM:Claude Code、Codex
|
|
25
|
+
|
|
26
|
+
## 架构设计
|
|
27
|
+
|
|
28
|
+
### 整体架构
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
32
|
+
│ 用户交互层 │
|
|
33
|
+
│ /test-gen /ultraqa /autopilot /ralph │
|
|
34
|
+
└─────────────────┬───────────────────────────────────────────┘
|
|
35
|
+
│
|
|
36
|
+
┌─────────────┴─────────────┐
|
|
37
|
+
│ │
|
|
38
|
+
┌───▼────────────┐ ┌────────▼──────────┐
|
|
39
|
+
│ OMC Skills │ │ OMC Agents │
|
|
40
|
+
│ • test-gen │───►│ • test-engineer │
|
|
41
|
+
│ • tdd │ │ • coverage-analyzer│
|
|
42
|
+
│ • ultraqa │ │ • contract-tester│
|
|
43
|
+
└───┬────────────┘ └────────┬──────────┘
|
|
44
|
+
│ │
|
|
45
|
+
│ ┌────────────────┴──────────┐
|
|
46
|
+
│ │ │
|
|
47
|
+
│ ┌────▼─────────┐ ┌─────────▼────────┐
|
|
48
|
+
│ │ omc test CLI │ │ Agent Tools │
|
|
49
|
+
│ │ (shell调用) │ │ (直接调用) │
|
|
50
|
+
│ └──────────────┘ └──────────────────┘
|
|
51
|
+
│
|
|
52
|
+
┌───▼────────────────────────────────────────────────────────┐
|
|
53
|
+
│ 测试执行和分析层 │
|
|
54
|
+
│ • Promptfoo (测试生成) │
|
|
55
|
+
│ • Giskard (行为测试) │
|
|
56
|
+
│ • 技术栈检测器 │
|
|
57
|
+
│ • 覆盖率分析器 │
|
|
58
|
+
└──────────────────────────────────────────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 核心设计原则
|
|
62
|
+
|
|
63
|
+
1. **分层解耦**:CLI 工具独立运行,agent 通过 shell 调用
|
|
64
|
+
2. **渐进增强**:Phase 1 先实现核心功能,后续逐步深化集成
|
|
65
|
+
3. **技术栈无关**:通过适配器模式支持多语言多框架
|
|
66
|
+
4. **成本优化**:简单测试用 Haiku,复杂分析用 Sonnet/Opus
|
|
67
|
+
5. **Skill 集成**:完全通过 OMC skill 系统集成,无需 MCP
|
|
68
|
+
|
|
69
|
+
## 核心组件
|
|
70
|
+
|
|
71
|
+
### 1. CLI 工具层 (`omc test`)
|
|
72
|
+
|
|
73
|
+
集成到现有的 `omc` CLI 中作为子命令:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
omc test gen <file> # 生成测试
|
|
77
|
+
omc test analyze # 分析覆盖率
|
|
78
|
+
omc test contract <api> # 生成契约测试
|
|
79
|
+
omc test detect-stack # 检测技术栈
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**项目结构**:
|
|
83
|
+
```
|
|
84
|
+
oh-my-claudecode/
|
|
85
|
+
├── src/
|
|
86
|
+
│ └── testing/
|
|
87
|
+
│ ├── cli/ # omc test 子命令
|
|
88
|
+
│ ├── generators/ # 测试生成器
|
|
89
|
+
│ ├── analyzers/ # 覆盖率分析
|
|
90
|
+
│ ├── adapters/ # 多语言适配器
|
|
91
|
+
│ └── integrations/ # Promptfoo/Giskard 集成
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 2. Skills 层
|
|
95
|
+
|
|
96
|
+
**新增 Skills**:
|
|
97
|
+
- `/test-gen` - 显式生成测试
|
|
98
|
+
- `/tdd` - 增强现有 TDD skill,强制测试优先
|
|
99
|
+
|
|
100
|
+
**增强现有 Skills**:
|
|
101
|
+
- `/ultraqa` - 集成测试生成和验证循环
|
|
102
|
+
- `/autopilot` - 生成代码时自动生成测试
|
|
103
|
+
|
|
104
|
+
### 3. Agents 层
|
|
105
|
+
|
|
106
|
+
**新增 Agents**:
|
|
107
|
+
- `test-spec-generator` - 生成 BDD 风格的测试规范
|
|
108
|
+
- `coverage-analyzer` - 分析覆盖率缺口
|
|
109
|
+
- `contract-tester` - API 契约测试
|
|
110
|
+
|
|
111
|
+
**增强现有 Agents**:
|
|
112
|
+
- `test-engineer` - 支持多语言测试生成,智能复杂度判断
|
|
113
|
+
|
|
114
|
+
### 4. 测试框架适配器
|
|
115
|
+
|
|
116
|
+
**前端(React)**:
|
|
117
|
+
- Vitest + Testing Library(单元测试)
|
|
118
|
+
- Playwright(E2E 测试)
|
|
119
|
+
|
|
120
|
+
**后端**:
|
|
121
|
+
- Node.js: Vitest/Jest
|
|
122
|
+
- Python: pytest
|
|
123
|
+
- Go: testing package
|
|
124
|
+
- Rust: cargo test
|
|
125
|
+
|
|
126
|
+
**集成测试**:
|
|
127
|
+
- API 契约测试:基于 OpenAPI/Pact
|
|
128
|
+
- E2E 用户流程:Playwright 跨栈测试
|
|
129
|
+
|
|
130
|
+
## 工作流程
|
|
131
|
+
|
|
132
|
+
### 混合模式:智能判断复杂度
|
|
133
|
+
|
|
134
|
+
**简单代码(自动生成测试)**:
|
|
135
|
+
- 函数行数 < 50
|
|
136
|
+
- 圈复杂度 < 10
|
|
137
|
+
- 嵌套层级 < 3
|
|
138
|
+
- 无外部依赖
|
|
139
|
+
|
|
140
|
+
**复杂代码(提示补充测试)**:
|
|
141
|
+
- 涉及支付、认证等关键业务
|
|
142
|
+
- 多步骤状态机或工作流
|
|
143
|
+
- 跨服务分布式事务
|
|
144
|
+
- 需要 mock 多个外部依赖
|
|
145
|
+
- 需要复杂的测试数据准备
|
|
146
|
+
- 异步/并发场景
|
|
147
|
+
|
|
148
|
+
### TDD 工作流
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
用户需求 → 技术栈检测(自动 + 确认)→ 生成测试规范 →
|
|
152
|
+
AI 生成代码 → 自动验证 → 覆盖率分析 →
|
|
153
|
+
补充测试 → 持续迭代
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 集成到现有工作流
|
|
157
|
+
|
|
158
|
+
**Autopilot 模式**:
|
|
159
|
+
```
|
|
160
|
+
需求分析 → 生成测试规范 → 生成代码 + 测试 → 验证 → 部署
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Ralph 模式**:
|
|
164
|
+
```
|
|
165
|
+
生成代码 → 生成测试 → 验证 →
|
|
166
|
+
如果失败:分析 → 修复 → 重新测试 →
|
|
167
|
+
循环直到通过
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Ultraqa 模式**:
|
|
171
|
+
```
|
|
172
|
+
测试 → 验证 → 修复 → 重复
|
|
173
|
+
(现在包含自动测试生成)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 技术栈检测
|
|
177
|
+
|
|
178
|
+
### 自动检测
|
|
179
|
+
- 扫描 `package.json`、`requirements.txt`、`go.mod`、`Cargo.toml`
|
|
180
|
+
- 分析项目结构(src/、tests/、__tests__/)
|
|
181
|
+
- 识别框架(React、Vue、Svelte)
|
|
182
|
+
- 识别测试工具(Jest、Vitest、pytest)
|
|
183
|
+
|
|
184
|
+
### 用户确认
|
|
185
|
+
- 显示检测结果
|
|
186
|
+
- 允许用户修正或补充
|
|
187
|
+
- 保存到项目配置(`.omc/project-config.json`)
|
|
188
|
+
|
|
189
|
+
## 测试类型
|
|
190
|
+
|
|
191
|
+
### 1. 单元测试
|
|
192
|
+
- 自动为函数/类生成测试
|
|
193
|
+
- 覆盖正常路径和边界情况
|
|
194
|
+
- Mock 外部依赖
|
|
195
|
+
|
|
196
|
+
### 2. API 契约测试
|
|
197
|
+
- 基于 OpenAPI 规范生成
|
|
198
|
+
- 验证请求/响应格式
|
|
199
|
+
- 确保前后端接口一致
|
|
200
|
+
|
|
201
|
+
### 3. E2E 测试
|
|
202
|
+
- 模拟真实用户操作
|
|
203
|
+
- 跨前后端的完整流程
|
|
204
|
+
- 使用 Playwright 执行
|
|
205
|
+
|
|
206
|
+
### 4. 行为测试(Giskard)
|
|
207
|
+
- 扰动测试(typos、negations)
|
|
208
|
+
- 鲁棒性验证
|
|
209
|
+
- 公平性指标
|
|
210
|
+
|
|
211
|
+
## 实施路径
|
|
212
|
+
|
|
213
|
+
### Phase 1:核心功能(2-3 周)
|
|
214
|
+
- ✅ 设计文档
|
|
215
|
+
- `omc test` CLI 基础命令
|
|
216
|
+
- 技术栈检测器
|
|
217
|
+
- 基础测试生成(React + Node.js)
|
|
218
|
+
- `/test-gen` skill
|
|
219
|
+
- 集成 Promptfoo
|
|
220
|
+
|
|
221
|
+
**交付物**:
|
|
222
|
+
- 可以为简单的 React 组件和 Node.js 函数生成测试
|
|
223
|
+
- 自动检测技术栈
|
|
224
|
+
- 通过 `/test-gen` 显式调用
|
|
225
|
+
|
|
226
|
+
### Phase 2:深度集成(3-4 周)
|
|
227
|
+
- 覆盖率分析器
|
|
228
|
+
- 多语言支持(Python、Go、Rust)
|
|
229
|
+
- 增强 `test-engineer` agent
|
|
230
|
+
- 复杂度判断逻辑
|
|
231
|
+
- 契约测试生成
|
|
232
|
+
- 集成到 `/ultraqa`
|
|
233
|
+
|
|
234
|
+
**交付物**:
|
|
235
|
+
- 支持所有目标语言
|
|
236
|
+
- 智能判断何时需要人工补充测试
|
|
237
|
+
- API 契约测试自动生成
|
|
238
|
+
- Ultraqa 包含测试生成
|
|
239
|
+
|
|
240
|
+
### Phase 3:完整生态(4-6 周)
|
|
241
|
+
- 集成 Giskard 行为测试
|
|
242
|
+
- E2E 测试生成
|
|
243
|
+
- CI/CD 集成
|
|
244
|
+
- Ralph 模式测试循环
|
|
245
|
+
- Autopilot 自动测试
|
|
246
|
+
- 性能优化
|
|
247
|
+
|
|
248
|
+
**交付物**:
|
|
249
|
+
- 完整的测试生态系统
|
|
250
|
+
- 所有 OMC 模式都包含测试
|
|
251
|
+
- 达到 80%+ 覆盖率目标
|
|
252
|
+
- 持续迭代保护
|
|
253
|
+
|
|
254
|
+
## 成功指标
|
|
255
|
+
|
|
256
|
+
### 定量指标
|
|
257
|
+
- 测试覆盖率:80%+
|
|
258
|
+
- 测试生成时间:< 30 秒/文件
|
|
259
|
+
- 测试通过率:> 90%
|
|
260
|
+
- 手动测试编写减少:70%+
|
|
261
|
+
|
|
262
|
+
### 定性指标
|
|
263
|
+
- 开发者信心提升
|
|
264
|
+
- 重构更安全
|
|
265
|
+
- 技术债务减少
|
|
266
|
+
- 迭代速度提升
|
|
267
|
+
|
|
268
|
+
## 风险和缓解
|
|
269
|
+
|
|
270
|
+
### 风险 1:多语言支持复杂度高
|
|
271
|
+
**缓解**:Phase 1 先支持 React + Node.js,后续逐步添加
|
|
272
|
+
|
|
273
|
+
### 风险 2:测试质量不稳定
|
|
274
|
+
**缓解**:
|
|
275
|
+
- 使用 Promptfoo 的反馈循环
|
|
276
|
+
- 人工审查复杂测试
|
|
277
|
+
- 持续优化提示词
|
|
278
|
+
|
|
279
|
+
### 风险 3:性能开销
|
|
280
|
+
**缓解**:
|
|
281
|
+
- 简单测试用 Haiku(成本低)
|
|
282
|
+
- 并行生成测试
|
|
283
|
+
- 缓存技术栈检测结果
|
|
284
|
+
|
|
285
|
+
### 风险 4:与现有工作流冲突
|
|
286
|
+
**缓解**:
|
|
287
|
+
- 渐进式集成
|
|
288
|
+
- 保持向后兼容
|
|
289
|
+
- 提供开关控制
|
|
290
|
+
|
|
291
|
+
## 参考资料
|
|
292
|
+
|
|
293
|
+
### 调研发现
|
|
294
|
+
1. **TDD with AI**: 测试即规范,测试告诉 AI "做什么"和"何时完成"
|
|
295
|
+
2. **GitHub Copilot**: 71% 可操作反馈率,15% 更快的审查速度
|
|
296
|
+
3. **三层验证**: 确定性测试 → LLM 评估器 → 人工审批
|
|
297
|
+
4. **90 天重构**: 73% 技术债务减少,280% 可维护性提升
|
|
298
|
+
5. **60-70% 通过率**: 高级 AI 模型仍需人工验证
|
|
299
|
+
|
|
300
|
+
### 工具选择
|
|
301
|
+
- **Promptfoo**: 开源、隐私优先、多提供商支持
|
|
302
|
+
- **Giskard**: 行为测试、公平性指标
|
|
303
|
+
- **Playwright**: 跨浏览器 E2E 测试
|
|
304
|
+
- **Vitest**: 快速、现代的测试框架
|
|
305
|
+
|
|
306
|
+
## 下一步
|
|
307
|
+
|
|
308
|
+
1. ✅ 设计文档批准
|
|
309
|
+
2. 创建详细实施计划
|
|
310
|
+
3. Phase 1 开发启动
|
|
311
|
+
4. 持续迭代和优化
|