ethan-skill 1.15.2 → 1.15.4
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/dist/agents/orchestrator.test.js +13 -12
- package/dist/agents/orchestrator.test.js.map +1 -1
- package/dist/agents/presets.d.ts.map +1 -1
- package/dist/agents/presets.js +57 -0
- package/dist/agents/presets.js.map +1 -1
- package/dist/skills/37-auto-fix.d.ts +3 -0
- package/dist/skills/37-auto-fix.d.ts.map +1 -0
- package/dist/skills/37-auto-fix.js +229 -0
- package/dist/skills/37-auto-fix.js.map +1 -0
- package/dist/skills/38-agent-memory.d.ts +3 -0
- package/dist/skills/38-agent-memory.d.ts.map +1 -0
- package/dist/skills/38-agent-memory.js +221 -0
- package/dist/skills/38-agent-memory.js.map +1 -0
- package/dist/skills/39-competitive-analysis.d.ts +3 -0
- package/dist/skills/39-competitive-analysis.d.ts.map +1 -0
- package/dist/skills/39-competitive-analysis.js +187 -0
- package/dist/skills/39-competitive-analysis.js.map +1 -0
- package/dist/skills/40-solution-proposal.d.ts +3 -0
- package/dist/skills/40-solution-proposal.d.ts.map +1 -0
- package/dist/skills/40-solution-proposal.js +196 -0
- package/dist/skills/40-solution-proposal.js.map +1 -0
- package/dist/skills/41-test-plan.d.ts +3 -0
- package/dist/skills/41-test-plan.d.ts.map +1 -0
- package/dist/skills/41-test-plan.js +255 -0
- package/dist/skills/41-test-plan.js.map +1 -0
- package/dist/skills/42-bug-report.d.ts +3 -0
- package/dist/skills/42-bug-report.d.ts.map +1 -0
- package/dist/skills/42-bug-report.js +224 -0
- package/dist/skills/42-bug-report.js.map +1 -0
- package/dist/skills/43-ops-runbook.d.ts +3 -0
- package/dist/skills/43-ops-runbook.d.ts.map +1 -0
- package/dist/skills/43-ops-runbook.js +282 -0
- package/dist/skills/43-ops-runbook.js.map +1 -0
- package/dist/skills/index.d.ts +7 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +29 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/pipeline.d.ts.map +1 -1
- package/dist/skills/pipeline.js +58 -0
- package/dist/skills/pipeline.js.map +1 -1
- package/dist/skills/skills.test.js +3 -3
- package/dist/skills/skills.test.js.map +1 -1
- package/package.json +1 -1
- package/rules/claude-code/CLAUDE.md +1436 -3
- package/rules/cline/.clinerules +1327 -2
- package/rules/codebuddy/CODEBUDDY.md +1399 -2
- package/rules/continue/.continuerules +1327 -2
- package/rules/copilot/copilot-instructions.md +1378 -2
- package/rules/cursor/.cursorrules +1428 -2
- package/rules/cursor/smart-flow.mdc +1428 -2
- package/rules/jetbrains/smart-flow.md +1378 -2
- package/rules/lingma/smart-flow.md +1393 -3
- package/rules/windsurf/.windsurf/rules/smart-flow.md +1379 -3
- package/rules/zed/smart-flow.rules +1319 -1
package/rules/cline/.clinerules
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Ethan v1.15.
|
|
2
|
-
# Generated: 2026-04-
|
|
1
|
+
# Ethan v1.15.3
|
|
2
|
+
# Generated: 2026-04-14T03:45:03.061Z
|
|
3
3
|
# Source: https://github.com/aokiz-ek/smart-flow-skill
|
|
4
4
|
|
|
5
5
|
Ethan。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
@@ -97,6 +97,13 @@ Ethan。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
|
97
97
|
- **移动端专项审查**: 移动端审查 | mobile review | ios review | android review
|
|
98
98
|
- **数据管道设计**: 数据管道 | data pipeline | etl | elt
|
|
99
99
|
- **ML 实验管理**: ml experiment | mlops | model training | 模型训练
|
|
100
|
+
- **自动修复**: 自动修复 | auto fix | auto-fix | CI 失败
|
|
101
|
+
- **Agent 记忆**: agent 记忆 | agent memory | 持久化记忆 | persistent memory
|
|
102
|
+
- **竞品分析**: 竞品分析 | 竞品对比 | competitive analysis | 竞争对手
|
|
103
|
+
- **售前方案**: 售前方案 | 方案建议书 | solution proposal | 方案制作
|
|
104
|
+
- **测试计划**: 测试计划 | 测试策略 | test plan | 测试方案
|
|
105
|
+
- **缺陷管理**: 缺陷管理 | 缺陷报告 | bug report | 提 bug
|
|
106
|
+
- **运维手册**: 运维手册 | runbook | 操作手册 | 变更管理
|
|
100
107
|
|
|
101
108
|
---
|
|
102
109
|
|
|
@@ -6527,5 +6534,1323 @@ if drift_detected:
|
|
|
6527
6534
|
|
|
6528
6535
|
输出格式:实验设计文档 + MLflow/W&B 追踪配置 + DVC 数据管道 + Model Card + 部署 A/B 测试方案 + 漂移监控配置
|
|
6529
6536
|
|
|
6537
|
+
## 自动修复
|
|
6538
|
+
|
|
6539
|
+
触发:自动修复 | auto fix | auto-fix | CI 失败
|
|
6540
|
+
说明:读取 CI/测试/Lint 失败信息,自动分析根因、生成修复方案并迭代验证,直到通过(最多 3 轮)
|
|
6541
|
+
|
|
6542
|
+
1. 收集失败信息
|
|
6543
|
+
收集所有可用的失败上下文:
|
|
6544
|
+
|
|
6545
|
+
**信息来源(优先级从高到低)**
|
|
6546
|
+
- CI 流水线日志(完整 stderr/stdout,不截断)
|
|
6547
|
+
- 测试框架输出(Jest / Vitest / PyTest / Go test)
|
|
6548
|
+
- Lint 报告(ESLint / Prettier / tsc / pylint)
|
|
6549
|
+
- 构建错误(webpack / vite / tsc)
|
|
6550
|
+
- 运行时异常(stack trace + 上下文代码)
|
|
6551
|
+
|
|
6552
|
+
**必须提取的字段**
|
|
6553
|
+
```
|
|
6554
|
+
失败类型: [ 测试失败 | Lint | 类型错误 | 构建失败 | 运行时错误 ]
|
|
6555
|
+
失败文件: [文件路径:行号]
|
|
6556
|
+
错误信息: [原始错误文本,保留完整 stack trace]
|
|
6557
|
+
触发条件: [哪个命令/步骤触发]
|
|
6558
|
+
上次绿灯: [最近一次通过的 commit / 时间(如可获取)]
|
|
6559
|
+
```
|
|
6560
|
+
|
|
6561
|
+
> 如果日志超长,提取前 100 行 + 最后 50 行,优先保留 "FAILED"、"ERROR"、"at " 行。
|
|
6562
|
+
|
|
6563
|
+
2. 根因分析
|
|
6564
|
+
对每个失败逐一诊断根因,区分「直接原因」和「根本原因」:
|
|
6565
|
+
|
|
6566
|
+
**失败类型与常见根因速查**
|
|
6567
|
+
|
|
6568
|
+
| 失败类型 | 直接原因 | 根本原因示例 |
|
|
6569
|
+
|---------|---------|------------|
|
|
6570
|
+
| 测试断言失败 | 返回值与预期不符 | 业务逻辑变更未同步更新测试 |
|
|
6571
|
+
| 测试超时 | 异步未正确 resolve | 缺少 await 或 mock 配置不当 |
|
|
6572
|
+
| 类型错误 | interface 不匹配 | API 变更未更新消费方类型 |
|
|
6573
|
+
| Lint 报错 | 代码风格违规 | 缺少 import、未使用变量、规则变更 |
|
|
6574
|
+
| 构建失败 | 模块未找到 | 路径别名配置、缺少依赖 |
|
|
6575
|
+
| 运行时错误 | 空指针/未定义 | 边界条件未处理 |
|
|
6576
|
+
|
|
6577
|
+
**输出根因诊断表**
|
|
6578
|
+
```
|
|
6579
|
+
失败 #1
|
|
6580
|
+
文件: src/auth/login.test.ts:42
|
|
6581
|
+
错误: Expected "invalid" but received "error"
|
|
6582
|
+
直接原因: 返回值从 "error" 改为 "invalid"
|
|
6583
|
+
根本原因: auth.ts 第 89 行修改了错误码但未同步测试
|
|
6584
|
+
修复难度: 🟢 简单(更新测试断言)
|
|
6585
|
+
可自动修复: ✅
|
|
6586
|
+
|
|
6587
|
+
失败 #2
|
|
6588
|
+
文件: src/utils/parser.ts:15
|
|
6589
|
+
错误: Type 'string | null' is not assignable to 'string'
|
|
6590
|
+
直接原因: getUser() 返回值新增了 null 类型
|
|
6591
|
+
根本原因: API 层变更未向下传播 null 处理
|
|
6592
|
+
修复难度: 🟡 中等(需添加 null guard)
|
|
6593
|
+
可自动修复: ✅
|
|
6594
|
+
```
|
|
6595
|
+
|
|
6596
|
+
3. 生成修复方案(Round 1)
|
|
6597
|
+
针对每个可自动修复的失败,生成最小化修复方案:
|
|
6598
|
+
|
|
6599
|
+
**修复原则**
|
|
6600
|
+
- 最小改动原则:只修改必须改的代码
|
|
6601
|
+
- 不引入新问题:修复后不能导致其他测试失败
|
|
6602
|
+
- 保持语义一致:修复逻辑应符合原始意图
|
|
6603
|
+
- 优先修代码而非修测试(除非测试本身写错了)
|
|
6604
|
+
|
|
6605
|
+
**分优先级处理**
|
|
6606
|
+
1. 🔴 **先修 Blocker**:类型错误、构建失败(影响所有后续步骤)
|
|
6607
|
+
2. 🟡 **再修测试**:断言失败、Mock 配置(影响覆盖率报告)
|
|
6608
|
+
3. 🟢 **最后修 Lint**:风格问题(不影响功能,可批量修复)
|
|
6609
|
+
|
|
6610
|
+
**Lint 批量自动修复命令**
|
|
6611
|
+
```bash
|
|
6612
|
+
npx eslint src --fix
|
|
6613
|
+
npx prettier src --write
|
|
6614
|
+
```
|
|
6615
|
+
|
|
6616
|
+
**输出修复 Diff(每个失败一个代码块)**
|
|
6617
|
+
```diff
|
|
6618
|
+
// 修复 #1:更新测试断言
|
|
6619
|
+
- expect(result).toBe('error');
|
|
6620
|
+
+ expect(result).toBe('invalid');
|
|
6621
|
+
|
|
6622
|
+
// 修复 #2:添加 null guard
|
|
6623
|
+
- const name = getUser().name;
|
|
6624
|
+
+ const user = getUser();
|
|
6625
|
+
+ const name = user?.name ?? '';
|
|
6626
|
+
```
|
|
6627
|
+
|
|
6628
|
+
4. 应用修复并验证
|
|
6629
|
+
应用修复方案后立即验证:
|
|
6630
|
+
|
|
6631
|
+
**验证步骤(按失败类型)**
|
|
6632
|
+
```bash
|
|
6633
|
+
# 测试失败
|
|
6634
|
+
npx vitest run [changed-test-file] # 先跑单文件,快速反馈
|
|
6635
|
+
npx vitest run # 再跑全量,确认无新增失败
|
|
6636
|
+
|
|
6637
|
+
# 类型错误
|
|
6638
|
+
npx tsc --noEmit # 全量类型检查
|
|
6639
|
+
|
|
6640
|
+
# Lint 错误
|
|
6641
|
+
npx eslint src --max-warnings 0 # 不允许遗留 warning
|
|
6642
|
+
|
|
6643
|
+
# 构建失败
|
|
6644
|
+
npm run build # 完整构建验证
|
|
6645
|
+
```
|
|
6646
|
+
|
|
6647
|
+
**验证结果记录**
|
|
6648
|
+
```
|
|
6649
|
+
Round 1 结果:
|
|
6650
|
+
修复前:❌ 3 失败(2 测试 + 1 类型错误)
|
|
6651
|
+
修复后:
|
|
6652
|
+
✅ 测试失败 #1 — 已修复(断言更新)
|
|
6653
|
+
✅ 类型错误 #2 — 已修复(null guard)
|
|
6654
|
+
❌ 测试失败 #3 — 仍失败(需进入 Round 2)
|
|
6655
|
+
```
|
|
6656
|
+
|
|
6657
|
+
5. 迭代修复(Round 2-3)
|
|
6658
|
+
如果 Round 1 仍有失败,进入迭代模式:
|
|
6659
|
+
|
|
6660
|
+
**迭代策略**
|
|
6661
|
+
- **Round 2**:针对剩余失败,进行更深入的根因分析(可能是 Round 1 修复引入了副作用)
|
|
6662
|
+
- **Round 3**:最终尝试,优先保证 CI 通过(允许临时 skip 不稳定测试,但必须标注 @todo)
|
|
6663
|
+
|
|
6664
|
+
**副作用检测**(重要)
|
|
6665
|
+
```
|
|
6666
|
+
检查 Round 1 修复后的新增失败:
|
|
6667
|
+
- 是否有原本通过的测试现在失败了?
|
|
6668
|
+
- 如果有,优先回退引入副作用的修改,重新设计方案
|
|
6669
|
+
```
|
|
6670
|
+
|
|
6671
|
+
**Round 3 后仍失败的处理**
|
|
6672
|
+
```markdown
|
|
6673
|
+
## ⚠️ 需要人工介入
|
|
6674
|
+
|
|
6675
|
+
以下失败无法通过自动修复解决:
|
|
6676
|
+
|
|
6677
|
+
### 失败 #X
|
|
6678
|
+
- **错误**:[原始错误]
|
|
6679
|
+
- **已尝试**:[已尝试的修复方案]
|
|
6680
|
+
- **失败原因**:[为什么自动修复不可行]
|
|
6681
|
+
- **建议人工处理**:[具体建议步骤]
|
|
6682
|
+
- **最低可行方案**:暂时 skip 此测试,添加 TODO 注释:
|
|
6683
|
+
`// TODO(@owner): fix in #issue-number — [简短原因]`
|
|
6684
|
+
```
|
|
6685
|
+
|
|
6686
|
+
**迭代上限约束**
|
|
6687
|
+
- 最多 3 轮迭代,防止无限循环
|
|
6688
|
+
- 每轮必须有至少 1 个失败被修复,否则停止并输出人工介入指引
|
|
6689
|
+
|
|
6690
|
+
6. 输出修复报告
|
|
6691
|
+
所有轮次完成后,输出结构化修复报告:
|
|
6692
|
+
|
|
6693
|
+
```markdown
|
|
6694
|
+
## Auto-Fix 修复报告
|
|
6695
|
+
|
|
6696
|
+
### 修复概览
|
|
6697
|
+
- **总失败数**:X
|
|
6698
|
+
- **自动修复**:Y(Y/X)
|
|
6699
|
+
- **需人工处理**:Z
|
|
6700
|
+
- **迭代轮次**:N 轮
|
|
6701
|
+
|
|
6702
|
+
### 修复详情
|
|
6703
|
+
|
|
6704
|
+
| # | 文件 | 错误类型 | 修复方式 | 状态 |
|
|
6705
|
+
|---|------|---------|---------|------|
|
|
6706
|
+
| 1 | src/auth.ts:42 | 断言失败 | 更新期望值 | ✅ Round 1 |
|
|
6707
|
+
| 2 | src/utils.ts:15 | 类型错误 | 添加 null guard | ✅ Round 1 |
|
|
6708
|
+
| 3 | src/api.ts:88 | 集成测试 | 更新 Mock 配置 | ✅ Round 2 |
|
|
6709
|
+
|
|
6710
|
+
### 代码变更摘要
|
|
6711
|
+
[修改的文件列表 + 每处修改的简短说明]
|
|
6712
|
+
|
|
6713
|
+
### 需要人工介入
|
|
6714
|
+
[如有,列出无法自动修复的项目 + 建议]
|
|
6715
|
+
|
|
6716
|
+
### 预防建议
|
|
6717
|
+
- [导致此次失败的系统性问题]
|
|
6718
|
+
- [建议的规范或流程改进]
|
|
6719
|
+
```
|
|
6720
|
+
|
|
6721
|
+
输出格式:Markdown 修复报告:根因诊断表 + 分 Round 修复 Diff + 验证结果 + 人工介入指引(如有)
|
|
6722
|
+
|
|
6723
|
+
## Agent 记忆
|
|
6724
|
+
|
|
6725
|
+
触发:agent 记忆 | agent memory | 持久化记忆 | persistent memory
|
|
6726
|
+
说明:提取并持久化项目关键决策、架构约束与已解决问题,跨会话注入 Agent 上下文,消除重复探索
|
|
6727
|
+
|
|
6728
|
+
1. 识别值得记忆的信息
|
|
6729
|
+
并非所有信息都值得持久化,聚焦以下四类高价值记忆:
|
|
6730
|
+
|
|
6731
|
+
**四类核心记忆**
|
|
6732
|
+
|
|
6733
|
+
| 类型 | 描述 | 示例 |
|
|
6734
|
+
|------|------|------|
|
|
6735
|
+
| 🏗️ **架构决策** | 重要的技术选型和设计取舍 | "使用 Zustand 而非 Redux,因为项目规模小、不需要 devtools" |
|
|
6736
|
+
| ⚠️ **已知陷阱** | 踩过的坑、避坑经验 | "直接调用 /api/v1/user 会 401,必须先刷新 token" |
|
|
6737
|
+
| 📐 **项目约定** | 命名规范、目录结构、代码约束 | "所有异步操作用 useQuery,禁止裸 fetch" |
|
|
6738
|
+
| ✅ **已解决问题** | 解决了的复杂 bug 和方案 | "iOS Safari 下 flex gap 不生效,用 margin 替代" |
|
|
6739
|
+
|
|
6740
|
+
**识别触发条件**
|
|
6741
|
+
- 对话中出现「为什么要这样」「这个项目的约定是」「上次解决这个问题的方法是」
|
|
6742
|
+
- 重要的 ADR(架构决策记录)产出
|
|
6743
|
+
- 排查超过 30 分钟的 bug 及其解决方案
|
|
6744
|
+
- 用户明确说「记住这个」
|
|
6745
|
+
|
|
6746
|
+
**不值得记忆的信息**
|
|
6747
|
+
- 一次性任务的临时上下文
|
|
6748
|
+
- 可以从代码本身读出的信息
|
|
6749
|
+
- 过于宽泛的"最佳实践"(已在 CLAUDE.md 中)
|
|
6750
|
+
|
|
6751
|
+
2. 结构化记忆条目
|
|
6752
|
+
将识别到的信息格式化为标准记忆条目:
|
|
6753
|
+
|
|
6754
|
+
**记忆条目格式(YAML)**
|
|
6755
|
+
```yaml
|
|
6756
|
+
# .ethan/agent-memory/architecture.yaml
|
|
6757
|
+
entries:
|
|
6758
|
+
- id: mem_001
|
|
6759
|
+
type: architecture_decision # architecture_decision | gotcha | convention | resolved_bug
|
|
6760
|
+
title: 状态管理选型:Zustand over Redux
|
|
6761
|
+
content: |
|
|
6762
|
+
本项目使用 Zustand 进行全局状态管理。
|
|
6763
|
+
原因:组件树层级浅(≤3层),不需要时间旅行调试,Redux 模板代码过多。
|
|
6764
|
+
影响:所有跨组件状态通过 useXxxStore() hook 访问,不使用 Context API。
|
|
6765
|
+
tags: [state-management, zustand, frontend]
|
|
6766
|
+
created_at: 2024-01-15
|
|
6767
|
+
confidence: high # high | medium | low
|
|
6768
|
+
scope: global # global | module:<name> | file:<path>
|
|
6769
|
+
```
|
|
6770
|
+
|
|
6771
|
+
**文件组织结构**
|
|
6772
|
+
```
|
|
6773
|
+
.ethan/agent-memory/
|
|
6774
|
+
├── architecture.yaml # 架构决策
|
|
6775
|
+
├── gotchas.yaml # 已知陷阱
|
|
6776
|
+
├── conventions.yaml # 项目约定
|
|
6777
|
+
├── resolved-bugs.yaml # 已解决问题
|
|
6778
|
+
└── index.yaml # 记忆索引(供快速检索)
|
|
6779
|
+
```
|
|
6780
|
+
|
|
6781
|
+
**记忆条目质量标准**
|
|
6782
|
+
- title:一句话,包含关键词(方便检索)
|
|
6783
|
+
- content:5-10 行,包含决策背景 + 结论 + 影响范围
|
|
6784
|
+
- tags:3-5 个,技术栈 + 模块 + 问题类型
|
|
6785
|
+
- confidence:high=已验证可重用,medium=上下文相关,low=存疑待确认
|
|
6786
|
+
|
|
6787
|
+
3. 写入持久化存储
|
|
6788
|
+
将格式化的记忆条目追加写入对应文件:
|
|
6789
|
+
|
|
6790
|
+
**写入操作**
|
|
6791
|
+
```bash
|
|
6792
|
+
# 目录不存在时自动创建
|
|
6793
|
+
mkdir -p .ethan/agent-memory
|
|
6794
|
+
|
|
6795
|
+
# 在 index.yaml 更新记忆摘要(用于快速检索)
|
|
6796
|
+
# index.yaml 格式:
|
|
6797
|
+
# entries:
|
|
6798
|
+
# - id: mem_001
|
|
6799
|
+
# title: "状态管理选型:Zustand over Redux"
|
|
6800
|
+
# type: architecture_decision
|
|
6801
|
+
# tags: [state-management, zustand]
|
|
6802
|
+
# file: architecture.yaml
|
|
6803
|
+
```
|
|
6804
|
+
|
|
6805
|
+
**记忆维护规则**
|
|
6806
|
+
- 同一主题新记忆覆盖旧记忆(更新 content + updated_at)
|
|
6807
|
+
- 标记为 low confidence 的记忆,3 个月未访问则删除
|
|
6808
|
+
- 每次成功使用后,将 confidence 升级(low → medium → high)
|
|
6809
|
+
- 发现记忆内容已过时时,立即更新或标记 deprecated
|
|
6810
|
+
|
|
6811
|
+
**与 .ethan/team-knowledge/ 的区别**
|
|
6812
|
+
| | agent-memory | team-knowledge |
|
|
6813
|
+
|--|---|---|
|
|
6814
|
+
| 写入者 | AI(自动提取) | 人工(ethan knowledge add)|
|
|
6815
|
+
| 格式 | 结构化 YAML | 自由文本 Markdown |
|
|
6816
|
+
| 粒度 | 单条决策/问题 | 完整知识文档 |
|
|
6817
|
+
| 检索 | 按 tags + type 自动匹配 | 按关键词全文搜索 |
|
|
6818
|
+
|
|
6819
|
+
4. 记忆检索与上下文注入
|
|
6820
|
+
在新会话开始或 Agent 执行前,检索相关记忆注入上下文:
|
|
6821
|
+
|
|
6822
|
+
**检索策略(多维度匹配)**
|
|
6823
|
+
```
|
|
6824
|
+
1. 任务关键词 ↔ 记忆 tags(精确匹配)
|
|
6825
|
+
2. 当前工作文件路径 ↔ 记忆 scope(前缀匹配)
|
|
6826
|
+
3. 失败信息中的技术词 ↔ 记忆 title(模糊匹配)
|
|
6827
|
+
4. 最近 7 天被访问的记忆(时间权重提升)
|
|
6828
|
+
```
|
|
6829
|
+
|
|
6830
|
+
**注入格式(添加到系统提示词开头)**
|
|
6831
|
+
```markdown
|
|
6832
|
+
## 📚 项目记忆上下文(来自 .ethan/agent-memory/)
|
|
6833
|
+
|
|
6834
|
+
### 架构决策
|
|
6835
|
+
- **状态管理**:使用 Zustand,不用 Redux。所有跨组件状态通过 useXxxStore() 访问。
|
|
6836
|
+
- **API 层**:统一使用 React Query,禁止裸 fetch 调用。
|
|
6837
|
+
|
|
6838
|
+
### 已知陷阱
|
|
6839
|
+
- ⚠️ iOS Safari 下 flex gap 不生效,用 margin-right/bottom 替代
|
|
6840
|
+
- ⚠️ /api/v1/user 接口在 token 过期时返回 200 + {error: "token_expired"},非标准 401
|
|
6841
|
+
|
|
6842
|
+
### 项目约定
|
|
6843
|
+
- 组件文件统一 PascalCase,工具函数 camelCase
|
|
6844
|
+
- 单元测试覆盖率要求 ≥ 80%(核心业务)
|
|
6845
|
+
|
|
6846
|
+
> ⓘ 以上记忆来自 .ethan/agent-memory/(共 N 条)。如有不准确,请更新记忆文件。
|
|
6847
|
+
```
|
|
6848
|
+
|
|
6849
|
+
**记忆命中反馈**
|
|
6850
|
+
每次使用记忆后,记录命中情况:
|
|
6851
|
+
```yaml
|
|
6852
|
+
# .ethan/agent-memory/index.yaml
|
|
6853
|
+
- id: mem_003
|
|
6854
|
+
last_hit: 2024-03-20
|
|
6855
|
+
hit_count: 7
|
|
6856
|
+
confidence: high # 命中多次后自动升级
|
|
6857
|
+
```
|
|
6858
|
+
|
|
6859
|
+
5. 记忆审计与清理
|
|
6860
|
+
定期维护记忆库,确保记忆的准确性和有效性:
|
|
6861
|
+
|
|
6862
|
+
**审计清单**
|
|
6863
|
+
```bash
|
|
6864
|
+
# 查看所有记忆
|
|
6865
|
+
ethan memory list
|
|
6866
|
+
|
|
6867
|
+
# 统计记忆健康度
|
|
6868
|
+
ethan memory stats
|
|
6869
|
+
# 输出:
|
|
6870
|
+
# 总记忆条数:48
|
|
6871
|
+
# 高置信度:32 | 中:12 | 低:4
|
|
6872
|
+
# 30天未命中:8条(建议清理)
|
|
6873
|
+
# 重复/矛盾:2组(需合并)
|
|
6874
|
+
```
|
|
6875
|
+
|
|
6876
|
+
**记忆衰减策略**
|
|
6877
|
+
- 90 天未命中:自动降级 confidence(high → medium → low)
|
|
6878
|
+
- 180 天未命中的 low confidence 记忆:标记为 deprecated,下次审计删除
|
|
6879
|
+
- 代码库重大重构后:批量检查相关记忆是否仍有效
|
|
6880
|
+
|
|
6881
|
+
**记忆冲突处理**
|
|
6882
|
+
```
|
|
6883
|
+
如发现两条矛盾的记忆:
|
|
6884
|
+
1. 保留更新的(created_at 更晚)
|
|
6885
|
+
2. 将旧的标记为 deprecated
|
|
6886
|
+
3. 在新记忆的 content 中注明「取代了 mem_xxx」
|
|
6887
|
+
```
|
|
6888
|
+
|
|
6889
|
+
**团队共享记忆**
|
|
6890
|
+
```bash
|
|
6891
|
+
# 将记忆同步到 git(团队共享)
|
|
6892
|
+
ethan sync push --include agent-memory
|
|
6893
|
+
|
|
6894
|
+
# 拉取团队记忆
|
|
6895
|
+
ethan sync pull
|
|
6896
|
+
|
|
6897
|
+
# 记忆文件建议加入 .gitignore 的例外
|
|
6898
|
+
# .gitignore:
|
|
6899
|
+
# !.ethan/agent-memory/*.yaml
|
|
6900
|
+
```
|
|
6901
|
+
|
|
6902
|
+
输出格式:YAML 记忆条目文件(写入 .ethan/agent-memory/)+ Markdown 注入格式的上下文摘要
|
|
6903
|
+
|
|
6904
|
+
## 竞品分析
|
|
6905
|
+
|
|
6906
|
+
触发:竞品分析 | 竞品对比 | competitive analysis | 竞争对手
|
|
6907
|
+
说明:系统收集竞品信息,构建多维对比矩阵,识别差异化机会,输出可执行的竞品洞察报告
|
|
6908
|
+
|
|
6909
|
+
1. 界定分析范围
|
|
6910
|
+
明确竞品分析的边界和目标:
|
|
6911
|
+
|
|
6912
|
+
**确认以下信息**
|
|
6913
|
+
- **分析目的**:售前支撑 / 产品规划 / 定价策略 / 功能取舍
|
|
6914
|
+
- **目标客户群**:哪类客户在同时考察我方和竞品?
|
|
6915
|
+
- **核心场景**:客户最关心哪 3-5 个使用场景?
|
|
6916
|
+
- **分析时效**:一次性深度分析 vs 持续监测
|
|
6917
|
+
|
|
6918
|
+
**竞品分层**
|
|
6919
|
+
```
|
|
6920
|
+
直接竞品(核心战场):
|
|
6921
|
+
- 相同目标客户、相似产品形态、直接争抢同一笔预算
|
|
6922
|
+
- 通常 3-5 个,重点深入分析
|
|
6923
|
+
|
|
6924
|
+
间接竞品(边缘防御):
|
|
6925
|
+
- 不同产品形态但解决同一问题
|
|
6926
|
+
- 通常 2-3 个,了解即可
|
|
6927
|
+
|
|
6928
|
+
替代方案(需求层竞争):
|
|
6929
|
+
- 客户可能选择的完全不同的路径(如自研、外包)
|
|
6930
|
+
- 列出但不做深度分析
|
|
6931
|
+
```
|
|
6932
|
+
|
|
6933
|
+
2. 信息收集
|
|
6934
|
+
系统化收集竞品多维度信息:
|
|
6935
|
+
|
|
6936
|
+
**官方渠道**
|
|
6937
|
+
- 官网产品页、定价页、案例页(截图留存,注明日期)
|
|
6938
|
+
- 产品文档/帮助中心(了解功能边界)
|
|
6939
|
+
- 官方博客/发布说明(了解产品方向)
|
|
6940
|
+
- LinkedIn / 招聘信息(判断团队规模和技术方向)
|
|
6941
|
+
|
|
6942
|
+
**用户反馈渠道**
|
|
6943
|
+
- G2 / Capterra / 产品猎人(Product Hunt)评分与评论
|
|
6944
|
+
- App Store / 各应用市场用户评价
|
|
6945
|
+
- 知乎、Reddit、Twitter 用户讨论
|
|
6946
|
+
- 重点提取:**高频好评**(核心优势)和**高频差评**(核心痛点)
|
|
6947
|
+
|
|
6948
|
+
**公开数据**
|
|
6949
|
+
- SimilarWeb / Alexa 流量数据
|
|
6950
|
+
- GitHub Stars / 开源活跃度(技术产品)
|
|
6951
|
+
- 融资信息(Crunchbase)— 判断竞品资源投入
|
|
6952
|
+
|
|
6953
|
+
**第一手情报**(如可获取)
|
|
6954
|
+
- 试用竞品产品(免费版 / Demo)
|
|
6955
|
+
- 竞品销售人员对话记录
|
|
6956
|
+
- 客户提供的竞品方案 / RFP 评估
|
|
6957
|
+
|
|
6958
|
+
> ⚠️ 所有信息注明来源和收集时间,竞品信息时效性强,超过 3 个月需重新验证
|
|
6959
|
+
|
|
6960
|
+
3. 构建对比矩阵
|
|
6961
|
+
将收集信息结构化为多维对比矩阵:
|
|
6962
|
+
|
|
6963
|
+
**功能对比矩阵**
|
|
6964
|
+
|
|
6965
|
+
| 功能/场景 | 权重 | 我方 | 竞品A | 竞品B | 竞品C |
|
|
6966
|
+
|---------|------|------|-------|-------|-------|
|
|
6967
|
+
| 核心功能1 | 高 | ✅全支持 | ✅全支持 | ⚠️部分 | ❌不支持 |
|
|
6968
|
+
| 核心功能2 | 高 | ⚠️部分 | ✅全支持 | ✅全支持 | ⚠️部分 |
|
|
6969
|
+
| 差异功能X | 中 | ✅独有 | ❌ | ❌ | ❌ |
|
|
6970
|
+
|
|
6971
|
+
评分说明:✅全支持(5) ⚠️部分支持(3) 🔧需定制(2) ❌不支持(0)
|
|
6972
|
+
|
|
6973
|
+
**定价对比**
|
|
6974
|
+
|
|
6975
|
+
| 维度 | 我方 | 竞品A | 竞品B |
|
|
6976
|
+
|------|------|-------|-------|
|
|
6977
|
+
| 起步价 | XXX | XXX | XXX |
|
|
6978
|
+
| 计费模式 | 按座席 | 按用量 | 按功能包 |
|
|
6979
|
+
| 企业版价格 | 询价 | 公开 | 询价 |
|
|
6980
|
+
| 免费版 | 有 | 有 | 无 |
|
|
6981
|
+
|
|
6982
|
+
**非功能对比**
|
|
6983
|
+
|
|
6984
|
+
| 维度 | 我方 | 竞品A | 竞品B |
|
|
6985
|
+
|------|------|-------|-------|
|
|
6986
|
+
| 部署方式 | SaaS+私有化 | 仅SaaS | 私有化 |
|
|
6987
|
+
| 数据合规 | 等保三级 | SOC2 | ISO27001 |
|
|
6988
|
+
| 技术栈/集成 | 开放API | 封闭 | 部分开放 |
|
|
6989
|
+
|
|
6990
|
+
4. 优劣势分析(SWOT)
|
|
6991
|
+
基于对比矩阵提炼我方竞争态势:
|
|
6992
|
+
|
|
6993
|
+
**竞争优势(Where We Win)**
|
|
6994
|
+
- 哪些功能维度我们明显领先?
|
|
6995
|
+
- 什么场景下客户更倾向选择我们?
|
|
6996
|
+
- 我们独有哪些能力(竞品无法快速复制)?
|
|
6997
|
+
|
|
6998
|
+
**竞争劣势(Where We Lose)**
|
|
6999
|
+
- 哪些功能维度我们明显落后?
|
|
7000
|
+
- 客户最常拿哪些点质疑我们?
|
|
7001
|
+
- 竞品有哪些"杀手锏"功能我们缺失?
|
|
7002
|
+
|
|
7003
|
+
**竞争机会(Gaps to Exploit)**
|
|
7004
|
+
- 竞品用户高频差评的问题,我们能更好解决吗?
|
|
7005
|
+
- 有哪些细分市场/场景竞品没有覆盖?
|
|
7006
|
+
|
|
7007
|
+
**竞争威胁(What to Watch)**
|
|
7008
|
+
- 竞品近期有哪些重大产品发布/融资?
|
|
7009
|
+
- 哪些竞品正在往我方核心场景延伸?
|
|
7010
|
+
|
|
7011
|
+
**竞争定位声明**(用于售前演讲)
|
|
7012
|
+
> "相比 [竞品],我们在 [场景] 下通过 [差异化能力] 为客户实现 [业务价值]。
|
|
7013
|
+
> 对于看重 [竞品优势点] 的客户,我们的应对是 [我方策略]。"
|
|
7014
|
+
|
|
7015
|
+
5. 输出竞品洞察报告
|
|
7016
|
+
输出结构化的竞品分析报告:
|
|
7017
|
+
|
|
7018
|
+
```markdown
|
|
7019
|
+
# 竞品分析报告 — [产品/场景名称]
|
|
7020
|
+
|
|
7021
|
+
**分析日期**:YYYY-MM-DD
|
|
7022
|
+
**分析目的**:[售前支撑 / 产品规划 / 定价策略]
|
|
7023
|
+
**主要竞品**:[竞品A、竞品B、竞品C]
|
|
7024
|
+
|
|
7025
|
+
## 核心结论(TL;DR)
|
|
7026
|
+
- 🥇 我们的核心优势:[2-3句话]
|
|
7027
|
+
- ⚠️ 需正视的差距:[1-2句话]
|
|
7028
|
+
- 🎯 最佳竞争场景:[哪类客户/哪种场景最利于我们赢单]
|
|
7029
|
+
|
|
7030
|
+
## 功能对比矩阵
|
|
7031
|
+
[表格]
|
|
7032
|
+
|
|
7033
|
+
## 定价对比
|
|
7034
|
+
[表格]
|
|
7035
|
+
|
|
7036
|
+
## 赢单话术(Battle Card)
|
|
7037
|
+
### 遇到"竞品A"时
|
|
7038
|
+
- **他们的优势**:[客观承认]
|
|
7039
|
+
- **我们的应对**:[差异化切入]
|
|
7040
|
+
- **杀手问题**(引导客户质疑竞品):[具体问题]
|
|
7041
|
+
|
|
7042
|
+
### 遇到"竞品B"时
|
|
7043
|
+
...
|
|
7044
|
+
|
|
7045
|
+
## 产品团队建议
|
|
7046
|
+
- 短期(本季度):[紧急补强点]
|
|
7047
|
+
- 中期(半年):[规划差异化功能]
|
|
7048
|
+
- 长期监测:[持续关注的竞品动向]
|
|
7049
|
+
```
|
|
7050
|
+
|
|
7051
|
+
输出格式:Markdown 竞品分析报告:功能矩阵 + 定价对比 + SWOT 分析 + Battle Card(赢单话术)+ 产品建议
|
|
7052
|
+
|
|
7053
|
+
## 售前方案
|
|
7054
|
+
|
|
7055
|
+
触发:售前方案 | 方案建议书 | solution proposal | 方案制作
|
|
7056
|
+
说明:根据客户需求制定针对性技术/商业解决方案文档,涵盖需求映射、方案架构、ROI 测算与实施路径
|
|
7057
|
+
|
|
7058
|
+
1. 需求痛点梳理
|
|
7059
|
+
在写方案之前,彻底理解客户的真实诉求:
|
|
7060
|
+
|
|
7061
|
+
**需求层次分析(冰山模型)**
|
|
7062
|
+
```
|
|
7063
|
+
表层需求(客户说的): "我们需要一个工单系统"
|
|
7064
|
+
深层需求(客户想的): "我们希望客诉处理更规范、更快"
|
|
7065
|
+
根本需求(客户要的): "我们希望客户满意度提升,减少流失"
|
|
7066
|
+
```
|
|
7067
|
+
|
|
7068
|
+
**痛点信息收集清单**
|
|
7069
|
+
- [ ] 客户现有方案是什么?核心不满是什么?
|
|
7070
|
+
- [ ] 本次采购的直接触发事件是什么?(合同到期 / 业务扩张 / 监管要求)
|
|
7071
|
+
- [ ] 决策链:谁主导 / 谁审批 / 谁使用(不同角色关注点不同)
|
|
7072
|
+
- [ ] 预算范围和采购时间窗口
|
|
7073
|
+
- [ ] 已知的技术约束(现有系统、数据合规、部署要求)
|
|
7074
|
+
- [ ] 评估标准:客户最看重什么(功能 / 价格 / 服务 / 品牌)
|
|
7075
|
+
|
|
7076
|
+
**关键痛点排序**(方案要优先回应前3个)
|
|
7077
|
+
```
|
|
7078
|
+
P0(不解决就不买):
|
|
7079
|
+
P1(解决了加分很多):
|
|
7080
|
+
P2(有更好,没有也行):
|
|
7081
|
+
```
|
|
7082
|
+
|
|
7083
|
+
2. 方案架构设计
|
|
7084
|
+
将客户需求映射到解决方案:
|
|
7085
|
+
|
|
7086
|
+
**需求-能力映射表**
|
|
7087
|
+
|
|
7088
|
+
| 客户痛点 | 我方解决方案 | 核心功能/模块 | 差异化亮点 |
|
|
7089
|
+
|---------|------------|-------------|----------|
|
|
7090
|
+
| [痛点1] | [解决思路] | [具体功能] | [为什么选我] |
|
|
7091
|
+
| [痛点2] | [解决思路] | [具体功能] | [为什么选我] |
|
|
7092
|
+
|
|
7093
|
+
**解决方案架构图**
|
|
7094
|
+
|
|
7095
|
+
用 Mermaid 或 ASCII 图描述方案整体架构:
|
|
7096
|
+
```mermaid
|
|
7097
|
+
graph TB
|
|
7098
|
+
subgraph 客户侧
|
|
7099
|
+
A[业务系统] --> B[集成层/API]
|
|
7100
|
+
end
|
|
7101
|
+
subgraph 我方平台
|
|
7102
|
+
B --> C[核心功能模块]
|
|
7103
|
+
C --> D[数据层]
|
|
7104
|
+
C --> E[分析层]
|
|
7105
|
+
end
|
|
7106
|
+
E --> F[报表/大屏]
|
|
7107
|
+
```
|
|
7108
|
+
|
|
7109
|
+
**分阶段交付建议**
|
|
7110
|
+
|
|
7111
|
+
| 阶段 | 交付内容 | 时间 | 价值 |
|
|
7112
|
+
|------|---------|------|------|
|
|
7113
|
+
| 阶段一(MVP) | [核心功能,快速见效] | X周 | [快速见到ROI] |
|
|
7114
|
+
| 阶段二(深化) | [更多功能,深度集成] | X周 | [扩大收益] |
|
|
7115
|
+
| 阶段三(扩展) | [进阶能力] | X周 | [长期价值] |
|
|
7116
|
+
|
|
7117
|
+
3. ROI 测算与价值量化
|
|
7118
|
+
用数字说话,让客户看到投资回报:
|
|
7119
|
+
|
|
7120
|
+
**价值量化框架(优先选有数据支撑的)**
|
|
7121
|
+
|
|
7122
|
+
| 价值维度 | 计算逻辑 | 估算数据 | 年化收益 |
|
|
7123
|
+
|---------|---------|---------|---------|
|
|
7124
|
+
| 效率提升 | 节省人工 X 小时/天 × 人力成本 | X人 × 2h/天 | ¥XXX/年 |
|
|
7125
|
+
| 错误减少 | 降低 X% 故障率 × 故障损失 | 年均X次故障 | ¥XXX/年 |
|
|
7126
|
+
| 合规价值 | 避免合规罚款/审计成本 | 潜在罚款 XXX | ¥XXX/年 |
|
|
7127
|
+
| 收入增长 | 支撑新业务 X% 增长 | 业务收入 XXX | ¥XXX/年 |
|
|
7128
|
+
|
|
7129
|
+
**ROI 汇总**
|
|
7130
|
+
```
|
|
7131
|
+
总投资(TCO):¥XXX(含实施+年费)
|
|
7132
|
+
年化收益:¥XXX
|
|
7133
|
+
投资回收期:X 个月
|
|
7134
|
+
3年ROI:X%
|
|
7135
|
+
```
|
|
7136
|
+
|
|
7137
|
+
> 注:ROI 数据应基于客户自身业务规模估算,并注明假设前提。
|
|
7138
|
+
> 过于激进的ROI数字会损害可信度,保守估算更有说服力。
|
|
7139
|
+
|
|
7140
|
+
**成功案例支撑**
|
|
7141
|
+
列举 1-2 个类似规模/行业客户的真实数据:
|
|
7142
|
+
> "[类似客户] 上线 X 个月后,[具体指标] 提升了 X%"
|
|
7143
|
+
|
|
7144
|
+
4. 实施路径与保障
|
|
7145
|
+
让客户相信"我们能做到":
|
|
7146
|
+
|
|
7147
|
+
**实施方法论**
|
|
7148
|
+
```
|
|
7149
|
+
标准实施流程(X周):
|
|
7150
|
+
Week 1-2:需求确认 & 环境准备
|
|
7151
|
+
Week 3-4:核心功能部署 & 数据迁移
|
|
7152
|
+
Week 5-6:集成联调 & 用户培训
|
|
7153
|
+
Week 7:UAT 验收 & 上线切换
|
|
7154
|
+
Week 8+:运营支持 & 持续优化
|
|
7155
|
+
```
|
|
7156
|
+
|
|
7157
|
+
**风险与应对**
|
|
7158
|
+
|
|
7159
|
+
| 风险 | 概率 | 影响 | 应对措施 |
|
|
7160
|
+
|------|------|------|---------|
|
|
7161
|
+
| 数据迁移复杂 | 中 | 高 | 提前数据质量评估 + 并行迁移方案 |
|
|
7162
|
+
| 现有系统集成 | 高 | 中 | 提供标准 API + 专属集成支持 |
|
|
7163
|
+
| 用户接受度 | 中 | 中 | 分批上线 + 专项培训计划 |
|
|
7164
|
+
|
|
7165
|
+
**服务保障承诺**
|
|
7166
|
+
- SLA 承诺:系统可用性 XX%,响应时间 < X小时
|
|
7167
|
+
- 实施团队:X 名工程师 + X 名项目经理
|
|
7168
|
+
- 售后支持:7×24 紧急响应 / 5×8 日常支持
|
|
7169
|
+
- 培训方案:在线培训 + 现场培训 + 操作手册
|
|
7170
|
+
|
|
7171
|
+
5. 输出方案文档
|
|
7172
|
+
按受众定制方案版本:
|
|
7173
|
+
|
|
7174
|
+
**完整技术方案(给技术决策者)**
|
|
7175
|
+
```markdown
|
|
7176
|
+
# [客户名称] [场景名称] 解决方案建议书
|
|
7177
|
+
|
|
7178
|
+
## 执行摘要(1页,给C-level看)
|
|
7179
|
+
[核心问题 + 解决方案 + 预期价值 = 3句话]
|
|
7180
|
+
|
|
7181
|
+
## 需求理解
|
|
7182
|
+
[对客户痛点的理解——体现我们"懂客户"]
|
|
7183
|
+
|
|
7184
|
+
## 解决方案
|
|
7185
|
+
[方案架构图 + 功能说明 + 与竞品差异化]
|
|
7186
|
+
|
|
7187
|
+
## 分阶段实施路径
|
|
7188
|
+
[阶段划分 + 时间线 + 里程碑]
|
|
7189
|
+
|
|
7190
|
+
## 投资回报分析
|
|
7191
|
+
[ROI 测算表]
|
|
7192
|
+
|
|
7193
|
+
## 实施保障
|
|
7194
|
+
[团队 + 方法论 + 服务承诺]
|
|
7195
|
+
|
|
7196
|
+
## 关于我们
|
|
7197
|
+
[公司/产品核心优势 + 典型案例]
|
|
7198
|
+
```
|
|
7199
|
+
|
|
7200
|
+
**精简演示版(PPT提纲,给汇报用)**
|
|
7201
|
+
1. 我们理解你的挑战(痛点共鸣)
|
|
7202
|
+
2. 我们的解决思路(架构图)
|
|
7203
|
+
3. 你将获得的价值(ROI)
|
|
7204
|
+
4. 我们的实施计划(时间线)
|
|
7205
|
+
5. 为什么是我们(差异化 + 案例)
|
|
7206
|
+
6. 下一步(明确行动项)
|
|
7207
|
+
|
|
7208
|
+
输出格式:Markdown 方案建议书:需求映射 + 方案架构图 + ROI 测算表 + 实施路径 + 演示提纲
|
|
7209
|
+
|
|
7210
|
+
## 测试计划
|
|
7211
|
+
|
|
7212
|
+
触发:测试计划 | 测试策略 | test plan | 测试方案
|
|
7213
|
+
说明:制定全面的测试策略与计划,覆盖测试范围、用例设计、环境准备和质量门禁,确保产品质量可量化
|
|
7214
|
+
|
|
7215
|
+
1. 测试范围与目标
|
|
7216
|
+
明确本次迭代的测试边界:
|
|
7217
|
+
|
|
7218
|
+
**测试目标**
|
|
7219
|
+
- 本版本要验证的核心功能/场景
|
|
7220
|
+
- 回归范围:哪些已有功能可能受影响?
|
|
7221
|
+
- 明确不测的内容(Out of Scope)及原因
|
|
7222
|
+
|
|
7223
|
+
**风险评估与测试重点**
|
|
7224
|
+
```
|
|
7225
|
+
高风险(必须全面测试):
|
|
7226
|
+
- 新增功能 / 核心主流程变更
|
|
7227
|
+
- 与外部系统集成点
|
|
7228
|
+
- 数据迁移或 Schema 变更
|
|
7229
|
+
|
|
7230
|
+
中风险(重点测试):
|
|
7231
|
+
- 依赖被修改模块的功能
|
|
7232
|
+
- 性能敏感路径
|
|
7233
|
+
|
|
7234
|
+
低风险(冒烟测试即可):
|
|
7235
|
+
- UI 样式微调
|
|
7236
|
+
- 文案修改
|
|
7237
|
+
- 配置项变更
|
|
7238
|
+
```
|
|
7239
|
+
|
|
7240
|
+
**测试类型矩阵**
|
|
7241
|
+
|
|
7242
|
+
| 测试类型 | 是否需要 | 负责人 | 工具 |
|
|
7243
|
+
|---------|---------|--------|------|
|
|
7244
|
+
| 单元测试 | ✅ | 开发 | Vitest/Jest |
|
|
7245
|
+
| 接口测试 | ✅ | QA/开发 | Postman/Newman |
|
|
7246
|
+
| 集成测试 | ✅ | QA | Playwright/Cypress |
|
|
7247
|
+
| 性能测试 | 视需求 | QA | k6/JMeter |
|
|
7248
|
+
| 安全测试 | 视需求 | 安全/QA | OWASP ZAP |
|
|
7249
|
+
| 兼容性测试 | ✅ | QA | BrowserStack |
|
|
7250
|
+
|
|
7251
|
+
2. 测试用例设计
|
|
7252
|
+
系统化设计测试用例,覆盖正常流、异常流和边界条件:
|
|
7253
|
+
|
|
7254
|
+
**测试用例设计方法**
|
|
7255
|
+
|
|
7256
|
+
**等价类划分**
|
|
7257
|
+
```
|
|
7258
|
+
有效等价类(正常输入):
|
|
7259
|
+
- 例:年龄字段 → 有效范围 [1, 150]
|
|
7260
|
+
|
|
7261
|
+
无效等价类(异常输入):
|
|
7262
|
+
- 例:年龄字段 → 负数、0、>150、非数字、空值
|
|
7263
|
+
```
|
|
7264
|
+
|
|
7265
|
+
**边界值分析**
|
|
7266
|
+
```
|
|
7267
|
+
对于范围 [min, max],测试:min-1, min, min+1, max-1, max, max+1
|
|
7268
|
+
```
|
|
7269
|
+
|
|
7270
|
+
**测试用例模板**
|
|
7271
|
+
|
|
7272
|
+
| TC编号 | 模块 | 用例标题 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
|
7273
|
+
|--------|------|---------|---------|---------|---------|--------|
|
|
7274
|
+
| TC-001 | 登录 | 正确账密登录成功 | 账号已注册 | 1.输入账密 2.点击登录 | 跳转首页 | P0 |
|
|
7275
|
+
| TC-002 | 登录 | 错误密码提示友好 | 账号已注册 | 1.输入错误密码 2.点击登录 | 显示"密码错误" | P1 |
|
|
7276
|
+
|
|
7277
|
+
**测试优先级定义**
|
|
7278
|
+
- **P0**:核心主流程,必须在版本发布前全部通过
|
|
7279
|
+
- **P1**:重要功能,应在发布前通过
|
|
7280
|
+
- **P2**:次要功能,可在下次迭代修复
|
|
7281
|
+
- **P3**:体验优化,记录但不阻塞发布
|
|
7282
|
+
|
|
7283
|
+
**探索性测试 Charter**
|
|
7284
|
+
除结构化用例外,为高风险模块安排探索测试:
|
|
7285
|
+
```
|
|
7286
|
+
探索目标:[模块名称]
|
|
7287
|
+
时间盒:X 小时
|
|
7288
|
+
关注点:[并发操作、网络异常、异常数据输入等]
|
|
7289
|
+
记录方式:截图 + 操作日志
|
|
7290
|
+
```
|
|
7291
|
+
|
|
7292
|
+
3. 测试环境与数据准备
|
|
7293
|
+
确保测试环境稳定、测试数据充分:
|
|
7294
|
+
|
|
7295
|
+
**环境规划**
|
|
7296
|
+
|
|
7297
|
+
| 环境 | 用途 | 部署方式 | 数据说明 |
|
|
7298
|
+
|------|------|---------|---------|
|
|
7299
|
+
| Dev | 开发自测 | 本地 | 模拟数据 |
|
|
7300
|
+
| Staging | QA 测试 | 自动部署 | 脱敏生产数据 |
|
|
7301
|
+
| PreProd | UAT验收 | 手动触发 | 接近真实数据 |
|
|
7302
|
+
| Production | 生产监控 | 审批发布 | 真实数据 |
|
|
7303
|
+
|
|
7304
|
+
**测试数据策略**
|
|
7305
|
+
```
|
|
7306
|
+
数据分类:
|
|
7307
|
+
- 正常数据:覆盖典型使用场景
|
|
7308
|
+
- 边界数据:最大值、最小值、空值
|
|
7309
|
+
- 异常数据:非法格式、SQL注入、XSS尝试
|
|
7310
|
+
- 历史存量数据:模拟真实用户场景
|
|
7311
|
+
|
|
7312
|
+
数据准备方法:
|
|
7313
|
+
- 自动生成:Faker.js / 工厂函数
|
|
7314
|
+
- 快照恢复:测试开始前恢复数据库快照
|
|
7315
|
+
- 独立隔离:每个测试用例使用独立数据集,避免互相污染
|
|
7316
|
+
```
|
|
7317
|
+
|
|
7318
|
+
**环境就绪检查**
|
|
7319
|
+
- [ ] 所有依赖服务(数据库、消息队列、第三方API)可用
|
|
7320
|
+
- [ ] 测试账号已创建(覆盖不同角色权限)
|
|
7321
|
+
- [ ] 监控和日志收集已开启
|
|
7322
|
+
- [ ] 被测版本已正确部署并通过冒烟测试
|
|
7323
|
+
|
|
7324
|
+
4. 自动化测试策略
|
|
7325
|
+
规划自动化覆盖,实现质量门禁:
|
|
7326
|
+
|
|
7327
|
+
**自动化优先级选择**
|
|
7328
|
+
```
|
|
7329
|
+
优先自动化的场景:
|
|
7330
|
+
✅ 回归测试(高频执行)
|
|
7331
|
+
✅ 核心主流程(P0 用例)
|
|
7332
|
+
✅ 接口测试(快速、稳定)
|
|
7333
|
+
✅ 数据驱动场景(大量参数组合)
|
|
7334
|
+
|
|
7335
|
+
暂不自动化的场景:
|
|
7336
|
+
❌ 探索性测试(需人工判断)
|
|
7337
|
+
❌ 一次性场景(成本高于收益)
|
|
7338
|
+
❌ UI 频繁变更的页面(维护成本高)
|
|
7339
|
+
```
|
|
7340
|
+
|
|
7341
|
+
**自动化框架选型**
|
|
7342
|
+
|
|
7343
|
+
| 类型 | 框架 | 适用场景 |
|
|
7344
|
+
|------|------|---------|
|
|
7345
|
+
| 单元测试 | Vitest / Jest | 函数/组件逻辑 |
|
|
7346
|
+
| API 测试 | Supertest / Postman | 接口验证 |
|
|
7347
|
+
| E2E 测试 | Playwright | 全链路主流程 |
|
|
7348
|
+
| 性能测试 | k6 | 压力/负载测试 |
|
|
7349
|
+
|
|
7350
|
+
**CI 集成配置**
|
|
7351
|
+
```yaml
|
|
7352
|
+
# 每次 PR 必须通过:
|
|
7353
|
+
- 单元测试(覆盖率 ≥ 80%)
|
|
7354
|
+
- API 接口测试(P0 用例全通过)
|
|
7355
|
+
|
|
7356
|
+
# 每日定时(凌晨 2:00):
|
|
7357
|
+
- 全量回归(含 P1 用例)
|
|
7358
|
+
- 性能基准测试(响应时间对比)
|
|
7359
|
+
```
|
|
7360
|
+
|
|
7361
|
+
**质量门禁(Quality Gate)**
|
|
7362
|
+
|
|
7363
|
+
| 指标 | 通过标准 | 失败处理 |
|
|
7364
|
+
|------|---------|---------|
|
|
7365
|
+
| 单测覆盖率 | ≥ 80% | 阻塞合并 |
|
|
7366
|
+
| P0 用例通过率 | 100% | 阻塞发布 |
|
|
7367
|
+
| P1 用例通过率 | ≥ 95% | 需评审 |
|
|
7368
|
+
| Critical/High Bug | 0 | 阻塞发布 |
|
|
7369
|
+
| 性能劣化 | P99 < 基线 120% | 需评审 |
|
|
7370
|
+
|
|
7371
|
+
5. 缺陷管理与发布标准
|
|
7372
|
+
建立清晰的缺陷处理流程和发布质量标准:
|
|
7373
|
+
|
|
7374
|
+
**缺陷严重级别定义**
|
|
7375
|
+
```
|
|
7376
|
+
P0 - Critical(阻塞级):
|
|
7377
|
+
系统崩溃、核心功能不可用、数据丢失/安全漏洞
|
|
7378
|
+
→ 立即修复,不发布
|
|
7379
|
+
|
|
7380
|
+
P1 - High(严重):
|
|
7381
|
+
核心功能受损,有临时绕过方法
|
|
7382
|
+
→ 本版本修复
|
|
7383
|
+
|
|
7384
|
+
P2 - Medium(一般):
|
|
7385
|
+
功能部分异常,不影响主流程
|
|
7386
|
+
→ 可延期至下版本
|
|
7387
|
+
|
|
7388
|
+
P3 - Low(轻微):
|
|
7389
|
+
体验问题、文案错误、UI 细节
|
|
7390
|
+
→ 排期修复,不阻塞发布
|
|
7391
|
+
```
|
|
7392
|
+
|
|
7393
|
+
**缺陷生命周期**
|
|
7394
|
+
```
|
|
7395
|
+
New → 开发确认 → In Progress → Fixed → 测试验证
|
|
7396
|
+
↓(无法复现/不修复)→ Closed / Won't Fix
|
|
7397
|
+
```
|
|
7398
|
+
|
|
7399
|
+
**发布质量标准(Release Criteria)**
|
|
7400
|
+
- ✅ 所有 P0 Bug 已修复并验证
|
|
7401
|
+
- ✅ P1 Bug 修复率 ≥ 95%,剩余已评估风险
|
|
7402
|
+
- ✅ P0/P1 测试用例通过率 100%
|
|
7403
|
+
- ✅ 性能指标未出现显著劣化(对比基线)
|
|
7404
|
+
- ✅ 安全扫描无 Critical/High 漏洞
|
|
7405
|
+
- ✅ 主要浏览器/设备兼容性验证通过
|
|
7406
|
+
|
|
7407
|
+
**测试报告模板**
|
|
7408
|
+
```markdown
|
|
7409
|
+
## 测试总结报告
|
|
7410
|
+
|
|
7411
|
+
### 执行概况
|
|
7412
|
+
- 测试周期:[开始] ~ [结束]
|
|
7413
|
+
- 执行用例数:N(P0: x, P1: y, P2: z)
|
|
7414
|
+
- 通过率:X%
|
|
7415
|
+
- 发现缺陷:N(P0:x, P1:y, P2:z, P3:w)
|
|
7416
|
+
- 已修复:N / 待修复:N
|
|
7417
|
+
|
|
7418
|
+
### 风险说明
|
|
7419
|
+
[遗留问题及上线风险评估]
|
|
7420
|
+
|
|
7421
|
+
### 质量结论
|
|
7422
|
+
✅ 建议发布 / ⚠️ 有条件发布 / ❌ 不建议发布
|
|
7423
|
+
```
|
|
7424
|
+
|
|
7425
|
+
输出格式:Markdown 测试计划文档:测试范围 + 用例设计矩阵 + 环境准备清单 + 自动化策略 + 发布质量标准
|
|
7426
|
+
|
|
7427
|
+
## 缺陷管理
|
|
7428
|
+
|
|
7429
|
+
触发:缺陷管理 | 缺陷报告 | bug report | 提 bug
|
|
7430
|
+
说明:规范缺陷报告撰写、优先级评估、根因追踪和统计分析,建立团队缺陷管理闭环
|
|
7431
|
+
|
|
7432
|
+
1. 高质量缺陷报告撰写
|
|
7433
|
+
一份好的 Bug Report 让开发无需追问就能复现和修复:
|
|
7434
|
+
|
|
7435
|
+
**缺陷报告必填字段**
|
|
7436
|
+
|
|
7437
|
+
```markdown
|
|
7438
|
+
## Bug Report: [简洁描述,动词+对象+现象]
|
|
7439
|
+
|
|
7440
|
+
**严重级别**: P0/P1/P2/P3
|
|
7441
|
+
**优先级**: 高/中/低
|
|
7442
|
+
**发现版本**: v1.x.x
|
|
7443
|
+
**环境**: [浏览器/OS/设备型号]
|
|
7444
|
+
**发现日期**: YYYY-MM-DD
|
|
7445
|
+
**报告人**: @名字
|
|
7446
|
+
|
|
7447
|
+
### 问题描述
|
|
7448
|
+
[一句话描述:在[场景]下,执行[操作],出现[异常现象]]
|
|
7449
|
+
|
|
7450
|
+
### 复现步骤
|
|
7451
|
+
1. 前置条件:[账号状态、数据准备、环境配置]
|
|
7452
|
+
2. 操作步骤(精确、可重复):
|
|
7453
|
+
- Step 1: 进入 [页面/模块]
|
|
7454
|
+
- Step 2: 执行 [具体操作]
|
|
7455
|
+
- Step 3: 观察 [现象]
|
|
7456
|
+
3. 实际结果:[发生了什么]
|
|
7457
|
+
4. 预期结果:[应该发生什么,依据:需求文档/设计稿]
|
|
7458
|
+
|
|
7459
|
+
### 复现率
|
|
7460
|
+
□ 必现(100%) □ 偶现(约 X%) □ 难以复现
|
|
7461
|
+
|
|
7462
|
+
### 证据
|
|
7463
|
+
- 截图/录屏:[附件]
|
|
7464
|
+
- 错误日志:[关键堆栈信息]
|
|
7465
|
+
- 网络请求:[接口返回的异常数据]
|
|
7466
|
+
```
|
|
7467
|
+
|
|
7468
|
+
**好 vs 坏 Bug Report 对比**
|
|
7469
|
+
|
|
7470
|
+
| 差的写法 | 好的写法 |
|
|
7471
|
+
|---------|---------|
|
|
7472
|
+
| "登录有问题" | "输入正确密码后点击登录,接口返回 500 但页面无错误提示(必现)" |
|
|
7473
|
+
| "页面显示错误" | "商品列表第2页价格显示 0.00,实际应为正确价格(Safari 15 + macOS)" |
|
|
7474
|
+
|
|
7475
|
+
2. 缺陷优先级与严重级别评估
|
|
7476
|
+
优先级评估直接影响研发排期,必须准确:
|
|
7477
|
+
|
|
7478
|
+
**严重级别(Severity)— 描述影响范围**
|
|
7479
|
+
|
|
7480
|
+
| 级别 | 定义 | 典型案例 |
|
|
7481
|
+
|------|------|---------|
|
|
7482
|
+
| **P0 Critical** | 系统崩溃 / 数据丢失 / 安全漏洞 / 核心功能完全不可用 | 支付失败但订单已创建、SQL注入 |
|
|
7483
|
+
| **P1 High** | 核心功能受损,无临时解决方案 | 购物车无法添加商品 |
|
|
7484
|
+
| **P2 Medium** | 功能部分异常,有绕过方法 | 导出 Excel 某列乱码,可手动复制 |
|
|
7485
|
+
| **P3 Low** | 体验问题、UI 细节、文案 | 按钮颜色不符合设计稿 |
|
|
7486
|
+
|
|
7487
|
+
**优先级(Priority)— 决定修复时间**
|
|
7488
|
+
|
|
7489
|
+
| 优先级 | 修复时间 | 说明 |
|
|
7490
|
+
|--------|---------|------|
|
|
7491
|
+
| 高 | 当天/1个工作日 | 影响版本发布或大量用户 |
|
|
7492
|
+
| 中 | 本迭代内 | 影响功能但不阻塞发布 |
|
|
7493
|
+
| 低 | 下个迭代 | 体验优化,排入 Backlog |
|
|
7494
|
+
|
|
7495
|
+
**严重级别 ≠ 优先级**(重要)
|
|
7496
|
+
```
|
|
7497
|
+
案例:登录页 Logo 错位(P3 Severity)
|
|
7498
|
+
→ 但明天是品牌发布会 → Priority = 高
|
|
7499
|
+
|
|
7500
|
+
案例:隐藏页面数据精度问题(P2 Severity)
|
|
7501
|
+
→ 用户无感知,下个迭代处理 → Priority = 低
|
|
7502
|
+
```
|
|
7503
|
+
|
|
7504
|
+
3. 缺陷生命周期管理
|
|
7505
|
+
规范缺陷流转,确保每个 Bug 都有人负责、有结果:
|
|
7506
|
+
|
|
7507
|
+
**缺陷状态流转**
|
|
7508
|
+
```
|
|
7509
|
+
[New] → 分配给开发确认
|
|
7510
|
+
↓ ↓
|
|
7511
|
+
[Confirmed] [Rejected/Won't Fix](说明原因)
|
|
7512
|
+
↓
|
|
7513
|
+
[In Progress] → 开发修复中
|
|
7514
|
+
↓
|
|
7515
|
+
[Fixed/待验证] → QA 回归验证
|
|
7516
|
+
↓ ↓
|
|
7517
|
+
[Closed] [Reopen](验证不通过)
|
|
7518
|
+
```
|
|
7519
|
+
|
|
7520
|
+
**关闭条件明确化**
|
|
7521
|
+
```
|
|
7522
|
+
✅ 正常关闭(Closed):
|
|
7523
|
+
- 修复已验证通过
|
|
7524
|
+
- 标注修复版本号
|
|
7525
|
+
|
|
7526
|
+
⚠️ Won't Fix(不修复):
|
|
7527
|
+
- 说明原因:设计如此/无法复现/成本>收益
|
|
7528
|
+
- 需 PM 或技术负责人确认
|
|
7529
|
+
|
|
7530
|
+
🔄 延期(Deferred):
|
|
7531
|
+
- 说明延期原因和目标版本
|
|
7532
|
+
- 不能无限期延期
|
|
7533
|
+
```
|
|
7534
|
+
|
|
7535
|
+
**回归测试要点**
|
|
7536
|
+
```
|
|
7537
|
+
验证修复时,除验证原场景外还需检查:
|
|
7538
|
+
1. 相关功能是否引入新问题(Side Effect)
|
|
7539
|
+
2. 历史类似 Bug 是否也已修复(举一反三)
|
|
7540
|
+
3. 修复方案是否符合原始需求(不能"曲线救国")
|
|
7541
|
+
```
|
|
7542
|
+
|
|
7543
|
+
4. 缺陷根因分析
|
|
7544
|
+
从每个 Bug 中学习,驱动质量改进:
|
|
7545
|
+
|
|
7546
|
+
**根因分类体系(参考 Orthogonal Defect Classification)**
|
|
7547
|
+
|
|
7548
|
+
| 根因类别 | 说明 | 预防措施 |
|
|
7549
|
+
|---------|------|---------|
|
|
7550
|
+
| 需求理解偏差 | 开发理解与产品意图不一致 | 需求评审 + AC 验收标准 |
|
|
7551
|
+
| 逻辑缺陷 | 算法/条件判断错误 | 单元测试覆盖分支 |
|
|
7552
|
+
| 边界未处理 | Null/空/越界/特殊字符 | 测试用例覆盖边界值 |
|
|
7553
|
+
| 接口契约不一致 | 前后端字段/格式约定不一致 | API 文档 + 接口自动化测试 |
|
|
7554
|
+
| 并发/竞态 | 多用户操作时出现数据异常 | 并发测试 + 事务设计 |
|
|
7555
|
+
| 环境/配置差异 | 测试环境通过,生产环境报错 | 配置即代码 + 环境等价性 |
|
|
7556
|
+
| 数据问题 | 存量数据格式与新逻辑不兼容 | 数据迁移脚本 + 兼容性设计 |
|
|
7557
|
+
|
|
7558
|
+
**5 Why 根因追溯(针对 P0/P1 Bug)**
|
|
7559
|
+
```
|
|
7560
|
+
Bug:用户余额扣减后订单状态仍为"待支付"
|
|
7561
|
+
|
|
7562
|
+
Why 1: 为什么订单状态没更新?→ 更新订单状态的事务回滚了
|
|
7563
|
+
Why 2: 为什么回滚了?→ 库存扣减接口超时导致事务失败
|
|
7564
|
+
Why 3: 为什么超时?→ 库存服务在高并发时响应慢
|
|
7565
|
+
Why 4: 为什么没有降级处理?→ 缺少超时熔断配置
|
|
7566
|
+
Why 5: 为什么缺少?→ 技术方案设计时未考虑外部依赖超时场景
|
|
7567
|
+
|
|
7568
|
+
根因:技术方案评审缺少分布式事务和超时处理checklist
|
|
7569
|
+
```
|
|
7570
|
+
|
|
7571
|
+
5. 缺陷统计与质量分析
|
|
7572
|
+
用数据驱动质量持续改进:
|
|
7573
|
+
|
|
7574
|
+
**核心缺陷指标**
|
|
7575
|
+
|
|
7576
|
+
| 指标 | 计算方式 | 参考目标 |
|
|
7577
|
+
|------|---------|---------|
|
|
7578
|
+
| 缺陷发现率 | 发现缺陷数 / 测试用例数 | 低于 5% 说明系统质量良好 |
|
|
7579
|
+
| 缺陷修复率 | 已修复 / 总发现 × 100% | 发布前 P0/P1 ≥ 100% |
|
|
7580
|
+
| 缺陷逃逸率 | 生产 Bug / (测试Bug + 生产Bug) | 目标 < 5% |
|
|
7581
|
+
| 平均修复时间 | 修复耗时均值(按P级统计) | P0 < 4h, P1 < 24h |
|
|
7582
|
+
| 缺陷重开率 | Reopen 次数 / Close 次数 | 目标 < 10%(说明修复质量) |
|
|
7583
|
+
|
|
7584
|
+
**缺陷分布分析**
|
|
7585
|
+
```
|
|
7586
|
+
维度1:按模块分布 → 识别质量热点,重点加强测试
|
|
7587
|
+
维度2:按根因分布 → 识别系统性问题,改进研发流程
|
|
7588
|
+
维度3:按发现阶段 → 越早发现成本越低,推动向左移测试
|
|
7589
|
+
开发自测 < 代码审查 < 测试阶段 < 上线后
|
|
7590
|
+
```
|
|
7591
|
+
|
|
7592
|
+
**周期性质量报告模板**
|
|
7593
|
+
```markdown
|
|
7594
|
+
## 缺陷分析报告 — v[版本] [时间范围]
|
|
7595
|
+
|
|
7596
|
+
### 本期概况
|
|
7597
|
+
- 总发现: N 个(P0:x, P1:y, P2:z, P3:w)
|
|
7598
|
+
- 已关闭: N 个 | 遗留: N 个
|
|
7599
|
+
- 逃逸到生产: N 个(逃逸率: X%)
|
|
7600
|
+
|
|
7601
|
+
### 质量热点
|
|
7602
|
+
高频缺陷模块 TOP3:
|
|
7603
|
+
1. [模块] — N 个缺陷 — 根因:[分类]
|
|
7604
|
+
2. ...
|
|
7605
|
+
|
|
7606
|
+
### 改进行动
|
|
7607
|
+
- [针对高频根因的具体改进措施]
|
|
7608
|
+
- 负责人 & 完成时间
|
|
7609
|
+
```
|
|
7610
|
+
|
|
7611
|
+
输出格式:Markdown 缺陷报告 + 优先级评估 + 根因分析(5 Why)+ 质量数据报告
|
|
7612
|
+
|
|
7613
|
+
## 运维手册
|
|
7614
|
+
|
|
7615
|
+
触发:运维手册 | runbook | 操作手册 | 变更管理
|
|
7616
|
+
说明:制定标准化运维手册(Runbook),涵盖日常操作、变更管理、故障响应和值班流程,实现运维操作可重复、可审计
|
|
7617
|
+
|
|
7618
|
+
1. 服务概览与运维范围
|
|
7619
|
+
建立服务的运维基础信息档案:
|
|
7620
|
+
|
|
7621
|
+
**服务基本信息**
|
|
7622
|
+
```markdown
|
|
7623
|
+
## 服务概览
|
|
7624
|
+
|
|
7625
|
+
| 字段 | 内容 |
|
|
7626
|
+
|------|------|
|
|
7627
|
+
| 服务名称 | [service-name] |
|
|
7628
|
+
| 负责团队 | [团队名] |
|
|
7629
|
+
| 主要联系人 | [姓名 + 联系方式] |
|
|
7630
|
+
| 备用联系人 | [姓名 + 联系方式] |
|
|
7631
|
+
| 代码仓库 | [Git URL] |
|
|
7632
|
+
| 部署环境 | Staging: [URL] / Production: [URL] |
|
|
7633
|
+
| 监控大盘 | [Grafana/Datadog Dashboard URL] |
|
|
7634
|
+
| 日志链接 | [Kibana/Loki URL] |
|
|
7635
|
+
| 告警配置 | [AlertManager/PagerDuty URL] |
|
|
7636
|
+
| SLA 目标 | 可用性 99.9%,P99 < 500ms |
|
|
7637
|
+
```
|
|
7638
|
+
|
|
7639
|
+
**依赖关系图**
|
|
7640
|
+
```
|
|
7641
|
+
[本服务] → 依赖 → [上游服务列表]
|
|
7642
|
+
← 被依赖 ← [下游服务列表]
|
|
7643
|
+
关键外部依赖:[数据库/缓存/消息队列/第三方API]
|
|
7644
|
+
```
|
|
7645
|
+
|
|
7646
|
+
**运维范围界定**
|
|
7647
|
+
- 纳入本 Runbook 的操作:[列出]
|
|
7648
|
+
- 需要升级处理的情况:[列出,及升级联系人]
|
|
7649
|
+
- 禁止直接操作的内容:[如生产数据库写操作需 DBA 审批]
|
|
7650
|
+
|
|
7651
|
+
2. 日常运维操作手册
|
|
7652
|
+
标准化高频运维操作,减少执行失误:
|
|
7653
|
+
|
|
7654
|
+
**操作手册模板格式**
|
|
7655
|
+
```markdown
|
|
7656
|
+
### 操作名称:[动词 + 对象]
|
|
7657
|
+
|
|
7658
|
+
**触发时机**:[什么情况下执行此操作]
|
|
7659
|
+
**执行频率**:[每日/每周/按需]
|
|
7660
|
+
**预计耗时**:[X 分钟]
|
|
7661
|
+
**风险等级**:🟢 低 / 🟡 中 / 🔴 高
|
|
7662
|
+
**前置条件**:[权限/环境/备份]
|
|
7663
|
+
**影响范围**:[会影响哪些服务/用户]
|
|
7664
|
+
|
|
7665
|
+
#### 执行步骤
|
|
7666
|
+
1. [步骤1,精确到命令行]
|
|
7667
|
+
```bash
|
|
7668
|
+
# 说明:[此命令的作用]
|
|
7669
|
+
kubectl get pods -n production | grep service-name
|
|
7670
|
+
```
|
|
7671
|
+
2. [步骤2]
|
|
7672
|
+
3. [验证步骤:确认操作成功]
|
|
7673
|
+
|
|
7674
|
+
#### 预期结果
|
|
7675
|
+
[执行成功后系统状态描述]
|
|
7676
|
+
|
|
7677
|
+
#### 异常处理
|
|
7678
|
+
- 如果遇到 [错误A]:[处理方式]
|
|
7679
|
+
- 如果遇到 [错误B]:[停止操作,升级处理]
|
|
7680
|
+
```
|
|
7681
|
+
|
|
7682
|
+
**日常巡检项(每日)**
|
|
7683
|
+
```
|
|
7684
|
+
□ 检查所有服务健康状态(Pod Running状态)
|
|
7685
|
+
□ 检查错误日志(过去24小时ERROR级别)
|
|
7686
|
+
□ 检查磁盘使用率(阈值 < 80%)
|
|
7687
|
+
□ 检查数据库连接池使用率
|
|
7688
|
+
□ 确认定时任务执行情况
|
|
7689
|
+
□ 检查证书过期时间(提前30天预警)
|
|
7690
|
+
```
|
|
7691
|
+
|
|
7692
|
+
**常用操作索引**
|
|
7693
|
+
|
|
7694
|
+
| 操作类别 | 操作名称 | 风险 | 章节 |
|
|
7695
|
+
|---------|---------|------|------|
|
|
7696
|
+
| 服务管理 | 重启服务 | 🟡 | §3.1 |
|
|
7697
|
+
| 扩缩容 | 手动扩容 Pod | 🟡 | §3.2 |
|
|
7698
|
+
| 数据库 | 只读查询 | 🟢 | §4.1 |
|
|
7699
|
+
| 发布 | 回滚到上个版本 | 🔴 | §5.3 |
|
|
7700
|
+
|
|
7701
|
+
3. 变更管理流程
|
|
7702
|
+
规范变更操作,降低生产事故风险:
|
|
7703
|
+
|
|
7704
|
+
**变更分类与审批矩阵**
|
|
7705
|
+
|
|
7706
|
+
| 变更类型 | 风险 | 审批人 | 执行窗口 | 回滚时间 |
|
|
7707
|
+
|---------|------|--------|---------|---------|
|
|
7708
|
+
| 配置微调(无功能影响) | 🟢 低 | 自批 | 任意时间 | < 5min |
|
|
7709
|
+
| 服务版本升级 | 🟡 中 | Team Lead | 工作日9-18点 | < 15min |
|
|
7710
|
+
| 基础设施变更 | 🔴 高 | Tech Lead + Ops | 低峰期(凌晨2-4点) | 需人工干预 |
|
|
7711
|
+
| 数据库 DDL | 🔴 高 | DBA + Tech Lead | 维护窗口 | 需回滚脚本 |
|
|
7712
|
+
|
|
7713
|
+
**变更执行 SOP**
|
|
7714
|
+
```
|
|
7715
|
+
变更前(Pre-Change):
|
|
7716
|
+
□ 变更申请已审批
|
|
7717
|
+
□ 测试环境验证通过
|
|
7718
|
+
□ 回滚方案已准备并测试
|
|
7719
|
+
□ 相关团队已知会
|
|
7720
|
+
□ 监控告警已关注
|
|
7721
|
+
|
|
7722
|
+
执行中(During Change):
|
|
7723
|
+
□ 按步骤执行,不跳步
|
|
7724
|
+
□ 每步执行后验证符合预期
|
|
7725
|
+
□ 有专人实时监控关键指标
|
|
7726
|
+
□ 记录每步操作和时间戳
|
|
7727
|
+
|
|
7728
|
+
变更后(Post-Change):
|
|
7729
|
+
□ 核心功能冒烟测试通过
|
|
7730
|
+
□ 监控指标正常(错误率/延迟)
|
|
7731
|
+
□ 日志无异常
|
|
7732
|
+
□ 更新变更记录文档
|
|
7733
|
+
```
|
|
7734
|
+
|
|
7735
|
+
**变更回滚决策树**
|
|
7736
|
+
```
|
|
7737
|
+
出现异常 → 是否影响用户?
|
|
7738
|
+
↓ 是
|
|
7739
|
+
能否快速定位并修复(< 15min)?
|
|
7740
|
+
↓ 不确定或 No
|
|
7741
|
+
立即回滚 → 通知相关方 → 事后复盘
|
|
7742
|
+
```
|
|
7743
|
+
|
|
7744
|
+
4. 故障响应与值班流程
|
|
7745
|
+
建立标准化的故障处置流程,缩短 MTTR:
|
|
7746
|
+
|
|
7747
|
+
**告警分级与响应时间**
|
|
7748
|
+
|
|
7749
|
+
| 告警级别 | 定义 | 响应时间 | 通知方式 |
|
|
7750
|
+
|---------|------|---------|---------|
|
|
7751
|
+
| P0 Critical | 服务不可用,影响全量用户 | 立即(5min内确认) | 电话 + IM + PagerDuty |
|
|
7752
|
+
| P1 High | 核心功能受损,影响部分用户 | 15 分钟内 | IM + PagerDuty |
|
|
7753
|
+
| P2 Medium | 功能降级,有替代方案 | 1 小时内 | IM |
|
|
7754
|
+
| P3 Low | 非关键指标异常 | 工作时间内 | 邮件/工单 |
|
|
7755
|
+
|
|
7756
|
+
**故障响应 SOP(P0/P1)**
|
|
7757
|
+
```
|
|
7758
|
+
T+0 告警触发 → 值班工程师确认
|
|
7759
|
+
T+5 快速评估影响范围,上报故障
|
|
7760
|
+
T+10 决策:临时缓解 or 继续排查?
|
|
7761
|
+
→ 能快速缓解(重启/回滚/降级):立即执行
|
|
7762
|
+
→ 需深入排查:拉相关同学进故障群
|
|
7763
|
+
T+30 每30分钟更新一次进展(状态页 + 钉/Slack)
|
|
7764
|
+
T+?? 故障缓解 → 告知相关方 → 持续监控
|
|
7765
|
+
T+24h 输出故障复盘报告(ethan postmortem)
|
|
7766
|
+
```
|
|
7767
|
+
|
|
7768
|
+
**值班手册**
|
|
7769
|
+
```markdown
|
|
7770
|
+
### 值班职责
|
|
7771
|
+
- 响应 P0/P1 告警(7×24)
|
|
7772
|
+
- 每日执行巡检清单
|
|
7773
|
+
- 处理常规运维请求(工作时间)
|
|
7774
|
+
|
|
7775
|
+
### 值班工具
|
|
7776
|
+
- 告警: [PagerDuty/钉钉]
|
|
7777
|
+
- 监控: [Grafana Dashboard URL]
|
|
7778
|
+
- 日志: [Kibana URL]
|
|
7779
|
+
- 通讯: [故障频道]
|
|
7780
|
+
|
|
7781
|
+
### 交接要点
|
|
7782
|
+
□ 未解决的告警和问题
|
|
7783
|
+
□ 进行中的变更
|
|
7784
|
+
□ 下周计划的变更
|
|
7785
|
+
□ 需要持续关注的风险点
|
|
7786
|
+
```
|
|
7787
|
+
|
|
7788
|
+
**常用诊断命令**
|
|
7789
|
+
```bash
|
|
7790
|
+
# 查看服务状态
|
|
7791
|
+
kubectl get pods -n [namespace] -o wide
|
|
7792
|
+
|
|
7793
|
+
# 查看最近日志
|
|
7794
|
+
kubectl logs -n [namespace] [pod-name] --tail=100 -f
|
|
7795
|
+
|
|
7796
|
+
# 查看资源使用
|
|
7797
|
+
kubectl top pods -n [namespace]
|
|
7798
|
+
|
|
7799
|
+
# 强制重启服务(仅在紧急情况)
|
|
7800
|
+
kubectl rollout restart deployment/[deployment-name] -n [namespace]
|
|
7801
|
+
```
|
|
7802
|
+
|
|
7803
|
+
5. 容量规划与持续改进
|
|
7804
|
+
运维不只是救火,还要防患于未然:
|
|
7805
|
+
|
|
7806
|
+
**容量规划指标**
|
|
7807
|
+
|
|
7808
|
+
| 资源 | 当前使用 | 阈值(告警) | 扩容触发线 | 当前余量 |
|
|
7809
|
+
|------|---------|-----------|----------|---------|
|
|
7810
|
+
| CPU | [X%] | 80% | 70%(持续10min) | [X%] |
|
|
7811
|
+
| 内存 | [X GB] | 85% | 75% | [X GB] |
|
|
7812
|
+
| 磁盘 | [X TB] | 80% | 70% | [X TB] |
|
|
7813
|
+
| 数据库连接数 | [X/max] | 80% | 70% | [X] |
|
|
7814
|
+
| QPS | [X/s] | 80%容量 | 70%容量 | [X/s] |
|
|
7815
|
+
|
|
7816
|
+
**扩容 SOP**
|
|
7817
|
+
```
|
|
7818
|
+
水平扩容(无状态服务):
|
|
7819
|
+
kubectl scale deployment/[name] --replicas=[n] -n [ns]
|
|
7820
|
+
→ 验证:kubectl get pods -n [ns] | grep [name]
|
|
7821
|
+
|
|
7822
|
+
垂直扩容(数据库/有状态服务):
|
|
7823
|
+
→ 需 DBA/架构师评审
|
|
7824
|
+
→ 在维护窗口执行
|
|
7825
|
+
→ 提前做好备份
|
|
7826
|
+
```
|
|
7827
|
+
|
|
7828
|
+
**Runbook 维护机制**
|
|
7829
|
+
```
|
|
7830
|
+
更新触发条件:
|
|
7831
|
+
✅ 每次执行操作后发现步骤有误/过期 → 立即更新
|
|
7832
|
+
✅ 架构变更后 → 同步更新受影响章节
|
|
7833
|
+
✅ 故障复盘中发现操作缺失 → 补充
|
|
7834
|
+
|
|
7835
|
+
维护责任人:[运维负责人]
|
|
7836
|
+
Review 周期:每季度一次全面 Review
|
|
7837
|
+
|
|
7838
|
+
文档版本控制:
|
|
7839
|
+
- 所有 Runbook 纳入 Git 版本管理
|
|
7840
|
+
- 重大变更通过 PR 审批后合并
|
|
7841
|
+
- 变更记录在文档头部的 Changelog
|
|
7842
|
+
```
|
|
7843
|
+
|
|
7844
|
+
**运维成熟度自评**
|
|
7845
|
+
```
|
|
7846
|
+
L1 - 被动响应:靠人工经验处理,高度依赖老员工
|
|
7847
|
+
L2 - 规范化:有 Runbook,操作可重复
|
|
7848
|
+
L3 - 自动化:常见故障自愈,变更自动化执行
|
|
7849
|
+
L4 - 智能化:AIOps,预测性运维,主动预防
|
|
7850
|
+
目标:尽快从 L[当前] 升级到 L[目标]
|
|
7851
|
+
```
|
|
7852
|
+
|
|
7853
|
+
输出格式:Markdown 运维手册:服务档案 + 操作 SOP + 变更流程 + 故障响应流程 + 值班手册
|
|
7854
|
+
|
|
6530
7855
|
---
|
|
6531
7856
|
规则:严格按步骤执行,不跳步,输出遵循各 Skill 的格式模板。
|