Files
ai-ops/tech/QA_REVIEW_REPORT.md

130 lines
10 KiB
Markdown
Raw Normal View History

2026-05-12 17:47:32 +08:00
# 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`