不知不覺,國慶已經過去了一大半了,昨天看了谷歌最近發表的一篇關於CodeReview的文章,叫做如何進行CodeReview分享給大家。
設計
進行CodeReview的時候,最重要的,就是看變更的總體設計。我們需要有一個程式碼變更列表,看看每一處變更是否有道理,每一處變更是否起作用。變更是在哪裡進行變更的,邏輯層、服務層還是儲存層。程式碼在這裡變更合不合適,能否放到更合適的地方。
功能當我們進行程式碼審查的時候,需要思考,這些變更是否讓功能真正實現了,並且這些變更也是比較友好的,容易維護的。同時,我們應該確保新增的功能是正常執行的,我們需要思考業務有沒有邊界場景,需要思考有沒有併發問題,確保程式碼沒有bug。
當我們的程式碼變更設計到UI變更的時候,我們可能很難一下子從程式碼裡面看到新頁面的樣子,這個時候我們需要發起程式碼變更的人提供一個Demo,或者提供UI出現的路徑,以便我們看到。
程式碼的併發問題是非常難從程式碼裡面看到的,我們很難從程式碼裡面看到是否會出現死鎖或者併發衝突,同時,這些併發問題也不是簡單的把程式跑起來就能找到,我們需要程式碼審查人進行更深層次的思考,同時,開發同學也精良避免使用一些有併發問題的模組。
複雜度我們需要看到每一次程式碼變更是否過於複雜,可能是方法過於複雜,也可能是類過於複雜,複雜以為這別人很難閱讀懂這段程式碼,很難進行維護。這意味著別人改動這個程式碼非常容易出問題。我們經常在程式碼裡面進行過度設計,開發人員經常在程式碼裡面新增一些不必要的方法,程式碼審查人員需要警惕過度設計,讓當次的開發人員用更簡單的方法進行實現。
測試用例在一些國外公司,測試用例也是需要進行程式碼評審的,我們要注意到,每一個測試用例是否有用的,是否正確,能否覆蓋到程式碼的所有場景。測試程式碼也是經常需要維護的,要把不同的場景搞成不同的方法,不要讓測試程式碼過於複雜,後期更難維護。
命名要求程式碼評審的程式設計師需要時刻注意到程式碼的命名,無論是方法,變數,還是類,如果命名難以理解或者容易混淆,應該進行改正。
註釋程式碼開發人員應該在程式碼無法清晰解釋意圖的時候,寫下注釋。註釋會解釋為什麼這個程式碼要這麼寫。程式碼審查人員應該注意程式碼的註釋是否跟程式碼所表達的意思一致。同時應該確保所有的TODO註釋都被刪除。
風格像谷歌這樣的公司,有著自己的程式碼風格,應該按個遵循這種風格。如果你有一些程式碼不遵循這樣的風格,最好在前面註釋下原因,如果你要格式化檔案,應該把格式化檔案跟程式碼變更分離開來,提兩個不同的CodeReview單。
仔細閱讀每一行程式碼仔細閱讀每一行程式碼,特別是檔案讀寫,大資料,與類初始化,這些開銷較大的程式碼要值得警惕。不要只是粗礦地閱讀下函式名,感覺呼叫鏈路正確而不去閱讀每一行程式碼。審查的程式設計師要理解每一行程式碼做的是什麼。
可能你會覺得程式碼審查非常地浪費時間,同時也是非常地困難。但是,谷歌公司招收的每一個軟體開發者,都是非常優秀的,如果你無法做到這一點,說明你的能力可能不符合公司的的要求。
其他如果在閱讀程式碼的時候,看到不錯的程式碼,應該讚賞,程式碼評審不是為了發現別人的錯誤,也是提升自我的一個地方。
總結做好一個程式碼評審你需要注意的是: