# 测试类型决策矩阵（test-type-matrix）

> 类型域测试决策的**唯一真相源**：test-strategy 全轴扫描时**按组加载**本文件对应小节，产出 type_scope；test-case-writing 消费 type_scope 时按第 12 节映射产出。决策原则（全轴必答 / include 挂信号 / exclude 挂理由 / depth 与 execution 分离 / 单一真相 / 弱模型优先）与 Schema、V1–V5 校验规则见 test-strategy 的 SKILL.md。

**矩阵版本**：v1（2026-08-23）。轴集合增删必须升版本号；评测任务的标注须记录所用矩阵版本。

## 0. 组索引（分轴组推进，按组加载）

| 组 | 轴（本组只加载这些小节） | 组内交付核对 |
|---|---|---|
| A 资金与正确性 | 轴 1 性能效率 · 轴 2 业务安全 · 轴 4 并发一致性 | 三轴全部有决策 |
| B 依赖与变更 | 轴 3 可靠性 · 轴 9 迁移与升级 · 轴 10 契约与集成 | 三轴全部有决策 |
| C 前端体验 | 轴 5 兼容性 · 轴 6 无障碍 · 轴 7 视觉一致性 · 轴 8 国际化 | 四轴全部有决策 |

## 1. 使用规程（每组开扫前执行）

1. **G 级扫描**（有代码仓库时，一次运行三组共用）：`python3 ../core/scripts/scan_signals.py <仓库路径>`（路径相对 test-strategy 的 SKILL.md 所在目录）→ 每轴 G 级信号（文件:行）+ 预填表。**预填仅基于 G 级；exclude 永不预填**（防橡皮图章）
2. **逐轴决策**（受限选择，不自由生成）：需求信号（需求模型 / PRD）→ G 级信号核对 → **S 级信号照单复核**（本轴代码信号清单中标〔S〕的项，逐项读代码确认）→ decision（include / exclude / handoff）→ depth（full / standard / light）
3. **exclude 门槛**：需求 + G 级 + S 级三路全灭才可 exclude；scanned 必须落盘 **G 级脚本输出 + S 级复核结论双清单**（V3 校验）——S 级未复核不得 exclude，否则脚本盲区被制度化为漏测
4. **组内交付核对**：本组全轴有决策再进下一组；十轴完成 → 第 13 节深度校准 + 预算排序
5. **无代码仓库**：跳过 G / S 级，仅需求信号决策；exclude 理由注明"无代码仓库，需求信号未命中"（决策可信度降级，报告标注）

**轴空间封闭**：类型域就是这十轴，不自行新增。可用性 / UX 主观体验、渗透测试、SAST / 依赖扫描、产品可维护性、功能安全（safety）**不设轴**——可用性与 UX 的判定主观性强，走探索测试与人工评审；渗透测试依赖专业人工与授权环境，右移到安全专项；SAST / 依赖扫描是开发侧 CI 工具，在本矩阵中只作轴 2 / 轴 10 的**信号来源**而非独立轴；产品可维护性与功能安全超出测试范畴。新增轴 = 矩阵升版本。

## 2. 域间裁决（重叠必裁决）

| 重叠 | 裁决 |
|---|---|
| 功能域 permission × 轴 2 业务安全 | permission 管授权功能正确性（有权限的人行为对不对，越权用例归它产）；业务安全管未授权视角防御（不该拿的拿不拿得到、敏感数据漏不漏、注入面、认证会话）。permission 轴 depth ≥ standard 是轴 2 的**内部纳入信号**；同一批越权用例不得两轴双计数 |
| 轴 4 并发一致性 × 轴 1 性能效率 | 正确性 bug（超卖 / 重复 / 丢更新）归轴 4；容量 / 延迟归轴 1。同一次并发执行可同时给两轴供 E3 证据（执行复用，决策分离） |
| 功能域 exception/boundary × 轴 10 契约与集成 | 功能域为主：异常 / 边界场景下的业务行为正确性（系统自身处理逻辑对不对）归功能域用例产出；轴 10 为辅：只产契约差异项（对外接口的错误码 / 响应结构 / 超时语义与契约不符的部分）。同一接口的同一路径不得两处双计数 |

## 3. 轴 1 性能效率（performance）

- **需求信号**：SLA / P95 响应时间承诺；大促、秒杀、抢购场景；预计并发用户数；性能验收指标
- **代码信号**：无分页全量查询；循环内远程调用（N+1）〔S〕；缓存依赖（Redis 命中率假设）；锁竞争热点〔S〕；消息积压消费逻辑
- **默认档**：软默认——无信号 exclude（记录扫描结果）；有 SLA 或容量信号 → include
- **档位语义**：full = 压测模型设计（用户旅程 × 到达率阶梯）+ 执行 + 瓶颈归因报告；standard = 核心接口基准（单接口阶梯加压）+ 阈值判定；light = 代码级性能审查（分页 / 缓存 / N+1 / 锁，逐项出 E2 证据清单）
- **执行归属**：include + executor=agent 时 light 可闭环；压测执行走外部工具（k6 / locust，带移交包）
- **成本因子**：独立压测环境、可重置数据、基准噪音控制
- **消费方式**：脚本型——standard 及以上不产手动用例，产压测模型与执行物进执行策略裁决；light 产代码审查清单条目（Cx 通道）

## 4. 轴 2 业务安全（security-business）

- **需求信号**：多角色 / 权限层级；隐私数据（手机号 / 身份证 / 地址）；资金操作；合规要求（个保法 / GDPR）；**内部信号**：功能域 permission 轴 depth ≥ standard
- **代码信号**：鉴权中间件覆盖面缺口〔S〕；对象级授权缺失模式〔S〕（user_id 来自请求参数而非会话）；可枚举 ID 直接引用；敏感字段明文返回或落日志；SQL 拼接
- **默认档**：**硬默认**——Web / API 系统一律 standard，无 R4 exclude 出口（成本极低 × 价值极高）；其余九轴均为软默认
- **档位语义**：full = 未授权视角全矩阵（匿名 + 低权角色对全部高危资源的可达性探测）+ 敏感数据流追踪 + 注入面；standard = 高危资源越权抽样 + 注入面 / 敏感暴露扫描；light = 设计层审查（Cx 记录）。**越权功能正确性用例归功能域 permission 轴产出**（第 2 节裁决），本轴不重复产
- **执行归属**：agent（复用 API 测试基建与测试账号矩阵；方法基线 `methods/permission.md`）
- **成本因子**：低——测试账号矩阵是唯一前置
- **消费方式**：用例型——standard 及以上产手动用例（type: security，标签 `[安全]`）；light 产 Cx 审查条目

## 5. 轴 3 可靠性（reliability）

- **需求信号**：可用性承诺（9x%）；降级预案；容灾要求；"不能丢消息"类硬约束
- **代码信号**：重试逻辑与重试上限；超时配置；消息队列消费与 ack；断路器；事务边界〔S〕；补偿 / 回滚逻辑
- **默认档**：软默认——有异步 / 第三方依赖信号 → standard；无 → light
- **档位语义**：full = 故障注入矩阵（依赖宕机 / 超时 / 拒绝 / 脏数据）+ 恢复验证；standard = 超时 / 重试 / 幂等 / 降级专项用例（"失败 → 重试 → 恢复"原则的类型化落地）；light = 清单审查（超时有无 / 重试上限 / 幂等键 / 消息 ack 语义）
- **执行归属**：standard 及以下 agent；故障注入 = agent 设计 + 可控环境执行
- **成本因子**：故障注入需可控环境；standard 无特殊成本
- **消费方式**：用例型——standard 及以上产 type: reliability 用例（标签 [可靠]）；light 产清单条目

## 6. 轴 4 并发一致性（concurrency）

- **需求信号**：库存 / 名额 / 配额；抢购；"全局唯一"类约束；多人同时编辑
- **代码信号**：check-then-write 模式（先查后写无锁）〔S〕；共享可变状态〔S〕；扣减逻辑；依赖唯一约束兜底的写入路径
- **默认档**：软默认——有共享可变资源信号 → standard；无 → light
- **档位语义**：full = 竞争窗口分析 + 并发用例矩阵（同一资源 × 全部竞争写入路径）+ 真实并发执行；standard = 关键竞争点并发用例（衔接 api-testing 并发能力）；light = 竞态模式代码审查
- **执行归属**：agent
- **成本因子**：可重置数据
- **消费方式**：用例型——standard 及以上产 type: concurrency 用例（标签 [并发]）；light 产清单条目

## 7. 轴 5 兼容性（compatibility）

- **需求信号**：明确支持的浏览器 / 设备清单；企业客户旧环境（旧内核）；跨端一致性要求
- **代码信号**：有前端（扫描器探测 package.json 前端依赖 / .vue / .svelte / 多 .html；移动端信号同计为有前端——pubspec.yaml(Flutter)、react-native/@tarojs/@dcloudio 跨端依赖、project.config.json 小程序配置）；浏览器特性 API 使用（IntersectionObserver 等）；UA 判断分支；响应式断点；多端平台分支（Platform.OS / kIsWeb / wx.getSystemInfo / `#ifdef MP-WEIXIN` 等）；系统版本门槛（minSdkVersion / deployment_target 等）
- **默认档**：软默认——有前端 → light；有明确支持清单 → standard
- **档位语义**：full = 支持矩阵逐格（浏览器 × 设备 × 分辨率 × P0 路径）；standard = 支持清单矩阵 × P0 路径；light = 最新 Chrome / Safari / Edge / Firefox 冒烟
- **执行归属**：agent + Playwright 项目矩阵
- **成本因子**：多浏览器 CI runner；真机（移动端超出 v1 范围）
- **消费方式**：用例型——standard 及以上产 type: compatibility 用例（标签 [兼容]）；light 产冒烟清单条目

## 8. 轴 6 无障碍（accessibility）

- **需求信号**：政企 / 教育政务客户；无障碍合规要求；投标条款
- **代码信号**：有前端即最低信号（语义化标签缺失、img 无 alt、键盘不可达、表单无 label——由 axe 扫描器核实）
- **默认档**：软默认——有前端 → light
- **档位语义**：full = WCAG 2.2 AA 逐页审计 + 键盘全路径 + 读屏抽样（读屏归人工）；standard = axe 全页扫描 + 违规分级 + 关键流键盘走查；light = axe 扫描 P0 页面
- **执行归属**：agent + axe-core（Playwright 集成）
- **成本因子**：极低
- **消费方式**：审查 / 脚本型——任意档位产 axe 扫描任务与违规清单（客观违规项分级呈现）；full 的读屏抽样子项标注人工
- **边界**：主观判定类（对比度阈值争议、读屏体验）标人工复核，agent 只出客观违规清单

## 9. 轴 7 视觉一致性（visual）

- **需求信号**：品牌规范验收；设计稿交付（Figma）；视觉回归要求
- **代码信号**：有前端即信号；已有截图测试（toHaveScreenshot 等）
- **默认档**：软默认——有前端 → light
- **档位语义**：full = 全页面截图基线 + 逐变更 diff；standard = 关键页基线 + diff；light = P0 页面截图存档供人比对（不自动判）
- **执行归属**：agent + Playwright screenshot
- **成本因子**：低；基线维护与动态内容遮罩规则（时间 / 头像 / 随机推荐位）是主要复杂度
- **消费方式**：脚本型——standard 及以上产截图基线执行物；light 产截图存档任务
- **防 flaky 硬约束**：自动 diff 必须先声明遮罩规则，未声明遮罩的 diff 失败不判 Bug

## 10. 轴 8 国际化（i18n）

- **需求信号**：海外 / 多语言市场；RTL 语言；跨时区用户群；本地化交付
- **代码信号**：i18n bundle / locale 目录（扫描器探测）；日期货币格式化库；硬编码文案（S 级复核）；时区处理逻辑
- **默认档**：软默认——无信号 exclude（记录扫描结果）；有信号 → standard
- **档位语义**：full = 伪本地化全量 + RTL 布局走查 + 格式矩阵（日期 / 货币 / 电话 / 时区 / 复数规则）；standard = 目标语言集核心流 + 格式抽样；light = 硬编码文案扫描 + 代表性页面伪本地化
- **执行归属**：agent
- **成本因子**：翻译数据依赖（伪本地化不依赖）
- **消费方式**：用例型——standard 及以上产 type: functional 用例加标签 [国际化]；light 产扫描条目

## 11. 轴 9 迁移与升级（migration）

- **需求信号**：存量系统迭代；数据结构变更公告；灰度共存 / 版本升级
- **代码信号**：DB migration 文件（扫描器探测 migrations / alembic / flyway 目录）；数据回填脚本；双写逻辑〔S〕；API 多版本共存
- **默认档**：软默认——有 migration 文件 → standard；无 → 存量系统 light / 绿地项目 exclude（记录判断依据）
- **档位语义**：full = 升级路径矩阵（版本 × 数据形态）+ 回滚验证 + 新旧数据共存探测；standard = 代表性升级用例 + 回滚一例；light = migration 脚本审查（可回滚性 / 兼容性 / 回填幂等）
- **灰度共存专项（需求信号命中灰度时并入对应档位一并交付）**：新版本自身功能之外覆盖三条链路——① 灰度路由正确性：命中小流量规则的请求进新版、未命中留在旧版（用例各自验证一侧）；② **出界处置**：与用户确认哪些指标越界即触发暂停 / 回滚（错误率 / 资损告警阈值等），并对"越界 → 暂停 → 回滚 → 数据一致"至少演练一次；③ **出界留痕**：每轮灰度的范围、比例、指标快照与出界事件记录落盘，作为下一步扩大灰度的依据——禁止凭印象全量
- **执行归属**：agent
- **成本因子**：可重置的存量数据快照
- **消费方式**：用例型——standard 及以上产 type: functional 用例加标签 [迁移]；light 产脚本审查条目

## 12. 轴 10 契约与集成（contract-integration）+ 消费方式映射

### 轴 10 契约与集成

- **需求信号**：第三方依赖清单；对外 API 的消费方；微服务边界；webhook
- **代码信号**：外部 HTTP / gRPC 调用；消息契约；OpenAPI 定义变更；回调处理
- **默认档**：软默认——有外部依赖 → standard；无 → exclude（记录扫描结果）
- **档位语义**：full = 消费者驱动契约（Pact 式）+ 依赖故障矩阵（超时 / 错误码 / 格式变化 / 限流）；standard = 关键依赖 mock 与真实双跑 + 异常分支用例；light = 调用面清单 + 错误处理审查
- **执行归属**：agent；契约测试框架执行为移交候选
- **成本因子**：mock / 沙箱可用性
- **消费方式**：用例型——standard 及以上产 type: functional 用例加标签 [集成]；契约执行物进执行策略裁决

### 消费方式映射总表（test-case-writing 消费 type_scope 时执行）

| 消费方式 | 适用（standard 及以上；例外档位见格内标注） | 产出 |
|---|---|---|
| 用例型 | 轴 2（type: security，标签 `[安全]`）、轴 3（reliability）、轴 4（concurrency）、轴 5（compatibility）；轴 8 / 9 / 10（type: functional + 标签） | 手动用例进 markmap，type / 标签见左 |
| 脚本型 | 轴 1（压测模型 + 执行物）、轴 6（axe 扫描任务与违规清单，**任意档位**）、轴 7（截图基线） | 不产手动用例，产执行物进执行策略裁决 |
| 审查型 | 各轴 light 档 | 扫描 / 审查清单条目（Cx 通道），不进用例正文 |

> exclude 轴不产出；handoff 轴只产移交包。depth=light 的轴 2 / 3 / 4 / 5 也按审查型走 Cx 通道。

## 13. 深度校准与停止准则

### 升降档规则（R1–R6；唯一声明的冲突裁决：R6 > R1）

> 编号区分：本表 R1–R6 是**升降档规则**编号；各文档中「2026-08-23 Rn 修复/收敛」的 Rn 是内部迭代轮次编号；Risk Map 中的 R1、R2… 是**风险条目**编号——三者同名不同义，以上下文为准。

| 规则 | 触发条件 | 动作 |
|---|---|---|
| R1 风险升档 | 该轴覆盖的场景挂 Critical 风险 → full；High → 至少 standard | 升档，rationale 挂风险编号 |
| R2 双源信号 | 同轴命中 ≥2 类独立信号（需求级 + 代码级） | 升一档 |
| R3 历史缺陷 | 该轴维度历史 Bug ≥3 或出过线上事故 | 升一档 |
| R4 无信号降档 | 需求 + G 级 + S 级扫描全灭（硬默认轴无此出口） | 可降至 exclude；G + S 双清单落盘 |
| R5 成本门 | 执行前提（环境 / 数据 / 工具）不可得 | **执行降级不决策降级**：depth 保持，execution_status 记 blocked + todo 向谁索取 |
| R6 预算约束 | full 轴数 > 3（两域合并计） | 按风险排序裁剪至 ≤3，记录排序依据。被裁剪的 Critical 轴触发**预算裁决检查点**（用户可扩预算，扩预算时 depth_budget 记 budget_review） |

### 停止准则

每轴的**档位语义就是停止准则**（§3–§12 各轴写死的动作清单勾完即停）；策略落盘时生成足够性声明：逐轴列档位动作清单与完成状态。禁止"再测测看"式开放式深挖——想加深必须升档并说明触发了哪条 R 规则。

## 14. 引用方式

test-strategy 工作流第 4 步按组加载本文件对应小节（`../core/test-type-matrix.md`）；test-case-writing 阶段一消费 type_scope 时加载第 12 节映射表。本文件不复制进任何 SKILL.md（单一真相红线）。
