天天看點

【轉】如何對待技術債務?資産or負債?

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

現代軟體系統都是采用分層式開發和子產品式開發,每一層次的程式都是在更低層次子產品的基礎上建構的。比如Java程式在讀寫檔案的時候,不會直接操作磁盤硬體,而是使用檔案相關的類,這些類又調用作業系統提供的API接口。我們在開發的過程中,很少有從底層子產品直接開始開發的,大部分時間是在已經存在的子產品上進行修改,在曆史代碼的基礎上工作。

1 曆史代碼:優質資産還是曆史包袱?

事物總是有兩面的,一面是好的,一面就不那麼好了。曆史代碼也是如此。一方面,曆史代碼提供了大量可以複用的架構和子產品,提供了一個基礎,我們可以在基礎上快速建立軟體。另一面,曆史代碼的設計可能不符合新的需求,曆史代碼也可能存在缺陷,我們必須花費時間和精力來處理這些問題。那麼曆史代碼,究竟是優質資産還是曆史包袱呢?事物雖然有兩面,但往往總有一面是主要的,占主導地位的。當好的一面占主導地位的時候,曆史代碼就成為優質資産,反之就是曆史包袱。那麼,什麼樣的曆史代碼,是好的一面主導的呢?其實前面已經給出了答案:如果新需求可以基于曆史代碼快速實作,這就是好的一面在主導。如果開發新功能的時間中,大部分是在處理曆史代碼在設計和編碼上的缺陷時,就是壞的一面在主導。

2 軟體演化:不斷進化還是漸漸腐壞?

軟體在整個生命周期中總是不斷變化的,新增功能、修複缺陷,都要修改軟體。一些軟體變得越來越好,功能逐漸完善,性能也不斷提高,體驗、易用性不斷提升。另一些軟體則越來越糟,功能雜亂卻無用,運作越來越慢,界面難以使用。代碼也是一樣。一些代碼變得越來越好,設計合理,結構清晰,性能優越。另一些代碼變得越來越糟糕,一團亂麻,缺陷叢生。事物的演化通常有兩個方向,一個是不斷進化,一個是不斷腐壞。不斷進化的代碼,最終會變成優質資産,而不斷腐壞的代碼,終将成為曆史包袱。代碼是進化還是腐壞,差別就在于如何對待技術債務。

3 技術債務:以平常心對待

如果對技術債務視而不見,任由其泛濫,代碼漸漸腐壞,最終代碼變得不可維護,軟體也進入生命周期末端。但技術債務也不可能完全消除。試圖徹底消除技術債務,将不斷權衡而難以抉擇,或産生過度設計,導緻軟體不斷延期。是以,技術債務注定要伴随軟體的整個生命周期,而開發團隊要做的是,如何在軟體的生命周期中,讓技術債務保持在一個合理的範圍之内,不要讓技術債務惡化。這就需要接受和技術債務共存的事實,以平常心來對待。經常性的審查代碼,消除即将惡化的技術債務。

4 幾條具體措施

  • 保持整潔。保持項目目錄、代碼、注釋、配置整潔,及時清理過時、無效的檔案、代碼和注釋。
  • 排除歧義。采用具有業務含義的命名,避免混淆、歧義、不清晰的命名。
  • 合理設計。設計結構合理,不過度負載,也不過于簡化。保持設計的正交性。
  • 适時重構。避免大量重複的代碼。在第3次複制粘貼時進行重構。

5 進一步閱讀

  • 設計模式
  • 重構
  • 代碼整潔之道
  • 編寫可讀代碼的藝術