如何对待技术债务

http://tommwq.tech/blog/2020/12/23/289

现代软件系统都是采用分层式开发和模块式开发,每一层次的程序都是在更低层次模块的基础上构建的。比如Java程序在读写文件的时候,不会直接操作磁盘硬件,而是使用文件相关的类,这些类又调用操作系统提供的API接口。我们在开发的过程中,很少有从底层模块直接开始开发的,大部分时间是在已经存在的模块上进行修改,在历史代码的基础上工作。

1 历史代码:优质资产还是历史包袱?

事物总是有两面的,一面是好的,一面就不那么好了。历史代码也是如此。一方面,历史代码提供了大量可以复用的框架和模块,提供了一个基础,我们可以在基础上快速创建软件。另一面,历史代码的设计可能不符合新的需求,历史代码也可能存在缺陷,我们必须花费时间和精力来处理这些问题。那么历史代码,究竟是优质资产还是历史包袱呢?事物虽然有两面,但往往总有一面是主要的,占主导地位的。当好的一面占主导地位的时候,历史代码就成为优质资产,反之就是历史包袱。那么,什么样的历史代码,是好的一面主导的呢?其实前面已经给出了答案:如果新需求可以基于历史代码快速实现,这就是好的一面在主导。如果开发新功能的时间中,大部分是在处理历史代码在设计和编码上的缺陷时,就是坏的一面在主导。

2 软件演化:不断进化还是渐渐腐坏?

软件在整个生命周期中总是不断变化的,新增功能、修复缺陷,都要修改软件。一些软件变得越来越好,功能逐渐完善,性能也不断提高,体验、易用性不断提升。另一些软件则越来越糟,功能杂乱却无用,运行越来越慢,界面难以使用。代码也是一样。一些代码变得越来越好,设计合理,结构清晰,性能优越。另一些代码变得越来越糟糕,一团乱麻,缺陷丛生。事物的演化通常有两个方向,一个是不断进化,一个是不断腐坏。不断进化的代码,最终会变成优质资产,而不断腐坏的代码,终将成为历史包袱。代码是进化还是腐坏,区别就在于如何对待技术债务。

3 技术债务:以平常心对待

如果对技术债务视而不见,任由其泛滥,代码渐渐腐坏,最终代码变得不可维护,软件也进入生命周期末端。但技术债务也不可能完全消除。试图彻底消除技术债务,将不断权衡而难以抉择,或产生过度设计,导致软件不断延期。因此,技术债务注定要伴随软件的整个生命周期,而开发团队要做的是,如何在软件的生命周期中,让技术债务保持在一个合理的范围之内,不要让技术债务恶化。这就需要接受和技术债务共存的事实,以平常心来对待。经常性的审查代码,消除即将恶化的技术债务。

4 几条具体措施

  • 保持整洁。保持项目目录、代码、注释、配置整洁,及时清理过时、无效的文件、代码和注释。
  • 排除歧义。采用具有业务含义的命名,避免混淆、歧义、不清晰的命名。
  • 合理设计。设计结构合理,不过度负载,也不过于简化。保持设计的正交性。
  • 适时重构。避免大量重复的代码。在第3次复制粘贴时进行重构。

5 进一步阅读

  • 设计模式
  • 重构
  • 代码整洁之道
  • 编写可读代码的艺术

猜你喜欢

转载自blog.csdn.net/tq1086/article/details/111599147