测试守护重构
程序员文章站
2022-06-16 20:39:17
作为程序员不得不接受的现实是,大多数系统在接手时就已经是遗留系统了。我在最近几年都没有参与新系统开发,不得不接手遗留系统的改造。改造遗留系统的成本实际上比写新的软件要大很多,毕竟就像给高速上飞驰的汽车换*。不仅不能引入新的错误,原来的错误在某种程度上也需要“将错就错”,否则对现有用户、现有数据而言顺手修复了一个 bug 反而会带来额外的问题。要想改造遗留系统不是这么简单地事情,需要考虑的事情很多,而测试就是其中很重要的部分。没有单元测试、E2E 测试的系统改造起来难度非常大,所以这也是我热衷于在每个项...
作为程序员不得不接受的现实是,大多数系统在接手时就已经是遗留系统了。我在最近几年都没有参与新系统开发,不得不接手遗留系统的改造。改造遗留系统的成本实际上比写新的软件要大很多,毕竟就像给高速上飞驰的汽车换*。不仅不能引入新的错误,原来的错误在某种程度上也需要“将错就错”,否则对现有用户、现有数据而言顺手修复了一个 bug 反而会带来额外的问题。
要想改造遗留系统不是这么简单地事情,需要考虑的事情很多,而测试就是其中很重要的部分。没有单元测试、E2E 测试的系统改造起来难度非常大,所以这也是我热衷于在每个项目中引入单元测试、E2E 测试的原因。
对遗留系统重构的逻辑非常直接但并不是直接上手修改代码就好了,需要有几个过程,和几个注意事项。
遗留系统改造的过程我总结为以下几个:
- 抽取接口,使组件替换成为可能。
- 理解原有系统,并补充测试,让测试覆盖率达到一定程度,使用存量数据作为输入运行测试。
- 重新实现接口,替换原有实现。
- 使用同样的数据作为输入运行测试。
几项特别的注意事项:
- 使用版本管理工具
- 充分使用 IDE 的重构工具
- 使用持续集成环境,让每一次提交都自动构建一次
- 提前考虑数据迁移的成本,编写迁移脚本,并进行测试
当然这部分重点是讨论怎么编写出可靠的测试,重点不是重构。我在大量的重构(清理屎山)的工作主要分为两类:一类是重构单个方法和类,大部分讲解重构技巧的书籍着重说明这部分;还有一类是重构系统,比如流行的微服务拆分和改造,最讨厌的莫过于伪微服务的修正。
本文地址:https://blog.csdn.net/Linucus/article/details/109616128
上一篇: linux中shell的变量的数值计算
下一篇: RabbitMQ整合SpringBoot