資源描述:
《技術債務償還計劃》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、什么是技術債務?許多團隊都受技術債務困擾,不過,很少有團隊能真正地設計一個計劃從中掙脫出來。為了更好的理解如何才能擺脫債務,我們首先要正確地理解什么是技術債務。技術債務是由團隊為了短期的項冃利益故意做了欠佳的技術決策而招致的。例如,為了使一個產(chǎn)品更快的投放市場,團隊可能不會像面對一段棘手的代碼那樣,編寫深入的自動化測試?;蛘撸麄兛赡軙Q定基于一個很快就會過時的框架構建項目,而不是花錢購買那個框架的一個經(jīng)過升級、服務支持更好的版本。不管決策是什么,關鍵是要認識到,真正的技術債務是團隊為了獲得短期利益故意
2、做了會招致長遠債務的決策。這意味著,許多我們通常歸咎于“技術債務〃的事情實際上根本就不是債務。例如,隨著系統(tǒng)使用年限增加,團隊會無法一肓保持最佳編碼實踐,在那種悄況下岀現(xiàn)"位衰減(bitdot)w是正常的,不是債務?;蛘撸瑘F隊自愿做出的技術決策在隨后實現(xiàn)時竟然發(fā)現(xiàn)是不正確的,這也不是技術債務。在任何一?種悄況下,團隊都不是為了獲得短期利益而故意做了欠佳的長遠決策。這種差別很重要,因為我們只有在究竟是什么組成了技術債務的問題上達成一致,我們才能針?對如何減少技術債務做出最佳決策??紤]我們在無意間引入代碼庫
3、的債務所帶來的彩響也很重要。不過,由于這類債務不是有意承擔的,所以我們無法計劃如何提前解決它。在這些情況下,我們一定要在發(fā)現(xiàn)的時候優(yōu)先考慮并解決這種債務.?????就像團隊解決新發(fā)現(xiàn)的Bug所做的那樣。一個金融比喻我們經(jīng)常將技術債務與金融債務進行對比。但是,這是一個對等的類比嗎?比如,如果不首先確定何時以及如何償還,銀行真會愿意借給我們錢嗎?很可能不愿意。既然不首先描述如何償還債務,我們就確實無法借到金融資木,那么我們也就不應該以這種方式對待技術資本。這個金融比喻確實非常有效,因此,我們將對它進行更充分
4、的討論。償還計劃正如金融債務一?樣,在談論技術債務吋,我們需要確定兩件事:如何償還債務和何吋償還債務。如何償還債務讓我們以前文提到的放棄自動化測試為例。如果為了一項功能能夠盡快投入生產(chǎn)環(huán)境,我們的團隊口愿決定放棄為棘手的代碼段編寫口動化測試,那么我們需耍確定我們將如何糾正那塊債務。在這種情況下,我們只需要表明,我們會在將來的某個時點冋到這段代碼,然后添加測試。不過,只表明“我們將在稍后添加測試''并沒有合理地解決這個問題。為了幫助干系人真正地了解我們的決策對招致技術債務會有多大的影響,我們需耍盡我們最大
5、的能力準確地說明等到后來添加自動化測試的影響。比如,我們應該指明需要添加測試的代碼段。我們也需耍明確指出,在已有的代碼段上增加自動測試比在代碼段創(chuàng)建時直接添加測試總是難度更大成木更高。最后這點很重要,因為它明確指出,將這項工作推遲到后來完成,我們實際上要比現(xiàn)在肓接完成花更多的錢來做這項工作。換何話說,.??.?.債務是會產(chǎn)生利息的。在討論完償還方式之后,團隊及-其干系人可能會意識到,這個問題要比他們是否應該在編寫代碼時編寫口動化測試更復雜。實際上,他們町能會發(fā)現(xiàn),在兩個極端Z間,他們確實有多種更適合報個
6、項目的選擇。比如,他們可能會決定,使用類似“圈復雜度(CyclomaticComplexitv)〃這樣的指標識別出新特性屮最反雜的部分是非常有意義的,并立即添加測試覆蓋那些方面,而把簡單一些的方面推遲。或者,他們可能會決定,像單元測試這種更簡單但同時價值也更低的自動化測試類型可以立即添加,但像自動化用戶驗收測試這種難度更高的自動化測試可以推遲到將來的沖刺中。不管是哪種決定,團隊及其干系人都不大可能做岀,因為他們沒有在第一時間對技術債務進行討論。何時償還債務除了指明如何償還債務外,我們還希望指明何吋償還債
7、務。通常,債務越早償還越好。出于這個原因,最好是在債務產(chǎn)生的時候安排債務償還工作,以便更好地傳達承擔債務的影響。比如,如果你的團隊遵照一個由沖刺構成的時間表,那么你町能會選擇將工作安排到F一個沖刺,或者,在最壞的情況下也不超過兒個未來的沖刺。通常,團隊都會冇最美好的愿望,就是在債務出現(xiàn)的時候償還,但他們只是似乎從來都沒有時間那樣做。當你要消除債務的時候,在口歷上記下最后償還期限,并堅持按時完成。如果違約會怎么樣?對于我們的金融比喻,最后一部分是弄清楚,如果我們選擇拖欠債務,會出現(xiàn)什么后果。在金融領域,如
8、果我從來不償還汽車貸款,那銀行會開走我的汽車。拖欠技術債務的示果同樣應該明確指出。讓我們繼續(xù)自動化測試的例子,如果團隊決定不償還技術債務,那么以現(xiàn)有的未經(jīng)測試的功能為基礎構建新功能只會使難度越來越大成本越來越高。在生產(chǎn)環(huán)境中,我們可能會看到更多的Bug報告,這意味著,客戶町能會對我們的產(chǎn)品質量產(chǎn)生不好的印彖。我們快速響應市場變化的能力也會被削弱,因為我們產(chǎn)殆的很人一部分要么很難快速修改,要么快速修改風險太大。上述各點都需耍向于系人講清楚,幫