前端開發(fā)者如何消除代碼中的技術(shù)債務(wù)
開發(fā)者很可能在無意中給代碼增加了技術(shù)債務(wù)。以下是如何從代碼中消除技術(shù)債務(wù)。
譯自How Frontend Devs Can Take Technical Debt out of Code。
技術(shù)債務(wù)可以有多種形式。它可能表現(xiàn)為代碼中的bug,或者同一部門不同開發(fā)者的編碼實踐不統(tǒng)一。
技術(shù)債務(wù)是指任何由于首次沒有做對而需要額外工作或重新工作的東西。有時開發(fā)者編寫的代碼在一臺機器上運行良好,但是當部署到分布式環(huán)境時就會失敗 - 這也屬于技術(shù)債務(wù),BOS Framework的創(chuàng)始人兼CEOShashank Purighalla表示,BOS Framework是一個云基礎(chǔ)架構(gòu)和DevOps自動化平臺。
“從高層次來看,從業(yè)務(wù)層面來說,你可以談到有意的技術(shù)債務(wù),幾乎每個程序員和每個開發(fā)團隊由于時間和預(yù)算局限都會承擔這種債務(wù)?!?Purighalla說?!巴瑫r也存在許多非故意或意外的技術(shù)債務(wù),人們簡單地不知道自己正在承擔這種債務(wù) - 由于知識欠缺,對整個生態(tài)系統(tǒng)認知有限,或者局限在自己的視野中?!?/p>
Purighalla 在接受 The New Stack 的采訪時表示,前端和 Web 應(yīng)用開發(fā)者可以幫助解決技術(shù)債務(wù)。但首先,他們需要知道技術(shù)債務(wù)的表現(xiàn)。
理解技術(shù)債務(wù)
開發(fā)者可以通過各種方式識別技術(shù)債務(wù),首先是修復(fù)代碼中的bug這種最令人討厭的技術(shù)債務(wù)。但他說還有其他指標。
“高級開發(fā)人員通常可以查看代碼,并指出:‘我看到某些構(gòu)造做得不好,或者某些實現(xiàn)可能不太優(yōu)化。’” Purighalla說。“從識別系統(tǒng)中的bug,到未完成的代碼,到實現(xiàn)粗糙,以及從生態(tài)系統(tǒng)分析角度略微提升 - 缺少安全構(gòu)造或某些協(xié)議沒有正確實現(xiàn)。”
過去三年網(wǎng)絡(luò)攻擊的增加證明了軟件技術(shù)債務(wù)的存在,他說。
“這是技術(shù)債務(wù)的后果,我稱之為無意的技術(shù)債務(wù),因為大多數(shù)情況下,技術(shù)團隊在使用、引入它或者接手該項目時,甚至不知道存在所有這些問題?!彼f。
全棧思考,前端行動
為了應(yīng)對技術(shù)債務(wù),Purighalla 建議開發(fā)者 - 甚至前端開發(fā)者 - 應(yīng)把自己的工作視為一個更大系統(tǒng)的組成部分,而不要孤立看待。
“開發(fā)者要考慮他們編寫的代碼是作為一個更大系統(tǒng)的一部分,而不僅僅是那個具體的部分?!彼f。“有這樣一個工程原則: '對藝術(shù)的過度追求完美會損害整體的完整性'?!?/p>
BOS Framework創(chuàng)始人兼CEO Shashank Purighalla
這意味著即使不是真正的全棧開發(fā)者,開發(fā)者也必須具有全棧開發(fā)者的思維方式。對前端來說,這具體是要了解網(wǎng)站或Web應(yīng)用所依賴的底層數(shù)據(jù),Purighalla解釋道。
“這個系統(tǒng)明顯是從前端開始的,終端用戶通過它與應(yīng)用程序進行交互,然后它與某種編排層比如API進行交互,然后與后端基礎(chǔ)設(shè)施交互,最后與數(shù)據(jù)庫交互?!彼f?!熬幣艑雍颓岸说膶崿F(xiàn)必須非常小心?!?/p>
Purighalla說,前端開發(fā)者應(yīng)對他們的應(yīng)用所依賴的數(shù)據(jù)負責。例如,前端開發(fā)者應(yīng)知道,他們最終從界面展示或獲取的大致有5種類型的數(shù)據(jù):
- 機密數(shù)據(jù);
- 高度機密數(shù)據(jù);
- 限制性數(shù)據(jù);
- 內(nèi)部數(shù)據(jù);
- 公開數(shù)據(jù)。
根據(jù)數(shù)據(jù)的獲取方式以及將數(shù)據(jù)放回數(shù)據(jù)庫的方式,或者相反,根據(jù)從數(shù)據(jù)庫獲取并在界面展示數(shù)據(jù)的方式,這5種類型的數(shù)據(jù)有不同的要求,他說。
“當我們談?wù)撉岸薟eb應(yīng)用程序時,界面類型也非常重要?!彼f?!疤貏e是在AI世界中,你不僅僅是在屏幕上展示數(shù)據(jù)。你正在談?wù)撘粋€高度交互的系統(tǒng),它可能由自然語言處理驅(qū)動。所以數(shù)據(jù)的獲取方式非常重要?!?/p>
例如,前端開發(fā)者需要知道何時使用加密、驗證碼或注冊表單。
“理解開發(fā)者的決策如何直接影響組織及其領(lǐng)導(dǎo)也很重要。”他補充說?!斑@是開發(fā)者經(jīng)常沒有意識到的?!?/p>
面向所有開發(fā)者的標準
要開始減少技術(shù)債務(wù),開發(fā)團隊應(yīng)采用每個開發(fā)者都要遵守的編碼標準,他補充說。
“最基本的,要考慮命名規(guī)范?!?Purighalla說?!叭绾蚊兞浚抗沧兞?、全局變量、私有變量。”
他還建議采用測試驅(qū)動開發(fā)。在測試驅(qū)動開發(fā)中,單元測試是在開發(fā)實際代碼之前創(chuàng)建的。
“最起碼,測試驅(qū)動開發(fā)是減少功能和用戶體驗缺陷的一個非常好的策略?!彼f?!八孕枨蟛粌H被視為需要驗證的清單,而且被視為需要實現(xiàn)的結(jié)果的一部分?!?/p>
測試驅(qū)動開發(fā)形成一種思維轉(zhuǎn)變,從功能代碼完整性或代碼完整性的角度來思考代碼,他補充說。
他還表示,前端還必須考慮自己是否在開發(fā)某些內(nèi)部目的的Web應(yīng)用,或者面向公眾的SaaS應(yīng)用??赡艽嬖谂cHIPAA、SOC 2或其他法規(guī)相關(guān)的合規(guī)性問題,他補充說。這與數(shù)據(jù)和安全的考量結(jié)合起來應(yīng)該指導(dǎo)開發(fā)者。
這決定了必須遵循的標準類型,以及必須以一定周期進行的代碼掃描、代碼覆蓋率和安全掃描等基本原則。”他說。“要么進行靜態(tài)代碼分析,要么在每個部署周期中完成?!?/p>
他補充說,優(yōu)秀的實踐必須致力于確保代碼可讀性,并進行適當?shù)膬?nèi)聯(lián)文檔注釋。這可以簡單到開發(fā)者添加注釋說明誰在開發(fā),何時編寫,為何編寫,存在什么需求,目的是什么,他說。注釋還應(yīng)指明項目中是否存在更深層次的設(shè)計文檔或順序圖等參考資料。
“缺少這些是我們出現(xiàn)大量網(wǎng)絡(luò)安全漏洞的原因,我不能過分強調(diào)這一點,”他說。“如果你可以選擇技術(shù)棧,有時候就很容易,對吧?如果你用前端采用解釋型語言而不是編譯型語言,比如 PHP,很容易就可以找到漏洞然后開始攻擊系統(tǒng)。即使只有一個小漏洞,也不需要很長時間。如果你使用基礎(chǔ)的編譯型技術(shù),如果做得好,被攻擊的機率會大大降低。”
此外,他補充說,組織中的所有開發(fā)者都應(yīng)遵循這些實踐的相同標準。
“開發(fā)者必須明白,自己是更大生態(tài)系統(tǒng)的一部分,要構(gòu)建能融入總體框架的組件,”他說?!皬纳虡I(yè)視角理解一切,然后按照商業(yè)需求反向工作,這可能包括我不會專門編寫某些安全構(gòu)造的要求?!?/p>