在軟件工程領(lǐng)域中,“技術(shù)債務“是一個貶義詞。人們在使用這個詞的時候常常表達出某種遺憾,過去犯下的錯誤,最終需要通過重構(gòu)來彌補。
什么是技術(shù)負債?
技術(shù)負債(英語:Technical debt),又譯技術(shù)債,也稱為設(shè)計負債(design debt)、代碼負債(code debt),是編程及軟件工程中的一個比喻。指開發(fā)人員為了加速軟件開發(fā),在應該采用最佳方案時進行了妥協(xié),改用了短期內(nèi)能加速軟件開發(fā)的方案,從而在未來給自己帶來的額外開發(fā)負擔。這種技術(shù)上的選擇,就像一筆債務一樣,雖然眼前看起來可以得到好處,但必須在未來償還。
技術(shù)債務的產(chǎn)生有著很多原因,但其中更多的是由于要在短時間內(nèi)匆忙完成原本耗時較長的工作,導致部分業(yè)務邏輯沒有完整的設(shè)計等,使得產(chǎn)品在短時間內(nèi)有效,但是長遠來看,卻是一顆不穩(wěn)定的炸彈,一旦觸發(fā),對產(chǎn)品、對企業(yè)都有可能造成無法挽回的損失。
總而言之,技術(shù)債務會帶來很多麻煩,有些甚至是“致命”的。
那么身為技術(shù)開發(fā)者,該如何償還技術(shù)負債?
如何償還技術(shù)負債?
技術(shù)債務分為有意的技術(shù)債務和無意的技術(shù)債務,兩種形式的技術(shù)債務形成的原因和帶來的結(jié)果是不同的,解決方法也不同。
無意的
由于經(jīng)驗的缺乏導致初級開發(fā)者編寫了質(zhì)量低劣的代碼。
解決方案
技術(shù)培訓
畢竟大部分的程序員學習能力還是很強的,部門牛人的培訓還是很有必要的,也是學習的重要途徑之一。
從最開始的代碼規(guī)范、到熟悉業(yè)務、最后再到編寫文檔。
2.CodeReview
CodeReview 是非常重要的,同時也是對自身的一個提高。
在這個階段不同工程師之間可以相互review,審查別人的代碼能夠發(fā)現(xiàn)很多問題,同時也能學到很多知識。
有意的
團隊根據(jù)當前而非未來進行設(shè)計選型,這種方式可能很快就能解決當前的問題,但卻很拙劣。
這就情況很可能是為了圖省事才這樣干的。也有可能是工期太短,人員太少,技術(shù)問題等等。
解決方案
1.系統(tǒng)設(shè)計的框架是對的
必須能夠有效處理當前需求可預見的情況,對于未知的、可能出現(xiàn)的特殊情況,很小的改動就能解決問題。
根據(jù)當前的業(yè)務,進行合理的創(chuàng)建數(shù)據(jù)表,盡量的代碼解耦和。必須有日志模塊,操作日志,錯誤日志,業(yè)務日志等等…
2.所有的工程師有主人翁的意識
開發(fā)前,針對產(chǎn)品提出的需求,進行要進行細節(jié)確認,自己也可以畫一個程序的流程圖。
開發(fā)時,首先把流程全部順下來,其中遇到調(diào)用其他接口、技術(shù)難點、需求模糊,及時確認或記錄 TODO 標簽。
開發(fā)后,及時對自己的流程進行確認,查看代碼中是否有未解決的地方。
每個公司都有自己任務管理系統(tǒng),例如JIRA之類的,提測后,時時關(guān)注自己的BUG。
如果與產(chǎn)品有分歧的地方一定要及時溝通,達成共識。
3.一定要有健全的測試環(huán)境、預發(fā)布環(huán)境、正式環(huán)境
因為有些程序可能需要進行壓力測試,所以服務器的配置還是很關(guān)鍵的。
多個環(huán)境的測試,更能保證程序的健壯性。
4.定期處理一些技術(shù)債務
等產(chǎn)品上線后,開發(fā)就沒有那么緊啦,這個時間大家可以找個時間處理技術(shù)債務,一邊建立感情,一邊品味一下原來的代碼,是不是酸爽無比。
5.善于發(fā)現(xiàn)系統(tǒng)的技術(shù)債務
勇于發(fā)現(xiàn)系統(tǒng)中的技術(shù)債務,當然不是為了所謂的獎勵,僅僅是為了自己的提高,讓自己為系統(tǒng)負責,而不是事不關(guān)己高高掛起。
當然,最重要的其實是把技術(shù)債務的重要性提到一個被認可的位置上。
工程師如果能遇見一個債務可能導致的問題,自然愿意花時間去處理。
總結(jié)
技術(shù)債務是伴隨著項目出現(xiàn)而且無法避免,但是如何保持其在可控范圍之內(nèi),是我們應該思考的問題。技術(shù)債務的避免和消除都需要優(yōu)秀的開發(fā)人員,人始終是軟件開發(fā)中最重要的因素。作為一名普通的碼農(nóng),不斷地提升自己是非常必要的。