Code Review: 超越“審、查、評”的代碼回顧

jopen 9年前發布 | 11K 次閱讀 Code Review

Code Review: 超越“審、查、評”的代碼回顧

文/-伍斌 

Code Review 應該是軟件開發團隊“共同學習、識別模式和每日持續”的過程,而不是帶有“審、查、評”等令人感到緊張氣氛的過程。

Code Review 的目的,是團隊成員聚在一起共同學習,而不是相互“挑錯”。在相互挑錯的場合里,人的內心會本能地封閉起來,來抗拒那些針對自己的批評意見。相互挑錯所造 成的緊張氣氛,會讓程序員對 Code Review 望而卻步,從而情緒低落,這會讓 Code Review 的效果大打折扣。而人們常用的“代碼評審”或“代碼走查”這些 Code Review 的稱謂中所出現的“審、查、評”等字眼,會誘發“挑錯”的氣氛,所以我覺得還是把 Code Review 稱為“代碼回顧”好一些。如果大家放棄“挑錯”,來“共同學習”,那么在代碼回顧里要學習什么呢?

代碼回顧的學習重點,是團隊成員共同識別模式。這里的模式指的是程序員編寫代碼的習慣,包括“好模式”和“反模式”。像富有表達力的類名、單一 職責的方法、良好的格式縮進等等,都是“好模式”。而像那些令人迷惑的縮寫、幾百行的一個類文件、負責的 if-else 嵌套等等,都是“反模式”。團隊成員通過閱讀最近編寫的測試代碼和生產代碼,來一起識別“好模式”和“反模式”,既是團隊成員之間相互學習的過程,也是團 隊整體達成編寫整潔代碼共識的過程。

既然代碼回顧的學習重點是識別代碼編寫的好模式和反模式,那么代碼的作者就不是重點。在代碼回顧的過程中,完全可以不提誰是代碼的作者,而只提“好模式”和“反模式”,這樣能讓作者放松心態,更好地接受合理的建議。

既然代碼回顧的學習重點是識別代碼編寫的好模式和反模式,那么在代碼回顧中發現的 bug 也不是代碼回顧活動的重點。老虎也有打盹兒的時候,誰不犯錯兒呢?好模式和反模式,其實就是編程的好習慣和壞習慣。代碼回顧應該重在識別編程習慣,而不是找 bug。

另外需要注意的是,一些高手在代碼回顧時,即使代碼本身已經符合整潔代碼的要求,他們也會不自覺地提出自己的不同寫法,甚至會提出另一種全新的 設計。高手們提出這些看法,雖然很有價值,但都不是代碼回顧所關注的。高手們可以在代碼回顧會后,私下再找作者溝通,這樣能令代碼回顧會議更專注和高效。

代碼回顧的形式,應該是每日持續進行的。因為只有這樣,才能持續改進團隊的代碼編寫水平。要想能讓代碼回顧每日持續下去,一方面要像上面講的那 樣,不“審、查、評”,不針對作者去找 bug,來去除“挑錯”的緊張氣氛,營造“識別模式”來“共同學習”的環境,吸引團隊成員長期參與;另一方面,也需要將每日代碼回顧的時間控制在半小時以 內。因為代碼回顧的重點是識別模式,而模式就是習慣,習慣在很少的代碼中就能體現出來。看過一些代碼并識別出一些好習慣和壞習慣后,即使再看更多的代碼, 也不會識別出更多種類的習慣。基于這一點,每日的代碼回顧僅需要在半小時內大家一起看 200~300 行隨機抽取的當天編寫的代碼就夠了。

下面是我在客戶現場實踐上述“代碼回顧”的具體做法:

  1. 團隊7~8 位程序員,下班前半小時聚在會議室里,在一位主持人的引導下做代碼回顧;
  2. 主持人問:“咱們今天回顧哪段新寫的代碼?”一位志愿者在投影儀上調出今天編寫的一段代碼的新舊對比圖;
  3. 主持人說:“我們知道,如果代碼編寫得好,那么不是作者的人就能在沒有作者幫助的情況下讀懂。我希望一位不是這段代碼作者的志愿者,來為大家解釋一下這段代碼是做什么的。”一位非作者的志愿者上來逐行解釋代碼,并回答大家的疑問。
  4. 主持人等代碼解釋完后,問大家:“這段代碼大家還有看不懂的地方嗎?”如果有問題,包括作者在內的參會者都可以回答問題,但大家都不提誰是作者。
  5. 大家都看懂代碼后,主持人問:“大家說說這段代碼有沒有好的編寫模式咱們可以繼續發揚?”最初幾次代碼回顧,好的模式很少。但是即使這樣,也一定 要找出一些好模式,比如“縮進很好”,“花括號的位置放得很好”,諸如此類。以后幾次代碼回顧,要盡量找那些被改正過來的曾經的反模式,比如“這段代碼用 到了方法提取,且命名富有表達力,改掉了昨天’長方法’的反模式”。只識別反模式,不識別好模式,會讓代碼回顧退化到令人生畏的代碼審查,打掉大家長期堅 持的積極性。
  6. 提完了好模式,主持人問:“大家說說這段代碼有沒有可以改進的反模式?”大家開始提反模式,注意不要提誰是作者。
  7. 主持人在整個過程中注意計時,快到半小時的時候,可以這樣結束代碼回顧:“今天時間也快到了,代碼回顧的重點在識別模式,而不是看全部的代碼。希望大家繼續發揚今天識別到的好模式,另外在明天代碼回顧時,把今天識別到的反模式改進為好模式。”

把 Code Review 稱作“代碼回顧”吧,而不要稱作令人緊張的“代碼評審”或“代碼走查”,把它打造成軟件開發團隊“共同學習、識別模式和每日持續”的過程,來有效提升團隊代碼內在質量。

注:本文參考了 Shawn Wildermuth 在 Pluralsight.com 上的培訓視頻 Lessons from Real World .NET Code Reviews

內容來源:ThoughtWorks 洞見

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!