前言
曾經有一段垃圾代碼放在我的面前,我沒有拒絕,等我真正開始接手的時候我才后悔莫及,程序員最痛苦的事莫過於此!
每當接手別人的代碼,都有一種想重新寫一遍的感覺,等到別人再來接手你的代碼時,同樣的感覺。。。為什么會有這種現象存在?因為沒有Code Review

衡量代碼質量的唯一標准就是每分鍾罵出“WTF” 的頻率。(出自Martin(Bob大叔)《代碼整潔之道》)當你的代碼在做 Code Review 時,審查者要是憤怒地吼道:
“What the fuck, is this shit?” “Dude, What the fuck!” 等言辭激烈的詞語時,那說明你寫的代碼是 Bad Code,如果審查者只是漫不經心的吐出幾個:
“What the fuck?” 那說明你寫的是 Good Code。
價值

你說我的code需要review?
一些沒采取過code review模式的資深工程師可能會有一些抵觸情緒,但放眼業界,code reveiw的好處是毋庸置疑的。
Google內部人士的一段話。
The biggest thing that makes Google’s code so good is simple: Code Review.
At Google, no code, for any product, for any project, gets checked in until it gets a positive review.
1、保證項目質量、提高代碼可讀性
2、加速個人成長、突出團隊價值
3、知識傳播與共享
4、凝聚團隊共識
5、不斷提高團隊的下限
but,良好的程序設計總是優於code review,做好設計才能減少review工作量。
內容
Code Review的內容:編程素養、業務邏輯、架構設計、單元測試、性能、安全
規則
master項目收回提交權限,由QA把控,develop到qa分支merge需要qa review確認。
feature分支往develop分支提pr必須遵循的游戲規則:
-
每次提交review代碼修改行數不得超過1000行,一小時內review完(先試行,最終目標400行,Cisco開發團隊研究顯示,進行一次Code Review不要超過400行代碼(LOC, Line of Code)。大腦一次只能有效處理這么多信息,超過400 行找到缺陷的能力減弱。)
-
至少每個周期(兩周一個開發周期)提一次review,周五早上互相喊一下,最晚提交時間周五下午2點前,周五下午的時間用來修改review代碼
-
需要保證單元測試覆蓋到,功能點要拆分足夠細
-
checkout feature分支后能編譯運行正常
-
工作日可以上午11點前提pr,需要組內指派資深工程師兩名, 至少一人review通過
-
提交pr兩天內需要處理完畢,打回或通過
小步迭代,理論上每周自測完成就可以提交pr merge到develop分支
Checklist
常規項
-
代碼能夠工作么?它有沒有實現預期的功能,邏輯是否正確等。
-
所有的代碼是否簡單易懂?
-
代碼符合你所遵循的編程規范么?這通常包括大括號的位置,變量名和函數名,行的長度,縮進,格式和注釋。
-
是否存在多余的或是重復的代碼?
-
代碼是否盡可能的模塊化了?
-
是否有可以被替換的全局變量?
-
是否有被注釋掉的代碼?
-
循環是否設置了長度和正確的終止條件?
-
是否有可以被庫函數替代的代碼?
-
是否有可以刪除的日志或調試代碼?
代碼行數統計:查看feature分支提交了多少行代碼? (exclude)掉idl目錄 (java thrift項目)
git log --author="shenguanpu" --since='2019-04-22' --pretty=tformat: --numstat ":(exclude)idl" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
added lines: 17, removed lines: 15, total lines: 2
參考文獻:
https://mp.weixin.qq.com/s/A7XlAliQL__RcpK4AzuacQ 從Code Review 談如何做技術(陳皓)
https://mp.weixin.qq.com/s/jXT1-bC7dfvzhRmh47H69g 如何寫出優雅的代碼
https://mp.weixin.qq.com/s/n1B0wLicwQByYslz6hYwnw 你真的會Code Review嗎?
https://mp.weixin.qq.com/s/YCw7OP3RKF1EJb064IHEXg code review 有用嗎?
https://mp.weixin.qq.com/s/nWntcljELd5g98b8RFTjXg code review 那些事兒
https://mp.weixin.qq.com/s/XvSuLKADV17-uF8mZmYXnw 程序員必備的代碼審查(Code Review)清單
https://mp.weixin.qq.com/s/6SoJP9BMRNyLMJjwSkctUw 如何高效的Code Review
https://mp.weixin.qq.com/s/sXwuMb8lQzijWTthnaeinw 論code review代碼審查
https://mp.weixin.qq.com/s/YOhKriAtUz2VViJtJRhbBw 享用騰訊免費早餐一樣自然的做Code Review,他們如何做的?