测试优先缺陷修复Skill test-first-bugs

这个技能用于当用户报告代码缺陷、描述意外行为或请求修复时,强制实施测试驱动的缺陷修复工作流。它包括编写失败测试以重现问题、使用子代理并行化修复尝试、运行完整测试套件验证无回归,确保软件开发过程中的高质量和可靠性。关键词:测试优先、bug修复、测试驱动开发、缺陷管理、测试自动化、软件开发、质量控制、回归预防、并行修复、工作流优化。

测试 0 次安装 0 次浏览 更新于 3/15/2026

名称: 测试优先缺陷修复 描述: 当用户报告缺陷、描述意外行为、说某事“坏了”、“不工作”、“失败”、提及代码中的“错误”、“问题”或“漏洞”,或要求“修复”某事时,应使用此技能。强制实施测试驱动的缺陷修复工作流。

测试优先缺陷修复

强制实施严格的缺陷修复工作流,以防止回归并并行化修复尝试。

核心工作流

当报告缺陷时,按顺序遵循以下步骤:

阶段 1: 重现和记录

  1. 理解缺陷 — 收集关于预期与实际情况的细节
  2. 确定测试位置 — 确定项目中测试所在的位置(检查 tests/__tests__/spec/*.test.**.spec.* 模式)
  3. 编写失败测试 — 创建一个演示缺陷的测试

阶段 2: 使用子代理修复

  1. 启动修复子代理 — 使用任务工具,设置 subagent_type=general-purpose 来尝试修复
  2. 运行测试 — 通过运行特定测试验证修复
  3. 如有需要迭代 — 如果测试仍然失败,用新方法启动额外的子代理

阶段 3: 验证和完成

  1. 运行完整测试套件 — 确保未引入回归问题
  2. 报告成功 — 确认缺陷已修复,并通过通过的测试作为证据

编写失败测试

测试命名约定

命名测试以描述缺陷:

# Python (pytest)
def test_user_login_fails_when_email_has_uppercase():
    ...

# Python (unittest)
def test_should_handle_empty_input_without_crashing(self):
    ...
// JavaScript (Jest/Vitest)
it('should not crash when input array is empty', () => { ... });
test('handles special characters in username', () => { ... });
// TypeScript
describe('UserService', () => {
  it('returns null when user not found instead of throwing', () => { ... });
});

测试结构

每个缺陷重现测试遵循以下模式:

def test_bug_description():
    # 1. 安排 - 设置触发缺陷的条件
    input_data = create_problematic_input()

    # 2. 执行 - 执行导致缺陷的操作
    result = function_under_test(input_data)

    # 3. 断言 - 验证预期的(正确)行为
    assert result == expected_value  # 初始时应失败

找到正确的测试文件

检查项目结构以获取现有测试模式:

# 查找测试文件
find . -name "*.test.*" -o -name "*.spec.*" -o -name "test_*.py" | head -20

# 查找测试目录
ls -la tests/ __tests__/ spec/ test/ 2>/dev/null

# 检查 package.json 中的测试命令
grep -A5 '"test"' package.json

启动修复子代理

使用任务工具并行化修复尝试:

任务工具参数:
- subagent_type: "general-purpose"
- description: "修复 [缺陷描述]"
- prompt: 包括:
  1. 缺陷描述
  2. 失败测试的位置和内容
  3. 怀疑原因(如果已知)
  4. 约束:"运行测试以验证您的修复有效"

并行修复策略

启动多个具有不同方法的子代理:

  1. 直接修复代理 — 专注于导致缺陷的直接代码
  2. 根本原因代理 — 调查更深的架构问题
  3. 边缘情况代理 — 查找相关代码中的类似缺陷

当项目缺少测试时

如果项目没有测试基础设施:

  1. 先设置最小测试框架
  2. 在合适位置创建测试文件
  3. 记录测试设置以供将来使用

快速测试设置命令

# Python
pip install pytest
mkdir -p tests && touch tests/__init__.py

# JavaScript/TypeScript
npm install --save-dev jest
# 或
npm install --save-dev vitest

# Go
# 测试已内置,创建 *_test.go 文件

验证修复

子代理报告完成后:

# 运行特定测试
pytest tests/test_module.py::test_bug_description -v
npm test -- --grep "缺陷描述"
go test -run TestBugDescription -v

# 运行完整套件以检查回归问题
pytest
npm test
go test ./...

示例工作流

用户报告: “登录函数在邮箱有空格时崩溃”

阶段 1 — 编写失败测试:

# tests/test_auth.py
def test_login_handles_email_with_spaces():
    """缺陷:当邮箱包含空格时登录崩溃"""
    auth = AuthService()

    # 这应返回错误,而非崩溃
    result = auth.login("user @example.com", "password")

    assert result.success == False
    assert "invalid email" in result.error.lower()

运行测试以确认失败:

pytest tests/test_auth.py::test_login_handles_email_with_spaces -v
# 预期:失败(演示缺陷)

阶段 2 — 启动子代理:

任务工具:
- subagent_type: "general-purpose"
- description: "修复邮箱空格崩溃"
- prompt: "修复当邮箱包含空格时登录崩溃的问题。

  缺陷:AuthService.login() 在邮箱有空格时崩溃而非返回错误。

  失败测试:tests/test_auth.py::test_login_handles_email_with_spaces

  修复后,运行:pytest tests/test_auth.py::test_login_handles_email_with_spaces -v

  测试必须通过以确认修复。"

阶段 3 — 验证:

# 特定测试通过
pytest tests/test_auth.py::test_login_handles_email_with_spaces -v
# 通过

# 无回归问题
pytest tests/test_auth.py -v
# 所有测试通过

与钩子的集成

此插件中的 bug-report-detector 钩子自动:

  1. 检测用户报告缺陷时
  2. 提醒 Claude 遵循测试优先工作流
  3. 在创建或修改测试文件前阻止编辑/写入工具

附加资源

参考文件

  • references/test-frameworks.md — 框架特定的测试模式
  • references/common-bugs.md — 常见缺陷模式和测试策略

示例文件

  • examples/python-bug-test.py — Python pytest 示例
  • examples/js-bug-test.js — JavaScript Jest 示例

脚本

  • scripts/find-tests.sh — 在项目中定位测试基础设施