Let's do code review
我最近處理很多 Code Review 的活動,來說說自己對 Code Review 的看法。
什麼是 Code Review
可以直接去 google 打關鍵字,可以找到這樣的一段話。Code review is a systematic process where developers review each other's code to improve quality, catch errors, and ensure adherence to coding standards before merging changes into the main codebase.
總之,Code Review 是軟體團隊為了提高程式碼品質的「你幫我看 Code ,我幫你看 Code 」的活動。
軟體設計品質
所謂的軟體設計品質我認為至少做到合法合規且符合軟體設計原則的程式碼才算達標。一份品質好的程式碼一定寫的清楚、看得明白、容易擴充與維護的樣貌。Code Review 可以擴充設計者的視野能幫助提升軟體設計品質。
要做好有品質的 Code Review 活動得花不少時間,實務上要確實執行也很困難。正常情況是 Developer 的你每天趕專案 Code 都寫不完了,要怎麼再擠出時間再幫其他人 Code Review 呢?有時被質疑為什麼同一份程式碼會需要搞到兩人一起 Double Work?(主管不是軟體背景)
只顧產出的設計,漸漸地會讓軟體品質會隨時間開始下滑,導致不同風格的程式碼穿插越來越難看懂,疊床架屋、copy-paste 的設計也導致效能越來越差,結果技術債不斷累積。等到團隊的技術債累積破表後,最後就只能走成本更高的refactor(打掉重建)會得不償失。
Code Review 的 R&R
R&R 是 Role and Responsibility ,角色與職責。Code Review 要有兩個角色互動才行,分別是 Developer 跟 Reviewer,Developer 提出 request,Reviewer 負責 review(審查)。
當 Developer 完成開發就可以提出 Merge Request 並開始邀請 Reviewers 來 Review 自己的程式碼,重點在過程中跟 Reviewer 取得回饋、討論凝聚共識決定該怎麼處理,看是要現在改還是下個版本改。
Reviewers 可以是複數的,大一點的團隊會由主管評估後指定適合的人來擔任,例如團隊內的資深軟體工程師或架構師,而小規模的軟體團隊的 Reviewer 大概率會是直屬主管。適合的 Reviewer 才能幫助 Developer 在過程中明確的指出問題或給予更好的設計建議。
Code Review 的方式
主要分實體與線上兩種。早期我都是進行實體的 Code Review,自己當 Developer 開發完後就跟 Reviewer 約時間討論,有錯誤或疑問的地方經過討論就直接改,實體 Code Review 的溝通效率很高。
現在改為線上用 gitlab 的 Code Review 為主。Developer 提交 Merge Request 時指定 Reviewers,Reviewers 就會收到郵件通知再安排時程進行 Review 活動。線上作業彈性大是優點,缺乏及時溝通效率的問題也是很明顯,也少了幾分人味。
Developer 的基本素養
Developer 的基本素養是要做好基本功!Commit code 前一定要確認自己的程式碼是 Workable(程式可以編譯且執行結果符合預期)才可以 commit;自己也要檢查是否已經照團隊要求的 coding style 寫作,變數/類別/函數名稱是否已經有良好的命名以及能幫助 Reviewers 理解程式內容的註解。
Developer 要保持 Open Mind。當你收到很多回饋的時候要感到開心,這代表你的 Reviewer 真的很盡責地在幫你 review,如果能仔細思考回饋與 Reviewer 進一步討論就會進步得很快。
Reviewer 的專業要求
要是哪天你被選為 Reviewer 一定要感到高興,代表你的專業被認可且具備可以指導他人的資格,是能獨當一面的軟體工程人員了(工具人?)。 Review 的專業就是在 Code Review 時給予有實質有建議的回饋。不需要花太多時間糾結 Coding Style, Naming Rules 這種工具用掃過就知道的基本的東西上,要把 Review 重點放在架構設計、邏輯層面與 Developer 的溝通上。
要注意別讓 Developer 的猴子跳到你身上,有些 Developer 會期待 Reviewer 直接給答案,如果遇到這種情況就可以多利用提問來引導 Developer 說出為什麼要這樣設計背後的原因,討論分析優缺點,讓 Developer 思考如何做才能有更好的設計。
結論
「時時勤拂拭,勿使惹塵埃」
我覺得六祖慧能的名言良好的體現了 Code Review 的重要性。它就是幫助你的程式碼整潔不蒙塵的雞毛禫子、持續進化的神奇魔杖。如果你還沒嘗試過 Code Review,那就趕快行動起來吧。
歡迎分享你對 Code Review 的想法。說說看實體或線上的 Code Review 你喜歡哪一種呢?