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

379 lines
22 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.
# AI-Ops 测试设计方案
> 版本v1.0
> 日期2026-04-27
> 状态:初稿
> 覆盖AC-01 ~ AC-12、异常流程 F-01 ~ F-08、边缘流程 G ~ I
---
## 1. 测试策略
### 1.1 测试分层模型
```
┌─────────────────────────────────────────────────┐
│ E2E Tests (黑盒) │
│ 场景:用户操作链路 + 系统集成验证 │
│ 工具Go test + k6 / 自制 E2E runner │
│ 覆盖率目标:每个主流程 ≥ 1 条 │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Integration Tests (灰盒) │
│ 场景Service 间协作、数据库读写、外部 API Mock │
│ 工具Go test + testify + sqlmock + httptest │
│ 覆盖率门槛service ≥ 80%, handler ≥ 80% │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Unit Tests (白盒) │
│ 场景:单个函数/方法逻辑、边界条件、错误分支 │
│ 工具Go test + testify + gomock │
│ 覆盖率门槛domain ≥ 70% │
└─────────────────────────────────────────────────┘
```
### 1.2 测试通过标准
| 维度 | 标准 |
|------|------|
| 覆盖率 | domain ≥ 70%, service/handler ≥ 80% |
| 主流程 | AC-01 ~ AC-12 全部有至少 1 条通过测试 |
| 异常流程 | F-01 ~ F-08 全部有至少 1 条验证测试 |
| 边缘流程 | G、H、I 全部有至少 1 条验证测试 |
| 告警噪声率 | 沙盒测试中误报率 ≤ 1%,超过则 CI 失败 |
| 自愈误触发 | 沙盒测试中 0 次误触发,否则 CI 失败 |
### 1.3 测试环境矩阵
| 环境 | 用途 | 数据特征 | 外部依赖 |
|------|------|---------|---------|
| **Local Dev** | 开发者快速验证 | Mock 数据 | Mock 所有外部服务 |
| **CI** | PR Merge 门禁 | Mock 数据 | Mock 所有外部服务 |
| **Sandbox** | 沙盒验证(自愈规则) | 生产数据脱敏副本 | Mock + 部分真实依赖 |
| **Staging** | 上线前全流程验证 | 生产数据脱敏副本 | 全真实依赖 |
| **Production** | 灰度上线 | 真实数据 | 全真实依赖 |
---
## 2. Mock 策略
### 2.1 外部依赖 Mock
| 依赖 | Mock 方案 | 工具 |
|------|---------|------|
| **Prometheus / 时序数据库** | 嵌入式 mock server返回预置指标数据 | httptest + 自定义 mock |
| **gateway/internal/metrics** | Mock HTTP handler返回 JSON 指标 | gock / httptest |
| **supply-api/ 供应商健康接口** | Mock 返回 200/401/429/500 | gock |
| **platform-token-runtime/ 运行时状态接口** | Mock 返回正常/异常状态 | gock |
| **通知渠道Webhook/邮件/飞书)** | Mock server 接收并验证请求格式 | httptest |
| **PostgreSQL** | sqlmock 拦截 SQL验证查询正确性 | github.com/DATA-DOG/go-sqlmock |
| **Redis** | miniredis 内存模拟 | github.com/alicebob/miniredis |
### 2.2 Mock 分层
```
Production 依赖:
gateway metrics API ──→ supply-api 供应商接口 ──→ token-runtime 状态接口
│ │ │
▼ ▼ ▼
Mock (CI/Local): Mock (CI/Local): Mock (CI/Local):
MetricsMockServer → SupplierMockServer → RuntimeMockServer
```
---
## 3. 测试用例矩阵(按 AC 编号)
### AC-01 实时监控看板
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-01-01 | 首页加载时间 <2s | Performance | Given 用户登录 When 访问首页 Then 响应时间 ≤2s |
| TC-01-02 | 首页显示 6 个指标 | Happy Path | Given 系统运行 When 首页加载 Then 显示 QPS/延迟/P99/错误率/供应商数/告警数 |
| TC-01-03 | 指标卡片 15s 内刷新 | Functional | Given 指标更新 When 数据推送 Then 15s 内页面刷新 |
| TC-01-04 | 无数据时看板展示"无数据" | Edge | Given 指标源断开 When 首页加载 Then 不显示过期数据 |
| TC-01-NEG-01 | 未登录访问首页返回 401 | Negative | Given 未登录 When 访问首页 Then 返回 401 |
| TC-01-NEG-02 | 非法时间范围参数返回 400 | Negative | Given 非法时间范围参数 When 请求指标 Then 返回 400 |
### AC-02 指标下钻
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-02-01 | 下钻显示 1 小时趋势图 | Happy Path | Given 点击指标卡片 When 下钻 Then 显示 60min 趋势 |
| TC-02-02 | 按 service/path/supplier 维度分割 | Functional | Given 趋势图 When 按 supplier 下钻 Then 正确分割 |
| TC-02-03 | 下钻查询 <3s | Performance | Given 大数据量 When 执行下钻 Then 响应 <3s |
| TC-02-04 | 无数据范围返回空图表 | Edge | Given 无数据 When 下钻 Then 显示空图表而非报错 |
| TC-02-NEG-01 | 下钻不存在的 service 返回空结果/404 | Negative | Given 不存在的 service When 下钻 Then 返回空结果或 404 |
| TC-02-NEG-02 | 超大时间范围返回 413/截断 | Negative | Given 超大时间范围 When 下钻 Then 返回 413 或自动截断 |
### AC-03 告警规则配置
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-03-01 | 创建告警规则 | Happy Path | Given 登录管理员 When 创建规则 Then 规则保存成功 |
| TC-03-02 | 规则字段完整性校验 | Negative | Given 缺少必填字段 When 创建规则 Then 返回 400 |
| TC-03-03 | 规则变更 30s 内生效 | Functional | Given 规则已创建 When 修改阈值 Then 30s 后新规则生效 |
| TC-03-04 | 支持 50 条规则并发运行 | Load | Given 50 条规则 When 同时触发 Then 全部正确评估 |
| TC-03-05 | 规则编辑/禁用/删除 | Functional | Given 规则存在 When 编辑/禁用/删除 Then 状态正确变更 |
### AC-04 告警通知触达
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-04-01 | P0/P1 告警 30s 内通知 | Performance | Given P1 告警触发 When 通知发送 Then ≤30s 到达 |
| TC-04-02 | P2 告警 120s 内通知 | Performance | Given P2 告警触发 When 通知发送 Then ≤120s 到达 |
| TC-04-03 | 至少 2 种通知渠道 | Functional | Given 告警触发 When 发送 Then 飞书和邮件均收到 |
| TC-04-04 | 通知内容完整性 | Functional | Given 告警发送 Then 包含级别/规则名/时间/当前值/阈值/事件ID/链接 |
| TC-04-05 | Webhook 通知失败后自动切换 | Resilience | Given Webhook 发送失败 When 告警触发 Then 自动切换至邮件 |
| TC-04-NEG-01 | 通知渠道全部失效时记录失败并触发内部告警 | Negative | Given 所有通知渠道失效 When 告警触发 Then 记录失败并触发内部 P2 告警 |
| TC-04-NEG-02 | 非法事件 ID 查询返回 404 | Negative | Given 非法事件 ID When 查询事件 Then 返回 404 |
### AC-05 告警聚合与抑制
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-05-01 | 1 分钟内 >20 条告警触发聚合 | Functional | Given 同一资源 1min 内触发 25 条 When 聚合 Then 生成 1 条集群告警 |
| TC-05-02 | 集群告警包含累计数量和规则列表 | Functional | Given 集群告警生成 Then 内容包含数量≥20 和规则列表 |
| TC-05-03 | 5 分钟抑制期内同一规则不重复通知 | Functional | Given 告警已发送 When 5min 内再次触发 Then 不重复通知 |
| TC-05-04 | 级别升级时抑制解除 | Functional | Given P2 告警抑制中 When 升级为 P1 Then 立即通知 |
| TC-05-NEG-01 | 聚合阈值设置为 0 或负数时的校验拒绝 | Negative | Given 阈值为 0 或负数 When 创建/编辑规则 Then 返回 400 并拒绝 |
### AC-06 自动自愈
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-06-01 | 自愈动作 60s 内完成 | Performance | Given 自愈规则触发 When 执行切换路由 Then ≤60s 完成含重试 |
| TC-06-02 | 自愈成功记录事件 | Happy Path | Given 自愈执行成功 When 完成 Then 事件记录 success |
| TC-06-03 | 自愈失败升级 P0 人工告警 | Functional | Given 自愈重试均失败 When 停止 Then 升级 P0 通知 |
| TC-06-04 | 无自愈规则时仅通知 | Functional | Given 告警无自愈配置 When 触发 Then 仅发送通知 |
| TC-06-05 | 沙盒模式:自愈不生效 | Resilience | Given 沙盒模式 When 自愈触发 Then 仅记录,不实际执行 |
| TC-06-06 | 自愈后 2min 评估是否解除 | Functional | Given 自愈执行 When 2min 后 Then 评估条件是否满足 |
| TC-06-07 | 自愈级联失败回退 | Functional | Given 自愈切换导致新故障 When 检测到 Then 回退并升级 |
| TC-06-NEG-01 | 沙盒未通过时禁止关联生产规则 | Negative | Given 沙盒测试未通过 When 关联生产告警规则 Then 返回 400 并拒绝 |
| TC-06-NEG-02 | 自愈动作类型非法返回 400 | Negative | Given 非法自愈动作类型 When 配置规则 Then 返回 400 |
### AC-07 配置审计日志
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-07-01 | 配置变更 1s 内生成审计记录 | Performance | Given 执行配置变更 When 完成 Then ≤1s 审计记录存在 |
| TC-07-02 | 审计字段完整性 | Functional | Given 审计记录 When 查询 Then 包含全部 10 个字段 |
| TC-07-03 | 审计日志不可篡改 | Security | Given 审计记录 When 尝试修改 Then 数据库层拒绝或被检测 |
| TC-07-04 | 审计日志 90 天保留 | Functional | Given 审计数据 91 天 When 查询 Then 91 天前记录不存在(新数据已清理) |
| TC-07-05 | 审计查询 <3s | Performance | Given 10000 条审计记录 When 按条件查询 Then <3s |
### AC-08 配置回滚
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-08-01 | 正常回滚 <60s | Performance | Given 审计记录存在 When 执行回滚 Then ≤60s 完成 |
| TC-08-02 | 回滚前显示子资源影响列表 | Functional | Given 回滚操作 When 执行前 Then 显示将被覆盖的子资源 |
| TC-08-03 | 回滚生成新审计记录 | Functional | Given 回滚执行 When 完成 Then 新审计记录关联原始 ID |
| TC-08-04 | 目标不存在时返回 OPS_AUD_4101 | Negative | Given 目标已被删除 When 执行回滚 Then 返回错误码且不执行 |
| TC-08-05 | 回滚失败不静默 | Resilience | Given 回滚执行失败 When 完成 Then 返回错误码并通知 |
### AC-09 容量主板
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-09-01 | 显示 7 天趋势数据 | Functional | Given 容量主板 When 加载 Then 显示 7 天 Token/QPS/延迟趋势 |
| TC-09-02 | 负载等级标注(正常/警告/过载) | Functional | Given 负载数据 When 展示 Then 正确标注等级 |
| TC-09-03 | 预测触达上限时间 | Functional | Given 增长率数据 When 计算 Then 显示预测时间(仅供参考) |
| TC-09-NEG-01 | 容量主板数据源丢失时展示降级提示 | Negative | Given 时序库断开 When 访问容量主板 Then 显示降级提示而非错误 |
### AC-10 日志/指标查询
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-10-01 | 按多维度筛选日志 | Functional | Given 查询条件 When 执行 Then 正确过滤 |
| TC-10-02 | 日志查询 <3s | Performance | Given 10000 条日志 When 查询 Then <3s |
| TC-10-03 | CSV 导出 10000 条 | Load | Given 查询结果 When 导出 Then 正确生成 CSV |
| TC-10-04 | 分页查询第 2 页 | Functional | Given 分页请求 When 获取第 2 页 Then 返回正确偏移 |
| TC-10-NEG-01 | 导出超过 10000 条时返回 413 或分批 | Negative | Given 查询结果 >10000 条 When 导出 CSV Then 返回 413 或自动分批导出 |
### AC-11 监控数据保存
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-11-01 | 原始数据保留 ≥7 天 | Functional | Given 8 天前数据 When 查询 Then 7 天内数据存在 |
| TC-11-02 | 分钟级聚合保留 ≥30 天 | Functional | Given 31 天前数据 When 查询 Then 31 天前不存在 |
| TC-11-03 | 小时级聚合保留 ≥90 天 | Functional | Given 91 天前数据 When 查询 Then 不存在 |
| TC-11-NEG-01 | 查询已清理数据返回空并提示保留策略 | Negative | Given 查询已清理时段 When 查询原始数据 Then 返回空并提示保留策略 |
### AC-12 角色与权限
| 用例 ID | 描述 | 类型 | 覆盖条件 |
|---------|------|------|---------|
| TC-12-01 | 查看者只能读不可写 | Security | Given 查看者 When 尝试写操作 Then 返回 403 |
| TC-12-02 | 运维人员不可执行回滚 | Security | Given 运维人员 When 执行回滚 Then 返回 403 |
| TC-12-03 | 管理员可执行所有操作 | Functional | Given 管理员 When 执行任意操作 Then 成功 |
---
## 4. 异常流程测试F-01 ~ F-08
| 用例 ID | 异常场景 | 验证点 | 预期行为 |
|---------|---------|-------|---------|
| TF-01 | 自愈动作重试均失败 | P0 人工告警触发 | 10s 内重试 1 次,失败后立即升级 P0 电话/短信 |
| TF-02 | 通知渠道失效Webhook 5xx | 备用渠道切换 | 记录失败,使用邮件→飞书→短信 三次切换 |
| TF-03 | 回滚目标已不存在 | OPS_AUD_4101 | 返回错误码,运营手动修复 |
| TF-04 | 指标采集器 5min 无数据 | 数据源丢失标识 | 控制台显示丢失标识,触发 P2 内部告警 |
| TF-05 | 审计日志存储满盘 | 降级不阻断业务 | 丢弃非关键字段或异步上报,业务操作继续 |
| TF-06 | 自愈形成级联故障 | 回退并升级 | 自动恢复上一步,升级人工告警,立即电话通知 |
| TF-07 | 监控数据库全面中断 | 只读/降级模式 | 控制台只读,告警引擎本地缓存继续运行 |
| TF-08 | 实时看板指标计算超时 | 显示上次结果 | 显示上次成功结果并标注时间戳 |
---
## 5. 灰度发布验证计划
### 5.1 各 Phase 验证内容
| Phase | 验证内容 | 通过标准 | 回归集 |
|-------|---------|---------|--------|
| **Phase 1** | 监控看板 + 日志查询 | AC-01, AC-02, AC-10, AC-11 全部通过 | 无历史功能 |
| **Phase 2** | 告警规则 + 通知渠道 | AC-03, AC-04, AC-05 全部通过 | Phase 1 全量 |
| **Phase 3** | 自愈引擎 + 审计回滚 | AC-06, AC-07, AC-08 全部通过 + 沙盒 10 次无误触发 | Phase 1+2 全量 |
| **Phase 4** | 容量主板 | AC-09 全部通过 | Phase 1+2+3 全量 |
### 5.2 灰度门禁检查项
每次 Phase 升级前必须全部通过:
- [ ] 所有 AC 测试用例 100% 通过
- [ ] 单元测试覆盖率达标domain ≥70%, service ≥80%
- [ ] 自愈沙盒验证 ≥10 次无误触发
- [ ] 回滚演练(至少 3 个资源类型)成功
- [ ] 性能基准测试通过(响应时间符合 AC 要求)
- [ ] 安全扫描通过(无高危漏洞)
---
## 6. 回归测试集
### 6.1 快速回归集(每次 PR
```
TC-01-01, TC-01-02, TC-03-01, TC-03-03, TC-04-01, TC-07-01, TC-07-02, TC-12-01, TC-12-03
共 9 条,约 5-10 分钟
```
### 6.2 完整回归集(每次 Phase 升级)
```
TC-01-01 ~ TC-01-04, TC-01-NEG-01, TC-01-NEG-02
TC-02-01 ~ TC-02-04, TC-02-NEG-01, TC-02-NEG-02
TC-03-01 ~ TC-03-05
TC-04-01 ~ TC-04-05, TC-04-NEG-01, TC-04-NEG-02
TC-05-01 ~ TC-05-04, TC-05-NEG-01
TC-06-01 ~ TC-06-07, TC-06-NEG-01, TC-06-NEG-02
TC-07-01 ~ TC-07-05
TC-08-01 ~ TC-08-05
TC-09-01 ~ TC-09-03, TC-09-NEG-01
TC-10-01 ~ TC-10-04, TC-10-NEG-01
TC-11-01 ~ TC-11-03, TC-11-NEG-01
TC-12-01 ~ TC-12-03
TF-01 ~ TF-08
共 53 条,约 30-60 分钟
```
---
## 7. 技术栈与集成约束验证
### 7.1 统一技术栈与双运行模式验证
| 用例 ID | 描述 | 类型 | 验证条件 |
|---------|------|------|---------|
| TOPS-RUN-01 | 独立运行模式启动 | Happy Path | Given 独立 `config.yaml` 与独立数据库/Redis/时序库 When 启动 `cmd/ai-ops/main.go` Then `/actuator/health/ready` 返回 200`/api/v1/ai-ops/*` 可访问 |
| TOPS-RUN-02 | 集成运行模式挂载 | Integration | Given gateway 或 supply-api 主进程加载 `IntegrationPlugin` When 启动 Then `/internal/ai-ops/*` 路由、后台 worker、健康检查挂载成功 |
| TOPS-RUN-03 | 配置分离加载 | Functional | Given 独立模式与集成模式分别启动 When 读取配置 Then 独立模式仅使用自身配置,集成模式正确合并主项目配置 |
| TOPS-RUN-04 | 数据库前缀隔离 | Structural | Given 执行迁移 When 检查 schema Then 仅创建 `ai_ops_` 前缀表 |
### 7.2 独立运行与集成运行验证
### 7.3 IntegrationPlugin 与模块挂载验证
| 用例 ID | 描述 | 类型 | 验证条件 |
|---------|------|------|---------|
| TOPS-PLG-01 | IntegrationPlugin 注册路由与健康检查 | Integration | Given 集成模式 When 插件注册 Then 监控、告警、日志、审计、健康检查路由挂载成功 |
| TOPS-PLG-02 | 模块开关生效 | Functional | Given `enabled_modules` 关闭某模块 When 启动 Then 对应路由/后台任务不注册,其他模块不受影响 |
| TOPS-PLG-03 | 集成模式共享资源 | Integration | Given 主进程注入共享 DB/Redis/logger/metrics client When 插件启动 Then 使用共享资源且不重复初始化冲突依赖 |
### 7.3 OpenAPI 契约验证
| 用例 ID | 描述 | 类型 | 验证条件 |
|---------|------|------|---------|
| TOPS-OAS-01 | OpenAPI 文档可访问 | Functional | Given 服务启动 When 请求 `/openapi.json``/docs` Then 返回 200 且包含监控、告警、自愈、审计、日志查询接口 |
| TOPS-OAS-02 | 路由与 OpenAPI 一致 | Contract | Given 导出的 OpenAPI 文档 When 对照 HTTP 路由 Then 请求/响应/错误码与实现一致,无缺失公开接口 |
| TOPS-OAS-03 | 集成前缀可配置 | Contract | Given 集成模式配置内部前缀 When 导出文档 Then 文档反映 `/internal/ai-ops/` 前缀或明确区分外部/内部暴露面 |
### 7.4 NewAPI / Sub2API 适配层验证
| 用例 ID | 描述 | 类型 | 验证条件 |
|---------|------|------|---------|
| TOPS-ADP-01 | `/metrics` 采集适配 | Contract | Given NewAPI/Sub2API 通过 Prometheus scrape 拉取指标 When 调用 `/metrics` Then 指标命名、label、采样频率满足契约 |
| TOPS-ADP-02 | 告警回调适配 | Integration | Given 外部系统配置 Webhook 回调 When 告警触发 Then 回调内容完整、签名正确、失败可重试 |
| TOPS-ADP-03 | 自愈脚本调用外部管理 API | Integration | Given 自愈动作触发程序化脚本 When 通过适配层调用 NewAPI/Sub2API Then 鉴权、错误码映射、回退逻辑符合设计 |
---
## 8. 发布门禁与阶段结论
### 8.1 发布门禁检查表
以下门禁项全部通过前,不得进入生产交付:
- [ ] 独立运行与集成运行模式均完成启动验证路由、worker、健康检查真实挂载
- [ ] `BuildServer` / `BuildRuntime` 中条件能力已显式接入,而非仅存在定义
- [ ] OpenAPI、`/metrics`、Webhook、管理 API 的鉴权与字段边界合同测试通过
- [ ] 自愈动作均完成沙盒验证、快照记录与回滚演练
- [ ] 审计日志保证先写审计再执行业务,高风险操作审计失败即拒绝
- [ ] viewer / operator / admin 三类角色权限矩阵验证通过
- [ ] 告警洪泛、自愈误触发、时序库中断、通知渠道失效四类高风险回归全部通过
- [ ] 至少一条真实故障检测 → 告警 → 通知/回滚链路完成端到端验证
### 8.2 阶段门控结论
**当前结论REQUEST_CHANGES已转化为具体行动项见 HLD 10.2 节)**
**进入开发/实现前必须补齐:**
- [ ] 将 HLD 中的威胁建模点全部下沉为可执行测试与阻断项(每个威胁场景必须有对应 CI 阻断测试用例)。
- [ ] 为"定义 → 装配 → 调用 → 入口"四层链路补充 QA 检查要求,重点覆盖自愈、告警、审计、权限。
- [ ] 分别给出独立模式与集成模式的最小验证命令、预期输出与失败判定。
- [ ] 高风险变更必须 fail-closed影响面 > 50% 的变更在审计写入失败时必须拒绝执行。
**阻断条件(任一触发则不得进入开发):**
- 高风险动作没有沙盒/回滚闭环。
- 审计不能证明先写后执行业务。
- 关键能力只存在接口声明,未真实接入运行主链路。
- HLD 门控 8.1 中任意一项未通过。
---
## 9. 性能测试
### 9.1 性能基准
| 指标 | 目标值 | 压测方法 |
|------|-------|---------|
| 首页加载 | <2s (P99) | k6 并发 50 用户 |
| 告警触发到通知 | P0/P1 <30s, P2 <120s | 单次告警触发计时 |
| 下钻查询 | <3s (P99) | k6 并发 20 用户 |
| 审计查询 | <3s (P99) | 10000 条数据下查询 |
| 配置回滚 | <60s (P99) | 单次回滚计时 |
| 支持并发告警规则 | ≥50 条同时评估 | 并发注入 50 条告警数据 |
---
## 10. 安全测试
| 测试项 | 方法 | 验证点 |
|-------|------|-------|
| 权限越界 | 使用低权限 Token 尝试高权限操作 | 返回 403 |
| 审计日志篡改 | 尝试 UPDATE/DELETE 审计表 | 操作被拒绝或被检测 |
| SQL 注入 | 输入 `' OR 1=1 --` 等 | 参数化查询无注入 |
| 告警信息泄露 | 跨用户查询告警 | 无数据泄露 |
| 高风险变更未二次确认 | 提交影响 90% 流量的变更 | 变更被标记待确认 |