代碼審查最佳實踐
代碼審查是軟件開發過程中的必要步驟,既可以幫助被審查者提到代碼質量,又可以讓審查者加深對產品的理解。軟件架構師 Vlad Mihalcea 分享了自己的最佳實踐。
Vlad 認為,代碼審查不是測試。代碼審查是開發者與開發者之間的事情,它跟測試沒有關系。代碼審查要審查開發者是否最明晰的實現了任務需求。
你不必告訴審查者審查什么:正如你不必告訴測試者測試什么,你也不需要告訴你的同事審查什么。同事審查的魅力來自于你的同事從他自己的角度對當下任務設計和實施的審查。兩個人的智慧總是多于一個人的智慧的。
你需要及時檢查所有改變:任何地方都可能有 bug,你需要仔細尋找它們。你需要審視所有變化來獲得對整體的認識。
</blockquote>需求第一,Vlad 強調,需求是最重要的驅動力。
用戶是為了他的需求買單的。如果當下的改變不能滿足需求,你需要重新開啟這個議題。如果你發現了需要重構的代碼,你需要創建新的議題而不是重開啟現有議題。“單一職責原則”適用于任務,也適用于代碼。
</blockquote>Vlad 還建議采用一對多活動:如果你不確定自己是否理解修改代碼的意圖,可以讓別人也來進行審查,這樣更安全。同時,這是一種學習方式:代碼審查是一項很棒的學 習工具,特別是運行大項目時。理想狀態下你要對你項目的每個部分都很熟悉,但當項目很大時這不大現實,通過代碼審查你至少可以對復雜模塊有所了解。
由于存在很多的實踐方式,所以開發團隊經常搞不清楚它的最佳實踐是什么樣的,架構師 Lorinda Brandon 嘗試從多個方面來分析了正確的代碼審查時間應該重點考慮的幾個因素。
- 人員結構——在你的團隊中有多少同事擁有足夠的專業技能來擔當合格的代碼審查者?作者曾經和多個開發團隊溝通過,這些團隊都聲稱本身只有一個資深 的開發人員,如果讓他來負責所有的代碼審查工作,那么團隊的核心開發就無法開展了。作者也遇到過類似的情況。在一個小規模團隊里,資深的同事總是忙不過 來,因為核心的工作都在等著他做。
- 地理位置——你的團隊成員是如何分布的?他們是否是分散在世界各地還是坐在同一個敞亮的辦公室里? 代碼審查需要精力的專注和反饋,如果開發人員能夠面對面的溝通,那么審查工作會便于實施。而物理隔離的遠程團隊很難達到代碼審查的滿意結果。
- 所在領域——你所在的 IT 領域需要遵守怎樣的規則和約束呢?如果你在一個受到嚴格監管的行業,那么你必須遵循有關審計和報告的規則,這意味著你必須想辦法跟蹤代碼審查的頻率和質量。如果所在的領域把安全性作為重點,那么可能在代碼審查過程中要引入安全審計。
- 復雜性——你的代碼復雜性如何?在代碼審查時,需要多個不同專業技能的審查者嗎?例如,游戲開發可能會引入非常復雜的業務邏輯來處理文字交互和場景跟蹤,同時還需要特定的動畫處理和內存管理技術。在審查如此復雜的代碼時,應該引入多個審查者從不同角度來檢閱代碼的質量。
</ul>堅果云開發團隊曾經在“月光博客”上撰文分享高效代碼審查的十個經驗。
代碼審查首先要求團隊有良好的文化,同時謹慎的使用審查中問題的發現率作為考評標準:
團隊需要認識到代碼審查是為了提高整個團隊的能力,而不是針對個體設置的檢查“關卡”。“A的代碼有個 bug 被B發現,所以A能力不行,B能力更好”,這一類的陷阱很容易被擴散從而影響團隊內部的協作,因此需要避免。另外,代碼審查本身可以提高開發者的能力,讓 其從自身犯過的錯誤中學習,從他人的思路中學習。如果開發者對這個流程有抵觸或者反感,這個目的就達不到。
在代碼審查中如果發現問題,對于問題的發現者來說這是好事,應該予以鼓勵。但對于被發現者,我們不主張使用這個方式予以懲罰。軟件開發中 bug 在所難免,過度苛求本身有悖常理。更糟的是,如果造成參與者怕承擔責任,不愿意在審查中指出問題,代碼審查就沒有任何的價值和意義。
</blockquote>代碼審查需要帶著問題去做,并且讓原作者對發現的問題進行確認:
我們在每次代碼審查中,要求審查者利用自身的經驗先思考可能會碰到的問題,然后通過審查工作驗證這些問題是否已經解決。一個竅門是,從用戶可見的功 能出發,假設一個比較復雜的使用場景,在代碼閱讀中驗證這個使用場景是否能夠正確工作。使用這個技巧,可以讓審查者有代入感,真正的沉浸入代碼中,提高效 率。大家都知道看武俠小說不容易瞌睡,而看專業書容易瞌睡,原因就是武俠小說更容易產生代入感。有的研究建議每次樹立目標,控制單位時間內審核的代碼數 量。這個方法在我們的實踐中顯得很機械和流程化,不如上面的方法效果好。
如果在審查中發現問題,務必由原作者進行確認。這樣做有兩個目的:
- 確認問題確實存在,保證問題被解決
- 讓原作者了解問題和不足,幫助其成長
</ul>有些時候為了追求效率,有經驗的審查者更傾向于直接修改代碼乃至重構所有代碼,但這樣不利于提高團隊效率,并且會增加因為重構引入新 bug 的幾率,通常情況下我們不予鼓勵。
</blockquote>來自: InfoQ<span id="shareA4" class="fl"> </span>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!