發(fā)布于:2021-01-18 09:15:17
0
141
0
在我工作過的許多軟件商店里,代碼評審的話題總是引起很多爭論。經常有人問我對代碼評審的看法,我的回答可能會讓你大吃一驚。我不喜歡。為什么呢?讓我說得更具體一點,我不喜歡在工作完成之后進行代碼評審。
我確實喜歡在工作過程中不斷進行的代碼評審,這叫做成對編程。
配對編程=連續(xù)代碼審查?
是的,這正是我要說的
想想看,你真的能比成對編程提供更好、更誠實、更具交互性的代碼評審嗎?如果兩個開發(fā)人員共同開發(fā)代碼的一部分,那么在編寫代碼的過程中會對其進行檢查
我將轉移一點時間來討論代碼評審中發(fā)生的一些常見問題,然后我將討論成對編程如何解決這些問題
代碼評審問題
1.不說真話
在代碼評審中,沒有人說他們認為代碼有什么問題,而是挑選一些沒有冒犯性的小東西,比如沒有遵循的命名約定,這是沒有價值的
很多時候,代碼審查都被一種害怕侮辱正在審查的人的代碼的恐懼所支配。這種弱代碼審查沒有任何好處。我甚至可以說它加強了編寫壞代碼的實踐,因為壞代碼是橡皮圖章
2.自我
要想成功地進行代碼審查,每個人都必須在門口檢查自己的自我。這種情況很少發(fā)生。代碼是經過創(chuàng)造性設計的東西;沒有太多人能夠對自己的勞動進行批評,對自己的藝術更是少之又少
沒有謙虛和開放的精神,代碼評審就沒有任何價值,指出問題是一回事,解決問題是另一回事
3.對焦錯誤
代碼評審中最常見的錯誤之一是關注格式、編碼樣式或命名約定,這些主題根本不屬于代碼評審
工具可以自動格式化代碼,并靜態(tài)分析編碼樣式或命名約定的問題。讓人工審閱者審閱這些內容完全是浪費時間。
說真的,如果有人在代碼評審時,沒有對代碼運行自動代碼格式化程序,也沒有運行靜態(tài)分析工具,也沒有修復在那里發(fā)現的問題,不要太粗魯,只是善意地告訴他們,他們的代碼還沒有準備好進行評審
旁注:關于我們是否應該強制執(zhí)行代碼格式,或者強制執(zhí)行編碼樣式,或者強制執(zhí)行命名約定,經常有爭論。是的!對!對!一致性非常重要!代碼比書面代碼更容易閱讀,一致的代碼更容易閱讀。進行一次討論,將自動工具放在一起自動格式化代碼,并自動檢查需求
不要花幾個月的時間來編寫你的特殊編碼標準文檔。使用任何數量的靜態(tài)分析工具中的一些規(guī)則集,并開始強制執(zhí)行它們。將它們作為構建的一部分,使簽入因格式問題而失敗,使IDE在保存時自動格式化。決定花括號和空格的完美位置遠不如保持一致重要。只需選擇一些內容并強制執(zhí)行即可
代碼評審應該關注代碼的設計、結構和可理解性。代碼評審永遠不應該關注任何可以自動檢查或強制執(zhí)行的東西……永遠!
4.匆忙和不一致
團隊很少有時間或騰出時間進行代碼評審。如果他們這樣做了,代碼評審就不一致,而且不適用于所有代碼,這會導致代碼值丟失。如果你在一個周界周圍有一個巨大的圍欄,而在一個大洞里人們只能爬進去,那么圍欄就毫無價值了
如果代碼沒有經過深入的檢查,那么代碼檢查是沒有意義的。只需瀏覽代碼并在這里選擇幾個變量名就沒有好處了。如果你還沒有準備好完全沉浸在正在檢查的代碼中,并深入了解它到底在做什么,那就不用麻煩了
配對編程來進行救援
成對編程就像即時代碼評審一樣,它通過有一個共同的目標并在代碼中創(chuàng)建一個共同的所有權來解決許多問題
當您與團隊中的不同成員配對時,您可能會更誠實,更少自大,關注問題而不是慣例,并深入研究代碼
毫無疑問,我的首選操作方法是不進行代碼檢查,而是成對編程,每個監(jiān)控人員都致力于源代碼管理,如果發(fā)現問題,可以標記一些內容并進行討論
如果配對編程不是一個選項怎么辦?
好吧,試著做一個。配對編程是一個偉大的投資
但是,如果你不做配對編程,你絕對應該做代碼檢查。我可能會稱贊代碼評審中的一些問題,我提倡成對編程,但我們不要在這里含糊其辭
結對編程是進行連續(xù)或即時代碼評審的更好方法。不進行任何形式的代碼評審都是愚蠢的。
如果你有一個建筑團隊在建造你的房子或者你的2000萬美元的刮板,他們告訴你他們沒有對已經完成的工作進行工程審查,你可能會當場解雇那家建筑公司。建筑軟件的復雜程度比大多數實體建筑項目要高出好幾個層次。如果你稱自己為工程師,而不是定期對自己的工作進行審查,那么你只是一個玩“工程師”游戲的業(yè)余愛好者。
因此,如果您必須進行老式的代碼檢查,以下是一些我發(fā)現很有用的提示:
通過做一些練習來鼓勵人們誠實,每個人都會檢查一些不是您團隊中任何人編寫的代碼。鼓勵人們在檢查代碼時盡可能保持偏見。
設定您的期望值。代碼檢查不是審批流程,它們是一個改進過程。確保團隊意識到這一點。代碼評審是一個讓代碼變得更好、提高技能的地方。培養(yǎng)這種思維。
自動化所有挑剔的東西,設置編碼標準、格式標準和樣式標準。決定它們將結合在一起,或者讓你有經驗的人來做,但要做到,讓合規(guī)性成為非選擇性,并使之自動化。
制定一致的標準和實踐來進行代碼檢查。留出足夠的時間深入研究代碼。制定和實施代碼檢查時間和方式的標準。
以身作則。主動要求團隊成員查看代碼并告訴您如何改進代碼。詢問是否有這樣的問題可以做得更好。對反饋和改進表現出真正的興趣,這種態(tài)度就會流行起來。
作者介紹