代碼審查應(yīng)該關(guān)注什么

本文是“代碼審查關(guān)注什么”系列文章的第一篇(共六篇)夯缺。

我們一起來討論下代碼審查强岸。如果你花幾秒鐘時間搜索一下代碼審查的信息峦树,你會發(fā)現(xiàn)很多文章都在講為什么代碼審查是件好事(比如Atwood 的這篇博客)。

你也會發(fā)現(xiàn)很多關(guān)于如何使用代碼審查工具的文檔(比如我們自己的 Upsource)戚扳。

然而你很少會發(fā)現(xiàn)一些指南忧便,會告訴你作為代碼審查者在審查別人代碼時需要關(guān)注哪些東西。

之所以沒有權(quán)威的文章告訴你在代碼審查中需要關(guān)注哪些東西帽借,其原因可能是:有太多不同的事情需要關(guān)注珠增。并且超歌,像其他的需求(功能性的或者非功能性的)一樣,不同的團(tuán)隊對每個方面有不同的優(yōu)先級蒂教。

因為這是一個很大的主題巍举,本文的目的僅僅是列出大綱,用于說明作為代碼審查者在審查代碼時需要關(guān)注的東西凝垛。決定各個方面的優(yōu)先級并不斷的檢驗也是一個非常復(fù)雜的主題懊悯,本身就可以單獨寫出一篇文章。

當(dāng)你在審查其他人的代碼時梦皮,你在關(guān)注什么炭分?

不管你是通過像 Upsource 這樣的工具還是同事的講解來審查代碼,有一些東西是比較容易評判的届氢。比如:

  • 格式:空格和換行在哪里欠窒?他們使用的是 tab 還是空格?大括號怎么布局退子?
  • 風(fēng)格:變量/參數(shù)聲明為 final ?方法變量是在使用時再定義型将,還是在方法開始的地方定義寂祥?
  • 命名:字段、常量七兜、變量丸凭、參數(shù)、類的命名遵循標(biāo)準(zhǔn)了嗎腕铸?名稱有過于簡短嗎惜犀?
  • 代碼覆蓋率:這段代碼有寫測試代碼嗎?

檢查這些東西都是有意義的--你希望把不同代碼之間的切換最小化并且減少認(rèn)知負(fù)擔(dān)狠裹,所以你的代碼看起來越一致越好虽界。

然而,在你的團(tuán)隊中涛菠,使用人力檢查這些也許不是對時間和資源的最佳利用莉御,因為很多這樣的檢查都可以自動化進(jìn)行。有很多工具可以保證:你的代碼格式連貫一致俗冻,遵循命名標(biāo)準(zhǔn)和使用 final 關(guān)鍵字礁叔,并且可以發(fā)現(xiàn)一些簡單的編程錯誤導(dǎo)致的 bug。例如迄薄,你可以通過命令行使用 IntelliJ IDEA 的檢查琅关,所以你不必要求所有的團(tuán)隊成員都在他們的 IDE 中運(yùn)行檢查。

你應(yīng)該關(guān)注什么讥蔽?

人類真正擅長的是哪幾類事情涣易?什么是東西是我們在代碼審查中發(fā)現(xiàn)但是檢查工具發(fā)現(xiàn)不了的画机?

事實證明有很多事情。這當(dāng)然也不是一個詳盡的清單都毒,我們也不會在這里就某一項進(jìn)行詳細(xì)討論色罚。然而,你的團(tuán)隊?wèi)?yīng)該就代碼審查應(yīng)關(guān)注什么账劲,展開交流戳护,并且也許是你應(yīng)該關(guān)注的。

設(shè)計

  • 新的代碼怎么符合總體的架構(gòu)瀑焦?
  • 代碼遵循 SOLID原則腌且,領(lǐng)域驅(qū)動設(shè)計或者其他你的團(tuán)隊喜歡的設(shè)計風(fēng)格嗎?
  • 新的代碼中使用了什么設(shè)計模式榛瓮?這些設(shè)計模式合適嗎铺董?
  • 如果代碼庫有多種標(biāo)準(zhǔn)或者設(shè)計風(fēng)格,新的代碼和當(dāng)前流行的一致嗎禀晓?代碼是向正確的方向轉(zhuǎn)移精续,還是遵循將被淘汰的舊代碼?
  • 代碼是處在正確的位置粹懒?例如重付,如果代碼是和訂單相關(guān)的,它們是否處于 Order Services凫乖?
  • 新的代碼有復(fù)用現(xiàn)有的代碼中的一些東西嗎确垫?新的代碼有提供一些現(xiàn)有代碼可以復(fù)用的東西嗎?新的代碼有沒有引入重復(fù)帽芽?如果有删掀,應(yīng)該重構(gòu)成更加可復(fù)用的風(fēng)格,還是這個階段也可以接受导街?
  • 代碼是否過度工程化披泪?代碼有沒有創(chuàng)建現(xiàn)在并不需要的重用性?你的團(tuán)隊怎么根據(jù) YAGNI平衡考慮重用性菊匿?

可讀性和可維護(hù)性

  • 字段付呕、變量、參數(shù)跌捆、方法以及類的名稱是否真實反映它們所代表的事物徽职?
  • 我通過閱讀代碼能夠理解代碼在做什么事情嗎?
  • 我能理解測試代碼在做什么嗎佩厚?
  • 測試用例覆蓋了好的用例姆钉?測試用例覆蓋了正常場景和異常場景嗎?有沒有還沒考慮到的場景?
  • 異常情況的錯誤消息好理解嗎潮瓶?
  • 令人困惑的代碼段有沒有文檔描述陶冷、或者代碼注釋或者通過容易理解的測試用例覆蓋(根據(jù)團(tuán)隊喜好)?

功能性

  • 代碼是在做預(yù)期的事情嗎毯辅?如果有自動測試來保證代碼的正確性埂伦,測試代碼真的是按照商定的需求來測試的嗎?
  • 代碼看起來包含隱藏的 bug 嗎思恐?比如使用了錯誤的變量檢查沾谜,或者偶然使用 邏輯與 取代了 邏輯或

你有考慮過胀莹。基跑。。描焰?

  • 是否存在潛在的安全問題媳否?
  • 有沒有監(jiān)管的需求要滿足?
  • 對于自動化性能測試沒有覆蓋的區(qū)域荆秦,新的代碼是否引入了可以避免的性能問題篱竭,比如不必要的數(shù)據(jù)庫訪問或者遠(yuǎn)程服務(wù)訪問?
  • 作者需要創(chuàng)建公共文檔嗎步绸,或者需要修改已有的幫助文件嗎室抽?
  • 用戶交互信息有做過正確性檢查嗎?
  • 是否存在明顯的錯誤將導(dǎo)致生產(chǎn)終止靡努?代碼是否會偶然指向測試數(shù)據(jù)庫,或者是否存在硬編碼需要在真實服務(wù)中移除晓折?

敬請期待后續(xù)文章惑朦,我們將詳細(xì)討論這些主題。

本文譯自What to look for in a Code Review

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漓概,一起剝皮案震驚了整個濱河市漾月,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胃珍,老刑警劉巖梁肿,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異觅彰,居然都是意外死亡吩蔑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門填抬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烛芬,“玉大人,你說我怎么就攤上這事∽嘎Γ” “怎么了仆潮?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遣臼。 經(jīng)常有香客問我性置,道長,這世上最難降的妖魔是什么揍堰? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任鹏浅,我火速辦了婚禮,結(jié)果婚禮上个榕,老公的妹妹穿的比我還像新娘篡石。我一直安慰自己,他們只是感情好西采,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布凰萨。 她就那樣靜靜地躺著,像睡著了一般械馆。 火紅的嫁衣襯著肌膚如雪胖眷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天霹崎,我揣著相機(jī)與錄音珊搀,去河邊找鬼。 笑死尾菇,一個胖子當(dāng)著我的面吹牛境析,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播派诬,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼劳淆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了默赂?” 一聲冷哼從身側(cè)響起沛鸵,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缆八,沒想到半個月后曲掰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奈辰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年栏妖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冯挎。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡底哥,死狀恐怖咙鞍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情趾徽,我是刑警寧澤续滋,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站孵奶,受9級特大地震影響疲酌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜了袁,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一朗恳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧载绿,春花似錦粥诫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怕享,卻和暖如春执赡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背函筋。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工沙合, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跌帐。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓首懈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谨敛。 傳聞我的和親對象是個殘疾皇子猜拾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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

  • 在上一篇文章中我們討論了你在代碼審查中應(yīng)該關(guān)注的各種內(nèi)容。現(xiàn)在我們關(guān)注一個領(lǐng)域:在測試代碼中關(guān)注什么佣盒? 本文假設(shè):...
    唐先僧閱讀 2,292評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評論 25 707
  • 發(fā)現(xiàn)真實的人妖跟我想的還是不同
    丸子2017閱讀 212評論 0 0
  • 一輪皓月 兩袖清風(fēng) 獨佇柵欄,望明月之皎潔顽聂,思往昔之牽掛肥惭。 斟酒一杯,滿心天涯紊搪。
    蓬蒿居士李閱讀 258評論 6 7
  • 在上一篇筆記中我們知道了李笑來給“財富自由”下了一個簡潔蜜葱、準(zhǔn)確、正確的定義:不在為自己的基本生活必需而出售自己的時...
    white1314閱讀 240評論 0 0