Google 鼓勵的 13 條代碼審查標(biāo)準(zhǔn),建議收藏!
點擊上方藍(lán)色“程序猿DD”,選擇“設(shè)為星標(biāo)”
回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

作者 |?Rafiullah Hamedy
以下為譯文:
在本文中,我們將簡要介紹13條代碼審查標(biāo)準(zhǔn),希望能夠通過這些標(biāo)準(zhǔn)極大地幫助改善軟件的質(zhì)量,同時讓開發(fā)人員保持心情愉悅。
代碼審查是開發(fā)過程中的一個環(huán)節(jié),顧名思義,代碼審查需要一位或多位開發(fā)人員審查另一位開發(fā)人員(即代碼的作者)編寫的代碼,以確保:
代碼沒有任何錯誤,沒有bug,也沒有問題; 代碼符合質(zhì)量與樣式指南的要求和標(biāo)準(zhǔn); 代碼完成了所有預(yù)期功能; 合并代碼后,代碼庫仍然能夠正常運(yùn)行,且達(dá)到更好的狀態(tài)。
這就是為什么代碼審查是軟件開發(fā)的重要環(huán)節(jié)的原因。代碼審查者擔(dān)當(dāng)著把關(guān)者的職責(zé),負(fù)責(zé)決定這些代碼是否能夠成為代碼庫的一部分并進(jìn)入生產(chǎn)環(huán)境。
Google以其卓越的技術(shù)而聞名世界,他們擁有高效的代碼審查標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)突出了審查代碼時需要牢記的一些重點。關(guān)注公眾號Java技術(shù)?;貜?fù):GG規(guī)范,還能獲取一份完整的 Google 開發(fā)規(guī)范。
在Google,“代碼審查的主要目的是確保Google代碼庫內(nèi)整體的代碼運(yùn)行狀況能夠不斷提升?!?—— Google工程實踐文檔
以下是審查代碼時你需要牢記的一些重點。
代碼審查標(biāo)準(zhǔn):
這些代碼能夠提升系統(tǒng)整體的運(yùn)行狀況
每次代碼變更(拉取請求)都能夠提升系統(tǒng)整體的運(yùn)行狀況。重點在于,即便是很小的改進(jìn),合并代碼后都會提升軟件或代碼庫的運(yùn)行狀況。
快速審查代碼,并給出積極地響應(yīng)和反饋
首先也是最重要的一點,不可延誤代碼的合并。世上沒有完美的代碼。如果代碼可以提升系統(tǒng)的整體運(yùn)行狀況,則應(yīng)該立即交付這些代碼。
“關(guān)鍵在于,世上沒有完美的代碼,只有更好的代碼?!?—— Google工程實踐文檔
如果手頭沒有緊急任務(wù),那么請在代碼提交上來后立即進(jìn)行審查。響應(yīng)拉取請求的時間最長不得超過一個工作日。一天之內(nèi),應(yīng)針對一次拉取請求完成多輪的部分或完整的代碼審查。
在代碼審查的過程中開展教育和啟發(fā)
在代碼審查的過程中,應(yīng)盡可能通過共享知識和經(jīng)驗提供指導(dǎo)。
審查代碼應(yīng)遵循標(biāo)準(zhǔn)
請始終牢記,樣式指南、編程標(biāo)準(zhǔn)以及相關(guān)的文檔應(yīng)該作為代碼審查的絕對權(quán)威。例如,制表符與空格的使用應(yīng)保持一致,此時你可以引用編程約定。
如果你選用的是Java,那么以下文章可能會有所幫助,文中總結(jié)了大型科技公司Java編程的最佳實踐:《Java編程最佳實踐摘要》(https://rhamedy.medium.com/a-short-summary-of-java-coding-best-practices-31283d0167d3)
解決代碼審查沖突
解決代碼審查沖突時,應(yīng)遵循樣式指南以及編程標(biāo)準(zhǔn)中商定的最佳實踐,并征求其他擁有更多產(chǎn)品領(lǐng)域知識和經(jīng)驗的人的建議。

如果你的意見是可選或不怎么重要的,請在注釋中說明,然后由作者來決定是解決還是略過。
作為代碼審查者,在沒有樣式指南或編程標(biāo)準(zhǔn)的情況下,你至少可以建議此次代碼變更與其余代碼庫保持一致。
演示UI變更是代碼審查的一部分
如果代碼變更涉及用戶界面變化,則除了代碼審查外,還需要提供演示,確保界面符合預(yù)期且與界面設(shè)計一致。
對于前端代碼變更,你需要進(jìn)行演示,或確保代碼變更包括必要的UI自動化測試,以驗證添加或更新的功能。
確保代碼審查中包含了所有測試
除非遇到緊急情況,否則拉取請求應(yīng)包含所有必要的測試,例如單元測試、集成測試以及端到端測試等。
這里所說的緊急情況指的是,某個需要盡快修復(fù)的bug或安全漏洞,而測試可以等到以后再添加。在這種情況下,請確保創(chuàng)建了適當(dāng)?shù)钠弊C/問題,并確保有人負(fù)責(zé)在完成熱修復(fù)或部署后立即完成測試。

我們絕對不可以跳過測試。如果時間有限,某些目標(biāo)有無法實現(xiàn)的風(fēng)險,那么解決方案不是跳過測試,而是限定可交付成果的范圍。
不要為了代碼審查打斷手頭的工作
如果你正在專心致志地工作,那么請不要打斷自己,因為你需要花費(fèi)很長時間才能重新投入工作。換句話說,打斷專心工作的開發(fā)人員所付出的代價遠(yuǎn)遠(yuǎn)超過了讓開發(fā)人員等待代碼審查。你可以在休息(午餐或咖啡等)過后,進(jìn)行代碼審查。

大多數(shù)時候,整個代碼審查以及代碼的合并無法在一天內(nèi)完成。重要的是迅速給作者一些反饋。例如,雖然可能無法完成完整的審查,但你可以快速指出一些有待探討的地方。這可以極大地降低代碼審查期間的挫敗感。
審查所有代碼,不要做任何假設(shè)
你需要審查提交上來的每一行代碼。不要對人工編寫的類和方法做任何假設(shè),而且應(yīng)該確保你理解代碼在做什么。

確保你理解正在審核的代碼。如果不理解,則請作者澄清或提供代碼演示和解釋。如果你不具備審核部分代碼的資格,則請其他有資格的開發(fā)人員代為審查。關(guān)注公眾號Java技術(shù)?;貜?fù):GG規(guī)范,還能獲取一份完整的 Google 開發(fā)規(guī)范。
審查代碼時需要保持大局觀
從更廣闊的視野來看待代碼變更會更有幫助。例如,某個文件被修改,并添加了4行新代碼。請不要只看這4行代碼,你應(yīng)該考慮審查整個文件,并檢查新添加的內(nèi)容。它們是否會降低現(xiàn)有代碼的質(zhì)量?它們是否會導(dǎo)致現(xiàn)有功能成為重構(gòu)的候選對象?
如果不在函數(shù)/方法或類的背景下審查添加的代碼,則隨著時間的流逝,你將會得到一個面臨無法維護(hù)、糾纏不清、不易于測試等問題的類,而且這個類很難擴(kuò)展或重構(gòu)。
請記住,即便是微不足道的改進(jìn),隨著時間的推移,也可能導(dǎo)致產(chǎn)品出現(xiàn)缺陷,同樣,即便是輕微的代碼降級或技術(shù)負(fù)債也可能在日積月累下導(dǎo)致產(chǎn)品難以維護(hù)和擴(kuò)展。
在代碼審查期間認(rèn)同和鼓勵出色的工作
如果看到出色的代碼變更,請別忘了大力表揚(yáng)和鼓勵作者。代碼審查的目的不僅僅是發(fā)現(xiàn)錯誤,而且還應(yīng)該鼓勵和指導(dǎo)開發(fā)人員出色的工作。
在代碼審查期間應(yīng)保持謹(jǐn)慎、尊重、友善和思路清晰
在代碼審查期間,你應(yīng)該保持友善、思路清晰、有禮貌和尊重別人,這一點至關(guān)重要,同時也要給予作者清晰的反饋和積極的幫助。在審查代碼時,你需要做到對事不對人,即對代碼做出評論,而非開發(fā)人員。
詳細(xì)解釋代碼審查的意見,并注意尺度
每當(dāng)代碼審查意見提出替代方案或指出某些問題時,重要的是你需要解釋其中的原因,并根據(jù)個人的知識和經(jīng)驗提供示例,以幫助開發(fā)人員理解為何你的建議能夠提升代碼質(zhì)量。在建議修改或變更代碼時,你需要在如何指導(dǎo)作者修改代碼方面找到適當(dāng)?shù)钠胶?。例如,我更喜歡指導(dǎo)、解釋、提示或建議,而不是整個解決方案。
【往期推薦】
2020-12-10
2020-12-10
2020-12-09
2020-12-09
2020-12-08
2020-12-08
掃一掃,關(guān)注我
一起學(xué)習(xí),一起進(jìn)步
每周贈書,福利不斷
﹀
﹀
﹀
深度內(nèi)容
推薦加入

素質(zhì)二連,走一個
