所属教程:OpenAI Codex CLI 从入门到大师级完整教程 预计阅读:24 分钟
重构的价值是改善结构而不改变行为,但它也是最容易"悄悄改坏"的操作。安全重构的核心是先有行为基线、与功能变更分离、小步提交、随时可回退。本节给出安全重构前提、标准步骤、必须避免的混合改动方式,以及回归保证与回退手段。
git status 确认无未提交的混杂改动,避免把重构与既有修改混在一起。| 步骤 | 做法 | 验证/产出 |
|---|---|---|
| 1. 明确重构目标 | 只选定一种结构问题(重复、过长、职责混杂等),不夹带功能调整 | 写明改什么、不改什么、保持不变的行为 |
| 2. 建立基线 | 运行现有测试/构建或记录关键行为输出 | 一份重构前可复现的基线结果 |
| 3. 小步变换 | 按依赖方向逐处调整,每处聚焦单一结构目的 | 每步可独立编译/运行 |
| 4. 即时回归 | 每完成一类变换即对照基线跑验证,发现行为漂移立即停手 | 无新增失败、关键行为一致 |
| 5. 提交固化 | 验证通过后人工提交,形成清晰、可单独回退的节点 | 结构变更与功能变更不混在同一提交 |
| 6. 复查差异 | 用 git diff 确认改动均属结构性质,无逻辑被顺手改写 | diff 与重构目标一致 |
| 高风险做法 | 为什么危险 | 安全替代 |
|---|---|---|
| 重构同时修 Bug、加功能 | 行为一旦变化无法区分是结构副作用还是有意改动 | 先提交稳定版本,再分别做功能/缺陷修复与重构 |
| 无测试兜底直接大改结构 | 缺少基线,结构改变后问题难以察觉 | 先补特征测试或关键路径回归基线,再动手 |
| 跨层、跨模块一次性搬移 | 影响面过大、diff 难以审查、回退成本高 | 按模块局部重构,逐块验证合并 |
| 删除"看起来无用"的代码 | 可能被反射、配置、测试或入口间接引用 | 先确认无引用与无动态调用,再单独删除并保留回退点 |
| 重构中改动命名风格与签名 | 同时改结构和契约,扩大兼容风险 | 契约调整作为独立变更,先稳定兼容策略 |
| 凭"更优雅"一次性重写 | 脱离现状的重写等同于重实现,缺陷率高 | 渐进改善,每步行为可证不变 |
git restore 还原;已提交但有问题的变更,通过版本历史回退到上一可用节点,再重新规划。| 问题 | 处理建议 |
|---|---|
| 项目测试很少怎么做重构 | 先围绕要重构的核心路径补最小回归验证,或用脚本固化当前输出,降低无保护重构风险。 |
| 重构过程中想顺手修个小 Bug | 忍住并另立任务;同一提交混合后将无法干净归因与回退。 |
| 如何判断重构是否"改坏了" | 以重构前基线对照测试与关键行为;任何非预期的失败或行为变化都视为漂移。 |
| 大型遗留代码是否适合大重构 | 优先局部、渐进、围绕新需求的小重构;避免脱离价值驱动的大规模重写。 |
git diff 自检确认无逻辑被顺手改变。第 6 章完成了仓库探索、跨文件改动组织与安全重构三条中级实战线:先建立认知、按契约分层推进、在行为不变的前提下小步改善结构。第 7 章转向运行安全底座:理解沙箱读写边界与工作区限制、命令审批与网络访问控制,并搭建一个隔离可控的代理工作目录。
← 上一节:跨文件编辑与改动边界控制 下一节:沙箱读写模型与工作区边界 →