zoukankan      html  css  js  c++  java
  • 【转】如何对待技术债务?资产or负债?

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

    -----------------------------------

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

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

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

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

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

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

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

    4 几条具体措施

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

    5 进一步阅读

    • 设计模式
    • 重构
    • 代码整洁之道
    • 编写可读代码的艺术
  • 相关阅读:
    BZOJ.1468.Tree(点分治)
    BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)
    BZOJ.4319.[cerc2008]Suffix reconstruction(后缀数组 构造 贪心)
    BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
    洛谷.3374.[模板]树状数组1(CDQ分治)
    BZOJ.4566.[HAOI2016]找相同字符(后缀数组 单调栈)
    POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
    POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)
    POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)
    UOJ.35.[模板]后缀排序(后缀数组 倍增)
  • 原文地址:https://www.cnblogs.com/oxspirt/p/14190709.html
Copyright © 2011-2022 走看看