大多數程序員都知道而且相信code review(代碼審查)的重要性,但並必定都能很好的執行這一過程,作好code review也須要遵循必定的原則、流程和規範。html
咱們團隊的code review實踐也並非一路順風,兩年前剛開始的時候,形式很粗糙,就是一堆人對着代碼品頭論足。致使的結果要麼是陷入爭論,reviewer說這裏寫得很差,author(本文中用author這個單詞來指代被評審者)辯論說其實沒問題;要麼只關注一些無傷大雅的細節,發現不了更爲嚴重的問題(好比設計的問題)。試了幾回,逐漸感受流於形式,後來也就不了了之了。程序員
若是發現一個廣爲推薦的工具不太好用,那麼除了懷疑這個工具適不適合以外,更應該想一想使用姿式是否正確。因而花了些實踐來學習code review的知識,並與其餘團隊交流,在實踐中逐漸造成了一套行之有效的方法。本文記錄對code review的一些認識與思考算法
本文地址:http://www.javashuo.com/article/p-vvvitypt-ku.html安全
咱們從一個需求開發的完整生命週期來看,大約會包含如下過程:函數
從上屬流程能夠看出,代碼寫完了會有專業的測試同事來進行全方位的測試,那麼爲何還要code review呢?其次,合格的程序員理論上都會review本身的代碼,還有沒有必要請同事來review呢?工具
一個bug,可能在代碼review的時候被發現;也可能在測試的時候被發現;最壞的狀況下,被用戶發現,固然,此時極可能給用戶、產品帶來損失。越早發現問題,受影響的人員越少,修復成本就越小。想一想前幾天淘寶的彈窗bug,若是能經過review發現,能拯救多少人的績效。性能
開發人員有時也有一個誤區,以爲本身完成「代碼開發」這一步就萬事大吉了,測試的事情就應交給QA去執行。但不少時候,QA更多從功能角度去驗證代碼,有時候黑箱測試也很難覆蓋到所有狀況,好比異常、安全性問題、版本依賴。何況如今不少公司都逐漸去掉專門的Test,開發得本身測試,但思惟定勢致使很難發現本身的問題,對本身代碼的review也是如此。另外,知道本身的代碼也被人「拿着放大鏡仔細觀察」,天然寫代碼的時候也認真一些。單元測試
另外,從上述流程能夠看出:學習
在咱們的實踐中,對於複雜的系統,會要求現先設計review。而對於簡單的、或者開發比較有把握的功能,則是將設計review與代碼review合併。本文討論的code review其實就是後者:既關注設計,又關注核心代碼。測試
code review的首要目標是:找出代碼中的缺陷,保證代碼質量。其次,經過review也能相互學習,提升團隊總體水平,並且特別有利於新人快速融入團隊,保持與團隊風格一致。最後,保證每一個核心功能有多個同事瞭解,下降風險。
從其核心目標咱們就能夠看出code review的第一原則:對事不對人。這一點須要reviewer、author達成共識。code review不是批鬥大會,reviewer、author並無高低之分。
對於reviewer而言,參與的首要目的在於協助發現問題,所以
我沒有看懂這段代碼的邏輯
而不是
你這段代碼有問題吧
這段代碼是否是可能出問題
而不是
你又寫出bug來了
對於author,應當把review看成一次學習成長的機會 -- 畢竟平時又有誰來給你免費建議和指導呢?所以,不要一開始就是防護的姿態,即便reviewer有所誤解也不用臉紅脖子粗的去爭論。
要真正讓author放鬆,達到和諧review的效果,我的以爲還要注意如下幾點:
code review 並不簡單是一堆人一塊兒看代碼,要讓code review的效果最大化,整個流程是須要認真組織的:
review前
這裏須要注意的是,與會人員越少越好,無關的同事最好不要參加review。若是與會者對相關的功能不感興趣,那麼就存粹是在浪費時間,這也是不少人不喜歡code review的緣由。
review中
review的過程大約是:
review中須要注意:
reviewer內容依次是:
上面也提到,code review自己是個高強度的活動,所以容易漏掉一些關鍵點點,所以不妨作一個review list,對照這個list去考察代碼。list保證了code review的質量下限,且不影響與會者發揮主觀能動性,發現其餘問題。
此外,也須要避免在沒有明確規範的問題下過多爭執。達到一樣的效果,A方法能夠,B方法也能夠,若是團隊沒有約束用哪一種方法,那麼就不要在code review的時候討論。
review後
review會議結束並不意味這個review這個活動結束,由於還有待解決的問題,所以應該藉助工具跟蹤review發現的問題,指明問題的修復者、問題的驗收人、問題的驗收時間。當一次review所關聯的全部問題都獲得修復以後,review活動纔算結束。
如何才能code review有效且高效,總結如下幾點:
最重要的事,是經過幾回組織良好的實踐讓你們看到code review確實是有價值的,有所收穫才願意持續付出。