短期加速了軟件開發(fā)培慌,但是在未來給自己帶來了額外的負擔图筹,這種技術負債的情況比比皆是,今天來說說技術負債的問題菲饼。
1.什么叫技術負債肾砂?
技術負債(英語:Technical debt),又譯技術債宏悦,也稱為設計負債(design debt)镐确、程序代碼負債(code debt),是軟件開發(fā)中的一個比喻饼煞。指開發(fā)人員為了加速軟件開發(fā)源葫,在應該采用最佳方案時進行了妥協(xié),改用了短期內(nèi)能加速軟件開發(fā)的方案砖瞧,從而在未來給自己帶來的額外開發(fā)負擔息堂。這種技術上的選擇,就像一筆債務一樣块促,雖然眼前看起來可以得到好處荣堰,但必須在未來償還。軟件工程師必須付出額外的時間和精力持續(xù)修復之前的妥協(xié)所造成的問題及副作用褂乍,或是進行重構持隧,把架構改善為最佳的方式即硼。
1992年逃片,沃德·坎寧安首次將技術的復雜比作為負債。
第一次發(fā)布代碼只酥,就好比借了一筆錢褥实。只要通過不斷重寫來償還債務,小額負債可以加速開發(fā)裂允。但久未償還債務會引發(fā)危險损离。復用馬馬虎虎的代碼,類似于負債的利息绝编。整個部門有可能因為松散的實現(xiàn)僻澎,不完全的面向對象的設計或其他諸如此類的負債而陷入窘境貌踏。
2.技術負債產(chǎn)生的原因是什么?
很嚴重的債務體現(xiàn)在架構或是平臺技術方面犯了一個基礎的錯誤窟勃,沒有選擇祖乳,也沒有足夠的時間來正確重寫。這些錯誤體現(xiàn)在
無法擴展秉氧,可靠性低眷昆;
非常難維護;
次之的債務體現(xiàn)在 容易出錯的代碼 – 80%的錯誤出現(xiàn)在20%的代碼中汁咏。
一般的債務體現(xiàn)在
不容易進行系統(tǒng)測試 – 增加了測試的開銷亚斋,也無法及時發(fā)現(xiàn)代碼質量問題。
不注意打包攘滩、發(fā)布和部署帅刊。太過依賴手動測試,很容易在代碼上線的時候造成錯誤漂问。就像測試一樣厚掷,發(fā)布和部署帶來的開銷不會消失,會逐漸的增加级解。
團隊成員不能理解的關鍵代碼
向前向后的兼容性冒黑。這是必須的和短期的債務。需要維護這些兼容版本的時間越長勤哗,代價會越大抡爹。
庫和中間件過期
重復的,復制粘貼的代碼芒划。
大家都知道的冬竟、很明顯的錯誤,并且沒有被修復的缺陷民逼。
低效的設計或構建泵殴,過度消耗硬件,使用過多的內(nèi)存拼苍,網(wǎng)絡帶寬或CPU笑诅。
較小的債務體現(xiàn)在
使用編程習慣和模式不一致 – 程序員不理解已經(jīng)存在的模式,或是不喜歡它們疮鲫,而引進新的模式吆你,或者僅僅是想改變它們。
沒有錯誤處理和異常處理俊犯,或者方法不對妇多。在上線階段會有一些問題
非常小的債務體現(xiàn)在
硬編碼,神秘的數(shù)字燕侠,代碼不遵循規(guī)范者祖,混亂的命名严望,缺失的注釋党远,不整潔的代碼谴垫。
文檔過期 – 文檔的內(nèi)容和實際系統(tǒng)不一致
3.技術負債有哪些負面影響棒假?
如果公司要解決技術負債,花費的成本往往是很高的烂瘫。
在所調(diào)研的系統(tǒng)中媒熊,35%的技術債務已經(jīng)嚴重影響了系統(tǒng)的支持和維護,它們可能導致安全坟比、性能問題甚至威脅到正常運行芦鳍。
4.避免技術負債的方法是什么?
注意五大程序質量特征 - 穩(wěn)定性葛账、性能柠衅、安全、可移交性以及可修改性
采用成熟的開發(fā)方法比如敏捷開發(fā)以提高程序質量籍琳,瀑布方法具備“可移交性”和“可修改性”菲宴,但不適合目前的開發(fā)要求。
系統(tǒng)模塊化(Modularity of systems )可能影響質量和性能趋急。
提高代碼和系統(tǒng)的可維護性喝峦。
減少代碼發(fā)布的頻率,以減少技術負債呜达。
5.如何評估技術債谣蠢?
請參考此文,用Sonar 評估你的技術債務- 技術翻譯- 開源中國社區(qū) http://www.oschina.net/translate/evaluate-your-technical-debt-with-sonar
當前插件的版本是0.2查近,并且可以使用下面的表達式去計算債務 :
Debt(in man days) = cost_to_fix_duplications + cost_to_fix_violations +
cost_to_comment_public_API + cost_to_fix_uncovered_complexity +
cost_to_bring_complexity_below_threshold
通過計算這種方式眉踱, 可以接近實際中的情況,建議經(jīng)常量化技術債務霜威,因為技術債務可以
是綜合的指標谈喳,衡量項目和模塊的質量
根據(jù)歷史數(shù)據(jù)和趨勢跟蹤
比較多個項目