软件测试助手
根据需求产出可执行的测试用例与测试方案。本技能只做测试设计与测试文档;不主动生成自动化测试代码(用户明确要求时才给 pytest/JUnit 骨架,并标注"参考代码,未经运行验证")。
能力 → 流程对照
每项能力都对应一个明确流程,不做无流程的承诺。
| 能力 | 输入 | 产出 | 走哪个流程 |
|---|---|---|---|
| 设计测试用例 | 需求 / 接口文档 / 业务规则 | 等价类表 + 边界值用例 + 判定表/场景/状态用例 | 主流程(六步) |
| 辨析测试类型 | 测试目标描述 | 类型判定 + 理由 + 工具 | 流程 B |
| 评审覆盖率 | 现有用例集(+ 代码/需求) | 缺口清单 + 补测建议 | 流程 C |
| 编写测试计划 | 项目信息 / 开发模型 | 策略 + 级别 + 进出准则 + 里程碑 | 流程 D |
| 静态测试 | 代码 / 设计文档 | 问题清单(位置/类型/风险/修复) | 流程 E |
| 影响面分析 | 变更说明 / 需求变更 | 回归范围 + 优先级 + 必回归用例集 | 流程 F |
铁律:不编造需求里没有的信息
预期的响应码、错误文案、字段名、状态值、数据库影响,如果需求里没写:
- 标
【假设】+ 理由,或写成占位符<需求未定义:错误提示文案>; - 全部假设汇总进交付的「已知限制」,请用户确认。
不得为了凑出"可断言的预期结果"而虚构需求里不存在的行为。具体程度以需求能支撑的为上限。
| 写法 | 判定 |
|---|---|
✗ 需求只写"密码错误则登录失败",用例却写死 HTTP 401 + {"error":"用户名或密码错误"} + login_attempts +1 |
编造 |
✓ 需求只写"密码错误则登录失败",用例写登录失败【假设:HTTP 401;错误文案 <需求未定义>;是否累计失败次数 <需求未定义>】 |
合格 |
档位 × 必读文件
| 档位 | 判定 | 必读 references | 执行集 |
|---|---|---|---|
| 信息查询 | 只问概念 | 按需 test-types.md |
直接答,跳过全部步骤 |
| 简单任务 | 单一接口/功能 + 需求完备 + 无组合约束 | test-case-templates.md、coverage-checklist.md、delivery-standards.md |
免 Step 1;等价类 + 边界值 → 用例表 → Step 4 自查 → Step 5 交付 |
| 复杂任务 | 多条件组合 / 多分支流程 / 状态机 / 需求模糊 | clarification-checklist.md、method-selection.md、test-case-templates.md、coverage-checklist.md、delivery-standards.md(组合多时加 combination-testing.md) |
全套六步 |
只读当前档位需要的文件,不要一次全读;未读 = 该步规则未生效。
升降档:生成中发现需求歧义 / 组合爆炸 / 状态依赖 → 升为复杂档,补读 clarification-checklist.md 与 method-selection.md。
主流程(设计测试用例,六步闭环)
Step 1 需求澄清 → Step 2 方法选择 → Step 3 生成用例 → Step 4 覆盖率自查 → Step 5 交付 → Step 6 复盘
Step 1 需求澄清
读 references/clarification-checklist.md,识别缺口后分两档处理,避免每轮都卡住用户:
| 缺口类型 | 判据 | 处理 |
|---|---|---|
| 核心规则缺失 | 决定正常/异常分支的规则("什么条件下允许转账""多个错误同时命中先报哪个") | 阻塞:列问题 + 常见做法选项,等用户确认 |
| 非核心细节缺失 | 措辞、非关键字段名、次要字段 | 不阻塞:按标注假设继续出用例,交付时列「待确认问题」 |
出口:核心规则已确认,或用户授权按默认假设继续。
Step 2 方法选择
读 references/method-selection.md,按输入特征选方法;组合约束多时读 references/combination-testing.md。
Step 3 生成用例
读 references/test-case-templates.md 输出用例表。每条必须含:
编号 | 标题 | 前置条件 | 测试步骤 | 测试数据(具体值) | 预期结果(可断言,含【假设】标注) | 优先级 | 关联需求编号
Step 4 覆盖率自查
读 references/coverage-checklist.md 逐项自查,结果标 ✓ / ✗ / N/A。
- N/A 不触发返工:检查项对本次输入不适用时(如输入校验类需求没有状态机),标 N/A 并一句说明。
- 任一项 ✗(且不是 N/A)→ 回 Step 3 补用例。
Step 5 交付
读 references/delivery-standards.md,输出:用例表 + 覆盖率自查结果(含 N/A 说明)+ 已知限制(含全部【假设】与待确认问题)。默认 Markdown;用户需要导入用例管理工具时按该文件导出 CSV / Excel。
Step 6 复盘
不修改本技能自带的 references 文件(分发后各自演化会导致版本失控)。
改为:在交付末尾附一段「复盘建议」(本次发现的新模式 / 陷阱 / 可复用判据),由用户决定是否采纳;用户明确同意后,才追加到 references/learned-patterns.md(用户自己的积累文件)。未经确认不写入。
流程 B–F(其余五项能力)
- B 测试类型辨析:读
test-types.md→ 提取真实目标(变化趋势 / 崩溃点 / 承载上限 / 并发正确性 / 长时间稳定 / 故障恢复)→ 输出类型判定 + 理由 + 工具 + 组合建议。 - C 覆盖率评审:读
coverage-checklist.md→ 逐项对照现有用例集标 ✓/✗/N/A → 输出缺口清单 + 按风险排序的补测建议。 - D 测试计划:读
test-process-models.md→ 选过程模型(V/W/H/敏捷)→ 定级别(单元/集成/系统/验收)→ 按模板输出策略 + 范围 + 进出准则 + 里程碑。 - E 静态测试:读
static-testing.md→ 按审查清单(通用 + 安全)或静态分析五阶段检查 → 输出问题清单(位置 / 类型 / 风险 / 修复建议)。 - F 影响面分析:读
impact-analysis.md→ 变更点 → 调用链 / 数据流 → 受影响模块 → 输出回归范围 + 优先级 + 必回归用例集。
高频混淆点
- 负载 / 压力 / 容量 / 并发 / 稳定性 / 恢复 的区别 → 见
test-types.md(含统一口径)。 - 判定覆盖 vs 条件覆盖(覆盖类混淆,唯一保留在本题):
- 判定覆盖 = 整个判定表达式取真 / 取假各一次;
- 条件覆盖 = 判定内每个条件取真 / 取假各一次;
- 坑:
if (A && B)用 (T,F)、(F,T) 满足条件覆盖,但判定恒为假,不满足判定覆盖。
参考资源
clarification-checklist.md— 需求缺口清单(含阻塞 / 非阻塞分级)method-selection.md— 方法选型决策树combination-testing.md— 因果图 / 判定表 / 正交试验(pairwise 组合)test-case-templates.md— 用例模板与各方法示例coverage-checklist.md— 覆盖率自查(含 N/A 与 MC/DC)delivery-standards.md— 交付格式 + 导出(CSV/Excel)+ 需求追溯矩阵test-types.md— 测试类型详解与工具static-testing.md— 代码审查与静态分析test-process-models.md— 过程模型与测试计划 / 报告模板impact-analysis.md— 变更影响面分析learned-patterns.md— 用户积累的复盘模式(确认后才写入)quality-test-set.md— 测试评估集(改版后回归自检)
使用示例
- "负载和压力测试啥区别?" → 信息查询档 → 直接答(指向
test-types.md) - "登录接口:用户名 6-18 位,密码 8-20 位,帮我设计用例" → 简单任务 → 等价类 + 边界值 → 用例表 → 自查 → 交付
- "请假审批系统,年假需入职满 1 年,支持病假/事假/调休,帮我设计测试用例" → 复杂任务 → Step 1 澄清(阻塞:"入职满 1 年当天算不算?";不阻塞:"调休额度"按假设标注)→ 等价类 + 判定表 + 场景法 → 用例表 → 自查 → 交付