技術債務(Technical debt)的產生原因及衡量解決

第一次發佈代碼,就好比借了一筆錢。只要通過不斷重寫來償還債務,小額負債可以加速開發。但久未償還債務會引發危險。複用馬馬虎虎的代碼,類似於負債的利息。整個部門有可能因為鬆散的實現,不完全的面向對象的設計或其他諸如此類的負債而陷入窘境。 ---維基百科

簡介

技術負債(英語:Technical debt),又譯技術債,也稱為設計負債(design debt)、代碼負債(code debt),是編程及軟件工程中的一個比喻。指開發人員為了加速軟件開發,在應該採用最佳方案時進行了妥協,改用了短期內能加速軟件開發的方案,從而在未來給自己帶來的額外開發負擔。這種技術上的選擇,就像一筆債務一樣,雖然眼前看起來可以得到好處,但必須在未來償還。軟件工程師必須付出額外的時間和精力持續修復之前的妥協所造成的問題及副作用,或是進行重構,把架構改善為最佳實現方式。
1992年,沃德·坎寧安首次將技術的複雜比作為負債。 ---維基百科

通俗易懂的例子:

技術債務類似於金融債務。軟件開發就像是去“貸款”,而技術債務就像是它的“利息”,“利息”是需要以未來額外的時間來還的。重構才相當於是支付“本金”。

技術負債的產生原因

  1. 業務壓力:為了滿足業務的快速要求,在必要的修改並沒有完成時就匆匆發佈,這些未完成的修改就形成了技術負債。
  2. 缺少過程和理解:業務人員不清楚不理解技術負債的概念,在決策時就不會考慮到其帶來的影響。
  3. 模塊之間解耦不夠:功能沒有模塊化,軟件柔性不夠,不足適應業務變化的要求。
  4. 缺少配套的自動化測試:導致鼓勵快速而風險很大的“創可貼”式的BUG修復。
  5. 缺少必要文檔:需求和代碼都沒有必要的支撐性文檔或註釋。
  6. 缺少協作:組織中的知識共享和業務效率較低,或者初級開發者缺少必要的指導。
  7. 重構延遲:在開發的過程中,某些部分的代碼會變得難以控制,這時候就需要進行重構,以適應將來的需求變化。重構越是推遲,這些已有的代碼被使用的越多,形成的技術負債就越多,直到重構完成。
  8. 不遵循標準或最佳實踐:忽略了已有的業界標準、框架、技術和最佳實踐。
  9. 缺少相關技能:開發人員有時候技能缺失,並不知道如何編寫優雅的代碼。

技術債務的危害

技術負債的“利息”會越滾越多,甚至最後都無法計算其帶來的影響。將有技術負債的代碼發佈到生產系統,就是提高了“利息”的“利率”。最終將會導致技術團隊破產,質量無法保障。

技術債務衡量(SQALE & SonarQube)

SQALE (Software Quality Assessment based on Lifecycle Expectations) is a method to support the evaluation of a software application source code. It is a generic method, independent of the language and source code analysis tools. ---wikipedia


SQALE(基於生命週期期望的軟件質量評估)是一種支持軟件應用程序源代碼評估的方法。它是一種通用方法,獨立於語言和源代碼分析工具。


SonarQube 中的技術債務就是基於SQALE方法,是通過代碼規則和問題來實現的。


SonarQube 項目技術債務

技術債務(Technical debt)的產生原因及衡量解決


SonarQube 代碼技術債務詳情

技術債務(Technical debt)的產生原因及衡量解決


SonarQube 技術債務配置

技術債務(Technical debt)的產生原因及衡量解決


SonarQube SQALE 商業插件提供更詳細的報告

技術債務(Technical debt)的產生原因及衡量解決

原圖鏈接:https://www.bitegarden.com/img/sonarqube-sqale/sonarqube-sqale-dashboard.png


技術債務解決(SonarQube)

SonarQube 已經詳細的列出了技術債務相關的所有指標和問題,也有很完善的管理和推薦解決方案。


SonarQube 問題中推薦的解決方法

技術債務(Technical debt)的產生原因及衡量解決


我強烈推薦大家使用 SonarQube 來管理和解決技術債務。


後續我會寫關於 SonarQube 的系列文章,大家敬請期待~

參考文檔

  • https://wiki.hk.wjbk.site/baike-%E6%8A%80%E6%9C%AF%E8%B4%9F%E5%80%BA
  • https://en.wikipedia.org/wiki/SQALE
  • https://www.sonarqube.org/
  • https://www.bitegarden.com/sonarqube-sqale​
  • https://www.luxusworldwide.com/hs-fs/hubfs/Technical%20debt%20-%20Iceberg.jpg?width=3200&name=Technical%20debt%20-%20Iceberg.jpg(封面圖片)


分享到:


相關文章: