也談談CodeReview

前言

Talk is cheap. Show me the code.

So, Let’s go!

一個注重技術規範和分享的團隊,往往會做好Code review工作,在緊張的項目之餘,爲了後期的效率和技術上的提高,我們需要引入Code review。本文是第一次準備Code Review時查閱了大量相關資料,整理總結形成本文,後期的博客中會記錄第一次Code review的實例。希望對你有所幫助。

爲什麼要Code review?

  1. 提高代碼整理質量,提前發現bug,不留技術債務,利於後期維護。

一個項目就像有很多窗戶的房子,當有人打碎一扇窗戶而沒人管時,會有人打碎更多的窗戶,一個項目隨着時間的推移,慢慢變成了一堆垃圾,無法維護下去,只能全部重來。

  1. 提高了團隊成員對他人代碼的熟悉程度,對整個項目的現狀也有清晰的認識,在需要接替任務,在同事基礎上繼續維護項目時,有助於快速進入感覺。

  2. 從成員角度看,有助於養成良好習慣,代碼書寫更加規範,整潔。隨着習慣的養成,後期將會逐漸轉化爲文化與技術的交流,會對技術還是境界都有一定的提升。從團隊來看,有助於形成積極的技術氛圍,融洽的關係。

Code review 工作範疇

  1. 檢查代碼是否整潔,命名是否規範合理及語法問題。

    多一個空格,少一個空行這種格式問題,儘量通過自動化工具完成,不要浪費他人寶貴的時間,主要是檢查命名是否明白易懂

  2. 檢查邏輯是否正確,清晰

  3. 檢查是否有可改進的地方,更高效的方法、算法。

  4. 架構是否靈活,合理。

    小結:讓團隊Code review前,先做好自查。比如,在Android團隊開發中,先根據事先團隊約定的開發規範自查。Code review前,團隊得有一個Code review清單,類似這樣的Android開發代碼規範總結

團隊成員對code review 應該有什麼樣的態度

  1. Code Review不是批鬥會,評審者不能以錯誤、缺陷打擊成員的積極性

  2. 作者應該以學習的態度虛心接受評審員的建議,遇到分歧可以討論。

  3. 評審員職責是發現問題,跟蹤改進,不是替作者修改。作者同意後應該按建議自行修改。

  4. 作者不要過分依賴於審覈,要在提交前自己先檢查,避免浪費他人的時間。

    小結:虛心使人進步,多思考別人的思考方式和不同的技術思路。

高效執行 code review 面臨的挑戰

  1. 上級領導不認可,認爲浪費時間,團隊很難執行下去,團隊之間不接受批評建議也很難開展下去,團隊技術氛圍很重要。

  2. 時間緊任務重。先快速迭代完成任務,新功能可能隨時被砍掉,不要過早優化。

  3. 團隊成員沒有提高自身技能與素養的意願。需要有極客精神,對代碼質量有自身要求,敢於嘗試新鮮技術,希望更上一層樓。

  4. 不認同價值觀

    是人的複雜讓本來簡單的事情變得異常複雜。如何通過成員間討論設計出所有成員都認同的規則,形成所有人認同的價值觀對事情的可持續發展至關重要。

實踐方案

  1. 先確定代碼規範,git使用規範,代碼審覈機制。

  2. 先按代碼規範自查。

  3. 至少有一名經驗較他人豐富的骨幹成員當主審,以及不限數量的其他成員作爲可選審覈員。代碼通過需要至少一個主審同意,所有審覈員都可以對代碼發表意見。

  4. 審覈時機確定

    固定時間段或項目結束後進行。在項目中待優化的地方加上TODO, 有時間及時優化。

  5. 激勵機制

    對code review 中積極幫助他人,分享大量知識,及時發現重大bug的成員進行獎勵。

如何有效開展CodeReview活動?

在這裏插入圖片描述

1、代碼規範:明確Coding規則

如果一開始不定義好團隊Coding標準,那在檢視過程中就會存在兩種情況:一種是各種不同的意見很難快速達成一致,影響review效率,另外一種是團隊根本就不會重視代碼規範的檢視, 如果是前者還好,畢竟大家都還在關注什麼寫法是好的或對的這個問題,只要中途願意建立起Coding規則,問題就能很快解決。而筆者跟進過的一個團隊恰恰就出現了後者的情況:該團隊由於前期沒有明確Coding規則, 過程中大部分開發人員對規範類問題直接無視,CodeReview運作一段時間後代碼中依然存在命名不規範,可讀性較差等問題,直接影響了活動效果,這是我們非常不願意看到的。

當然也有團隊負責人說了,每天糾結於空格少了,行數字符多了等細節問題沒意義啊,不想浪費這個時間,因此我們不需要代碼規範。我個人不認同這個觀點,因爲代碼規範並不只包括空格和字符等約束緯度,還包括了註釋的要求,命名的規範,命名是否詞能達意,代碼結構安排等等影響代碼可讀性的因素, 如若這些方面連基本規則都沒有,那一定會出現之前說的那兩種情況(爭議太多 or 完全忽視),效果可想而知。所以你可以根據自己的看法或需求做一定的規則定製,但不能沒有Coding規則

2、檢視指南:消除困惑和迷茫

檢視指南又名CodeReview-checklist。一個團隊並不是所有人都是老司機,有很多同學是沒有代碼review經驗的,他們往往不知道應該重點 check哪些點。

這個時候結合自身業務特點和團隊之前踩過的坑,制定一個checklist是非常必要的:

  1. 什麼寫法可能導致性能低下?
  2. 哪個接口要慎用?
  3. 哪些設計方式需要規避?
  4. 什麼習慣容易引發內存泄漏?
  5. 等等。。。

這樣可以讓經驗不足者在不知道要review什麼時,能有的放矢,過程中逐步積累起經驗。

Code review 工具推薦

  • GitLab

GitLab,GitHub這些倉庫託管平臺如今也具有code review 功能,基本可以滿足需求。

  • Gerrit

    Gerrit 是一個基於 web 的代碼評審工具, 它基於 git 版本控制系統。Gerrit 旨在提供一個輕量級框架, 用於在代碼入庫之前對每個提交進行審閱。這是比較流行的code review 工具,是谷歌用來管理Android項目的工具。

    流程

    (流程git review提交代碼 -> 提交到Gerrit庫 -> 觸發Jenkins自動測試,測試通過Verified -> 人工審覈Review,review通過 -> Gerrit執行Replication -> push Git remote)

  • SonarQube

代碼質量管理平臺,具有完善的功能,適合對代碼質量要求很高的團隊。

總結

Code review不是炫技,重在分享和規範代碼,相信參與其中的人都有收穫。當你看到此文時,相信你也走上了Code review的道路上了。

參考資料:

1.Code Review初識

2.Jenkins + Gerrit + Git

3.如何用Gerrit進行評審

4.ReviewBoard 系列圖文教程之(一)—— 安裝

5.鵝廠團隊的Code Review經驗

6.Gerrit工作流程及使用手冊

7.基於GitLab的Code Review教程

8.如何高效迅速的進行CodeReview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章