譯者 | 朱鋼
審校 | 梁策 孫淑娟
技術(shù)債務(wù)對企業(yè)有巨大負面影響,而對于初創(chuàng)公司和大型企業(yè)來說,以下方法可以有效預(yù)防和管理技術(shù)債務(wù)。
技術(shù)債務(wù)這個概念似乎已司空見慣,幾乎所有工程師都知道它會拖慢開發(fā)流程。因此,本文將提供一些實用建議,讓工程團隊無需在管理和解決技術(shù)債務(wù)方面耗費大量時間。
一、什么是技術(shù)債務(wù)?
通常,技術(shù)債務(wù)是指倉促的開發(fā)過程中或團隊成員之間缺乏知識共享。但是,在許多情況下技術(shù)債務(wù)也是正常軟件開發(fā)過程的一部分,而且不可避免。
比如,因為想節(jié)省時間來發(fā)布新的功能,工程師可能不會在基礎(chǔ)架構(gòu)中實施正確的設(shè)計模式。此外,不寫文檔共享知識或具有較低的代碼測試覆蓋率也是相關(guān)場景。
簡而言之,代碼質(zhì)量會因各種方式受到影響,比如知識不共享或過于倉促的開發(fā)周期。下文概述了那些最具破壞力、也是人們最希望避免的技術(shù)債務(wù)類型:
1.基于知識的技術(shù)債務(wù)
為了理解基于知識的技術(shù)債務(wù),先來看一個例子。想象一下,兩名軟件工程師正在開發(fā)一項新功能,他們擁有有關(guān)此特定功能的所有知識,但這些知識團隊中的其他軟件工程師卻不具備。那么當其他軟件工程師必須處理此功能或必須執(zhí)行使用此功能的實現(xiàn)時,就會對正確實現(xiàn)新功能所需的知識一無所知。
因此,有關(guān)功能和重要代碼庫更改的知識必須積極共享,包括創(chuàng)建文檔、示例、測試以及召開復(fù)盤會議。這也是解決技術(shù)債務(wù)最簡單的方法之一。
2.設(shè)計債務(wù)
設(shè)計債務(wù)通常發(fā)生在競爭激烈的市場或初創(chuàng)公司,因為對于他們來說上市速度通常是重中之重。
由于要快速交付新功能,功能結(jié)構(gòu)或代碼架構(gòu)就可能會被忽視。添加新功能也變得越來越困難,而你必須通過團隊來解決。
因此,設(shè)計債務(wù)也與結(jié)構(gòu)化特征和遵守設(shè)計模式密切相關(guān)。
3.代碼債務(wù)
代碼債務(wù)是指所寫代碼質(zhì)量差且未得到及時修復(fù)。例如開發(fā)人員希望快速合并代碼,但沒有編寫足夠的測試或未遵守代碼標準。
許多組織使用像帶有代碼檢查的預(yù)提交鉤子等自動化工具來驗證代碼質(zhì)量。如果你未實施這樣的代碼檢查,糟糕的代碼會迅速降低代碼庫的整體質(zhì)量。
二、預(yù)防應(yīng)對技術(shù)債務(wù)的三種推薦方法
技術(shù)債務(wù)日益累積,解決問題的最佳時機永遠是當下。一些實用方法包括:
1.代碼和架構(gòu)重構(gòu)
預(yù)防和/或解決代碼和設(shè)計債務(wù)的最直接的解決方案之一是在每個X sprint組織一個重構(gòu)周。重構(gòu)周可讓你的團隊解決未處理的錯誤、評估當前架構(gòu)并為即將推出的產(chǎn)品功能準備架構(gòu)。
例如,留出一些時間來考慮新功能如何影響代碼庫的架構(gòu)。
益處:重構(gòu)周為開發(fā)人員在實現(xiàn)一組新功能之前評估和反思代碼提供了所需的喘息空間,它非常適合解決大筆技術(shù)債務(wù)。
缺點:重構(gòu)會拖慢開發(fā)過程,并且無法讓團隊持續(xù)解決技術(shù)債務(wù)。
2.開始定期的技術(shù)債務(wù)討論
復(fù)盤會議是工程師分享知識的絕佳方式,這些會議甚至可以讓更多的利益相關(guān)者參與(如產(chǎn)品所有者),從而對代碼庫和工程師所面臨的問題達成共識。
復(fù)盤會議將對順利進展和不順利進展共同討論,這不是一個批評指責的活動,而是一個分享反饋的開放環(huán)節(jié)。只要專注于改進就是最好的。
益處:人們可以通過復(fù)盤會議來分享有關(guān)代碼的更新,工程師可以展示他們所取得的成果。通常,工程師可以借此展示他們的代碼庫更改,并解釋這些變化如何影響代碼庫以及他們實現(xiàn)這一點的方式。因此,召開復(fù)盤會議是每次編碼沖刺后分享知識的有效途徑。
缺點:利益相關(guān)者和管理者需要共同認可這一方式,且工程師也需要時間來組織這些會議。
3.開始在編輯器中跟蹤技術(shù)債務(wù)
為了代碼庫保持健康,讓工程師盡可能輕松地解決技術(shù)問題無疑是最佳方式。在編輯器中跟蹤技術(shù)債務(wù),工程師可以:
- 全面了解技術(shù)債務(wù)
- 查看每個代碼庫問題的上下文
- 減少上下文切換
- 持續(xù)解決技術(shù)債務(wù)
有多種工具可以跟蹤技術(shù)債務(wù),但最快速和最簡單的入門方法是使用適用于VSCode或JetBrains的免費Stepsize擴展,它們可與Jira、Linear、Asana和其他項目管理工具集成。
益處:開發(fā)人員本就會有大量時間花在編輯器上,因此它也是跟蹤和報告技術(shù)問題的最佳途徑。實施技術(shù)債務(wù)管理流程將對工程師團隊的士氣帶來積極影響,并提升客戶滿意度。
缺點:養(yǎng)成一個新習慣需要團隊成員花時間花精力,且如果沒有技術(shù)債務(wù)頂尖高手將很難實現(xiàn)。
三、如何檢測不斷增長的技術(shù)債務(wù)?
針對不同類型的技術(shù)債務(wù)應(yīng)主動跟蹤和管理,且不讓技術(shù)債務(wù)增加是重點問題。
背負大量技術(shù)債務(wù)會大大拖慢開發(fā)速度,并讓問題解決日益困難。換句話說,巨額技術(shù)債務(wù)代價高昂,并且會損害你的項目上線速度。
跟蹤不同類型的技術(shù)債務(wù)相關(guān)的指標至關(guān)重要,以下指標可以跟蹤:
- 總體代碼覆蓋率和每個功能的代碼覆蓋率:百分比下降是技術(shù)債務(wù)累加的危險信號。
- 許多失敗的CI/CD構(gòu)建數(shù)量:如果失敗的CI/CD構(gòu)建數(shù)量增加,就明顯表示代碼庫不穩(wěn)定。這點與設(shè)計債務(wù)和代碼債務(wù)都有關(guān)。
- 每周或每月出現(xiàn)許多新bug:如果你的團隊每周或每月發(fā)現(xiàn)越來越多的bug,則表明你的代碼庫質(zhì)量下降。因此這點也是檢測技術(shù)債務(wù)不斷增長的重要指標。
- 特征吞吐量:將新功能推送到主分支需要的天數(shù)。這是一個支持指標,可以表明技術(shù)債務(wù)不斷增長。雖然每個功能的大小不盡相同,但如果你發(fā)現(xiàn)這一指標數(shù)周內(nèi)出現(xiàn)下降,就是時候進行干預(yù)了。
- 非功能性需求問題:在定義檢測技術(shù)債務(wù)指標時,你是否考慮過衡量非功能性需求?衡量應(yīng)用程序性能、用戶體驗(使用難度增加)或兼容性損失等指標是顯示技術(shù)債務(wù)增加的可靠指標。如果你想使用此指標,可以嘗試對應(yīng)用程序中的關(guān)鍵路徑進行性能監(jiān)控。
四、不同階段的公司如何以不同的方式處理科技債務(wù)?
對于初創(chuàng)公司來說,壓力通常來自要快速發(fā)布產(chǎn)品。這些公司可以通過采用自動化代碼質(zhì)量驗證工具輕松解決技術(shù)債務(wù)。除此之外,規(guī)模較小的團隊之間積極分享知識通常也是避免技術(shù)債務(wù)的有效策略之一。
然而,大型企業(yè)要控制技術(shù)債務(wù)并非易事。根據(jù)2021年技術(shù)債務(wù)狀況報告,66%的工程師認為,如果團隊有一個管理技術(shù)債務(wù)的流程,交付速度將提高100%,另有15%的人甚至認為他們的生產(chǎn)力會提高200%。
遺憾的是,組織復(fù)盤會議等知識共享會議雖然也是解決方案之一,但大型企業(yè)往往需要一個比之更好的解決方案。
為了控制技術(shù)債務(wù),大型企業(yè)需要使用項目管理工具來了解哪些功能正在開發(fā),以及誰在處理代碼庫的特定領(lǐng)域,這些項目管理工具非常適合避免沖突。
除此之外,企業(yè)還應(yīng)使用自動化代碼質(zhì)量工具來確保整體代碼庫健康,通常代碼質(zhì)量工具可以集成到持續(xù)集成管道中。
五、結(jié)論
不解決技術(shù)債務(wù)可能會給組織帶來諸多問題,例如總擁有成本較高、上市時間拖慢、因架構(gòu)設(shè)計不良而導(dǎo)致敏捷性降低和安全性差。
因此,必須衡量一些與技術(shù)債務(wù)相關(guān)的指標,同時要確保有一個特定流程,這樣就可以輕松地與團隊成員分享知識并持續(xù)解決技術(shù)債務(wù)問題。
原文鏈接:
https://dzone.com/articles/3-best-tactics-to-prevent-technical-debt-as-an-eng
譯者介紹
朱鋼,51CTO社區(qū)編輯,2021年IT影響力專家博主,阿里云專家博主,2019年CSDN博客之星20強,2020年騰訊云+社區(qū)優(yōu)秀作者,11年一線開發(fā)經(jīng)驗,曾參與獵頭服務(wù)網(wǎng)站架構(gòu)設(shè)計,企業(yè)智能客服以及大型電子政務(wù)系統(tǒng)開發(fā),主導(dǎo)某大型央企內(nèi)部防泄密和電子文檔安全監(jiān)控系統(tǒng)的建設(shè),目前在北京圖伽健康從事醫(yī)療軟件研發(fā)工作。