技術(shù)債務(wù)
「技術(shù)債務(wù)」是開(kāi)發(fā)團(tuán)隊(duì)在設(shè)計(jì)或架構(gòu)選型時(shí)苟耻,從短期效應(yīng)的角度選擇了一個(gè)易于實(shí)現(xiàn)的方案吱瘩。但從長(zhǎng)遠(yuǎn)來(lái)看,這種方案會(huì)帶來(lái)更消極的影響媒咳,亦即開(kāi)發(fā)團(tuán)隊(duì)所欠的債務(wù)拄轻。
簡(jiǎn)單的說(shuō)就是為了快速地解決問(wèn)題,而采取的不規(guī)范的方案伟葫。
比如:開(kāi)發(fā)工程師將某個(gè)判斷條件寫(xiě)死恨搓、測(cè)試工程師未進(jìn)行深入自動(dòng)化測(cè)試、架構(gòu)師運(yùn)用了一個(gè)即將過(guò)時(shí)的框架筏养。
危害性
對(duì)于房貸斧抱,大家肯定每個(gè)月都記著去還。
但是渐溶,對(duì)于技術(shù)債務(wù)辉浦,大家似乎都不那么關(guān)心。
的確茎辐,這個(gè)東西不一定誰(shuí)借誰(shuí)還宪郊,可能一個(gè)人的代碼中產(chǎn)生了技術(shù)債務(wù),可能是由于項(xiàng)目做拖陆,工作壓力大弛槐,離職了。
那么依啰,這筆債務(wù)就壓在了工作接替者的身上乎串,古人語(yǔ):父?jìng)觾敚恢肋@叫什么速警,O(∩_∩)O哈哈~
比如我們?cè)谝粋€(gè)類中欠下了技術(shù)債務(wù)叹誉,如果對(duì)這個(gè)類進(jìn)行擴(kuò)展、修改闷旧,或按照原來(lái)錯(cuò)誤的寫(xiě)法寫(xiě)了一些新的業(yè)務(wù)方法长豁。
用不了多久,我們就會(huì)發(fā)現(xiàn)我們已經(jīng)無(wú)力償還這份技術(shù)債務(wù)啦忙灼,只能重構(gòu)啦匠襟。
客戶:經(jīng)常BUG纏繞,長(zhǎng)期缺失的需求不能上線缀棍。
運(yùn)營(yíng):不合理的界面設(shè)計(jì)宅此、文檔缺失、系統(tǒng)響應(yīng)慢爬范。
運(yùn)維:頻繁的BUG修復(fù)上線父腕。
管理層:各方的抱怨讓管理層崩潰,尤其是BUG青瀑、延期等問(wèn)題璧亮。
研發(fā):開(kāi)發(fā)人員的工作比較多面萧诫,一方面開(kāi)發(fā)新的需求,另一方面又要維護(hù)他人遺留的代碼枝嘶。
所有的問(wèn)題帘饶,最終都會(huì)回到研發(fā)人員進(jìn)行再次開(kāi)發(fā)、修復(fù)群扶,所以 加班及刻,加班,加班...
其實(shí)每一個(gè)研發(fā)都不愿意出低質(zhì)量的產(chǎn)品竞阐,也沒(méi)有人愿意接受滿手都是坑的代碼缴饭。
分類
- 無(wú)意的
由于經(jīng)驗(yàn)的缺乏導(dǎo)致初級(jí)開(kāi)發(fā)者編寫(xiě)了質(zhì)量低劣的代碼。
解決方案:
1.技術(shù)培訓(xùn)
畢竟大部分的程序員學(xué)習(xí)能力還是很強(qiáng)的骆莹,部門(mén)牛人的培訓(xùn)還是很有必要的颗搂,也是學(xué)習(xí)的重要途徑之一。
從最開(kāi)始的代碼規(guī)范幕垦、到熟悉業(yè)務(wù)丢氢、最后再到編寫(xiě)文檔。
2.CodeReview
CodeReview 是非常重要的先改,同時(shí)也是對(duì)自身的一個(gè)提高疚察。
在這個(gè)階段不同工程師之間可以相互review,審查別人的代碼能夠發(fā)現(xiàn)很多問(wèn)題,同時(shí)也能學(xué)到很多知識(shí)盏道。
- 有意的
團(tuán)隊(duì)根據(jù)當(dāng)前而非未來(lái)進(jìn)行設(shè)計(jì)選型稍浆,這種方式可能很快就能解決當(dāng)前的問(wèn)題,但卻很拙劣猜嘱。
這就情況很可能是為了圖省事才這樣干的。
也有可能是工期太短嫁艇,人員太少朗伶,技術(shù)問(wèn)題等等。
推薦方法
- 系統(tǒng)設(shè)計(jì)的框架是對(duì)的
必須能夠有效處理當(dāng)前需求可預(yù)見(jiàn)的情況步咪,對(duì)于未知的论皆、可能出現(xiàn)的特殊情況,很小的改動(dòng)就能解決問(wèn)題猾漫。
根據(jù)當(dāng)前的業(yè)務(wù)点晴,進(jìn)行合理的創(chuàng)建數(shù)據(jù)表,盡量的代碼解耦和悯周。
必須有日志模塊粒督,操作日志,錯(cuò)誤日志禽翼,業(yè)務(wù)日志等等...
- 所有的工程師有主人翁的意識(shí)
開(kāi)發(fā)前屠橄,針對(duì)產(chǎn)品提出的需求族跛,進(jìn)行要進(jìn)行細(xì)節(jié)確認(rèn),自己也可以畫(huà)一個(gè)程序的流程圖锐墙。
開(kāi)發(fā)時(shí)礁哄,首先把流程全部順下來(lái),其中遇到調(diào)用其他接口溪北、技術(shù)難點(diǎn)桐绒、需求模糊,及時(shí)確認(rèn)或記錄 TODO 標(biāo)簽之拨。
開(kāi)發(fā)后茉继,及時(shí)對(duì)自己的流程進(jìn)行確認(rèn),查看代碼中是否有未解決的地方敦锌。
每個(gè)公司都有自己任務(wù)管理系統(tǒng)馒疹,例如JIRA之類的,提測(cè)后乙墙,時(shí)時(shí)關(guān)注自己的BUG颖变。
如果與產(chǎn)品有分歧的地方一定要及時(shí)溝通,達(dá)成共識(shí)听想。
- 一定要有健全的測(cè)試環(huán)境腥刹、預(yù)發(fā)布環(huán)境、正式環(huán)境
因?yàn)橛行┏绦蚩赡苄枰M(jìn)行壓力測(cè)試汉买,所以服務(wù)器的配置還是很關(guān)鍵的衔峰。
多個(gè)環(huán)境的測(cè)試,更能保證程序的健壯性蛙粘。
- 定期處理一些技術(shù)債務(wù)
等產(chǎn)品上線后垫卤,開(kāi)發(fā)就沒(méi)有那么緊啦,這個(gè)時(shí)間大家可以找個(gè)時(shí)間處理技術(shù)債務(wù)出牧,一邊建立感情穴肘,一邊品味一下原來(lái)的代碼,是不是酸爽無(wú)比舔痕。
- 善于發(fā)現(xiàn)系統(tǒng)的技術(shù)債務(wù)
勇于發(fā)現(xiàn)系統(tǒng)中的技術(shù)債務(wù)评抚,當(dāng)然不是為了所謂的獎(jiǎng)勵(lì),僅僅是為了自己的提高伯复,讓自己為系統(tǒng)負(fù)責(zé)慨代,而不是事不關(guān)己高高掛起。
當(dāng)然啸如,最重要的其實(shí)是把技術(shù)債務(wù)的重要性提到一個(gè)被認(rèn)可的位置上侍匙。
工程師如果能遇見(jiàn)一個(gè)債務(wù)可能導(dǎo)致的問(wèn)題,自然愿意花時(shí)間去處理组底。
切記:一些重要的技術(shù)債務(wù)遠(yuǎn)遠(yuǎn)比開(kāi)發(fā)新系統(tǒng)的優(yōu)先級(jí)要高很多丈积。
Thanks ~