什么是代碼審查?
代碼審查是確保錯誤和錯誤在進(jìn)入生產(chǎn)環(huán)境之前被捕獲和修復(fù)的過程贱枣。這通常需要開發(fā)人員的參與,他們沒有直接參與實施正在審查的代碼的特定部分杭煎。代碼審查是更大的質(zhì)量保證過程的一部分恩够,以確保最終產(chǎn)品完全符合預(yù)期羡铲。
除了檢查源代碼的錯誤之外,代碼審查是檢查代碼庫中是否存在最佳實踐和[反模式的好方法]
為什么代碼審查很重要也切?
人們經(jīng)常對各種各樣的事情有不同的看法扑媚,尤其是在代碼方面雷恃,這完全可以!但是倒槐,當(dāng)涉及到生產(chǎn)應(yīng)用程序中使用的代碼庫時,您需要確保團(tuán)隊中的所有開發(fā)人員在命名策略或架構(gòu)模式方面使用相同的語言导犹。
為什么這很重要唱凯?想象一下谎痢,A 和 B兩個開發(fā)人員一起編寫應(yīng)用程序。A 喜歡使用全局單例字符串(也稱為[Singleton 模式] )進(jìn)行狀態(tài)管理节猿,而 B 更喜歡使用[State 模式] 票从。他們在應(yīng)用程序的不同部分工作,將他們的更改直接提交到共享存儲庫峰鄙。
然后愛麗絲休假幾周離開項目浸间,現(xiàn)在鮑勃必須修復(fù)她實現(xiàn)的功能中的錯誤。他看到全局單例字符串吟榴,困惑地將其更改為狀態(tài)模式實現(xiàn)魁蒜,就像他之前實現(xiàn)的所有功能一樣。
不幸的是吩翻,這樣做需要兩倍的時間來修復(fù)錯誤兜看,因此 B 很快變得惱火和失望。
如果他們從一開始就實施代碼審查流程狭瞎,A 和 B就會更快地識別出風(fēng)格上的差異细移。他們需要的是一個對雙方都有意義的協(xié)作工作流程。
**代碼審查應(yīng)該涵蓋哪些內(nèi)容熊锭? **
讓我們來看看成功的代碼審查應(yīng)該涵蓋哪些內(nèi)容以及審查者應(yīng)該密切關(guān)注代碼的哪些元素的基本輪廓弧轧。
在執(zhí)行代碼審查時,審查代碼的人應(yīng)該關(guān)注以下幾點(diǎn):
- 代碼風(fēng)格
- 可讀性
- 圖案
- 建筑學(xué)
無代碼審查的影響
為什么代碼審查如此重要碗殷?如果沒有代碼審查或代碼審查過多會發(fā)生什么精绎?
**1. 可能引入高風(fēng)險錯誤。 **
代碼審查主要用于查找代碼中的錯誤锌妻。如果代碼審查太少捺典,或者根本沒有代碼審查,一些錯誤很可能會在不被注意的情況下傳遞到生產(chǎn)中从祝。錯誤可能會導(dǎo)致低風(fēng)險(例如錯誤的 UI)或高風(fēng)險(例如安全漏洞)。如果沒有代碼審查引谜,團(tuán)隊幾乎沒有工具來預(yù)測和評估此類風(fēng)險牍陌。
**2. 不一致的代碼庫。 **
就像 A和 B 的例子一樣员咽,人們傾向于喜歡不同的模式和代碼風(fēng)格毒涧,并且可能使用不同的方法來管理狀態(tài)。方法的差異可能會減慢進(jìn)一步的開發(fā)和代碼支持贝室。每次你需要實現(xiàn)新的東西或修復(fù)一個錯誤時契讲,開發(fā)人員都必須花時間和精力去學(xué)習(xí)一個新的過程,從而進(jìn)一步減慢這個過程滑频。
3. 總線因素捡偏。
[總線因素] 是指與團(tuán)隊成員之間不共享信息和能力相關(guān)的風(fēng)險度量。
因此峡迷,如果只有一個人知道項目的特定部分是如何工作的——編寫它的人——并且該人離開了項目银伟,你可能需要執(zhí)行另一次代碼審查你虹,甚至一起重寫代碼。
太多的代碼審查
當(dāng)涉及到過多的代碼審查時彤避,相關(guān)的風(fēng)險很少傅物,但也有一些缺點(diǎn),可以這么說琉预。進(jìn)行大量代碼審查會導(dǎo)致生產(chǎn)延遲董饰,并可能導(dǎo)致開發(fā)人員過分關(guān)注滿足代碼審查,而不是實現(xiàn)高級業(yè)務(wù)目標(biāo)圆米。
歸根結(jié)底,找到黃金中位數(shù)很重要榨咐。如果您必須優(yōu)先考慮更快的代碼生產(chǎn),請評估與限制代碼審查相關(guān)的風(fēng)險齿坷。
代碼審查清單
代碼審查首先是一個溝通過程数焊。和其他任何人一樣,參與其中的每個人都應(yīng)該感到受到尊重佩耳,因為這個過程是高效的。因此干厚,要遵循一些簡單的規(guī)則,使您的代碼審查有用且美觀蛮瞄,同時還提供有用的反饋。
如果您是執(zhí)行審查的人芹助,請考慮以下代碼審查清單:
**1. 解釋你的意見。 **
在指出錯誤時状土,添加一些解釋伺糠,說明為什么您認(rèn)為這應(yīng)該被視為錯誤。這會讓你聽起來很自信退盯,也會幫助代碼的作者在未來不再犯類似的錯誤泻肯。
另一方面灶挟,可能是你錯了。解釋您來自哪里將有助于鼓勵討論以在意見有任何差異時找到最佳解決方案稚铣。
2. 包括示例墅垮。
有時,很難理解諸如“根據(jù)指南進(jìn)行更改”或“使用 X 模式”之類的消息算色。對你來說可能很明顯的事情對其他人來說可能是一個完整的謎語。
給出一個簡短的例子峡钓,說明你認(rèn)為最終結(jié)果應(yīng)該是什么樣子,以幫助作者理解你的想法能岩。
3. 指出具體問題萧福。
“我不知道這段代碼有什么問題,但你可以做得更好”并不是很有幫助鲫忍。確切地告訴代碼的作者是什么導(dǎo)致了問題。是內(nèi)存管理嗎煌寇?是代碼風(fēng)格嗎?
確保提供有用的詳細(xì)信息,尤其是在解決方案需要作者進(jìn)一步調(diào)查的情況下腻脏。大多數(shù)時候,當(dāng)代碼沒有以令人滿意的狀態(tài)提供時永品,更好的解決方案不會突然出現(xiàn)在審閱者的腦海中。要求作者進(jìn)一步調(diào)查是可以的钾麸,但你應(yīng)該提供一些方向。
代碼審查技巧
人們在合作時工作效率更高饭尝。“兩個頭比一個頭好钥平,”對吧?這正是為什么涉瘾,作為審稿人,您應(yīng)該嘗試聽起來友好的原因负敏。保持合作的語氣有助于團(tuán)隊專注于解決手頭的問題,而不是升級沖突其做。
以下是一些關(guān)于語氣的代碼審查技巧:
- 避免責(zé)備彤叉。
- 不要說:“你做了壞事”;說:“這樣做不好秽浇,這就是為什么……” 畢竟,誰編寫了錯誤的代碼并不重要审残。重要的是這段代碼是否得到修復(fù)。所以專注于評論代碼而不是開發(fā)人員搅轿。
- 代碼審查不是性能評估富玷。
- 簡單地告訴某人他們不夠好并不能幫助他們變得更好。將代碼審查視為異步結(jié)對編程過程的一部分赎懦。你不會告訴你的結(jié)對編程伙伴他們在編碼方面很爛,是嗎励两?相反,你幫助他們糾正錯誤当悔。這種方法也適用于代碼審查踢代。
- 要有同理心胳挎。
- 代碼審查評論充滿批評可能會讓人不知所措,即使批評寫得盡可能友好串远。當(dāng)你看到好的代碼時儿惫,表現(xiàn)出一些同理心和贊美!它可以走很長的路肾请。當(dāng)開發(fā)人員花費(fèi)時間和精力為團(tuán)隊和產(chǎn)品做一些有價值的事情時,值得注意的是铛铁!
- 對進(jìn)一步討論持開放態(tài)度。
- 每個代碼審查評論都應(yīng)該是可討論的括眠。您可以主動聯(lián)系參與該流程的任何人以詳細(xì)說明此事或確保您的團(tuán)隊知道如何與您聯(lián)系倍权。一個及時的電話甚至幾條消息都可以節(jié)省大量時間、減少誤解和痛苦薄声。
誰應(yīng)該進(jìn)行代碼審查?
代碼審查過程中的主要問題之一是誰應(yīng)該進(jìn)行審查德频?基本上,有兩種選擇:
- 一名指定人員(通常是高級開發(fā)人員或團(tuán)隊負(fù)責(zé)人)為團(tuán)隊中的每個人執(zhí)行代碼審查壹置。
- 團(tuán)隊中的每個人都可以進(jìn)行代碼審查表谊。