如何看待技術債務

關於技術債務,作開發的同窗對以下場景應該不陌生:程序員

爲了敢項目進度,詳細設計、單元測試等過程就不寫了,之後補
需求變化萬千,本來架構設計沒法知足新的需求,但是又不想動架構,因而繞過架構設計新增代碼
舊的系統,沒有文檔、沒有註釋,維護困難
如上問題,咱們若是不及時去修正,欠下的債務會愈來愈多,從而會致使代碼臃腫、系統效率低下,咱們能夠用技術債務這個詞來形容上面出現的系統的質量問題。架構

那什麼是技術債務呢?行程的緣由又是什麼?如何去管理技術債務?less

咱們在項目管理學習時知道表示軟件質量的三角形圖,時間、成本和範圍,以下圖:單元測試

爲何質量要放在三角形中間呢?由於質量是其餘三個因素平衡後結果的體現。比方說範圍不減、成本不增長,又想節約時間走捷徑,很顯然,會影響到質量,這個質量,不止是產品質量,還有架構質量和代碼質量。咱們隊這種質量的透支,就是一種債務,而技術債務,就是軟件項目中對架構質量和代碼質量的透支。學習

因此技術債務是有利息的,債務的利息,就是後續對軟件進行新增修改的時候,須要額外的時間成本。固然,技術債務不必定是壞的,軟件項目中,常常會刻意的欠一些技術債務,提高短時間的開發速度,讓軟件快速推出,從而搶佔市場;還有像快速開發模型,經過欠技術債務的方式快速驗證,即便驗證不可行,這筆技術債務也無需償還。測試

技術債務產生的緣由在重構一書中做者Martin Fowler把技術債務產生的緣由分紅了兩個維度:優化

1.輕率(reckless)仍是謹慎(prudent)編碼

2.有意(deliberate)仍是無心(inadvertent).net

這兩個維度正好能夠劃分紅四個象限,以下圖:架構設計

輕率/有意的債務
此象限,反映的是團隊由於成本、時間的緣由,故意走捷徑沒有設計、不遵照好的開發實踐,對於債務沒有後續的改進計劃,好比,不作設計直接編碼,後期也沒有重構代碼的打算,抑或團隊過於年輕,沒有足夠的資深程序員指導和審查代碼

謹慎/有意的債務
此象限,反映的是團隊清楚指導技術債務的收益和後果,也制定了後續的計劃去完善架構和提高代碼質量的狀況,好比爲了儘快發佈產品,先快猛糙的方式開發,後續進行代碼重構,這種債務由於能及時償還,因此能夠短時間有必定時間上的收益,長期也不會形成負面影響

輕率/無心的債務
此象限,反映了團隊不知道技術債務,不知道後續要償還技術債務的狀況。

好比說一些開發團隊對於什麼是架構設計,什麼是好的開發實踐一無所知,代碼一團糟

謹慎/無心的債務
此象限反映了團隊很重視架構設計和技術債務,但因爲業務的變化,或者其餘客觀因素形成技術債務的產生。好比說最初設計的時候,沒法準確預測後面業務的發展,隨着業務的發展,設計沒法知足新的需求,這樣產生的債務難以免,可是若是能及時的對架構升級、重構,就能保證不會形成嚴重的影響。

若是管理技術債務呢?技術債務有利息也有收益,如何保證收益大於利息

Martin Fowler有過一張圖,形象的描述了設計、時間和開發速度的關係,沒有設計直接寫代碼,短時間看是節約了時間,可是過了一個臨界點後,開發速度是急劇降低:

因此咱們最好能讓技術債務控制在臨界點之下,這就要求咱們能充分了解目前項目中的債務狀況,而後纔好指定相應的策略,達到控制債務的目的。

如何識別債務

開發速度下降
單元測試代碼覆蓋率低
代碼規範檢查的錯誤率高
bug數量愈來愈多
選擇處理技術債務策略

重寫:推翻重來,一次還清
優勢:針對當前需求和業務發展特色,從新進行良好的設計,精簡掉不須要的功能

缺點:重寫一般工做量很大,新系統完成以前,須要對舊系統維護增長新功能,新寫系統從新穩定也須要一段時間

維持:修修補補,只還利息
成本相對低,不用投入太大精力,可是若是項目不須要新增功能,只須要維護還好,若是後續維護家新增功能,後續成本會愈來愈高

重構:新舊交替,分期付款
重構相對是比較這種的策略,比較折中,每次改進系統的一部分功能,只對內部結構和代碼進行從新整理和優化系統的結構,最終徹底償還技術債務,此方式有點多,不會致使系統不穩定,對業務影響小,可是整個過程耗時會好久

上面的三種策略沒有絕對好壞,須要根據項目狀況靈活選擇,簡單的選擇原則就是看哪種策略投入產出比更好

實施策略

對於重寫,須要當一個正式項目來立項,按項目流程推動
對於重構,要把重構任務拆分紅一個個小任務,放到項目計劃中,建立成ticket,進行跟蹤
對於維持,也須要把須要作的修補工做做爲任務,放到計劃中,進行跟蹤
預防纔是最好的方法

預先投資:好的架構設計、高質量代碼就像一種技術投資,減小技術債務的發生 不走捷徑:平常作好代碼審查、單元測試代碼覆蓋率 及時還債:由於進度時間緊張等客觀緣由致使的走捷徑,後續須要把這欠下的技術債務記下來,發到任務跟蹤系統中,安排後續的開發任務重及時解決,能夠避免債務愈來愈多。 ———————————————— 版權聲明:本文爲CSDN博主「老楊的碼農生活」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/rendong_yang/article/details/89497664

相關文章
相關標籤/搜索