技術債務:究竟讓你付出了多大代價?

來源:互聯網
上載者:User

      技術債務背後的隱含的意思是,走捷徑(有意的技術債務)或者犯錯(無意的技術債務)都會有開銷,而且不處理這些捷徑或者錯誤的話,開銷會隨著時間而增加。     

      如果  我們有一個財務債務,我們知道我們今天需要還掉多少錢,我們也可以計算出我們將來需要付多少利息。而技術債務卻是模糊不清的,我們不知道我們已經欠了多少債了 – 你可能已經欠了許多無意的技術債務了 – 你也可能不知情的狀況下欠了許多債。我們沒辦法具體測量出我們已經花了多少了 – 我們已經付了多少利息了,如果我們今天不注意的話,我們將來也不會知道我們總共花了多少了。 

       一些人試圖將技術債務用具體的金融術語來表述。例如,根據CAST的軟體報告,“對於應用程式,一行代碼平均要花$3.61”。由於某種原因,java的程式平均花銷要高些:
每行$5.42。這些資料來自於他們的客戶代碼的統計分析。

      Sonar,一個管理代碼品質的開源項目,也試著對一個程式碼程式庫的技術成本進行了計算。他們也用了統計分析的方法,對自動化的測試用例的程式碼涵蓋範圍,代碼覆蓋性,重複率,不遵循代碼慣例的代碼以及注釋的密度等進行了分析。

      這種方法來急速技術債務很有意思,但我們不能認為這些能作為真正的資料來幫我們做出業務決策。儘管這些數字是精確的,但它們僅僅是主觀的猜測。他們假設技術賬單可以靠分析代碼的結構來計算。但是計算技術債務並沒有那麼簡單。

       但是這個賬單太模糊了,不能用來評估具體的價格。你覺得哪個類型的開銷對你的損害最大,你如何知道何時你花了太多了?讓我們來看看不同的技術賬單,採用模糊的方法來計算你花了多少。

 

     $$$ 在架構或是平台技術方面犯了一個基礎的錯誤 –
你發現的時候已經來不及了,使用者已經在使用系統了;或者是資料庫或訊息構造不能擴充,可靠性低;或者是由於核心的依賴問題,你沒辦法按照需要擴充架構;或者是你對系統如何工作或是使用者如何使用系統進行了一些不正確的預測。現在沒有選擇了,只能重新開始或者重寫系統的很大部分,能讓系統能繼續運作,通常你沒有足夠的時間來正確重寫。

       $$-$$$ 容易出錯的代碼 – 80%的錯誤出現在20%的代碼中。Capers
Jones說過所有的大系統中,有很少的一部分函數是錯誤的集中處,代碼很難理解,要修改它們是很危險的而且代價昂貴的,因為它們一開始就寫得很爛,或者是因為一些短視的錯誤修正的積累,使得代碼隨著時間而腐爛。沒有重寫這些代碼是程式員犯的最昂貴的錯誤。

      $-$$ 系統測試不易 – 因為你沒有好的自動化的測試用例,或者當你改變代碼的時候,測試案例變得支離破碎。測試的開銷占更改代碼帶來的開銷的一半以上 –
當你寫了更多的代碼,當系統增加了更多的介面和功能的時候,測試的開銷會隨之增加。

      $-$$ 不注意打包,發布和部署。太過依賴人手檢測,很容易在代碼上線的時候造成錯誤。就像測試一樣,發布和部署帶來的開銷不會消失,會逐漸的增加。

      $-$$ 代碼很神秘的工作,而沒有人知道為什麼 –
通常涉及到關鍵效能或關鍵安全的底層代碼是由已經離開公司很久的一個奇才所寫的。可能是很漂亮的代碼,但團隊裡沒有人能理解它。它就是個定時炸彈,某一天,某個人可能會試著更改它,或修改它。

      $-$$ 向前向後的相容性。這是必須的,短期的債務。但當你需要維護這些相容版本的時間越長,代價會越大。

       $-$$ 庫和中介軟體到期 – 你可能沒有來得及打補丁和升級了。儘管現在的代碼還很穩定,但你可能遭受沒打補丁的安全性危險。這個過程越久,你拉下的補丁越多,危險越大 –
如果你不再作支援人員了,可能某一天又會有人找到你。
      $-$$ 重複的,複製粘貼的代碼。這是最令人討厭的技術債務之一。幾乎每一個都會寫它們。但是到底有多糟糕?這個開銷取決於開發人員寫了多少重複的代碼,他們多長時間要更改它們一次,在不同的複製部分有多少細小的不同,你能否很輕易的找到重複的代碼並追蹤它們。如果寫重複代碼的程式員還在團隊裡,並且能很好的追蹤代碼,這就不會有太大的開銷。

       $-$$ 大家都知道的,很明顯的錯誤,並且沒有被修複的。這個開銷取決於你有多少錯誤和警告,它們到底有多麼的糟糕。如果它們是這種的問題的話,它們應該已經被修複了。如果一個錯誤沒有造成問題的話,它還是錯誤嗎?

     $-$$ 低效 的設計或構建,過度消耗硬體,使用過多的記憶體,網路頻寬或cpu。硬體是很便宜的,但當你要進行擴充的時候還是要花掉很多的。

      $ 使用編程習慣和模式不一致 – 程式員不理解已經存在的模式,或是不喜歡它們,而引進新的模式,或者僅僅是想改變它們。這樣做會很糟糕,對程式員來說會很挫敗。但讓程式就這麼存活下去的開銷往往要比全部清理乾淨的開銷要小。

       $ 沒有錯誤處理和異常處理,或者方法不對。在上線階段會讓你很受傷,但通常開銷不會很大,至少你讓大部分都正常運行。

       $0.01 寫入程式碼,神秘的數字,代碼不遵循規範,混亂的命名,缺失的注釋,不整潔的代碼。這確實很糟糕,但這些都很容易經過重構的工作清理乾淨。

       $0.01 文檔到期 – 這經常被認作是技術債務。但老實講,大部分程式員都不讀文檔。如果沒有人使用文檔,那麼就放棄它們。如果人們在使用它,為什麼它們會到期呢?

      $0.00 應該使用語言內建的功能,庫,架構來寫的代碼卻用手重寫了。當某人意識到的時候是很失望的,但如果這些代碼沒有太多的錯誤的時候,這是個沉沒成本,而不是會隨時間增長的成本。 

       不同的債務有不同的開銷。找出你的開銷主要在什麼地方,已經如何處理它們,不是一件容易的事情。

英文原文: swreflections.blogspot.hk

譯文連結:http://blog.jobbole.com/25137/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.