
Code Reviews 是工程項(xiàng)目中非常重要的一環(huán)。然而,某種情況下這事是非常繁雜的,尤其是當(dāng) Code Reviewer 們持有著自己的態(tài)度或定見時(shí)。如果 Code Review 的姿勢不對,它很可能讓程序猿們精疲力竭、士氣低落,不必要地拖慢了很多事情的進(jìn)度,有時(shí)候它的破壞能力會超出想象。提高人效是至關(guān)重要的。一名優(yōu)秀的 Code Reviewer 要能做到在提高項(xiàng)目代碼質(zhì)量、可讀性的同時(shí),進(jìn)一步提高團(tuán)隊(duì)人效。這是軟件工程中至關(guān)重要的一項(xiàng)技能。本文將介紹一些對你行而有效的 Code Review 的方法和態(tài)度。
Reviewing Code 并不是 Writing Code
如果這篇文章只能說一條準(zhǔn)則的話,那會是:Code Review 的目地不是讓整個(gè)項(xiàng)目的代碼看上去都像是你寫的。Code Review 作用的是讓你能對項(xiàng)目的大方向有所把控,同時(shí)確保項(xiàng)目的質(zhì)量級別,并且——也許是最重要的——它是Code Reviewer 和 Code Writer(甚至團(tuán)隊(duì)中的其他人) 對項(xiàng)目進(jìn)展?fàn)顩r最好的溝通媒介。不要只是為了讓項(xiàng)目代碼符合你的風(fēng)格,而迫使 Code Writer 更改他們的代碼。給出建議是好的;給出代碼書寫規(guī)范也是好的;但有時(shí)候?qū)τ谄渌绦騿T寫出與你風(fēng)格不是很一致的代碼時(shí),你也要有一定的寬容度。
多多使用代碼工具
在 CI / CD 時(shí)使用現(xiàn)代化的代碼工具如 Linters 和 Code Formatters (例如 Yapf 之于 Python 和 Prettier 之于 JS) 對代碼風(fēng)格、語法錯(cuò)誤或格式錯(cuò)誤進(jìn)行自動化檢測和捕獲。以上的幾點(diǎn) Code Reviewer 完全不需要去關(guān)注,因?yàn)榇a工具能出色完成這些任務(wù)。
此種模式不僅僅是提高效率上的勝利,更是開發(fā)文化上的一種勝利!代碼風(fēng)格經(jīng)常是各方爭論的源頭。而代碼風(fēng)格指導(dǎo)卻會常會過時(shí),同時(shí) Code Reviewer 們因?yàn)榻?jīng)驗(yàn)、視角和關(guān)注點(diǎn)的不同,他們對代碼風(fēng)格的判斷經(jīng)常也不一致。所以,用代碼工具能解決這些沖突 。
不要讓細(xì)節(jié)拖后腿
如果你要求被 review 人修改代碼的原因是些細(xì)節(jié)或次要的代碼風(fēng)格問題,這是很不可取的。關(guān)注細(xì)節(jié)很重要,對產(chǎn)出的高要求并讓事情變得更好同樣重要,你確實(shí)應(yīng)該關(guān)注這些。但是你絕不應(yīng)該讓這些細(xì)節(jié)拖慢了整個(gè)項(xiàng)目的進(jìn)度。對這些細(xì)節(jié)問題給出批注,并通過這些 PR(Pull Request)。請相信同事們的自律程度,他們會在 Merge 前對這些細(xì)節(jié)作出正確的修改,或者他們對為什么要這么做已有足夠的思考。如果有的同事頻繁地犯這種細(xì)節(jié)錯(cuò)誤,那確實(shí)是他有問題,你則需要找他談?wù)劻?,或者在必要時(shí),走一些正式反饋流程。
放下鍵盤,當(dāng)面談?wù)?/h2>
盡量避免在 PR 時(shí)進(jìn)行長篇大論地討論,更要避免在 PR 過程中發(fā)生爭執(zhí)。如果你不能與 Reviewer 盡快達(dá)成一致,那么不要花太多時(shí)間思考你 PR 的下一則回復(fù),花5分鐘去找 Reviewer 聊聊,這總會比文字討論更有效。同時(shí)還要記得將交談結(jié)果備注到 PR 上。
值得注意的是,長篇幅的 PR 討論有時(shí)適合在做出大幅度的系統(tǒng)更改時(shí),用這些 PR 討論將更改內(nèi)容記錄下來,以便相關(guān)人員了解。
注:這類 PR 討論應(yīng)該是有意而為之的
建立信任
Code Review 不過的根本原因偶爾會出自不信任。如果彼此缺少了信任,那么代碼的好壞便不再重要。尤其是當(dāng) Code Writer 在試圖更改別人的代碼時(shí)。
信任不會馬上建立,這需要一些時(shí)間。沒有什么比切實(shí)踐行優(yōu)秀工程師的素養(yǎng)更容易建立信任的了:寫出高質(zhì)量的代碼、寫出易于管理的 PR、寫出簡練的 PR 摘要、寫出很棒的測試計(jì)劃并嚴(yán)格執(zhí)行它們。如果你言行一致,別人會很快信任你,他們會很快通過你的 PR 并且認(rèn)真讀你的反饋。如此一來,多事上你會很順利。
找到榜樣
學(xué)習(xí) Review Code 最有效的方式是找到擅長這方面的人并虛心向他們學(xué)習(xí)。這就像品味一樣,需要時(shí)間的沉淀。那些最優(yōu)秀的 Reviewer 會追求卓越,并且自始至終關(guān)注最重要和最突出部分上的差異,并且從不會無謂地拖慢你的進(jìn)度。這些都是你應(yīng)該學(xué)習(xí)的。