Skip to content

來一場兼顧程式碼品質以及開發效率的 Code Review - Fin

tags: WebConf2024

簡報

https://slides.com/finchen/code

https://www.thingsaboutweb.dev/zh-TW/posts/code-review

共筆

https://hackmd.io/@webconf/BJ2N6ksMke/%2FTz9q-XSwQK-9SvmycxtXPA

本質

透過知識與視角的交流,提升產出品質與團隊技術水準

現狀與挑戰

  • 非常耗時,平均6hr/wk
  • 平均耗時數日,大範圍變更需要更久
  • 找出問題只有14%

code review 很好但很耗費時間和精力

兼顧程式碼品質以及開發效率的 code review 要怎麼做?

  1. 技術執行面 code review 本身的進行 code review 的形式
  2. 知識交流面 (Reviewer 跟開發者交流、相關知識的傳遞)
  3. 整體開發面 從整體開發流程的其他地方來幫助

Code Review 的形式

  • 同步
    • pair programming
      • 有經驗帶沒有經驗
      • 兩個同經驗的
    • live review
      • 找人過來一起看
    • code review meeting
      • 開會議一起看
      • 公開處刑 公審
    • code walkthrough
      • 找熟悉的人一步一步手把手看,比較快的進入狀況
  • 非同步
    • PR Review

各種code review 優劣比較

image

image

image

Principle of least astonishment-最小驚訝原則

降低使用者的學習成本。當你看到某些功能和設計時,不會感到驚訝,因為你已經熟悉它們的使用方式。寫程式也是同樣的道理,目的是實現功能、解決問題,而不是為了炫技。如果可以用簡單的方法達成,就不要把事情弄得複雜,以免適得其反

提升執行面效率

  • 選擇正確的 Code Review 形式
  • 自動化:靜態程式碼分析 + 測試 + CI 確保程式碼基本品質
  • AI 化:幫助找出一些基本錯誤
  • 主要精力放在實作跟邊界的審查

coderabbitai 開源的免費code review

https://www.coderabbit.ai 填寫表單有 3 個月免費 https://www.coderabbit.ai/startup-program

AI Code Review

  • 定義清楚的規格書對於 AI 產出的品質有正面的影響
  • 合理變更範圍內,對 coding style, api 參數、錯誤處理方式等的建議都很實用
  • 不要期望 AI 可以有架構性的建議
  • 檔案數量太多 AI 一樣可能會有品質下降的問題

知識交流面

正確的理解後才能正確的給予回饋

  • 先閱讀 PR 的描述和提交記錄,確認自己是否理解這次變更的目標
  • 參考相關測試與文件、規格說明
  • 若有疑問,主動提問,要求補充背景資訊
  • 用最有效率的方式來獲取資訊
  • 討論過程中的重要資訊記得整理與記錄

交流要點1:更有效率的理解

  • 同步 > 非同步
  • 面對面> 線上
  • 正面語氣 >負面
  • 在 code 上可以連結到文件資料

交流要點2: API 原則

Assume Positive Intent 預設大家都想把事情做好

負面語氣的審查:57% 被認為有效 正面或中立語氣:80% 被認為有效

交流要點3: 明確、可行動的

image

針對不同的能力背景,給予詳細或簡潔的回覆

開發流程面

在功能規劃階段,把規格定義好並記錄清楚 (組員同步規格,減少溝通時間) image

PR 大小 vs 審查效用 (PR越大 code review效益越低) image

PR 超過五百行的時候,審查時間就降低了(太長了)

PR 減肥

  1. 功能規劃階段把規格、相關文件理清
  2. 把需求拆成 半天 可以完成的小任務
  3. 任務相關性拉出來
  4. 依據相關性實作,一個任務一個 PR
  5. 關鍵字: Stacked PR (每個 PR 都基於前一個 PR 的程式碼碼基礎進行構建,形成一個「堆疊」結構。這種方法可以讓代碼審核變得更清晰,並將大型變更分解為更小的、易於管理的部分)
  6. 目標: LOC < 500

LOC : Lines of Code的縮寫

Stacked PR:(疊加的 Pull Requests)是一種將程式碼變更分成多個有條理、循序漸進的 PR(Pull Request)的方式,這些 PR 是相互依賴的,組成一個「堆疊」結構。

Self Review

  • 交付 Code Review 之前 先自行 Review 一次
  • 可以透過 AI Coding Tool 幫忙 Review

AI Code Review

  • 定義清楚的規格書對於 AI 產出的品質有正面的影響
  • 合理變更範圍內,對 coding style, api 參數、錯誤處理方式等的建議都很實用
  • 不要期望 AI 可以有架構性的建議
  • 檔案數量太多 AI 一樣可能會有品質下降的問題

GenAI 可以幫忙的

  • 產規格文件
  • 產 PR Description

你不一定需要 Code Review

  • 對改動的信心足夠
  • 測試足夠 或 QA 足夠
  • 實驗性質的內容

挑戰的處理

  • 使用合適的形式
  • 針對容易 Review 的引入自動化工具
  • 把心力放在需要 Review 的複雜內容上
  • 規格明確,bug 自然會比較容易處理
  • 縮減任務範圍 / PR 大小,縮減 Review 所需耗費的心力與時程
  • 先 Self Review,自己能接受的品質才送出