关于 qa
qa 是用于开展交互式 QA 会话的技能,帮助团队将用户反馈整理为持久有效的 GitHub issue。它会澄清问题、探索代码库以了解领域语境,并直接提交 issue。
主要功能
- 01澄清预期行为与实际行为
- 02在后台探索代码库背景
- 03将独立问题拆分为多个 issue
- 04提交简洁、面向用户的 GitHub issue
- 05分享 issue 链接及阻塞关系
适用场景
- 01记录可复现的用户反馈缺陷
- 02将多个症状拆解为可执行问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mattpocock/ skills --skill qa安装后在 Claude Code 中输入/qa确认已加载。
附带文件agents/openai.yaml
详细介绍
QA 会话
开始一次交互式 QA 会话。用户描述他们遇到的问题。你负责澄清、了解代码库上下文,并提交持久有效、以用户为中心且使用项目领域术语的 GitHub 问题。
用户提出的每个问题
1. 倾听并适度澄清
让用户用自己的话描述问题。最多提出 2-3 个简短的澄清问题,重点关注:
- 预期结果与实际结果
- 复现步骤(如果不明显)
- 是稳定发生还是间歇性发生
不要过度追问。如果描述已足够清晰,可以提交,就继续下一步。
2. 在后台探索代码库
在与用户沟通的同时,在后台启动一个 Agent (subagent_type=Explore),以了解相关区域。目标不是寻找修复方案,而是:
- 学习该区域使用的领域术语(检查 UBIQUITOUS_LANGUAGE.md)
- 了解该功能应有的行为
- 确定面向用户的行为边界
这些上下文有助于写出更好的问题,但问题本身不应引用具体文件、行号或内部实现细节。
3. 判断范围:单个问题还是拆分?
提交前,判断这应是单个问题,还是需要拆分为多个问题。
在以下情况下拆分:
- 修复涉及多个彼此独立的领域(例如,“表单验证有误”“成功消息缺失”以及“重定向失效”)
- 存在明显可分离、且不同人员可以并行处理的事项
- 用户描述的问题具有多种不同的故障模式或症状
在以下情况下保留为单个问题:
- 某个位置上的单一行为有误
- 所有症状均由同一根本行为导致
4. 提交 GitHub 问题
使用 gh issue create 创建问题。不要先请用户审核——直接提交并分享 URL。
问题必须持久有效——即使经过大规模重构后仍然说得通。以用户视角撰写。
单个问题
使用此模板:
## What happened
[Describe the actual behavior the user experienced, in plain language]
## What I expected
[Describe the expected behavior]
## Steps to reproduce
1. [Concrete, numbered steps a developer can follow]
2. [Use domain terms from the codebase, not internal module names]
3. [Include relevant inputs, flags, or configuration]
## Additional context
[Any extra observations from the user or from codebase exploration that help frame the issue — e.g. "this only happens when using the Docker layer, not the filesystem layer" — use domain language but don't cite files]
拆分为多个问题
按依赖顺序创建问题(先创建阻塞项),以便引用真实的问题编号。
每个子问题使用此模板:
## Parent issue
#<parent-issue-number> (if you created a tracking issue) or "Reported during QA session"
## What's wrong
[Describe this specific behavior problem — just this slice, not the whole report]
## What I expected
[Expected behavior for this specific slice]
## Steps to reproduce
1. [Steps specific to THIS issue]
## Blocked by
- #<issue-number> (if this issue can't be fixed until another is resolved)
Or "None — can start immediately" if no blockers.
## Additional context
[Any extra observations relevant to this slice]
拆分问题时:
- 优先拆成多个范围小的问题,而不是少数范围大的问题——每个问题都应能独立修复和验证
- 如实标记阻塞关系——如果问题 B 在问题 A 修复前确实无法测试,就说明这一点。如果两者相互独立,则将两者都标为“无——可立即开始”
- 按依赖顺序创建问题,以便在“被阻塞于”中引用真实的问题编号
- 最大化并行处理——目标是让多个人员(或 Agent)能够同时领取不同的问题
所有问题正文规则
- 不得包含文件路径或行号——这些内容会过时
- 使用项目的领域术语(如果存在 UBIQUITOUS_LANGUAGE.md,则检查该文件)
- 描述行为,而非代码——“同步服务未能应用补丁”,而不是“applyPatch() 在第 42 行抛出异常”
- 复现步骤为必填项——如果无法确定,则询问用户
- 保持简洁——开发者应能在 30 秒内读完问题
提交后,输出所有问题 URL(并总结阻塞关系),并询问:“下一个问题,还是到此为止?”
5. 继续会话
持续进行,直到用户表示完成。每个问题都是独立的——不要批量处理。
评论
支持 Markdown