# 你真的知道Code Review到底在幹麻嗎?如何高效發起、提出建設性意見,並建立健康的團隊文化 ## 📌 I. 前言:Code Review 的真正價值 許多人以為 Code Review (CR) 的目的只是「抓 Bug」。 其實那只是副產品。一個成熟團隊進行 Code Review 的**本質價值**在於: * **知識共享與傳承:** 讓第二位甚至第三位工程師了解程式碼的意圖與設計背景。 * **穩定地維持品質標準:** 讓新加入的程式碼符合團隊的一致性哲學,例如模組化、SRP、命名、錯誤處理方式等。 * **降低技術債:** 避免不穩定或耦合過高的設計在合併後擴散。 **結論:** Code Review 是團隊在「一起寫同一個系統」,而不是「各寫各的再拼起來」的關鍵機制。 --- ## 🚀 II. 發起者的責任:讓審查流程高效運轉 送出 PR/MR 的人必須確保「輸入品質良好」。這是對 Reviewer 最基本的尊重,也是成熟工程師的習慣。 ### 1. 環境設定:確認風格規範 (Linter / Formatter) 風格問題不應該由人類來糾正。在開始寫 Code 或提交 PR 前,務必確認: * 專案使用什麼 Linter?(例如 ESLint、Pylint) * 使用什麼 Formatter?(例如 Prettier、Black) * 是否有 pre-commit hook? **專業習慣:** 讓你的編輯器和本地工具自動處理風格細節,確保程式碼通過機器檢查後,再交付給真人審核。 ### 2. 小而專注的提交(Small & Focused PR) 「大型 PR = Reviewer 想逃走」這條在所有公司都是真理。越小的 PR,越快被審查,也越容易被理解。 * **原則:** 一次只做一件事,**專注於單一職責 (SRP)**。 * **技巧:** 不要把重構+新功能+修 Bug 全塞在同一個 PR 中。 * **加分項:** 有 UI 的變更,盡可能附上截圖或小影片。 ### 3. 詮釋 Context:讓 Reviewer 秒懂你要做什麼 Reviewer 不是讀心術專家。你必須在 PR 描述中,清楚地寫下設計意圖。 | 必填內容 | 目的與範例 | | :--- | :--- | | **問題背景** | 連結任務單、說明這個 PR 解決了什麼問題。 | | **設計說明** | 簡述設計取捨,例如:「為了降低耦合,我引入了策略模式。」 | | **核心變更** | 指定 Reviewer 應從哪些檔案開始看,或跳過哪些純粹是風格修改的檔案。 | --- ## 🔍 III. 審查者的職責:如何提出建設性意見 Reviewer 的角色不是裁判,而是共創者。你不是在挑錯,而是在幫忙做「設計驗證」。 ### 1. 審查優先級:從最高的風險開始看 你必須將注意力放在高價值的審查點上: | 優先級 | 檢查目標 | 說明 | | :--- | :--- | :--- | | **高** | **架構、設計與 SRP** | 是否違反單一職責?模組邊界是否清晰?這個變動會不會在系統其他地方製造副作用? | | **中高** | **穩定性與錯誤處理** | 參數輸入是否有 **Null Pointer** 疑慮?是否考慮外部 API 錯誤、逾時?是否有適當的 Log 紀錄? | | **中** | **業務邏輯正確性** | 是否考慮了邊界條件 (Edge Cases)?核心邏輯是否有誤? | | **低** | **可讀性與命名** | 命名是否清晰?這個級別的問題通常應該由 Linter 處理。 | > **總結:** 先問「設計」對不對,再問「寫法」漂亮不漂亮。 ### 2. 語氣技巧:對事不對人 CR 應該是一場設計交流,而不是辯論會。建議使用以下語氣來建立心理安全感: * **提問式:** 「為什麼這邊選用 Dictionary?是基於效能考量嗎?」(鼓勵思考) * **建議式:** 「我建議把這段抽成獨立方法,這樣可以更清晰地分離職責。」(而非「你寫錯了,重寫」) * **讚美平衡:** 不要只挑錯誤,同時讚美優秀的設計和清晰的命名。 --- ## 🌱 IV. 如何在團隊建立健康的 Code Review 文化 這段是讓您文章更像一篇「指南」而不是純技巧文。 ### 1. 把機器能做的自動化(減少人為摩擦) 演算法未必能取代工程師,但至少能取代「盯縮排」這件事。 * **工具清單:** Linter、Formatter、Type checking、CI/CD 中的單元測試。 * **目的:** 將 Reviewer 的精力完全釋放到高優先級的「設計」檢查上。 ### 2. 訂定基本規範(避免自由心證) 沒有規範,CR 文化只會靠運氣。每個團隊至少該定義: * PR 大小建議(例如:理想上 ≤ 300 行)。 * 審查時間 SLA(例如:24 小時內要有初步回應)。 * 哪些檔案(例如:`service` 或 `domain` 層)需要附帶單元測試。 ### 3. 建立心理安全感(CR 最容易被忽略的地方) **程式可修,信任難補。** 避免: * 公開羞辱式評論或不友善的語氣。 * 不聽解釋的「我說了算」。 * Reviewer 太兇導致新人怕提 PR。 好的 CR 文化會讓新人說:「我放心把 PR 交給你們。」 --- ## 🎒 V. 新手跨越恐懼期:第一次 Code Review 的心態與準備 這段最能幫助新人跨過恐懼期。 ### 1. 心態:這不是考試,也不是在打分數 CR 是分享寫法、找盲點、建立一致性、一起把系統寫得更可維護的過程。你的 Reviewer 願意花時間,就是重視你。 ### 2. 提交前自查清單 * Linter 無錯。 * 重要邏輯自己跑過一次。 * Git Diff 自審一次,確認變動是合理的。 * 說明清楚 PR 的目的,且 PR 大小合理。 ### 3. 如何回應 Reviewer 價值最大? * **不要防禦性回覆:** Reviewer 是在質疑 Code,不是質疑你。請說明你的設計理由,而不是爭辯對錯。 * **不懂就問,不要硬撐:** 「可以補充為什麼這邊需要這樣做嗎?」這是團隊最喜歡聽到的句子。 * **遇到複雜討論,開會最快:** 打字吵三天,不如開個 15 分鐘視訊會議,能立刻解決誤會和設計分歧。 --- ## ✅ VI. 總結:Code Review 是團隊智慧的放大器 Code Review 不是審判,也不是技巧比賽。它是一場「讓系統更好」與「讓工程師更成熟」的循環。 當 CR 做得好時: * 新人變強 * 資深不用救火 * 系統品質變穩 * 技術債自然減少 Code Review 是成熟工程文化最關鍵的基石之一。