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