代碼審查應該關注什麼之一
前言
是否經常聽過review代碼這個事情,那到底要review哪些呢?且看今日早讀文章,由@唐先僧翻譯分享。
正文從這開始~
本文只是其一
我們一起來討論下代碼審查。如果你花幾秒鐘時間搜索一下代碼審查的信息,你會發現很多文章都在講為什麼代碼審查是件好事(比如Atwood 的這篇博客)。
你也會發現很多關於如何使用代碼審查工具的文檔(比如我們自己的 Upsource)。
然而你很少會發現一些指南,會告訴你作為代碼審查者在審查別人代碼時需要關注哪些東西。
之所以沒有權威的文章告訴你在代碼審查中需要關注哪些東西,其原因可能是:有太多不同的事情需要關注。並且,像其他的需求(功能性的或者非功能性的)一樣,不同的團隊對每個方面有不同的優先順序。
因為這是一個很大的主題,本文的目的僅僅是列出大綱,用於說明作為代碼審查者在審查代碼時需要關注的東西。決定各個方面的優先順序並不斷的檢驗也是一個非常複雜的主題,本身就可以單獨寫出一篇文章。
當你在審查其他人的代碼時,你在關注什麼?
不管你是通過像 Upsource 這樣的工具還是同事的講解來審查代碼,有一些東西是比較容易評判的。比如:
格式:空格和換行在哪裡?他們使用的是 tab 還是空格?大括弧怎麼布局?
風格:變數/參數聲明為 final ?方法變數是在使用時再定義,還是在方法開始的地方定義?
命名:欄位、常量、變數、參數、類的命名遵循標準了嗎?名稱有過於簡短嗎?
代碼覆蓋率:這段代碼有寫測試代碼嗎?
檢查這些東西都是有意義的--你希望把不同代碼之間的切換最小化並且減少認知負擔,所以你的代碼看起來越一致越好。
然而,在你的團隊中,使用人力檢查這些也許不是對時間和資源的最佳利用,因為很多這樣的檢查都可以自動化進行。有很多工具可以保證:你的代碼格式連貫一致,遵循命名標準和使用 final 關鍵字,並且可以發現一些簡單的編程錯誤導致的 bug。例如,你可以通過命令行使用 IntelliJ IDEA 的檢查,所以你不必要求所有的團隊成員都在他們的 IDE 中運行檢查。
你應該關注什麼?
人類真正擅長的是哪幾類事情?什麼是東西是我們在代碼審查中發現但是檢查工具發現不了的?
事實證明有很多事情。這當然也不是一個詳盡的清單,我們也不會在這裡就某一項進行詳細討論。然而,你的團隊應該就代碼審查應關注什麼,展開交流,並且也許是你應該關注的。
設計
新的代碼怎麼符合總體的架構?
代碼遵循 SOLID原則,領域驅動設計或者其他你的團隊喜歡的設計風格嗎?
新的代碼中使用了什麼設計模式?這些設計模式合適嗎?
如果代碼庫有多種標準或者設計風格,新的代碼和當前流行的一致嗎?代碼是向正確的方向轉移,還是遵循將被淘汰的舊代碼?
代碼是處在正確的位置?例如,如果代碼是和訂單相關的,它們是否處於 Order Services?
新的代碼有復用現有的代碼中的一些東西嗎?新的代碼有提供一些現有代碼可以復用的東西嗎?新的代碼有沒有引入重複?如果有,應該重構成更加可復用的風格,還是這個階段也可以接受?
代碼是否過度工程化?代碼有沒有創建現在並不需要的重用性?你的團隊怎麼根據 YAGNI平衡考慮重用性?
可讀性和可維護性
欄位、變數、參數、方法以及類的名稱是否真實反映它們所代表的事物?
我通過閱讀代碼能夠理解代碼在做什麼事情嗎?
我能理解測試代碼在做什麼嗎?
測試用例覆蓋了好的用例?測試用例覆蓋了正常場景和異常場景嗎?有沒有還沒考慮到的場景?
異常情況的錯誤消息好理解嗎?
令人困惑的代碼段有沒有文檔描述、或者代碼注釋或者通過容易理解的測試用例覆蓋(根據團隊喜好)?
功能性
代碼是在做預期的事情嗎?如果有自動測試來保證代碼的正確性,測試代碼真的是按照商定的需求來測試的嗎?
代碼看起來包含隱藏的 bug 嗎?比如使用了錯誤的變數檢查,或者偶然使用 邏輯與 取代了 邏輯或。
你有考慮過。。。?
是否存在潛在的安全問題?
有沒有監管的需求要滿足?
對於自動化性能測試沒有覆蓋的區域,新的代碼是否引入了可以避免的性能問題,比如不必要的資料庫訪問或者遠程服務訪問?
作者需要創建公共文檔嗎,或者需要修改已有的幫助文件嗎?
用戶交互信息有做過正確性檢查嗎?
是否存在明顯的錯誤將導致生產終止?代碼是否會偶然指向測試資料庫,或者是否存在硬編碼需要在真實服務中移除?
最後,各項可持續關注。@唐先僧曾分享過:
你們團隊有做code Review的習慣嗎?有的話,一般都怎麼做呢?
關於本文
譯者:@唐先僧
譯文:http://www.jianshu.com/p/a0dffa53e4b8
作者:@Trisha Gee
原文:https://blog.jetbrains.com/upsource/2015/07/23/what-to-look-for-in-a-code-review/


※《前端架構設計》讀後感
※我理解的阿里無線前端「架構」
※【第942期】圖說 WebAssembly
※讀《前端架構設計》-前端架構概況
※Square 公司怎麼寫提交信息
TAG:前端早讀課 |
※關於代碼審查,那些你不曾關注的細節
※課改,我們該關注什麼
※宋喆庭審當場認罪,馬蓉是否會發聲成最大關注焦點
※挑顯示器還在問什麼品牌好?你更應該關注這些
※您關注的焦點都在這裡,小布關注你所關注!
※《大轟炸》除錢之外,你還關注了什麼?這段歷史才是你應該了解的
※蘋果發布會上,鞋頭們更應該關注這些細節
※那些讓你一臉懵逼的孕期檢查,你關注這三項就夠了
※新一屆發審委關注的十大熱點問題關鍵詞
※產檢中的哪些檢查,需要我們特別關注呢?
※網遊審批正式解凍,我關注的好像還要等
※孕期只知道關注孕酮,其實你更應該關注HCG
※我們為什麼應該關注美國這次中期選舉?
※想要學習多點總裁思維?那你應該關注他們了
※關注魅族、關注黃章,這三點你必須得了解
※介紹一下,婚前你最應該關注的一件事
※學習如何當老闆,建議你關注這些號
※同問題不同答案——陸紅教授邀您一同關注「漫談消化」系列節目
※孕晚期,准媽媽要特別「關注」這4件事,對你和胎兒都有好處!
※預防糖尿病併發症,一定要關注這些信號!