為何做程式碼審查 (Why Code Review)

★★★★★Draft

FromSoftware Engineering at Google

📚 From the Books

為何做程式碼審查 (Why Code Review)Code Review

在 Google,幾乎每一筆變更在進入 codebase 前都必須經過作者以外的人審查——這是少數強制要求全體工程師參與的通用流程。它確實會拖慢新程式碼上線的速度,但換來的是六項長期效益:正確性、可理解性、一致性、集體擁有感、知識共享,以及一份歷史紀錄。令人意外的是,抓 bug 並不是主要收穫

🧠 為什麼值得這個成本

程式碼被閱讀的次數遠多於被撰寫的次數,而 code review 往往是「作者以外的人第一次看到這段程式碼」的時刻。這個外部視角能做到連最強的工程師都做不到的事:提供不受作者盲點影響的回饋。

NOTE

程式碼本身就是一種負債(liability)。 它或許必要,但就其本身而言只是給未來某人的維護任務。所以在動手前應先確認需求真的存在、是否已有類似實作。Google 內部甚至有句話:「如果你從零開始寫,那你就做錯了!」但要注意:code review 不是重新辯論設計決策的場合——那該在更早的設計提案、API 審查階段完成。

⚖️ 三種核准,一次審查

Google 的變更要提交,需要三個面向的「核准」,但關鍵優化是:通常一位 Reviewer 就能同時扮演三種角色

① 正確性與理解度 — LGTM 位元

由另一位工程師確認「這段程式碼做了它宣稱的事,而且可理解」。這反映在 LGTM(looks good to me)權限位元上。預設只需一位 Reviewer 的 LGTM,變更即可提交。這是「至少兩雙眼睛看過」文化的底線。

// 一個小而聚焦的變更:加上邊界檢查。
// Reviewer 一眼就能判斷「正確 + 可理解」→ 給 LGTM。
function discountFor(order) {
  if (order.total <= 0) return 0; // ← 這次變更:防止負數折扣
  return order.total * 0.1;
}
② Code Owner 核准 — 這段能進我這塊 codebase 嗎

Google 的 codebase 是階層式目錄,每個目錄可有 OWNERS 檔案,列出對該目錄負「管理職責(stewardship)」的人。Owner 關注的問題和 Peer Reviewer 不同:「這容易還是難以維護?」「它增加了我的技術債嗎?」「我的團隊有能力維護它嗎?」若作者本身就是 Owner,此核准可隱含完成。

③ Readability 核准 — 符合語言風格與最佳實踐嗎

由具備該語言 Readability 認證的工程師確認程式碼一致、避免過度複雜。Java 程式碼要 Java readability、Go 要 Go readability。若作者已有該認證,此核准亦隱含完成。這三個位元可任意組合:一位身兼 Owner 與 Readability 的 Tech Lead,只需一個同儕 LGTM 就能提交。

TIP

為何不總是找「三合一」的人審查全部?答案是規模化(scale)。把三種角色拆開讓流程有彈性——可以先讓團隊成員來回數輪確認正確性拿到 LGTM,最後再找 Owner 快速核准。最重要的 LGTM 永遠是第一個;後續的邊際效益遞減。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading