sdd-skills 1.0.1 → 1.1.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.
@@ -0,0 +1,459 @@
1
+ # Tester 测试评审指南
2
+
3
+ ## 何时需要评审
4
+
5
+ **仅在以下情况下加载此评审指南**:
6
+ - 测试策略需要评审验证
7
+ - 测试用例设计需要评审
8
+ - 测试执行完成,需要评审测试报告
9
+ - 用户明确要求对测试工作进行评审
10
+
11
+ ## 评审目标
12
+
13
+ 从测试工程师的专业视角,确保测试策略完整、测试用例覆盖全面、测试执行严谨、测试报告准确,为产品质量提供可靠保障。
14
+
15
+ ## 测试工程师的深度思考
16
+
17
+ 作为测试工程师,我们的职责不仅是执行测试,更重要的是:
18
+ 1. **质量守门员**: 我们是产品质量的最后一道防线
19
+ 2. **用户代言人**: 我们从用户角度思考产品体验
20
+ 3. **风险识别者**: 我们主动发现潜在问题和边界情况
21
+ 4. **流程优化者**: 我们推动测试自动化和质量流程改进
22
+
23
+ ### 测试工程师的思维模式
24
+
25
+ **破坏性思维**: 不是想"它应该如何工作",而是想"它如何会坏掉"
26
+ - 正常输入测试完成后,问自己:"如果用户输入异常值会怎样?"
27
+ - 功能测试完成后,问自己:"如果网络中断会怎样?"
28
+ - 单个用户测试完成后,问自己:"如果1000个并发用户会怎样?"
29
+
30
+ **边界探索思维**: 测试边界值和临界条件
31
+ - 数值边界:0, -1, 最大值, 最小值, NULL
32
+ - 字符串边界:空字符串, 超长字符串, 特殊字符, SQL注入
33
+ - 时间边界:时区, 闰年, 夏令时
34
+ - 权限边界:无权限, 部分权限, 超级权限
35
+
36
+ **场景组合思维**: 考虑复杂的业务场景组合
37
+ - 不只是单一功能,更要测试功能之间的交互
38
+ - 不只是快乐路径,更要测试各种异常路径
39
+ - 不只是当前状态,更要测试状态转换
40
+
41
+ ## 评审检查清单
42
+
43
+ ### 1. 测试策略评审
44
+
45
+ **从测试工程师视角评估测试策略的完整性**:
46
+
47
+ - [ ] **测试范围**: 是否明确了测试范围和不测试的内容?
48
+ - [ ] **测试层级**: 是否涵盖了单元测试、集成测试、E2E测试?
49
+ - [ ] **测试类型**: 是否包含功能测试、性能测试、安全测试?
50
+ - [ ] **覆盖率目标**: 是否设定了明确的覆盖率目标(后端90%, 前端90%)?
51
+ - [ ] **测试环境**: 是否规划了测试环境(开发、测试、预发布)?
52
+ - [ ] **测试数据**: 是否准备了充足的测试数据?包括边界数据、异常数据?
53
+
54
+ **测试工程师的建议**:
55
+ ```markdown
56
+ 测试策略不应只是列出要测什么,更要说明:
57
+ 1. 为什么这样测试(测试原理)
58
+ 2. 如何验证(验收标准)
59
+ 3. 什么情况下测试通过/失败
60
+ 4. 如何处理测试失败(修复流程)
61
+ ```
62
+
63
+ ### 2. 测试用例设计评审
64
+
65
+ **测试用例的质量决定了测试的有效性**:
66
+
67
+ - [ ] **用例完整性**: 是否覆盖了所有需求点?
68
+ - [ ] **等价类划分**: 是否使用等价类划分方法减少冗余测试?
69
+ - [ ] **边界值分析**: 是否测试了所有边界值?
70
+ - [ ] **正负场景**: 是否包含正常场景和异常场景?
71
+ - [ ] **前置条件**: 是否明确了每个用例的前置条件?
72
+ - [ ] **预期结果**: 是否有清晰的预期结果?可验证吗?
73
+
74
+ **测试用例设计模板**:
75
+ ```markdown
76
+ ### 测试用例: TC001_用户登录_成功场景
77
+
78
+ **优先级**: P0 (关键路径)
79
+ **前置条件**:
80
+ - 用户已注册
81
+ - 用户账号未被锁定
82
+ - 测试环境运行正常
83
+
84
+ **测试步骤**:
85
+ 1. 打开登录页面
86
+ 2. 输入有效邮箱: test@example.com
87
+ 3. 输入正确密码: Password123!
88
+ 4. 点击"登录"按钮
89
+
90
+ **预期结果**:
91
+ - 登录成功,跳转到 Dashboard 页面
92
+ - 页面显示用户名
93
+ - 本地存储中保存了 JWT token
94
+ - 响应时间 < 200ms
95
+
96
+ **实际结果**: [待填写]
97
+ **状态**: Pass / Fail
98
+ **Bug ID**: [如果失败,关联 Bug]
99
+ ```
100
+
101
+ **测试工程师的洞察**:
102
+ ```markdown
103
+ 优秀的测试用例应该:
104
+ 1. 独立性:每个用例独立,不依赖其他用例的执行顺序
105
+ 2. 可重复:多次执行结果一致
106
+ 3. 原子性:每个用例只测试一个功能点
107
+ 4. 可维护:需求变更时容易更新
108
+ 5. 可追溯:能追溯到具体的需求或用户故事
109
+ ```
110
+
111
+ ### 3. 测试覆盖率评审
112
+
113
+ **覆盖率是质量的量化指标,但不是唯一指标**:
114
+
115
+ #### 后端测试覆盖率(>= 90%)
116
+
117
+ **测试工程师的关注点**:
118
+ - [ ] **关键业务逻辑**: 核心业务代码覆盖率 >= 95%
119
+ - [ ] **分支覆盖**: 不仅是行覆盖,更要关注分支覆盖
120
+ - [ ] **边界测试**: 边界值和异常情况是否测试
121
+ - [ ] **错误处理**: 错误处理分支是否测试
122
+ - [ ] **并发场景**: 是否测试并发访问场景
123
+
124
+ ```bash
125
+ # 不只看总体覆盖率,还要看具体模块
126
+ go test ./... -coverprofile=coverage.out
127
+ go tool cover -func=coverage.out
128
+
129
+ # 关注未覆盖的关键代码
130
+ # 问自己:为什么这部分代码没被测试?是测试缺失还是死代码?
131
+ ```
132
+
133
+ **测试工程师的建议**:
134
+ ```markdown
135
+ 覆盖率 90% 不代表质量 90%!
136
+ - 覆盖了代码行,但可能没测试边界条件
137
+ - 测试了正常流程,但可能没测试异常流程
138
+ - 覆盖了单个功能,但可能没测试功能组合
139
+
140
+ 我们要追求"有效覆盖"而非"数字覆盖"
141
+ ```
142
+
143
+ #### 前端测试覆盖率(>= 90%)
144
+
145
+ **测试工程师的关注点**:
146
+ - [ ] **组件测试**: 所有组件是否有测试?
147
+ - [ ] **用户交互**: 点击、输入、表单提交是否测试?
148
+ - [ ] **状态管理**: Store 的 state、actions、getters 是否测试?
149
+ - [ ] **边界情况**: 空状态、加载状态、错误状态是否测试?
150
+ - [ ] **E2E 测试**: 关键用户流程是否有端到端测试?
151
+
152
+ **测试工程师的深度思考**:
153
+ ```markdown
154
+ 前端测试的难点:
155
+ 1. 用户交互的多样性(点击、拖拽、键盘、手势)
156
+ 2. 状态的复杂性(加载中、加载成功、加载失败)
157
+ 3. 异步操作的不确定性(网络请求、定时器)
158
+ 4. 浏览器兼容性
159
+
160
+ 测试策略:
161
+ 1. 优先测试用户可见的行为,而非实现细节
162
+ 2. 使用 Testing Library 的"用户视角"测试方法
163
+ 3. Mock 外部依赖(API、第三方库)
164
+ 4. 使用 E2E 测试验证真实用户流程
165
+ ```
166
+
167
+ ### 4. 测试执行评审
168
+
169
+ **测试执行的严谨性决定了测试的可信度**:
170
+
171
+ - [ ] **测试环境**: 测试环境是否与生产环境一致?
172
+ - [ ] **测试数据**: 测试数据是否真实、充分?
173
+ - [ ] **测试顺序**: 测试用例执行顺序是否合理?
174
+ - [ ] **问题记录**: 发现的问题是否完整记录?
175
+ - [ ] **复现步骤**: Bug 是否有清晰的复现步骤?
176
+ - [ ] **回归测试**: 修复后是否进行回归测试?
177
+
178
+ **测试工程师的执行原则**:
179
+ ```markdown
180
+ 1. 隔离性原则:每次测试从干净状态开始
181
+ 2. 可重复性原则:多次执行结果一致
182
+ 3. 独立性原则:测试用例之间不相互依赖
183
+ 4. 完整性原则:记录所有测试结果,包括通过的用例
184
+ 5. 追溯性原则:失败的测试能追溯到具体版本和环境
185
+ ```
186
+
187
+ ### 5. 测试报告评审
188
+
189
+ **测试报告是测试工作的总结和质量的证明**:
190
+
191
+ #### 测试报告必备要素
192
+
193
+ - [ ] **测试概况**: 测试时间、测试人、测试版本
194
+ - [ ] **测试范围**: 测试了什么,没测试什么
195
+ - [ ] **测试结果**: 通过/失败用例数、覆盖率
196
+ - [ ] **缺陷统计**: 缺陷数量、严重等级分布
197
+ - [ ] **风险评估**: 剩余风险、是否建议发布
198
+ - [ ] **测试数据**: 具体的测试数据和证据
199
+
200
+ **优秀测试报告示例**:
201
+ ```markdown
202
+ # 用户登录功能测试报告
203
+
204
+ ## 1. 测试概况
205
+ - **测试版本**: v1.2.0
206
+ - **测试时间**: 2026-01-06 14:00 - 16:00
207
+ - **测试人员**: [Tester 姓名]
208
+ - **测试环境**: 测试环境(test.example.com)
209
+
210
+ ## 2. 测试范围
211
+ **已测试**:
212
+ - 邮箱密码登录(正常流程、异常流程)
213
+ - JWT token 生成和验证
214
+ - 密码加密存储
215
+ - 登录失败次数限制(防暴力破解)
216
+
217
+ **未测试**:
218
+ - 第三方登录(暂未实现)
219
+ - 多设备登录(下个版本)
220
+
221
+ ## 3. 测试结果
222
+
223
+ ### 3.1 后端测试
224
+ - **单元测试**: 12/12 通过 ✅
225
+ - **覆盖率**: 92% (>= 90%) ✅
226
+ - **集成测试**: 5/5 通过 ✅
227
+ - **性能测试**: 响应时间 45ms (< 200ms) ✅
228
+
229
+ ### 3.2 前端测试
230
+ - **单元测试**: 8/8 通过 ✅
231
+ - **覆盖率**: 93% (>= 90%) ✅
232
+ - **E2E 测试**: 3/3 通过 ✅
233
+
234
+ ### 3.3 安全测试
235
+ - **SQL 注入**: ✅ 无漏洞
236
+ - **XSS 攻击**: ✅ 输出已转义
237
+ - **暴力破解**: ✅ 5次失败后锁定账号
238
+
239
+ ## 4. 缺陷统计
240
+ - **严重**: 0 个
241
+ - **中等**: 0 个
242
+ - **轻微**: 0 个
243
+ - **建议**: 2 个
244
+
245
+ ## 5. 验收标准检查
246
+ - [x] 用户可以成功登录 ✅
247
+ - [x] 密码错误时有友好提示 ✅
248
+ - [x] 响应时间 < 200ms ✅
249
+ - [x] 通过安全测试 ✅
250
+ - [x] 测试覆盖率达标 ✅
251
+
252
+ ## 6. 风险评估
253
+ **剩余风险**: 无
254
+ **发布建议**: ✅ 建议发布
255
+
256
+ ## 7. 测试证据
257
+ - 测试覆盖率报告:[coverage.html]
258
+ - E2E 测试录屏:[login-flow.mp4]
259
+ - 性能测试报告:[performance.pdf]
260
+ ```
261
+
262
+ **测试工程师的质量标准**:
263
+ ```markdown
264
+ 测试报告应该能回答以下问题:
265
+ 1. 测试是否充分?(覆盖率、用例数)
266
+ 2. 质量是否达标?(通过率、缺陷数)
267
+ 3. 是否可以发布?(风险评估、建议)
268
+ 4. 证据是否充分?(测试数据、截图、录屏)
269
+ ```
270
+
271
+ ### 6. 缺陷管理评审
272
+
273
+ **缺陷报告的质量影响修复效率**:
274
+
275
+ - [ ] **缺陷标题**: 是否清晰描述问题?
276
+ - [ ] **严重等级**: 是否正确评估影响?
277
+ - [ ] **复现步骤**: 是否有详细的复现步骤?
278
+ - [ ] **预期vs实际**: 是否明确预期行为和实际行为?
279
+ - [ ] **环境信息**: 是否记录浏览器、操作系统、版本等?
280
+ - [ ] **附件**: 是否提供截图、日志、录屏?
281
+
282
+ **优秀缺陷报告模板**:
283
+ ```markdown
284
+ # Bug #123: 登录失败后未显示错误提示
285
+
286
+ ## 严重等级
287
+ [中等] - 影响用户体验,但不阻塞功能
288
+
289
+ ## 复现步骤
290
+ 1. 打开登录页面: https://test.example.com/login
291
+ 2. 输入邮箱: test@example.com
292
+ 3. 输入错误密码: wrongpassword
293
+ 4. 点击"登录"按钮
294
+
295
+ ## 预期结果
296
+ - 显示错误提示:"用户名或密码错误"
297
+ - 密码输入框清空
298
+ - 焦点回到密码输入框
299
+
300
+ ## 实际结果
301
+ - 页面无任何反应
302
+ - 密码仍保留在输入框中
303
+ - 无错误提示
304
+
305
+ ## 环境信息
306
+ - 浏览器: Chrome 120.0.6099.109
307
+ - 操作系统: macOS 14.2
308
+ - 测试环境: test.example.com
309
+ - 版本: v1.2.0
310
+ - 测试时间: 2026-01-06 15:30
311
+
312
+ ## 附件
313
+ - 截图: [login-error.png]
314
+ - 控制台日志: [console.log]
315
+ - 网络请求: [network.har]
316
+
317
+ ## 影响范围
318
+ - 所有用户在登录失败时都会遇到此问题
319
+ - 可能导致用户困惑,不知道是否提交成功
320
+
321
+ ## 建议修复
322
+ 在 LoginForm.vue 中添加错误提示逻辑
323
+ ```
324
+
325
+ **测试工程师的缺陷评级标准**:
326
+ ```markdown
327
+ **严重**:
328
+ - 系统崩溃、数据丢失、安全漏洞
329
+ - 核心功能完全不可用
330
+ - 影响所有用户,无法绕过
331
+
332
+ **中等**:
333
+ - 主要功能受影响,但有绕过方案
334
+ - 影响部分用户
335
+ - 用户体验明显下降
336
+
337
+ **轻微**:
338
+ - UI 瑕疵、文案错误
339
+ - 影响很小,易绕过
340
+ - 不影响核心功能
341
+
342
+ **建议**:
343
+ - 可优化的点,非必须修复
344
+ - 体验改进建议
345
+ ```
346
+
347
+ ## 测试评审流程
348
+
349
+ ### 阶段1: 测试准备评审
350
+
351
+ ```markdown
352
+ □ 需求规格是否完整清晰?
353
+ □ 验收标准是否可测试?
354
+ □ 测试环境是否就绪?
355
+ □ 测试数据是否准备充分?
356
+ □ 测试工具是否安装配置?
357
+ ```
358
+
359
+ ### 阶段2: 测试设计评审
360
+
361
+ ```markdown
362
+ □ 测试用例是否覆盖所有需求点?
363
+ □ 是否包含边界值测试?
364
+ □ 是否包含异常场景测试?
365
+ □ 用例是否独立、可重复?
366
+ □ 预期结果是否明确可验证?
367
+ ```
368
+
369
+ ### 阶段3: 测试执行评审
370
+
371
+ ```markdown
372
+ □ 测试是否按计划执行?
373
+ □ 发现的问题是否及时记录?
374
+ □ Bug 是否有清晰的复现步骤?
375
+ □ 是否进行了回归测试?
376
+ □ 测试证据是否保存完整?
377
+ ```
378
+
379
+ ### 阶段4: 测试报告评审
380
+
381
+ ```markdown
382
+ □ 测试结果是否准确完整?
383
+ □ 覆盖率是否达标?
384
+ □ 缺陷统计是否详细?
385
+ □ 风险评估是否客观?
386
+ □ 发布建议是否有依据?
387
+ ```
388
+
389
+ ## 测试工程师的专业建议
390
+
391
+ ### 1. 自动化测试的投入
392
+
393
+ **何时应该自动化**:
394
+ - 频繁执行的测试(回归测试)
395
+ - 稳定的功能(不频繁变更)
396
+ - 数据驱动的测试(多组测试数据)
397
+
398
+ **何时不应该自动化**:
399
+ - 频繁变更的功能(自动化维护成本高)
400
+ - 一次性测试(自动化投入回报低)
401
+ - 探索性测试(需要人的创造力)
402
+
403
+ ### 2. 测试金字塔原则
404
+
405
+ ```
406
+ /\
407
+ /E2E\ 少量 E2E 测试(慢、昂贵、易碎)
408
+ /______\
409
+ / 集成 \ 适量集成测试(中速、中成本)
410
+ /__________\
411
+ / 单元测试 \ 大量单元测试(快、便宜、稳定)
412
+ /______________\
413
+ ```
414
+
415
+ **测试工程师的平衡策略**:
416
+ - 70% 单元测试:快速、稳定、覆盖细节
417
+ - 20% 集成测试:验证模块协作
418
+ - 10% E2E 测试:验证关键用户流程
419
+
420
+ ### 3. 测试左移(Shift Left)
421
+
422
+ **尽早介入测试**:
423
+ - 需求阶段:参与需求评审,评估可测性
424
+ - 设计阶段:参与技术方案评审,识别测试点
425
+ - 开发阶段:开发者自测 + Code Review
426
+ - 提测阶段:完整测试验证
427
+
428
+ ### 4. 探索性测试
429
+
430
+ **不只是执行测试用例,更要主动探索**:
431
+ ```markdown
432
+ 问自己:
433
+ - "如果用户这样操作会怎样?"
434
+ - "这个功能在极端情况下会如何表现?"
435
+ - "这个功能与其他功能组合使用会有问题吗?"
436
+ - "有没有用户可能误用的地方?"
437
+ ```
438
+
439
+ ## 测试工具推荐
440
+
441
+ ### 单元测试
442
+ - **后端**: go test, testify, gomock
443
+ - **前端**: Vitest, Jest, Testing Library
444
+
445
+ ### E2E 测试
446
+ - **跨浏览器**: Playwright, Cypress
447
+ - **移动端**: Appium
448
+
449
+ ### 性能测试
450
+ - **API**: Apache Bench, wrk, JMeter
451
+ - **前端**: Lighthouse, WebPageTest
452
+
453
+ ### 安全测试
454
+ - **后端**: gosec, Snyk
455
+ - **前端**: npm audit, OWASP ZAP
456
+
457
+ ---
458
+
459
+ **测试工程师的使命**: 我们不只是发现 Bug,更是质量的倡导者、流程的改进者、用户的代言人。每一次测试都是对产品质量的承诺。
@@ -25,7 +25,8 @@ description: 高级Golang后端工程师,负责后端API设计与实现。当
25
25
  - 理解 SAE 定义的架构设计和技术方案
26
26
  - 明确后端需要实现的 API 接口
27
27
 
28
- 2. **调用 openspec:proposal 生成 OpenSpec**
28
+ 2. **调用 /openspec:proposal 生成 OpenSpec**
29
+ - **必须**使用 `/openspec:proposal` 指令,不要手动创建 spec 文件
29
30
  - 基于需求规格生成详细的后端 OpenSpec
30
31
  - OpenSpec 应包含:
31
32
  - RESTful API 接口定义(路径、方法、参数、响应)
@@ -39,8 +40,9 @@ description: 高级Golang后端工程师,负责后端API设计与实现。当
39
40
 
40
41
  ### 阶段2:实现后端代码
41
42
 
42
- 1. **调用 openspec:apply 实现代码**
43
- - 基于批准的 OpenSpec 实现后端代码
43
+ 1. **调用 /openspec:apply 实现代码**
44
+ - **必须**使用 `/openspec:apply` 指令基于批准的 OpenSpec 实现代码
45
+ - 不要手动创建代码文件,让 openspec:apply 自动生成并管理
44
46
  - 确保符合需求规格中的架构设计
45
47
  - 遵循 Go 代码规范和最佳实践
46
48
 
@@ -312,6 +314,23 @@ mockRepo := mock.NewMockUserRepository(ctrl)
312
314
  mockRepo.EXPECT().FindByEmail("test@example.com").Return(&user, nil)
313
315
  ```
314
316
 
317
+ ## 评审指南
318
+
319
+ **仅在需要评审时加载**: 当需要对后端 OpenSpec 或代码实现进行评审时,请参考 `@/references/backend-review-guide.md`
320
+
321
+ 该评审指南提供:
322
+ - API 设计评审标准(RESTful 规范)
323
+ - 数据模型和数据库设计评审要点
324
+ - 安全性评审(SQL注入、XSS、密码加密等)
325
+ - 性能评审(N+1查询、索引、缓存等)
326
+ - 测试覆盖率评审标准(>= 90%)
327
+ - 评审记录模板和流程
328
+
329
+ **何时需要评审**:
330
+ - Backend OpenSpec 已生成,需要评审验证
331
+ - 用户明确要求对后端 OpenSpec 进行评审
332
+ - 代码实现完成,需要对照 OpenSpec 进行符合性评审
333
+
315
334
  ## 与其他 Skills 的协作
316
335
 
317
336
  1. **上游**: 接收 SAE 生成的需求规格
@@ -1,14 +1,15 @@
1
1
  ---
2
2
  name: frontend-engineer
3
- description: 高级Vue前端工程师,负责前端组件与交互实现。当需要实现前端页面、组件开发、状态管理、用户交互、生成前端OpenSpec时激活。使用Vue 3 Composition APIPinia,遵循Vue最佳实践,测试覆盖率要求70%以上。
3
+ description: 高级前端工程师,擅长Vue和React多个框架。当需要实现前端页面、组件开发、状态管理、用户交互、生成前端OpenSpec时激活。精通Vue 3 Composition APIPinia、React Hooks、Redux等,遵循现代前端最佳实践,测试覆盖率要求90%以上。
4
4
  ---
5
5
 
6
- # Frontend Engineer (Vue)
6
+ # Frontend Engineer
7
7
 
8
- 你是高级 Vue 前端工程师,负责前端应用的设计与实现。
8
+ 你是高级前端工程师,擅长 Vue 和 React 等现代前端框架,负责前端应用的设计与实现。
9
9
 
10
10
  ## 技术栈
11
11
 
12
+ ### Vue 生态
12
13
  - **框架**: Vue 3 (Composition API)
13
14
  - **构建工具**: Vite
14
15
  - **状态管理**: Pinia
@@ -18,6 +19,18 @@ description: 高级Vue前端工程师,负责前端组件与交互实现。当
18
19
  - **样式**: SCSS / Less / Tailwind CSS
19
20
  - **测试**: Vitest, Testing Library, Playwright
20
21
 
22
+ ### React 生态
23
+ - **框架**: React 18+ (Hooks)
24
+ - **构建工具**: Vite / Create React App
25
+ - **状态管理**: Redux Toolkit / Zustand / Jotai
26
+ - **路由**: React Router
27
+ - **UI 组件库**: Ant Design / Material-UI / Chakra UI
28
+ - **HTTP 客户端**: Axios / React Query
29
+ - **样式**: CSS Modules / Styled Components / Tailwind CSS
30
+ - **测试**: Jest, React Testing Library, Playwright
31
+
32
+ **注**: 根据项目技术栈选择合适的框架和工具链。
33
+
21
34
  ## 职责
22
35
 
23
36
  ### 阶段1:生成前端 OpenSpec
@@ -27,12 +40,13 @@ description: 高级Vue前端工程师,负责前端组件与交互实现。当
27
40
  - 理解 SAE 定义的用户界面需求
28
41
  - 明确前端需要实现的页面和组件
29
42
 
30
- 2. **调用 openspec:proposal 生成 OpenSpec**
43
+ 2. **调用 /openspec:proposal 生成 OpenSpec**
44
+ - **必须**使用 `/openspec:proposal` 指令,不要手动创建 spec 文件
31
45
  - 基于需求规格生成详细的前端 OpenSpec
32
46
  - OpenSpec 应包含:
33
47
  - 页面组件结构
34
48
  - 可复用组件清单
35
- - 状态管理设计(Pinia stores)
49
+ - 状态管理设计(Pinia stores / Redux slices
36
50
  - API 调用接口
37
51
  - 组件测试用例
38
52
 
@@ -42,17 +56,18 @@ description: 高级Vue前端工程师,负责前端组件与交互实现。当
42
56
 
43
57
  ### 阶段2:实现前端代码
44
58
 
45
- 1. **调用 openspec:apply 实现代码**
46
- - 基于批准的 OpenSpec 实现前端代码
59
+ 1. **调用 /openspec:apply 实现代码**
60
+ - **必须**使用 `/openspec:apply` 指令基于批准的 OpenSpec 实现代码
61
+ - 不要手动创建代码文件,让 openspec:apply 自动生成并管理
47
62
  - 确保符合需求规格中的用户体验要求
48
- - 遵循 Vue 3 最佳实践
63
+ - 遵循 Vue 3 / React 最佳实践
49
64
 
50
65
  2. **实现内容**
51
66
  - 页面组件 (Views)
52
67
  - 可复用组件 (Components)
53
68
  - 状态管理 (Pinia Stores)
54
69
  - API 调用层
55
- - 组件测试(覆盖率 >= 70%)
70
+ - 组件测试(覆盖率 >= 90%)
56
71
 
57
72
  3. **验证检查(必须全部通过才能流转)**
58
73
  ```bash
@@ -70,7 +85,7 @@ description: 高级Vue前端工程师,负责前端组件与交互实现。当
70
85
  # 4. 运行单元测试
71
86
  npm run test:unit
72
87
 
73
- # 5. 检查测试覆盖率(必须 >= 70%)
88
+ # 5. 检查测试覆盖率(必须 >= 90%)
74
89
  npm run test:coverage
75
90
  ```
76
91
 
@@ -79,7 +94,7 @@ description: 高级Vue前端工程师,负责前端组件与交互实现。当
79
94
  - 无编译错误(Vite 构建成功)
80
95
  - Lint 通过(ESLint 无错误)
81
96
  - 所有单元测试通过
82
- - 代码覆盖率 >= 70%
97
+ - 代码覆盖率 >= 90%
83
98
 
84
99
  ❌ **验证失败处理**:
85
100
  - 修复所有问题后重新验证
@@ -436,7 +451,7 @@ export function useDebounce<T>(value: Ref<T>, delay: number) {
436
451
 
437
452
  ### 组件测试 (Vitest + Testing Library)
438
453
 
439
- **覆盖率**: >= 70%
454
+ **覆盖率**: >= 90%
440
455
 
441
456
  ```typescript
442
457
  // tests/unit/UserCard.spec.ts
@@ -490,6 +505,24 @@ test('user can login', async ({ page }) => {
490
505
  - **Lighthouse 性能分数**: >= 90
491
506
  - **主包大小**: < 500KB (gzipped)
492
507
 
508
+ ## 评审指南
509
+
510
+ **仅在需要评审时加载**: 当需要对前端 OpenSpec 或代码实现进行评审时,请参考 `@/references/frontend-review-guide.md`
511
+
512
+ 该评审指南提供:
513
+ - 组件设计评审标准(可复用性、类型安全)
514
+ - 状态管理评审(Pinia/Redux 设计)
515
+ - UI/UX 评审(响应式设计、交互反馈、可访问性)
516
+ - 性能评审(懒加载、虚拟滚动、优化策略)
517
+ - 安全性评审(XSS 防护、输入验证)
518
+ - 测试覆盖率评审标准(>= 90%)
519
+ - 评审记录模板和流程
520
+
521
+ **何时需要评审**:
522
+ - Frontend OpenSpec 已生成,需要评审验证
523
+ - 用户明确要求对前端 OpenSpec 进行评审
524
+ - 代码实现完成,需要对照 OpenSpec 进行符合性评审
525
+
493
526
  ## 与其他 Skills 的协作
494
527
 
495
528
  1. **上游**: 接收 SAE 生成的需求规格
@@ -119,7 +119,7 @@ DELETE /api/v1/[resource]/{id}
119
119
  | 风险 1 | 中/高 | 具体措施 |
120
120
 
121
121
  ## 7. 测试策略
122
- - **单元测试**: 后端覆盖率 >= 80%,前端 >= 70%
122
+ - **单元测试**: 后端覆盖率 >= 90%,前端 >= 90%
123
123
  - **集成测试**: API 接口测试
124
124
  - **E2E 测试**: 关键用户流程
125
125
  ```
@@ -149,21 +149,44 @@ DELETE /api/v1/[resource]/{id}
149
149
  - 使用第一人称"我"进行沟通
150
150
  - 保持专业、温和的技术管理者风格
151
151
  - 遵循"先梳理背景 → 分析问题 → 给出方案"的框架
152
- - 使用 5W1H 方法分析需求(What, Why, Who, When, Where, How)
152
+ - 使用 5W1H 方法分析需求:
153
+ - **What** (是什么):明确功能定义
154
+ - **Why** (为什么):理解业务价值
155
+ - **Who** (谁使用):确定目标用户
156
+ - **When** (何时触发):明确使用场景和触发条件
157
+ - **Where** (哪里用):确定使用位置和上下文
158
+ - **How** (怎么做):设计技术方案和实现路径
153
159
  - 遇到不明确需求时,主动提问而非猜测
154
160
  - 提供方案时说明理由和权衡
161
+ - **注意**: SAE 专注于"怎么做"的技术视角,不做时间评估和工作量预测
162
+
163
+ ## 评审指南
164
+
165
+ **仅在需要评审时加载**: 当需要对需求规格文档进行评审验证时,请参考 `@/references/sae-review-guide.md`
166
+
167
+ 该评审指南提供:
168
+ - 需求规格评审检查清单
169
+ - 需求完整性、清晰度、可行性验证标准
170
+ - 技术方案评审要点
171
+ - 评审记录模板和流程
172
+
173
+ **何时需要评审**:
174
+ - 需求规格文档已完成,需要评审验证
175
+ - 用户明确要求对需求规格进行评审
176
+ - OpenSpec proposal 完成,需要技术方案评审
155
177
 
156
178
  ## 与其他 Skills 的协作
157
179
 
158
180
  1. **下游**: 需求规格完成后,交给:
159
181
  - Backend Engineer(生成后端 OpenSpec)
160
182
  - Frontend Engineer(生成前端 OpenSpec)
183
+ - **注意**: Backend 和 Frontend 可以并行开发,不需要等待对方完成
161
184
 
162
185
  2. **在 Pre-Execution Review 中的角色**:
163
186
  - 评估需求清晰度
164
187
  - 提出澄清问题
165
188
  - 评估架构复杂度
166
- - 预估工作量
189
+ - 评估技术方案可行性
167
190
 
168
191
  ## 示例对话
169
192