浏览 AI 知识库

重构前怎样固定现有行为,避免顺手改变业务逻辑

重构的前提是知道旧代码现在做什么。先用特征测试固定关键输入输出,再拆结构;业务规则要不要改,应当作为另一项明确决定。

沿完整工作流推进

前一阶段的可检查结果,是下一阶段的输入;中间证据不足时停在当前阶段。

  1. 01边重构边修业务逻辑,最后很难分清是哪一步改坏了
  2. 02先确认这次任务的起点、边界和交付
  3. 03从“界定重构目标”走到“比较前后证据”
  4. 04把‘拆分订单服务’限制在结构变化,不顺手改业务规则
  5. 05完成后的特征测试与前后差异报告
沿一件真实任务走到底

边重构边修业务逻辑,最后很难分清是哪一步改坏了

准备重构折扣计算,代码没有测试;函数混合会员等级、优惠券和日期规则。开发者一边拆函数一边修“看起来不合理”的结果,业务行为悄悄改变。

  • 现有行为在改代码前已锁定
  • 重构与业务修复分开
  • 前后差异报告可复查
本例材料

先确认这次任务的起点、边界和交付

需要确认本例内容
现有材料现有生产样本 12 个已脱敏订单、当前函数输出和两条已知异常;本次只重构结构,不改规则。
不能越过的边界先用特征测试固定当前可观察行为;已知异常单独记录,不在重构中顺手修;前后输出逐项比较。
要交付的结果特征测试与前后差异报告
处理记录

从“界定重构目标”走到“比较前后证据”

当前阶段实际处理
界定重构目标写要改善的结构、可维护性或性能问题,以及明确不改变的外部行为。
捕获当前行为为关键输入、边界、错误和副作用添加特征测试,哪怕当前结果不理想也先记录。
建立安全小步一次只移动、重命名或抽取一种结构,保持每步可编译、可测试和可审查。
分开业务修复发现真实 Bug 时单独记录和提交,先确认期望行为与负责人,不藏在重构中。
比较前后证据运行相同测试、接口样例和性能基线,审查 diff 是否只涉及目标范围。
重构前后对照

把‘拆分订单服务’限制在结构变化,不顺手改业务规则

项目重构前证据本轮动作不变/变化
输入输出订单 ID 17 返回总价 99抽取 PriceCalculator金额和舍入规则不变
错误库存不足返回 409移动错误类型和测试夹具状态码和错误契约不变
副作用创建一条审计记录保留调用点并加特征测试记录内容和顺序不变
真实 Bug发现旧税率错误单独开修复任务不藏在重构提交里

数字和接口为示例;真实项目先捕获当前行为,再决定哪些有意变化需要单独审批。

最终输出

完成后的特征测试与前后差异报告

12 个订单形成黄金输入/输出,覆盖会员、券叠加、边界日期和空值。拆函数前后结果完全一致;已知异常仍作为跳过用例链接到独立任务。差异报告为 0 后才合并重构。

常见失败

为什么“前后结果一致,仍可能遗漏重要行为”还不能交付

前后结果一致,仍可能遗漏重要行为

原因
样本只来自正常订单
怎么改
补生产边界、错误和历史回归案例,并记录覆盖不到的外部副作用
验收方式

特征测试与前后差异报告通过哪些检查才算完成

进一步核对

调试与测试:参考资料与核对入口