Files
ai-ops/tech/QA_REVIEW_REPORT.md
2026-05-12 17:48:22 +08:00

130 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# QA 审核报告AI-Ops 测试设计文档
> 审核日期2026-05-11
> 审核人QA Agent
> 审核对象TEST_DESIGN.md / CASES.md / STRATEGY.md
> 对照基准PRD.md (AC-01 ~ AC-12, F-01 ~ F-08)
---
## 总体评级C
**评级依据**测试策略框架和分层模型设计较为完整Mock 策略、环境矩阵、灰度 Phase 规划具备可执行基础。但存在 3 项 P0 严重缺陷AC 负向用例大面积缺失、异常流程 F-05~F-08 在 CASES.md 中完全遗漏、CI 集成零配置。上述问题将导致测试覆盖存在盲区,且无法形成自动化门禁闭环。
---
## 优点
1. **测试分层模型清晰**TEST_DESIGN.md 1.1 明确划分 Unit → Integration → E2E 三层STRATEGY.md 补充 Chaos Test结构合理。
2. **Mock 策略全面**:覆盖 Prometheus、 supply-api、token-runtime、通知渠道、PostgreSQL、Redis 等全部核心外部依赖工具选型合理sqlmock / miniredis / gock / httptest
3. **环境矩阵设计完整**Local Dev / CI / Sandbox / Staging / Production 五层环境各有明确的用途、数据特征和外部依赖策略。
4. **灰度 Phase 规划可落地**Phase 1~4 的验证内容与回归集范围明确,与 PRD 发布策略对应。
5. **发布门禁检查表8.1)覆盖关键风险点**:独立/集成双模式验证、沙盒验证、回滚演练、权限矩阵、端到端链路验证等 8 项全部列出。
6. **回归集分级合理**区分快速回归集9 条5-10 分钟与完整回归集43 条30-60 分钟),适合不同触发条件。
---
## 发现问题(按严重度分类)
### P0 — 阻塞级(必须修复,否则无法进入开发/提测)
| 编号 | 问题描述 | 影响 | 依据 |
|------|---------|------|------|
| P0-01 | **AC 负向测试用例大面积缺失**。12 个 AC 中至少 8 个AC-01/02/04/05/06/09/10/11在 CASES.md 与 TEST_DESIGN.md 中均无任何负向/异常输入用例。仅 AC-03、AC-08 有明确的 Negative 用例AC-12 有权限越界类负向用例。 | 无法验证系统在非法输入、边界越界、权限不足、数据异常等场景下的行为,存在生产缺陷逃逸风险。 | 审核标准 #1 |
| P0-02 | **CASES.md 遗漏异常流程 F-05~F-08**。PRD 明确定义 F-01~F-08 共 8 条异常流程CASES.md 仅覆盖 TC-E1~E4对应 F-01~F-04F-05审计满盘、F-06级联故障、F-07数据库全面中断、F-08看板计算超时完全缺失。 | 核心容灾与降级场景无测试用例兜底,与 PRD 6. 节要求不符。 | 审核标准 #2 |
| P0-03 | **CI 集成零配置**。STRATEGY.md 6. 仅文字描述"PR 提交时自动触发",未提供任何 CI 配置文件(如 .github/workflows/ci.yml、Pipeline 阶段定义、失败通知模板、覆盖率采集与阻断逻辑。 | 无法形成自动化质量门禁,所有覆盖率/通过率要求沦为纸面标准。 | 审核标准 #6 |
| P0-04 | **性能压测方法过于简略,无执行载体**。TEST_DESIGN.md 9.1 虽列出 k6 并发用户数,但未提供 k6 脚本、压测环境规格CPU/内存/DB 实例、数据量基准、P99 计算方式、持续时间。"单次告警触发计时"未说明计时起点/终点和采样次数。 | 性能基准无法复现和验证,灰度门禁中"性能基准测试通过"无法判定。 | 审核标准 #8 |
### P1 — 高优先级(强烈建议修复,否则提测后返工风险高)
| 编号 | 问题描述 | 影响 | 依据 |
|------|---------|------|------|
| P1-01 | **覆盖率门槛缺少验证机制**。文档多次声明 domain ≥70%、service/handler ≥80%,但未说明:使用 `go test -coverprofile` 还是第三方工具、CI 中如何解析并阻断未达标 PR、覆盖率报告存储位置、增量覆盖率是否校验。 | 覆盖率目标无法自动 enforce开发者可能随时跌破门槛。 | 审核标准 #4 |
| P1-02 | **混沌测试Chaos Test无具体用例设计**。STRATEGY.md 提到 chaos-mesh / 自定义脚本和三类故障(单机故障、网络分区、主从切换),但 TEST_DESIGN.md 与 CASES.md 中均未设计任何 Chaos 用例(无 Given-When-Then、无验证点、无预期行为。 | 混沌测试 layer 有名无实,无法验证系统韧性。 | 审核标准 #3 |
| P1-03 | **测试数据管理策略缺关键细节**。STRATEGY.md 提到 `test/fixtures/` 和"自洁"但未给出fixtures 目录结构规范、大数据量(如 10000 条审计日志)的生成脚本、敏感数据脱敏方法、不同测试并行时的数据隔离策略。 | 大数据量性能用例和 E2E 用例可能因数据准备不足而无法稳定执行。 | 审核标准 #7 |
| P1-04 | **灰度门禁缺少自动化判定脚本**。TEST_DESIGN.md 5.2 列出 6 项检查项,但均为人工勾选(`- [ ]`),未说明每项如何自动采集结果(如覆盖率报告解析、沙盒验证次数统计、安全扫描工具输出格式)。 | Phase 升级依赖人工审核,效率低且易遗漏。 | 审核标准 #5 |
| P1-05 | **安全扫描工具与阈值未指定**。灰度门禁和发布门禁均提到"安全扫描通过(无高危漏洞)"但未指定扫描工具Trivy / Snyk / Gosec、漏洞等级定义、扫描时机CI / 镜像构建 / 发布前)。 | 安全门禁无法执行。 | 审核标准 #5 |
| P1-06 | **E2E 测试缺少详细场景设计**。STRATEGY.md 提到"自定义 Go E2E 框架"和"前端流程测试",但 TEST_DESIGN.md / CASES.md 中无任何 E2E 级别的 Given-When-Then 用例(如完整链路:模拟指标异常 → 告警触发 → 通知发送 → 自愈执行 → 事件记录)。 | E2E 覆盖率无法评估。 | 审核标准 #3 |
### P2 — 一般优化(建议修复,提升可维护性)
| 编号 | 问题描述 | 影响 |
|------|---------|------|
| P2-01 | **用例编号风格不统一**。TEST_DESIGN.md 使用 `TC-01-01`CASES.md 使用 `TC-1.1`,同一项目内两种命名规范,易导致用例追溯混乱。 |
| P2-02 | **CASES.md TC-E2 与 PRD 描述不一致**。CASES.md 写"模拟 Webhook 8xx"PRD F-2 写"Webhook 8xx/5xx",遗漏 5xx 场景。 |
| P2-03 | **AC-06 自愈缺少负向/非法配置用例**。如:配置不存在的自愈动作类型、自愈脚本权限不足、沙盒模式未通过却尝试生产执行等。 |
| P2-04 | **AC-10 日志查询缺少负向用例**。如:超大时间范围查询、非法正则过滤、无权限访问其他服务日志等。 |
| P2-05 | **测试通过标准TEST_DESIGN.md 1.2)中"告警噪声率 ≤1%"和"自愈误触发 0 次"缺少测量方法**。未说明沙盒测试的样本量、统计周期、噪声率计算公式。 |
---
## 改进建议
### 立即行动(进入开发前必须完成)
1. **补齐 AC 负向用例**
- AC-01增加"未登录访问首页返回 401"、"非法时间范围参数返回 400"。
- AC-02增加"下钻不存在的 service 返回空结果/404"、"超大时间范围返回 413/截断"。
- AC-04增加"通知渠道全部失效时记录失败并触发内部告警"、"非法事件 ID 查询返回 404"。
- AC-05增加"聚合阈值设置为 0 或负数时的校验拒绝"。
- AC-06增加"沙盒未通过时禁止关联生产规则"、"自愈动作类型非法返回 400"。
- AC-09增加"容量主板数据源丢失时展示降级提示"。
- AC-10增加"导出超过 10000 条时返回 413 或分批"。
- AC-11增加"查询已清理数据返回空并提示保留策略"。
2. **在 CASES.md 中补全 F-05~F-08**
- TC-E5模拟审计磁盘满验证丢弃非关键字段/异步上报且业务不阻断。
- TC-E6模拟自愈切换导致新故障验证自动回退 + P0 升级。
- TC-E7模拟时序库全面中断验证控制台只读 + 告警引擎缓存运行。
- TC-E8模拟看板查询超时验证显示上次成功结果 + 时间戳标注。
3. **提供 CI 配置文件**
- 创建 `.github/workflows/ci.yml`(或对应平台配置),至少包含:
- Go 版本声明1.22+
- `go test -race -coverprofile=coverage.out ./...`
- 覆盖率解析步骤(如使用 `gocov` 或自定义脚本检查 domain ≥70%、service ≥80%
- 未达标时 PR 阻断exit 1
- 测试失败通知 TechLead / QA 的机制(如 Slack / 邮件 Webhook
- 每日定时 E2E / 每周 Chaos 的 workflow 文件
4. **输出可执行的性能压测资产**
- 提供 `test/perf/` 目录,包含:
- `dashboard_k6.js`50 并发首页加载压测脚本
- `drilldown_k6.js`20 并发下钻压测脚本
- `alert_latency_test.go`:告警触发到通知的计时单测(含重试统计)
- `PERF_ENV.md`压测环境规格、数据量基准、判定标准P99 计算方式、持续 5min
### 短期优化(提测前完成)
5. **建立覆盖率验证机制**
- 在 CI 中引入 `go tool cover -func=coverage.out` 解析按模块domain / service / handler分别校验阈值。
- 引入增量覆盖率检查(如 codecov / coveralls要求新增代码覆盖率 ≥80%。
6. **补充混沌测试用例**
- 在 TEST_DESIGN.md 中新增"混沌测试"章节,至少设计 3 条可执行用例:
- Chaos-01随机杀死一个服务 Pod验证告警引擎本地缓存持续运行且控制台进入只读。
- Chaos-02模拟 Redis 网络分区 30s验证告警抑制状态不丢失、恢复后不重复通知。
- Chaos-03模拟 PostgreSQL 主从切换,验证审计写入短暂失败后异步补写。
7. **完善测试数据管理规范**
- 创建 `test/fixtures/` 目录结构文档,规定 SQL / JSON / Go seed 三种数据注入方式。
- 为大数据量性能测试提供数据生成脚本(如 `generate_audit_logs.go` 生成 10000 条审计记录)。
- 明确并行测试隔离方案testcontainers 独立数据库 / 事务回滚 / 唯一 schema
8. **统一用例编号规范**
- 建议统一为 `TC-{AC}-{序号}`(如 `TC-01-01`),并同步修改 CASES.md。
---
## 审核结论
**当前状态REQUEST_CHANGES**
本文档在测试策略框架层面具备较好的完整性分层模型、Mock 策略、环境矩阵和发布门禁检查表已达到可评审水平。但由于 P0-01 ~ P0-04 四项阻塞级缺陷负向用例大面积缺失、异常流程遗漏、CI 零配置、性能压测无载体),**当前测试设计不足以支撑进入开发或提测阶段**。
建议研发团队优先补齐上述"立即行动"项,完成后提交 QA 复评。
---
> 报告生成路径:`/home/long/project/ai-ops/tech/QA_REVIEW_REPORT.md`