如何進(jìn)行高效的代碼審查?(如何進(jìn)行高效的代碼審查)
【CSDN 編者按】這篇文章詳細(xì)討論了如何進(jìn)行高效的代碼審查,包括作者和審查者應(yīng)遵循的指導(dǎo)原則。文章強(qiáng)調(diào)了尊重審查者的時(shí)間,自我審查代碼,將大的更改列表分解為小的、邏輯上的單元,自動(dòng)化簡(jiǎn)單的任務(wù),限制代碼更改的范圍,優(yōu)雅地接受批評(píng),最小化審查回合之間的延遲,明確地溝通響應(yīng),不忘記文檔等。同時(shí),審查者也需要驗(yàn)證代碼是否必要、設(shè)計(jì)得當(dāng),是否易讀、清晰,注釋是否解釋了“為什么”而不是“做什么”,代碼是否過(guò)于復(fù)雜,是否遵循風(fēng)格指南,是否經(jīng)過(guò)充分的測(cè)試和文檔記錄等,對(duì)代碼審查實(shí)戰(zhàn)具有極大的參考價(jià)值。
原文鏈接:https://addyosmani.com/blog/code-reviews/
未經(jīng)允許,禁止轉(zhuǎn)載!
作者 | Addy Osmani 譯者 | 明明如月
責(zé)編 | 夏萌
出品 | CSDN(ID:CSDNnews)
代碼審查是作者和審查者共同學(xué)習(xí)、分享知識(shí)并提升軟件質(zhì)量的有效途徑。它是我們走向卓越的一條必經(jīng)之路。以下是有助于讓作者和審查者以更高效、更建設(shè)性的方式來(lái)進(jìn)行代碼審查的一些建議。
尊重審查者的時(shí)間
在高效的代碼審查過(guò)程中,尊重審查者的時(shí)間至關(guān)重要。
這里有一些面向作者的建議:
對(duì)自己的代碼進(jìn)行自我審查
在將代碼提交審查之前,你應(yīng)該先自己檢查一遍代碼。找出拼寫(xiě)錯(cuò)誤、邏輯錯(cuò)誤以及需要改進(jìn)的地方。這樣的初步審查可以幫助你在審查者介入之前就發(fā)現(xiàn)并改正一些小問(wèn)題。
將大的變更拆分成小的變更
審查小而可管理的代碼塊比審查大塊的代碼更為容易、更為高效。通過(guò)將修改內(nèi)容分解為更小、邏輯清晰的部分,這樣可以讓審查過(guò)程更順暢,也可以減輕審查者的壓力。
自動(dòng)化簡(jiǎn)單的任務(wù)
盡可能利用現(xiàn)有工具來(lái)自動(dòng)化如 linting (一個(gè)代碼檢查過(guò)程,用于查找源代碼中的錯(cuò)誤并標(biāo)記潛在的錯(cuò)誤)和格式化的任務(wù)。這樣,你可以節(jié)省審查者的時(shí)間,并確保你的代碼符合團(tuán)隊(duì)的標(biāo)準(zhǔn),無(wú)需人工干預(yù)。這種方式通常需要在團(tuán)隊(duì)或項(xiàng)目層面預(yù)先進(jìn)行協(xié)調(diào)。
縮小變更的范圍
你的代碼變更應(yīng)該盡可能地具體和緊湊。包含無(wú)關(guān)的變更會(huì)讓審查者難以理解,增大漏過(guò)錯(cuò)誤的機(jī)會(huì)。
積極接受批評(píng)
你應(yīng)對(duì)建設(shè)性的批評(píng)保持開(kāi)放的態(tài)度,并視其為學(xué)習(xí)的機(jī)會(huì)。每個(gè)人都會(huì)犯錯(cuò)誤,我們可以借助代碼審查從錯(cuò)誤中學(xué)習(xí)。
減少審查回合之間的延遲
及時(shí)回應(yīng)審查評(píng)論可以幫助保持審查流程的連續(xù)性,減少每次審查所花費(fèi)的時(shí)間。
主動(dòng)尋求缺失的信息
如果你對(duì)某件事情感到不確定,應(yīng)該主動(dòng)進(jìn)行積極的對(duì)話,以便讓作者或?qū)忛喺叩玫礁嗟男畔⒒蚪忉?。建設(shè)性的對(duì)話可以讓作者和審查者都有所收獲。
清晰地傳達(dá)反饋
始終要清晰地傳達(dá)你的改動(dòng)。即使你已經(jīng)根據(jù)審查者的建議進(jìn)行了修改,也應(yīng)明確地告知對(duì)方。
不要忘記編寫(xiě)文檔
良好的文檔和代碼本身同樣重要。文檔提供了上下文,解釋了代碼為何以及如何工作,這使得其他人更容易理解你的代碼。同樣,對(duì)于其他期望的項(xiàng)目部分,如測(cè)試,也應(yīng)編寫(xiě)相應(yīng)的文檔。
審查者的職責(zé):驗(yàn)證代碼是否…
必需且設(shè)計(jì)合理
在審查代碼時(shí),你需要驗(yàn)證代碼是否真正必要,以及是否可以與現(xiàn)有的代碼庫(kù)兼容。所有的代碼部分都應(yīng)該能與系統(tǒng)的其他部分順暢地交互,共同提升系統(tǒng)的整體功能。
易于閱讀且目標(biāo)明確
代碼應(yīng)清晰易懂,目標(biāo)明確,這不僅對(duì)最終用戶(hù)有益,對(duì)未來(lái)的維護(hù)者也是如此。
注釋以“為什么”為主,而非“做了什么”
注釋?xiě)?yīng)解釋代碼存在的理由,而非它在做什么。遵循這個(gè)原則有助于理解代碼背后的思想和設(shè)計(jì)。
盡量避免編寫(xiě)過(guò)于復(fù)雜的代碼
復(fù)雜的代碼更難維護(hù),更容易出錯(cuò)。因此,代碼應(yīng)該盡可能地簡(jiǎn)潔,同時(shí)又能實(shí)現(xiàn)所需的功能。
遵循樣式指南(Style Guide)
代碼應(yīng)遵循團(tuán)隊(duì)的編程樣式指南。所有主要的樣式修改應(yīng)該與主要的變更列表分開(kāi)進(jìn)行。
充分測(cè)試且配有詳細(xì)的文檔說(shuō)明
代碼應(yīng)配有適當(dāng)?shù)臏y(cè)試,并且有詳盡的文檔描述。這種做法有助于保持代碼的完整性,并幫助其他人更好地理解它。
保證代碼審查的建設(shè)性
評(píng)論要針對(duì)代碼,而非開(kāi)發(fā)者。評(píng)價(jià)編程技能不應(yīng)作為代碼審查的環(huán)節(jié)。應(yīng)避免輕率或含糊的評(píng)論,反之,評(píng)論應(yīng)清晰、具體,并適當(dāng)?shù)亟o出積極反饋。盡可能避免過(guò)度苛求細(xì)節(jié),讓自動(dòng)化的樣式檢查來(lái)處理微小問(wèn)題。
標(biāo)準(zhǔn)很多,需要抓重點(diǎn)
在審查代碼的過(guò)程中,需要考慮的關(guān)鍵標(biāo)準(zhǔn)包括:代碼是否滿(mǎn)足需求、邏輯是否正確和安全、性能、健壯性和可觀察性如何、是否存在不必要的復(fù)雜性、API 和內(nèi)部結(jié)構(gòu)是否清晰以及是否引入了破壞性的變更。
總的來(lái)說(shuō),代碼審查應(yīng)當(dāng)是尊重的、有建設(shè)性的,并且聚焦的。作者和審查者在保證代碼質(zhì)量以及確保其長(zhǎng)期可維護(hù)性方面都扮演著關(guān)鍵角色。記住要保持開(kāi)放的心態(tài),并始終致力于提升自我。祝你審查愉快!
你在代碼審查實(shí)踐過(guò)程中還有其他經(jīng)驗(yàn)嗎?歡迎在評(píng)論區(qū)分享你的觀點(diǎn)和建議。