接缝与包装是什么
给没有测试的遗留代码找接缝:接缝指可以在不改动内部实现的情况下替换行为的位置。在接缝处引入包装层(包装器、适配器)与特征测试,先锁定现有行为,再逐步重构。当全量重写不现实时,这套回归保护是这里最值得投入的部分。
基本信息
| 接缝 | 可在不改动内部实现的前提下替换行为的位置 |
|---|---|
| 引入手段 | 提取接口、注入依赖、包装外部调用 |
| 测试形式 | 特征测试,记录现状行为(含看起来奇怪的行为) |
| 前提 | 能选定稳定入口并构造输入 |
| 目标 | 让后续改动有回归保护 |
典型使用场景
- 接手没有测试的老系统,先建立一层回归保护
- 替换第三方库前,用适配器隔离调用点
- 把难以测试的静态调用包装成可注入的依赖
- 渐进式重写:新旧实现并存,用接缝切换流量
- 为难以构造的场景(时间、外部接口)提供可替换入口
特征测试要点
特征测试要点
1. 选定入口,记录真实输入输出对(含边界与异常)
2. 断言当前看起来奇怪但确实存在的行为
3. 重构期间测试一旦偏离即红灯,据此定位影响
4. 发现的缺陷单独记录并排期,不混进重构提交接缝的引入方式
| 方式 | 适用 | 注意 |
|---|---|---|
| 提取接口 | 多处调用同一实现 | 接口只保留真实需要的操作 |
| 注入依赖 | 内部直接构造或静态调用 | 引入后可测试替换 |
| 包装外部调用 | 第三方库、系统时间 | 包装层要薄,别再加难测逻辑 |
特征测试锁定的是现状而不是期望:重构期间发现明显缺陷时单独记录,不要顺手修正,否则重构与修缺陷混在一起,出问题无法归因。
接缝选择的判断
- 优先选调用频繁、影响面大的位置,投入产出比更高
- 选行为相对稳定、输入输出可构造的入口
- 避免一次引入过多接缝,配套清理计划才不会越积越多
- 接缝要薄:只做转接,不要在里面再加一层业务逻辑