跳到正文
教程31 篇

架构与代码质量第 2 / 3 篇

接手“屎山”项目:先保护行为,再替换一小段

从一个经常出错的路径下手,避免让 AI 一次重写整仓库。

进阶约 30 分钟练习资料核实

学习目标

一份原行为记录、一个有界重构补丁和对应回退点。

适用场景

项目的资料导入函数很长,还混着旧格式处理。你只需要修复“空行导致整批失败”,AI 却建议替换整个解析器。练习先保住现有导入结果,再局部处理空行。

准备条件

  • 可恢复的代码版本和独立开发环境;不要直接替换生产程序。
  • 脱敏输入样本,包括当前能成功、已知失败和边界情况。

操作步骤

  1. 先区分重构与业务修复

    重构要求外部行为不变,修复则会改变一个已确认的错误行为。分开列出两者,先记录哪些差异允许发生。对旧系统的意外行为,不知道是否有人依赖时先查调用和需求,不自动判定它“没用”。

    本轮边界
    保留:原有有效行的解析结果、排序和错误格式。
    修复:空白行应被忽略,不应导致整批失败。
    非目标:更换文件格式、并发导入、重写数据库层。
    待确认:只有空行的文件应返回空结果还是校验错误?
    在关键语义确认前,不发布依赖它的改动。
  2. 给现有行为留一份可重复的证据

    先在原版本上运行样本,保存输入与输出或有意义的断言。不要把包含随机时间和内部堆栈的整份响应盲目锁成快照。已知缺陷单独登记,避免把错误也永远保护下来。

    最小回归样本集
    样本 A:两条有效记录,顺序和字段应保持。
    样本 B:有效行之间有空行,预期由本轮需求确定。
    样本 C:带转义符或分隔符的内容,沿用现有格式规范。
    样本 D:非法必填字段,保留对外错误约定。
    对照记录:旧版本 / 新版本 / 允许差异 / 实际差异 / 结论
  3. 只在已找到的接缝替换

    让 AI 先定位输入规范化、解析与写入三段的实际调用。仅抽出或修复其中一段,维持原函数对外签名。新旧结果可以在脱敏离线样本上对比;不要为比较而让生产写入执行两遍。

    给 AI 的有界重构任务
    目标:在现有解析路径处理空行,并保持已确认格式行为。
    先列实际文件、调用者、原有测试与待确认语义。
    只改相关解析函数和必要用例,不迁移框架,不改写入接口。
    用原样本做前后对照,列全部差异及需求依据。
    发现必须扩大范围时,先说明证据与最小替代办法。
  4. 分开提交行为修复与整理,保留可恢复点

    先让必要修复可验证;整理命名、抽函数等另一个有意义的小补丁处理。运行受影响的调用路径,核对旧入口是否仍有使用者。只有引用、配置和实际数据均有依据,才删除被替换的旧路径。

常见误区

全仓格式化和重构混在修复中。
缩小审查范围,先交付能解释的行为修复;无关整理另做。
只因新实现输出不同,就更新所有测试预期。
先回查需求及样本差异,不能用新实现反向定义正确答案。

验收清单

  • 修复行为和保留行为分开列明。
  • 对照在无生产副作用的环境运行。
  • 每项差异有依据,未知语义没有被猜测代替。
  • 补丁和数据影响都有对应恢复方式。

资料与版本

本文为原创方法整理,示例与提示词需按项目调整;不代表真实用户研究或账号执行结果。