???????? 代碼評審有很多用途宰译,最常見的是在代碼發(fā)布之前檢查缺陷檐蚜,除此之外,代碼評審還可以用來傳播知識沿侈、保證質(zhì)量闯第。最簡單的代碼評審是在變更提交之前對代碼進行快速瀏覽,以批準分支合并缀拭;最詳細的代碼評審咳短,可能包括配對填帽、逐行評審,以及多輪評審和反饋咙好。
???????? 如果你評審的代碼短小篡腌、且有清晰的描述,那恭喜你有個好的開始勾效;即便如此嘹悼,剛開始時,很多人還是會覺得無從下手层宫。這篇文章主要介紹如何在團隊中開展代碼評審杨伙,相信對剛剛接觸此項工作的同學(xué)會有幫助。
???????? 一萌腿、拆分
如果需要評審的代碼量太大(成百上千行)限匣,需要先拆分成容易處理的多個部分。如果代碼不好拆分毁菱,或者拆分后代碼量依然很大膛腐,就需要跟原作者一起工作。這有點兒類似于結(jié)對開發(fā)鼎俘,作者和評審者仿佛在道路兩側(cè)并肩前行哲身,作者介紹代碼,評審者提出問題贸伐;當穿行過整個代碼后勘天,在代碼行中批注出當時討論的問題和結(jié)論。
???????? 二捉邢、執(zhí)行評審
???????? 1脯丝、進行多輪評審
在評審過程中要記住所有需要檢查的事項很困難,頻繁切換評審語境也會帶來問題伏伐。比如宠进,你正專注于代碼可讀性評審時,可能就遺漏了安全性和性能方面的問題藐翎。好的處理方式是代碼評審做多輪材蹬,每輪只針對一個主題,這個主題結(jié)束后吝镣,就提交評審報告堤器,再開始下一個主題。評審檢查項的順序應(yīng)該從大到小末贾,從一般到特殊闸溃;比如說,如果整個類(方法)都需要重構(gòu),那再去提修改變量命名的建議就沒什么意義辉川。
必須毫不猶豫的進行多論代碼評審表蝙,并在此過程中不斷擴充評審范圍。
???????? 2乓旗、評審項
???????? (1)需求滿足程度府蛇。
? ? ? ? ? 代碼滿足需求沒有?
? ? ? ? ? UI實現(xiàn)跟設(shè)計是否一致寸齐?
? ? ? ? ? 變化是否在允許范圍內(nèi)?
???????? (2)架構(gòu)和設(shè)計
? ? ? ? ? ? 功能是如何實現(xiàn)的抄谐,能否從代碼中比較清晰的識別出設(shè)計渺鹦?
? ? ? ? ? ? 設(shè)計是否遵從一貫的準則,如果沒有蛹含,新的變化是否有意義毅厚?
? ? ? ? ? ? 是否足夠簡潔,還是進行了過度設(shè)計浦箱?
? ? ? ? ? ? 是否支持擴展吸耿,是通用的還是專用的,是否過早進行了抽象酷窥?
? ? ? ? ? ?如果明天新來一個同學(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ì)量登钥,而不是陷入細節(jié)的爭論。評審過程中要注意阻止代碼提交的分寸娶靡,如果有錯誤牧牢,明確不可提交;如果需要重構(gòu)姿锭,則跟作者溝通時間塔鳍,看當前重構(gòu)還是留待以后。不要幻想完美主義呻此,完美是不存在的轮纫,只要代碼沒有錯誤且比前一版本更好,就應(yīng)該通過評審焚鲜。
???????? (1)要有幫助
???????? 代碼評審的目標不是為了阻止缺陷蜡感,那是測試要做的工作。代碼評審是團隊在代碼庫中學(xué)習(xí)的機會恃泪,也是提高代碼質(zhì)量的機會郑兴。堅持進行有效的代碼評審,每個人都會從中收獲良多。代碼評審中最有效的傳授經(jīng)驗的方式,就是寫下詳細的評論信息示括,必要時鏈接到有助于理解的文章。不要僅僅指出問題却舀,應(yīng)該說明為什么有問題,如何改進問題锤灿。如果有更高效的查詢方法挽拔,應(yīng)該在備注中介紹這種方法,而不僅僅指出問題但校。????????
? ? ? ?(2)要人性化
???????? 代碼評審的核心是要向作者反饋問題螃诅,這可能會是個艱難的工作。團隊中的每個人都希望盡力做到最好,因此反饋問題的方式要特別謹慎术裸,要注意方式方法倘是。不要忘記在評審中對好的代碼進行充分肯定。
???????? 四袭艺、最佳實踐
???????? 明白代碼評審時的目標(檢查項)
???????? 在評審之前完成構(gòu)建和單元測試工作
???????? 一次評審不要超過60分鐘
???????? 一次評審的代碼量不要超過400行
???????? 在反饋中給出具體的解決辦法而不是只提示問題
???????? 在團隊中傳遞代碼評審的目標和期望
???????? 在代碼評審的過程中要包含團隊中的每一個人
???????? 培養(yǎng)積極的文化
???????? 使用自動化工具提高效率