SuperAPI AI Directory

code-refactoring

Coding & development

View repository

Updated 10-16 05:00

About this skill

Code Refactoring Skill

This skill provides systematic and safe code refactoring guidance to help improve the internal structure of existing code without changing its external behavior.

Core Principles

  1. Test first, refactor later: Ensure sufficient test coverage before starting refactoring
  2. Take small steps: Perform only one small refactoring action at a time, and verify immediately
  3. Keep behavior unchanged: Refactoring should not change the external behavior of the code
  4. Continuously verify: Run tests to verify after every refactoring step
  5. Style compliance: Refactored code should comply with project standards

Refactoring Plan Output Format

Before performing any refactoring, a detailed refactoring plan must first be output in the following format:

## 重构计划

Refactoring Item 1

  • Location: [file path]:[line number range], [function/class/module name]
  • Issue: [describe the current problem, indicate the type of code smell]
  • Solution: [recommended refactoring technique name]
  • Before Refactoring: [key code snippet before refactoring]
  • After Refactoring: [key code snippet after refactoring]
  • Reference: Relevant rules in [reference resource] (if involved)

Refactoring Item 2

...


## 标准重构流程

### 步骤 1:确保测试覆盖

**目的**:建立安全网,确保重构不会破坏现有功能。

**执行动作**:
1. 检查现有测试覆盖率
2. 如果覆盖率不足(建议 >70%),优先为核心逻辑补充测试
3. 运行全部测试,确保基线状态为绿色

**验证标准**:所有现有测试通过,关键路径有测试覆盖。

#### 无测试环境时的处理

当无法执行测试(如缺少依赖、环境未配置)时,可暂时跳过测试执行,但必须:

**风险告知**:
- ⚠️ 重构可能引入隐藏的回归问题
- ⚠️ 无法验证行为一致性
- ⚠️ 可能破坏现有功能

**替代验证方式**:
1. **静态检查**:运行 linter、类型检查器(如 mypy、eslint、staticcheck)
2. **代码审查**:人工对比重构前后代码逻辑
3. **编译验证**:确保代码可编译/解析无误

**后续验证建议**:
1. 在重构报告中明确标注"未执行测试验证"
2. 列出需要在真实环境中验证的测试用例
3. 建议用户在有测试环境后优先执行验证
4. 提供回滚方案(如 git revert 命令)

### 步骤 2:识别代码坏味道

**目的**:系统性地发现代码中的问题点。

**执行动作**:
1. 阅读代码,识别存在的坏味道
2. 记录每个坏味道的位置、类型和严重程度
3. 按优先级排序:先处理影响最大的问题

**常见坏味道快速参考**:

| 坏味道 | 说明 | 优先级 |
|--------|------|--------|
| 重复代码 | 相同代码出现在多处 | 高 |
| 过长函数 | 方法超过20-30行 | 高 |
| 过大类 | 类承担过多职责 | 中 |
| 过长参数列表 | 参数超过3-4个 | 中 |
| 数据泥团 | 多个数据项经常一起出现 | 中 |
| 特性依恋 | 方法对其他类数据更感兴趣 | 中 |
| Switch语句 | 复杂的条件分支 | 中 |

### 步骤 3:选择重构手法

**目的**:为每个坏味道匹配合适的重构手法。

**执行动作**:
1. 根据坏味道类型选择对应重构手法
2. 评估重构手法的风险和收益
3. 选择最适合当前上下文的手法

**常见映射关系**:

| 坏味道 | 推荐重构手法 |
|--------|-----------|
| 重复代码 | 提取方法、提取超类 |
| 过长函数 | 提取方法、以查询取代临时变量 |
| 过大类 | 提取类 |
| 过长参数列表 | 引入参数对象 |
| 特性依恋 | 移动方法 |
| Switch语句 | 以多态取代条件表达式 |

### 步骤 4:小步执行重构

**目的**:安全地执行重构,每一步都可验证。

**执行动作**:
1. 按优先级选择一个重构项
2. 执行单个重构手法,遵循原则:
   - 一次只做一个改动
   - 保持代码可编译/可运行状态
   - 每步改动后立即运行测试

**验证标准**:每一步后测试通过,代码可正常运行。

### 步骤 5:审视与进一步优化

**目的**:检查重构效果,发现新的优化机会。

**执行动作**:
1. 审视重构后的代码结构
2. 检查是否有新的坏味道产生
3. 如发现新问题,返回步骤2继续迭代

### 步骤 6:验证行为一致性

**目的**:确保重构未改变代码的外部行为。

**执行动作**:
1. 运行完整的测试套件,确保全部通过
2. 对于关键功能,进行手动验证
3. 如有性能敏感代码,进行性能对比测试

**验证标准**:所有测试通过,功能行为与重构前一致,无新增的警告或错误。

## 参考资源

### 项目代码风格规范

重构后的代码必须符合项目代码风格规范:

| 文件 | 内容 | 适用场景 |
|------|------|----------|
| [cpp-coding-style-guide.md](references/cpp-coding-style-guide.md) | C++ 编程规范 | 重构 C++ 代码时 |
| [python-coding-style-guide.md](references/python-coding-style-guide.md) | Python 编程规范 | 重构 Python 代码时 |
| [go-coding-style-guide.md](references/go-coding-style-guide.md) | Go 编程规范 | 重构 Go 代码时 |

### 重构知识参考

| 文件 | 内容 | 加载时机 |
|------|------|----------|
| [code-smells.md](references/code-smells.md) | 22种坏味道详解 | 需要识别特定坏味道时 |
| [refactoring-techniques.md](references/refactoring-techniques.md) | 25种重构手法 | 需要执行特定重构时 |

## 检查清单

### 重构前

- [ ] 是否有足够的测试覆盖?
- [ ] 是否理解要重构的代码?
- [ ] 是否有清晰的重构目标?

### 重构中

- [ ] 是否每次只做一个改动?
- [ ] 是否每步都运行测试?
- [ ] 是否保持代码可编译/可运行?

### 重构后

- [ ] 所有测试是否通过?
- [ ] 功能行为是否保持不变?
- [ ] 是否符合项目的代码规范?

## 输出报告

重构完成后,输出重构报告,报告内容包括:

1. **重构摘要**:重构项数量、涉及文件、代码行变化
2. **重构详情**:每个重构项的问题、方案、前后对比
3. **验证结果**:测试执行情况、静态检查结果
4. **重构效果**:重构前后的效果对比
5. **后续建议**:发现的潜在优化点、技术债清单