短視思維會(huì)帶來(lái)什么?技術(shù)債務(wù)舉手“發(fā)言”
大多數(shù)軟件開發(fā)人員都很熟悉技術(shù)債務(wù),而編程專業(yè)以外的人就不一定知道了。但了解這個(gè)概念十分重要,因?yàn)樗粌H存在于編程領(lǐng)域,也存在于短期決策可能影響長(zhǎng)期結(jié)果的廣泛場(chǎng)景。
本文引用地址:http://butianyuan.cn/article/202206/435575.htm什么是技術(shù)債務(wù)?
簡(jiǎn)而言之,當(dāng)軟件開發(fā)團(tuán)隊(duì)急于快速交付而忽略了代碼質(zhì)量時(shí),就會(huì)產(chǎn)生技術(shù)債務(wù),比如用戶可能迫切需要某項(xiàng)功能,所以開發(fā)人員選擇先部署“僅僅夠用”的代碼并打算在以后再修復(fù)和優(yōu)化。如果最后沒(méi)有重新檢查和修復(fù)這段代碼,這圖一時(shí)方便的操作所帶來(lái)的代價(jià)就是日后工作量的增加,就像不償還貸款就會(huì)產(chǎn)生利息和罰金一樣。技術(shù)債務(wù)本身不一定是問(wèn)題,但如果日后產(chǎn)品優(yōu)化不足或者任由異常的代碼泛濫,就會(huì)成為一個(gè)不容小覷的問(wèn)題。為了跟上市場(chǎng)快速變化的步伐,企業(yè)轉(zhuǎn)向的敏捷開發(fā)在一定程度上加劇了技術(shù)債務(wù)的風(fēng)險(xiǎn),開發(fā)運(yùn)維(DevOps)促進(jìn)頻繁的代碼發(fā)布和持續(xù)不斷的改進(jìn),每天甚至每幾個(gè)小時(shí)就需要推送新代碼,開發(fā)人員可能會(huì)迫于壓力而在文檔規(guī)則或測(cè)試上“走捷徑”。
技術(shù)債務(wù)實(shí)例
“計(jì)算機(jī)千年蟲危機(jī)”正是一個(gè)經(jīng)典的技術(shù)債務(wù)案例。在六十年代和七十年代,許多軟件開發(fā)人員為了節(jié)省寶貴的內(nèi)存而只使用兩位十進(jìn)制數(shù)來(lái)表示年份,比如“1973年”被存儲(chǔ)為“73”而不是“1973”。這種做法持續(xù)了多年,甚至在內(nèi)存價(jià)格下降的時(shí)候也是如此。許多這樣的程序被嵌入到運(yùn)營(yíng)業(yè)務(wù)中,并且使用的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)了人們的預(yù)期。隨著2000年的臨近,數(shù)千家企業(yè)和政府機(jī)構(gòu)意識(shí)到當(dāng)系統(tǒng)進(jìn)行跨世紀(jì)的日期處理運(yùn)算時(shí)就會(huì)出現(xiàn)錯(cuò)誤的結(jié)果,進(jìn)而引發(fā)各種各樣的系統(tǒng)功能紊亂甚至崩潰,因此進(jìn)行了大量瘋狂的清理工作。據(jù)估計(jì),解決“千年蟲問(wèn)題”花費(fèi)了近千億美元。
另外,技術(shù)債務(wù)并不止發(fā)生在軟件上。比如網(wǎng)絡(luò)安全領(lǐng)域的一項(xiàng)最佳實(shí)踐是將文件權(quán)限授予組織內(nèi)的角色而不是個(gè)人。假設(shè)一名行政助理得到了上級(jí)的批準(zhǔn),可以臨時(shí)訪問(wèn)他平時(shí)無(wú)權(quán)查看的敏感文件。如果IT組織批準(zhǔn)了這一例外,但在后來(lái)沒(méi)有撤銷權(quán)限,那就等同于把敏感文件的永久訪問(wèn)權(quán)授予了一個(gè)最終可能被入侵并出現(xiàn)漏洞的帳戶。
技術(shù)債務(wù)的影響
如果短期內(nèi)能夠迅速修復(fù)并且開發(fā)人員知道如何處理技術(shù)債務(wù),那么技術(shù)債務(wù)幾乎不會(huì)產(chǎn)生壞處,甚至促使企業(yè)快速響應(yīng)機(jī)會(huì)或問(wèn)題而帶來(lái)好處。
但當(dāng)技術(shù)債務(wù)層層疊加時(shí),修復(fù)工作因?yàn)槿鄙傥臋n記錄或者根本沒(méi)有文檔記錄,且當(dāng)執(zhí)行修復(fù)工作的開發(fā)人員離職后,企業(yè)對(duì)這段代碼只能束手無(wú)策,不知其義何談修復(fù)。任何冒然的更改都可能會(huì)導(dǎo)致程序失敗或運(yùn)行緩慢,企業(yè)怕承擔(dān)該風(fēng)險(xiǎn)就不愿做出改進(jìn),使得創(chuàng)新速度減慢。
技術(shù)債務(wù)的類型
技術(shù)債務(wù)主要分為有意產(chǎn)生和無(wú)意產(chǎn)生。開發(fā)人員培訓(xùn)公司Construx的首席執(zhí)行官Steve McConnell將有意產(chǎn)生的技術(shù)債務(wù)定義為根據(jù)戰(zhàn)略故意承擔(dān)的技術(shù)債務(wù),將無(wú)意產(chǎn)生的技術(shù)債務(wù)定義為“因?yàn)樽龅貌缓枚a(chǎn)生的非戰(zhàn)略結(jié)果”。
2014年,一群學(xué)者制定了技術(shù)債務(wù)分類法,將技術(shù)債務(wù)分成13種不同的類型,包括架構(gòu)債務(wù)、代碼債務(wù)、缺陷債務(wù)、設(shè)計(jì)債務(wù)、流程債務(wù)和測(cè)試債務(wù)等。這種分類法涵蓋了所有因短視思維而可能導(dǎo)致的長(zhǎng)期問(wèn)題的場(chǎng)景,因此十分實(shí)用。
技術(shù)債務(wù)的產(chǎn)生
有意產(chǎn)生的技術(shù)債務(wù)是刻意做出的決定,因此應(yīng)記錄成文檔并安排重構(gòu)。而無(wú)意產(chǎn)生的技術(shù)債務(wù)發(fā)生的原因可能是臨時(shí)措施產(chǎn)生了修改或添加并且沒(méi)有特意制定代碼重構(gòu)計(jì)劃,也可能是由于缺乏技術(shù)知識(shí)或未能遵守開發(fā)標(biāo)準(zhǔn)而導(dǎo)致的不良設(shè)計(jì)決策。例如,當(dāng)測(cè)試套件不完整或者為了方便而縮短或跳過(guò)測(cè)試環(huán)節(jié)時(shí),就會(huì)無(wú)意產(chǎn)生測(cè)試債務(wù)。
文檔債務(wù)是一種十分常見的技術(shù)債務(wù),發(fā)生的原因是開發(fā)人員沒(méi)有完整記錄他們的代碼。從長(zhǎng)遠(yuǎn)看,如果有人在離開公司時(shí)沒(méi)有留下幫助別人理解其代碼的線索,就會(huì)產(chǎn)生嚴(yán)重的問(wèn)題。文檔債務(wù)是造成“千年蟲問(wèn)題”的一個(gè)主要原因。
技術(shù)債務(wù)的預(yù)兆
技術(shù)債務(wù)的“預(yù)警信號(hào)”有:
● 由于開發(fā)人員缺乏對(duì)代碼庫(kù)的深入了解而導(dǎo)致項(xiàng)目陷入困境;
● 由于復(fù)雜性或缺乏文檔而出現(xiàn)難以修復(fù)的錯(cuò)誤;
● 錯(cuò)誤修復(fù)后產(chǎn)生了新的錯(cuò)誤或性能穩(wěn)定下降。
技術(shù)債務(wù)的預(yù)防
要知道如何處理技術(shù)債務(wù),首先要有健全的開發(fā)實(shí)踐,比如DevOps環(huán)境中的測(cè)試左移和右移。測(cè)試左移是指將測(cè)試流程提前到整個(gè)開發(fā)周期中,以便在生產(chǎn)之前預(yù)見并解決問(wèn)題。測(cè)試右移是指在應(yīng)用進(jìn)入生產(chǎn)階段后收集反饋,以便在軟件被廣泛使用之前提前發(fā)現(xiàn)并修復(fù)錯(cuò)誤。這些預(yù)防措施可以防止產(chǎn)生更大的問(wèn)題。
造成技術(shù)債務(wù)的臨時(shí)措施不可避免,但開發(fā)人員必須記錄在案,包括原因和修復(fù)說(shuō)明。也可以通過(guò)定期審查現(xiàn)有代碼,讓團(tuán)隊(duì)成員互相檢查工作,主動(dòng)發(fā)現(xiàn)文檔的缺陷或異常代碼。
了解技術(shù)債務(wù)的重要性
有人說(shuō)現(xiàn)在每家公司都是軟件公司,每年構(gòu)建的軟件數(shù)量持續(xù)快速增長(zhǎng)。就連重工業(yè)企業(yè)也在為了讓客戶從購(gòu)買的產(chǎn)品中獲得更多價(jià)值而挖掘數(shù)據(jù)。
與此同時(shí),開發(fā)部門需要將項(xiàng)目快速投產(chǎn),忙碌不堪的開發(fā)人員自然會(huì)“走捷徑”,而項(xiàng)目經(jīng)理應(yīng)該予以理解并向團(tuán)隊(duì)強(qiáng)調(diào)測(cè)試和文檔記錄的重要性。
有哪些最佳實(shí)踐?
采用DevOps技術(shù)的企業(yè)應(yīng)該明確什么是技術(shù)債務(wù)并采取敏捷的策略加以管理。企業(yè)可以使用測(cè)試右移和左移以及A/B和金絲雀測(cè)試技術(shù)在問(wèn)題失控之前發(fā)現(xiàn)問(wèn)題;另外,同行代碼審查能夠從新的視角檢查開發(fā)人員的工作。開發(fā)人員應(yīng)該使用一套統(tǒng)一的規(guī)定工具和語(yǔ)言,并有一份每個(gè)階段需要完成的任務(wù)清單。有效率的DevOps部門不但提供開發(fā)人員足夠的自由度以構(gòu)建應(yīng)用,同時(shí)制定軟件開發(fā)規(guī)范以確保開發(fā)質(zhì)量。
低代碼開發(fā)平臺(tái)—減輕技術(shù)債務(wù)的好工具
為了更加有效地減輕技術(shù)債務(wù),企業(yè)可以在每次變更模塊時(shí)使用自動(dòng)化測(cè)試對(duì)每項(xiàng)代碼的改動(dòng)進(jìn)行多輪調(diào)試;通過(guò)建立強(qiáng)制文檔化等健全的代碼結(jié)構(gòu)流程;將程序員安排成兩人一組,使他們可以了解彼此的決策;使用項(xiàng)目管理工具可視化團(tuán)隊(duì)中每個(gè)人的工作狀態(tài)等。
此外,使用低代碼和無(wú)代碼工具編寫的軟件日益增加。由于流程圖和拖放技術(shù)能以可視化的方式呈現(xiàn)邏輯和預(yù)期結(jié)果,因此這些軟件很大程度上實(shí)現(xiàn)了自動(dòng)歸檔。此外,所生成的代碼可以按原計(jì)劃運(yùn)行,也可以出于自定義或性能目的進(jìn)行修改,開發(fā)經(jīng)理應(yīng)該鼓勵(lì)團(tuán)隊(duì)使用低代碼和無(wú)代碼技術(shù),以提高生產(chǎn)效率。
評(píng)論