10 KiB
10 KiB
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 集成零配置。上述问题将导致测试覆盖存在盲区,且无法形成自动化门禁闭环。
优点
- 测试分层模型清晰:TEST_DESIGN.md 1.1 明确划分 Unit → Integration → E2E 三层,STRATEGY.md 补充 Chaos Test,结构合理。
- Mock 策略全面:覆盖 Prometheus、 supply-api、token-runtime、通知渠道、PostgreSQL、Redis 等全部核心外部依赖,工具选型合理(sqlmock / miniredis / gock / httptest)。
- 环境矩阵设计完整:Local Dev / CI / Sandbox / Staging / Production 五层环境各有明确的用途、数据特征和外部依赖策略。
- 灰度 Phase 规划可落地:Phase 1~4 的验证内容与回归集范围明确,与 PRD 发布策略对应。
- 发布门禁检查表(8.1)覆盖关键风险点:独立/集成双模式验证、沙盒验证、回滚演练、权限矩阵、端到端链路验证等 8 项全部列出。
- 回归集分级合理:区分快速回归集(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 |
核心容灾与降级场景无测试用例兜底,与 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 次"缺少测量方法。未说明沙盒测试的样本量、统计周期、噪声率计算公式。 |
改进建议
立即行动(进入开发前必须完成)
-
补齐 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:增加"查询已清理数据返回空并提示保留策略"。
-
在 CASES.md 中补全 F-05~F-08
- TC-E5:模拟审计磁盘满,验证丢弃非关键字段/异步上报且业务不阻断。
- TC-E6:模拟自愈切换导致新故障,验证自动回退 + P0 升级。
- TC-E7:模拟时序库全面中断,验证控制台只读 + 告警引擎缓存运行。
- TC-E8:模拟看板查询超时,验证显示上次成功结果 + 时间戳标注。
-
提供 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 文件
- 创建
-
输出可执行的性能压测资产
- 提供
test/perf/目录,包含:dashboard_k6.js:50 并发首页加载压测脚本drilldown_k6.js:20 并发下钻压测脚本alert_latency_test.go:告警触发到通知的计时单测(含重试统计)PERF_ENV.md:压测环境规格、数据量基准、判定标准(P99 计算方式、持续 5min)
- 提供
短期优化(提测前完成)
-
建立覆盖率验证机制
- 在 CI 中引入
go tool cover -func=coverage.out解析,按模块(domain / service / handler)分别校验阈值。 - 引入增量覆盖率检查(如 codecov / coveralls),要求新增代码覆盖率 ≥80%。
- 在 CI 中引入
-
补充混沌测试用例
- 在 TEST_DESIGN.md 中新增"混沌测试"章节,至少设计 3 条可执行用例:
- Chaos-01:随机杀死一个服务 Pod,验证告警引擎本地缓存持续运行且控制台进入只读。
- Chaos-02:模拟 Redis 网络分区 30s,验证告警抑制状态不丢失、恢复后不重复通知。
- Chaos-03:模拟 PostgreSQL 主从切换,验证审计写入短暂失败后异步补写。
- 在 TEST_DESIGN.md 中新增"混沌测试"章节,至少设计 3 条可执行用例:
-
完善测试数据管理规范
- 创建
test/fixtures/目录结构文档,规定 SQL / JSON / Go seed 三种数据注入方式。 - 为大数据量性能测试提供数据生成脚本(如
generate_audit_logs.go生成 10000 条审计记录)。 - 明确并行测试隔离方案(testcontainers 独立数据库 / 事务回滚 / 唯一 schema)。
- 创建
-
统一用例编号规范
- 建议统一为
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