引言
入职新公司,我们希望去写新系统,但是实际上你的工作往往是去维护一个遗留系统。那么这边文章就来分享一下如何重建一个遗留系统。
定义遗留系统
我们可以把一个已经存在的、难以维护或者扩展的系统统称为遗留系统。遗留系统往往有这些特征:
- 老旧:项目代码写于很多年前,经历过几代人开发和维护。
- 庞大:代码越多,Bug 也越多,维护越困难。
- 继承而来:代码的创建者和维护者已经不是同一批人了。
- 文档不完善:文档没有及时的更新,甚至是没有文档。
重建遗留系统难点
为什么说重建遗留系统是一件很难的事情?因为:
- 害怕改变:项目复杂、缺少文档,谁也不想维护这种系统。写新需求或者改动老代码都害怕出现新的 Bug。
- 缺少测试,或者连测试都很困难。
- 过时的依赖:项目依赖于过时的第三方库,不敢升级。
实战
下定决心
首先要明白一点,重建遗留系统是一件很难的事情。你们是否下定决心去重建?克服恐惧和沮丧。
建立信心
- 探索性重构:你对代码了解的越多,恐惧就越少。
- 使用工具:
- Git 版本管理
- IDE 编辑器
- 代码规范和代码检查工具
- 其他同事:互相 review 代码
快速部署
新人能快速部署项目,也是一个重要的指标。我们可以使用 Docker 简化部署,持续更新部署文档。可以把部署步骤放在 README.md 中,方便大家了解。
日志系统
可在线方便快速的日志系统,你可以使用 ELK 自主搭建,或者使用云服务器平台提供的日志服务。
针对小型项目还可以使用 Sentry 等 SaaS 服务进行错误收集,接入基本上无门槛,非常的方便。
自动化部署
- 如果你们使用的 GitHub 那就可以用 GitHub Actions 来自动化部署。
- 如果使用的是 Gitlab,那就可以用 Gitlab CI 来自动化部署。
- Jenkins 也是一个不错的自动化部署工具。
自动化测试
编写单元测试,配置 CI 来运行单元测试、集成测试。
系统监控
可以自己部署开源的 Grafana 和 Prometheus 监控系统,也可以使用 DataDog 提供的 SaaS 监控系统。
这样就可以监控系统的性能和状态。
有了日志和系统监控就算系统有 Bug 我们也能及时响应,更快的解决问题。
重搭架构
拆分系统:拆分成多个模块,每个模块都有自己的角色,每个模块都有自己的职责。
把一个大的系统拆分成很多小的系统,这个每个系统的代码量就会很小,这样就可以更好的维护和扩展。
最后
为什么项目最后会变成无法维护?
有时候我们为了快速实现某个需求,走了一些捷径,这种实现方案类似于贷款,到了某些时候我们必须偿还这些贷款,如果没有按时还款,这只会积累更多的贷款和利息,最终你需要支付的债务就会超过你的支付能力。我们把这称之为 code debt。
- 原文作者: forecho
- 原文链接: https://blog.forecho.com/re-engineering-legacy-software.html
- 版权声明:本作品采用 署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。