如何進行高效的代碼評審

???????? 代碼評審有很多用途,最常見的是在代碼發(fā)布之前檢查缺陷,除此之外,代碼評審還可以用來傳播知識、保證質(zhì)量。最簡單的代碼評審是在變更提交之前對代碼進行快速瀏覽,以批準(zhǔn)分支合并;最詳細(xì)的代碼評審,可能包括配對、逐行評審,以及多輪評審和反饋。

???????? 如果你評審的代碼短小、且有清晰的描述,那恭喜你有個好的開始;即便如此,剛開始時,很多人還是會覺得無從下手。這篇文章主要介紹如何在團隊中開展代碼評審,相信對剛剛接觸此項工作的同學(xué)會有幫助。

???????? 一、拆分

如果需要評審的代碼量太大(成百上千行),需要先拆分成容易處理的多個部分。如果代碼不好拆分,或者拆分后代碼量依然很大,就需要跟原作者一起工作。這有點兒類似于結(jié)對開發(fā),作者和評審者仿佛在道路兩側(cè)并肩前行,作者介紹代碼,評審者提出問題;當(dāng)穿行過整個代碼后,在代碼行中批注出當(dāng)時討論的問題和結(jié)論。

???????? 二、執(zhí)行評審

???????? 1、進行多輪評審

在評審過程中要記住所有需要檢查的事項很困難,頻繁切換評審語境也會帶來問題。比如,你正專注于代碼可讀性評審時,可能就遺漏了安全性和性能方面的問題。好的處理方式是代碼評審做多輪,每輪只針對一個主題,這個主題結(jié)束后,就提交評審報告,再開始下一個主題。評審檢查項的順序應(yīng)該從大到小,從一般到特殊;比如說,如果整個類(方法)都需要重構(gòu),那再去提修改變量命名的建議就沒什么意義。

必須毫不猶豫的進行多論代碼評審,并在此過程中不斷擴充評審范圍。

???????? 2、評審項

???????? (1)需求滿足程度。

? ? ? ? ? 代碼滿足需求沒有?

? ? ? ? ? UI實現(xiàn)跟設(shè)計是否一致?

? ? ? ? ? 變化是否在允許范圍內(nèi)?

???????? (2)架構(gòu)和設(shè)計

? ? ? ? ? ? 功能是如何實現(xiàn)的,能否從代碼中比較清晰的識別出設(shè)計?

? ? ? ? ? ? 設(shè)計是否遵從一貫的準(zhǔn)則,如果沒有,新的變化是否有意義?

? ? ? ? ? ? 是否足夠簡潔,還是進行了過度設(shè)計?

? ? ? ? ? ? 是否支持?jǐn)U展,是通用的還是專用的,是否過早進行了抽象?

? ? ? ? ? ?如果明天新來一個同學(xué),從代碼中能理解設(shè)計不?

???????? (3)副作用

? ? ? ? ? ? 對于復(fù)雜的應(yīng)用來說,看似無害的改動可能會影響核心功能。

? ? ? ? ? ? 代碼會不會給其他模塊帶來不可預(yù)料的后果?

? ? ? ? ? ? 如果一個方法被修改了,是否所有的調(diào)用者都進行了更新?

? ? ? ? ? ? 增加的外在依賴是否經(jīng)過評估?

???????? (4)測試覆蓋

? ? ? ? ? ? 進行測試了么?

? ? ? ? ? ? 測試腳本未來會不起作用么?

? ? ? ? ? ? 測試了正確的方法么?

? ? ? ? ? ? 測試架構(gòu)是合適的么?

? ? ? ? ? ? 邊緣測試做了么?

???????? (5)性能

? ? ? ? ? ?是否會有性能瓶頸?

? ? ? ? ? ?做了哪些查詢,是否比需要拿了更多的數(shù)據(jù)?

? ? ? ? ? ?這些代碼會不會對其他模塊的性能產(chǎn)生影響?

???????? (6)可讀性和編碼風(fēng)格

? ? ? ? ? 不用作者解釋,你能讀懂代碼么?

? ? ? ? ? ?沒有作者的幫助,你能調(diào)試和修改代碼么?

? ? ? ? ? 變量的用途是否能從名字上看出來?方法和類呢?

? ? ? ?(7)日志記錄

? ? ? ? ?如果沒有良好的日志,幾乎不可能正確地調(diào)試服務(wù)器代碼。是否所有東西都正確地記錄或追蹤?

? ? ? ?(8)異常處理

? ? ? ? ?后端異常是如何處理的;它們是如何與用戶溝通的;反饋是否在可能情況下激活?

???????? 三、致力于傳遞價值

???????? 所有的代碼評審都為了傳遞價值,用來幫助團隊提高交付質(zhì)量,而不是陷入細(xì)節(jié)的爭論。評審過程中要注意阻止代碼提交的分寸,如果有錯誤,明確不可提交;如果需要重構(gòu),則跟作者溝通時間,看當(dāng)前重構(gòu)還是留待以后。不要幻想完美主義,完美是不存在的,只要代碼沒有錯誤且比前一版本更好,就應(yīng)該通過評審。

???????? (1)要有幫助

???????? 代碼評審的目標(biāo)不是為了阻止缺陷,那是測試要做的工作。代碼評審是團隊在代碼庫中學(xué)習(xí)的機會,也是提高代碼質(zhì)量的機會。堅持進行有效的代碼評審,每個人都會從中收獲良多。代碼評審中最有效的傳授經(jīng)驗的方式,就是寫下詳細(xì)的評論信息,必要時鏈接到有助于理解的文章。不要僅僅指出問題,應(yīng)該說明為什么有問題,如何改進問題。如果有更高效的查詢方法,應(yīng)該在備注中介紹這種方法,而不僅僅指出問題。????????

? ? ? ?(2)要人性化

???????? 代碼評審的核心是要向作者反饋問題,這可能會是個艱難的工作。團隊中的每個人都希望盡力做到最好,因此反饋問題的方式要特別謹(jǐn)慎,要注意方式方法。不要忘記在評審中對好的代碼進行充分肯定。

???????? 四、最佳實踐

???????? 明白代碼評審時的目標(biāo)(檢查項)

???????? 在評審之前完成構(gòu)建和單元測試工作

???????? 一次評審不要超過60分鐘

???????? 一次評審的代碼量不要超過400行

???????? 在反饋中給出具體的解決辦法而不是只提示問題

???????? 在團隊中傳遞代碼評審的目標(biāo)和期望

???????? 在代碼評審的過程中要包含團隊中的每一個人

???????? 培養(yǎng)積極的文化

???????? 使用自動化工具提高效率

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容