版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。html
代碼審查(Code Review)是軟件開發中經常使用的手段,和QA測試相比,它更容易發現和架構以及時序相關等較難發現的問題,還能夠幫助團隊成員提升編程技能,統一編程風格等。編程
1. 代碼審查要求團隊有良好的文化微信
團隊須要認識到代碼審查是爲了提升整個團隊的能力,而不是針對個體設置的檢查「關卡」。數據結構
「A的代碼有個bug被B發現,因此A能力不行,B能力更好」,這一類的陷阱很容易被擴散從而影響團隊內部的協做,所以須要避免。架構
另外,代碼審查自己能夠提升開發者的能力,讓其從自身犯過的錯誤中學習,從他人的思路中學習。若是開發者對這個流程有抵觸或者反感,這個目的就達不到。工具
2. 謹慎的使用審查中問題的發現率做爲考評標準學習
高效代碼審查的十個經驗測試
在代碼審查中若是發現問題,對於問題的發現者來講這是好事,應該予以鼓勵。但對於被發現者,咱們不主張使用這個方式予以懲罰。軟件開發中bug在所不免,過分苛求自己有悖常理。更糟的是,若是形成參與者怕承擔責任,不肯意在審查中指出問題,代碼審查就沒有任何的價值和意義。編碼
3. 控制每次審查的代碼數量url
根據smartbear在思科所做的調查,每次審查200行-400行的代碼效果最好。每次試圖審查的代碼過多,發現問題的能力就會降低,具體的比例關係以下圖所示:
高效代碼審查的十個經驗
咱們在實踐中發現,隨着開發平臺和開發語言的不一樣,最優的代碼審查量有所不一樣。可是限制每次審查的數量確實很是必要,由於這個過程是高強度的腦力密集型活動。時間一長,代碼在審查者眼裏只是字母,無任何邏輯聯繫,天然不會有太多的產出。
4. 帶着問題去進行審查
咱們在每次代碼審查中,要求審查者利用自身的經驗先思考可能會碰到的問題,而後經過審查工做驗證這些問題是否已經解決。一個竅門是,從用戶可見的功能出發,假設一個比較複雜的使用場景,在代碼閱讀中驗證這個使用場景是否可以正確工做。
使用這個技巧,可讓審查者有代入感,真正的沉浸入代碼中,提升效率。你們都知道看武俠小說不容易瞌睡,而看專業書容易瞌睡,緣由就是武俠小說更容易產生代入感。
有的研究建議每次樹立目標,控制單位時間內審覈的代碼數量。這個方法在咱們的實踐中顯得很機械和流程化,不如上面的方法效果好。
5. 全部的問題和修改,必須由原做者進行確認
若是在審查中發現問題,務必由原做者進行確認。
這樣作有兩個目的:
(1)確認問題確實存在,保證問題被解決
(2)讓原做者瞭解問題和不足,幫助其成長
有些時候爲了追求效率,有經驗的審查者更傾向於直接修改代碼乃至重構全部代碼,但這樣不利於提升團隊效率,而且會增長由於重構引入新bug的概率,一般狀況下咱們不予鼓勵。
6.利用代碼審查激活個體「能動性"
即便項目進度比較緊張,沒法徹底的進行代碼審查,至少也要進行部分代碼的審查,此時隨即抽取一些關鍵部分是個不錯的辦法。
背後的邏輯是,軟件開發是很是有創造性的工做,開發者都有強烈的自我驅動性和自我實現的要求。讓開發者知道他寫的任何代碼均可能被其餘人閱讀和審察,能夠促使開發者集中注意力,尤爲是避免將質量糟糕,乃至有低級錯誤的代碼提交給同伴審查。開源軟件也很好的利用了這種心態來提升代碼質量。
7.在非正式,輕鬆的環境下進行代碼審查
如前所述,代碼審查是一個腦力密集型的工做。參與者須要在比較輕鬆的環境下進行該工做。所以,咱們認爲像某些實踐中建議的那樣,以會議的形式進行代碼審查效果並很差,不只由於長時間的會議容易讓效率低下,更由於會議上可能出現的爭議和思考不利於進行如此複雜的工做。
8.提交代碼前自我審查,添加對代碼的說明
全部團隊成員在提交代碼給其餘成員審查前,必須先進行一次審查。此次自我修正形式的審查除了檢查代碼的正確性之外,還能夠完成以下的工做:
(1)對代碼添加註釋,說明本次修改背後的緣由,方便其餘人進行審查。
(2)修正編碼風格,尤爲是一些關鍵數據結構和方法的命名,提升代碼的可讀性。
(3)從全局審視設計,是否完整的考慮了全部情景。在實現以前作的設計若是存在考慮不周的狀況,這個階段能夠很好的進行補救。
咱們在實踐中發現,即便只有原做者進行代碼審查,仍然能夠很好的提升代碼質量。提示:更多精彩內容關注微信公衆號:北京尚學堂科技有限公司。
9.實現中記錄筆記能夠很好的提升問題發現率
成員在編碼的時候應作隨手記錄,包括在代碼中用註釋的方式表示,或者記錄簡單的我的文檔,這樣作有幾個好處:
(1)避免遺漏。在編碼時將考慮到的任何問題都記錄下來,在審查階段再次檢查這些問題都確認解決。
(2)根據研究,每一個人都習慣犯一些重複性的錯誤。這類問題在編碼是記錄下來,能夠在審查的時候用做檢查的依據。
(3)在反覆記錄筆記並在審查中發現相似的問題後,該類問題出現率會顯著降低
10. 使用好的工具進行輕量級的代碼審查
「工欲善其事,必先利其器」。咱們使用的是bitbucket提供的代碼託管服務。
每一個團隊成員獨立開發功能,而後利用Pull Request的形式將代碼提交給審查者。複審者能夠很方便在網頁上閱讀代碼,添加評論等,而後原做者會自動收到郵件提醒,對審閱的意見進行討論。提示:更多精彩內容關注微信公衆號:北京尚學堂科技有限公司。
即便團隊成員分佈在天南海北,利用bitbucket提供的工具也能很好的進行代碼審查。
提示:更多精彩內容關注微信公衆號:北京尚學堂科技有限公司