《AI時代:碼農的涅盤重生》第45章 代碼審查(1)

作者:Flint8·8小時前

週一上午九點,林晨坐在工位上,盯著 GitHub 頁面上那個剛剛建立的 Pull Request(程式碼合併請求),心跳有些加速。這是他在新公司的第一個 PR。

過去一週,他幾乎每天加班到晚上十點,週末也泡在程式碼裡。任務不算複雜:為一個 DeFi(去中心化金融)專案的前端新增一個質押收益計算器元件。他用了自己最熟悉的 React 方式完成了開發,自測了幾遍,功能都正常。

滑鼠在“Create pull request”按鈕上懸停了十幾秒,林晨深吸一口氣,點了下去。頁面跳轉,PR 編號 #347 出現在螢幕上。他順手在 Slack 的技術頻道里 @ 了 Tech Lead 陳峰:“陳哥,質押計算器元件的 PR 已提,麻煩有空 review 一下”。

訊息剛發出去,陳峰幾乎秒回:“收到,上午處理”。

林晨鬆了口氣,起身去接水。路過陳峰的工位時,看到對方已經點開了 PR 頁面,眉頭微皺,手指在鍵盤上快速敲擊。回到座位,林晨強迫自己不去重新整理頁面,轉而開始看專案裡另一個模組的程式碼。但注意力總是不集中,每隔幾分鐘就忍不住瞥一眼螢幕右下角的 Slack 圖示。

這種等待程式碼審查的感覺,比他預想的要焦慮。在上一家跨境電商公司,他的程式碼審查通常很順利——十年老員工,對業務系統和程式碼庫瞭如指掌,提交的 PR 往往只有些格式小調整。但在這裡,一切都是新的:新技術棧、新編碼規範、新的最佳實踐,甚至新的思維方式。

上午十點半, Slack 圖示終於閃動起來。

陳峰:“@林晨 看完你的 PR 了,問題比較多,我們快速過一下?現在方便的話來小會議室”。

林晨心裡一沉,回覆:“好的,馬上來”。

拿起筆記本和筆,他走向走廊盡頭的小玻璃會議室。推門進去時,陳峰已經坐在裡面,面前的 cBook 螢幕上正是那個 PR 的頁面,右側評論欄裡密密麻麻的紅色標記。

“坐”。陳峰指了指對面的椅子,語氣平靜但嚴肅,“我們先整體說,然後你回去逐條修改”。

林晨坐下,開啟筆記本準備記錄。

“首先,功能實現沒問題,計算邏輯是對的”。陳峰開門見山,“但問題出在程式碼質量、安全性和可維護性上。我一條條說,你記一下”。

他滾動頁面到檔案開頭:“第一,TypeScript 型別定義太鬆散。你看這裡”,他指著螢幕,“userInput: any,這等於沒定義型別。我們專案要求嚴格型別,所有變數、函式引數、返回值都必須明確定義。用 any 在審查中直接會被打回”。

林晨點頭,快速記下:“明白,我改成具體型別”。

“第二,智慧合約互動部分”。陳峰翻到另一段程式碼,“你直接呼叫了合約方法,但沒有處理可能的失敗情況和 Gas 費估算。這在 Web3 前端是必須的——每一次鏈上互動都可能失敗,可能耗光使用者 Gas 費。你需要加上 try-catch,加上 loading 狀態,加上預估 Gas 並提示使用者確認”。

“這個我確實沒考慮到……”林晨如實說。在傳統 Web 開發裡, API 呼叫失敗通常只是重試或報錯,但涉及真金白銀的 Gas 費,完全是另一個維度。

“第三,程式碼結構”。陳峰繼續,“你把所有邏輯都寫在一個元件裡,計算函式、格式化函式、狀態管理全混在一起。按照我們專案的規範,計算邏輯應該抽離成獨立的純函式,放在 utils 目錄下;格式化函式也應該獨立;狀態管理考慮用 Zustand 而不是全用 useState,因為這部分狀態可能在應用其他地方也需要訪問”。

林晨看著自己那八百多行的元件檔案,突然意識到問題所在——他用了最快速、最直白的方式實現功能,但沒考慮後續維護和擴充套件。

“第四,安全問題”。陳峰的語氣更嚴肅了些,“你這裡用了 eval 嗎”?

林晨一愣:“沒有啊……”

陳峰指向一段動態計算公式的程式碼:“雖然不是 eval,但你用 new Function 動態執行使用者輸入的計算公式,這本質上和 eval 一樣危險。如果使用者輸入惡意程式碼呢?即使在我們自己控制的前端,這種模式也絕對禁止。計算公式必須白名單化,只允許幾種預設模式”。

林晨背後冒出冷汗。他確實為了方便,允許使用者輸入自定義計算公式,然後動態執行。這在傳統 Web 也許還行,但在涉及加密資產的環境裡,簡直是漏洞。

“第五,樣式問題”。陳峰翻到最後,“你用了內聯樣式和大量 !iortant 覆蓋。我們專案用 Tailwind CSS,要求原子化樣式類。另外,響應式設計考慮不足,在移動端佈局會亂”。

他停下來,看向林晨:“暫時就這些主要問題。細節評論我都在程式碼行里加了,總共……四十七條評論”。

四十七條。林晨感覺臉上有些發燙。工作十年,他從未在一個 PR 裡收到過這麼多修改意見。

“陳哥,抱歉,是我沒熟悉好規範”。他誠懇地說。

陳峰擺擺手:“不用道歉,新人第一個 PR 都這樣。 Web3 開發,尤其是金融相關,安全性和程式碼質量的要求比傳統 Web 高几個數量級。一筆錯誤交易可能造成使用者永久資產損失,一個合約漏洞可能被駭客利用導致專案歸零。所以審查嚴格是必須的”。

。”式方維思和準標的們我應適要需是只。誤錯階低有沒,實紮輯邏礎基,快度速現實——顯明很也勢優的你但“:些了和緩氣語,頓了頓他

猜你喜歡

同題材或同分類的其他作品。