代碼審查

什么是代碼審查?

代碼審查是確保錯誤和錯誤在進(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)行審查德频?基本上,有兩種選擇:

  1. 一名指定人員(通常是高級開發(fā)人員或團(tuán)隊負(fù)責(zé)人)為團(tuán)隊中的每個人執(zhí)行代碼審查壹置。
  2. 團(tuán)隊中的每個人都可以進(jìn)行代碼審查表谊。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铃肯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌押逼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挑格,死亡現(xiàn)場離奇詭異,居然都是意外死亡漂彤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門立润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媳板,“玉大人,你說我怎么就攤上這事蛉幸。” “怎么了奕纫?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隙笆。 經(jīng)常有香客問我又固,道長,這世上最難降的妖魔是什么仰冠? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辆沦,結(jié)果婚禮上识虚,老公的妹妹穿的比我還像新娘。我一直安慰自己担锤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布铭腕。 她就那樣靜靜地躺著,像睡著了一般累舷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上被盈,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音袜瞬,去河邊找鬼尝盼。 笑死,一個胖子當(dāng)著我的面吹牛盾沫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赴精,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼一忱!你這毒婦竟也來了谭确?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤逐哈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后禀梳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡算途,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年嘴瓤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廓脆。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜀涨,到底是詐尸還是另有隱情,我是刑警寧澤厚柳,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站别垮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碳想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一逊移、第九天 我趴在偏房一處隱蔽的房頂上張望龙填。 院中可真熱鬧胳泉,春花似錦扇商、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涤姊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間思喊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岳服,地道東北人希俩。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像颜武,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳞上,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容