1. 程式人生 > >談如何做好代碼審查?

談如何做好代碼審查?

質量 bug 針對 成員 周期 觀點 sin odin 調整

1.什麽是代碼審查?

代碼審查英文為Code Review,是提高開發團隊技能以及保持團隊叠代更新最佳的實踐方法,也是代碼質量管理中一個非常有效的方法。

Code Review中文譯作“代碼審查”或是“代碼評審”,這是一個流程,當開發人員寫好代碼後,需要讓別人來review一下他的代碼,我們可以審查代碼的風格、邏輯、思路……,找出問題,以及改進代碼。因為這是代碼剛剛出爐的時候,所以,這也是代碼重構,代碼調整,代碼修改的最佳時候。所以,Code Review是編碼實現中最最重要的一個環節。

Code Review原本是整個流程中不可或缺,且較為耗時的一個質量保證環節,雖省略之後給業務方造成單位時間生產效率更高的假象,但低質量的代碼,會把團隊帶入漩渦,滾雪球一樣的技術債,會讓團隊付出巨額利息。

1、保證項目質量、提高代碼可讀性
  • code review可以通過reviewers的建議增進代碼的質量,也能提高owner的編程態度
  • code review有利項目流轉,可以讓其它並不熟悉代碼的人知道作者的意圖和想法,從而在以後輕松維護代碼
  • code review鼓勵程序員們相互學習對方的長處和優點,同時可以達到知識傳播
  • code review可以用來確認自己的設計和實現是清楚和合理的
  • code review幫助找到程序的bug和保證代碼風格和編碼標準
2、加速個人成長、突出團隊價值

個人的技能成長不再只依靠自己或技術主管的建議,整個團隊對單人的成長都能起到幫助,成員可以獲得別處無法達成的發展
從而進一步促進整個團隊生產力的提升,最終項目進度和品質都能得到很好的保障

那為什麽有些人偏偏不願意進行CodeReview呢?

  1. 時間不夠問題:業務倒逼工期,時間太緊,連coding都勉強,以上線為目的。解決方法:其實這不是CodeReview的問題,這是需求管理與項目管理的問題
  2. 需求變化問題:需求變得快,代碼的生命周期太短,所以都寫一次性爛代碼。解決方法:臨時代碼不是單獨存在的,會影響長期在用的代碼,會影響長期穩定的技術團隊。
  3. 人員態度問題:不想精益求精,幹活交差為主。解決方法:那麽更需要Review來保障質量和促進上進了。

好吧,既然這麽好,那是不是任何團隊都合適實施呢?

當然不是,你團隊中的項目得滿足以下前提條件:

  1. 統一的標準:沒有評審標準的評審是混亂的
  2. 只實施於高價值模塊:關註在核心系統代碼、重用的組件等對質量有高要求的模塊,而快速搶占市場的叠代型項目可在交付後再補Review
  3. Reviewer獎勵機制:reviewer的評審會占用工作量,是項目質量的保證者,貢獻者,應建立適當鼓勵機制與每月績效關聯
  4. 代碼充分註釋:要求核心代碼,加上充分的業務註釋、邏輯註釋,以便reviewer更易理解代碼思路
  5. 先跑CodeStyle檢查工具:不應該把人工CodeReview的精力放在指出代碼樣式和規範上,所以代碼請先用插件跑一遍CodeStyle自行檢查與修改

好了,我一切準備就緒了,具體怎麽實施呢?

我建議有2種做法:

  • 方法一:代碼評審會議,我稱之為Code Review Meeting,就是將團隊成員都組織起來開會,讓代碼Owner上去講自己代碼的實現和思路,其它人發表意見和進行討論。
  • 方法二:一對一評審,我稱之為Single Review,就是項目owner提交代碼之後,讓reviewer在空閑的時候幫忙評審代碼,並且寫出批註,owner收到批註後,進行修改或者回復。但註意這裏的reviewer並不是只有技術主管或架構師之類的才能做,代碼質量監管僅僅靠架構師是不夠的,需要所有經驗豐富或有專長的同學參與其中。

那Single Review與Review Meeting根本上哪些不同呢?

一、Review Meeting

  • 優點:
    • 團隊內新技術/新觀點的交流Meeting、項目開發思路、解決方案討論,偏頭腦風暴式;
    • 各類項目都適合進行;
  • 缺點:
    • 依賴於主持者(項目Owner)的素質、時間成本高(為會議上所有人時間的總和);
    • 集體評審的代碼行數有限;

二、Single Review

  • 優點:
    • 更偏重與具體的代碼評審,人員分散參與,評審代碼行數有保證;
    • 時間自由,Reviewer什麽時候進行評審時間可自控;
  • 缺點:
    • 流程稍復雜,只適用於重要項目或核心模塊;


以前我們團隊每周只進行 Review Meeting,從會議產出和面談反饋來看,確實有一些的作用。但也不可否認的是,其中是有些弊端的,例如Meeting時評審的代碼量很有限,且一些細節問題不容易暴露等等,但這卻又是項目質量管理的重點。

那怎麽辦呢,後來也引入了Single Review,采用Review Meeting與Single Review相結合的模式。
即每次代碼提交後,針對代碼的變更進行Single Review,然後每周進行一次Review Meeting。

談如何做好代碼審查?