关于 refactor-process
refactor-process 是用于执行行为保持型重构的编码技能,以小步修改并逐步运行测试。它指导开发者建立测试基线、规划变更并设置检查点。
主要功能
- 01修改前要求特征测试通过
- 02规划原子化变换步骤
- 03每次变更后运行测试
- 04测试失败时立即撤销
- 05设置基线、方案和完成检查点
适用场景
- 01在保持行为的同时重构模块
- 02将复杂方法拆分为较小单元
- 03确保每次小幅修改通过测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igmarin/ ruby-core-skills --skill refactor-process安装后在 Claude Code 中输入/refactor-process确认已加载。
详细介绍
重构流程
在执行此流程前,先应用执行约定。
快速参考
| 方面 | 规则 |
|---|---|
| 前提条件 | 编辑前必须已有特征测试,且测试全部通过 |
| 步骤大小 | 每次只进行一项原子转换(如重命名变量、提取方法等) |
| 验证 | 每个单独步骤之后都运行测试 |
| 不改变行为 | 重构期间不添加新功能、不修复缺陷,也不改变返回值 |
| 回滚 | 如果测试未通过,立即撤销,不要在代码处于损坏状态时调试 |
流程步骤
步骤 1:建立基线
- 运行该类或模块的现有测试。
- 如果覆盖率不足或较弱,编写特征测试(用于记录当前行为,包括边界情况和错误的测试)。
- 确认所有测试都通过后再继续。
步骤 2:规划步骤
- 明确目标(例如,将复杂方法提取到独立的类中,简化条件代码块)。
- 将目标拆解为一系列原子重构操作(重命名、提取、内联、移动、替换条件等)。
步骤 3:执行与验证循环
针对每个计划步骤:
- 进行一项单独的原子代码修改。
- 运行测试。
- 如果测试通过,保存或提交该步骤,然后继续。
- 如果测试未通过,丢弃更改(例如,通过
git checkout或撤销),分析根本原因,并尝试更小的步骤。
检查点模式
暂停并与用户确认:
- 基线检查点: 在进行任何编辑前,展示特征测试和当前实现。
- 重构提案: 概述计划进行的转换步骤。
- 完成检查点: 提供最终重构后的代码和测试套件验证报告。
重构循环示例(提取方法)
基线(通过):
class ReportGenerator
def generate(data)
# Formats raw data to report
formatted = data.map { |row| "#{row[:id]}: #{row[:name].strip.capitalize}" }
# Renders report
"=== Report ===\n" + formatted.join("\n") + "\n=============="
end
end
步骤 1:提取格式化逻辑(原子编辑):
class ReportGenerator
def generate(data)
formatted = format_rows(data)
"=== Report ===\n" + formatted.join("\n") + "\n=============="
end
private
def format_rows(data)
data.map { |row| "#{row[:id]}: #{row[:name].strip.capitalize}" }
end
end
操作: 立即运行测试,确认测试通过。
反模式
- 行为蔓延: 将重构与行为更改(缺陷修复、优化)放在完全独立的提交中。
- “大步跳跃式”重构: 一次进行多项非平凡更改会让故障难以诊断;务必采用尽可能小的原子步骤。
集成
| 场景 | 后续技能 |
|---|---|
| 建立基线覆盖率 | test-planning-process → tdd-process |
| 记录新提取的 API | write-yard-docs |
| 重构后审查 | review-process |
评论
支持 Markdown