主頁 > 軟體工程 > 為什么要code review

為什么要code review

2023-04-16 08:10:23 軟體工程

1. 簡介

本文將介紹 Code Review的相關內容,包含為什么要Code Review,以及Code Review主要review哪些部分的內容,之后講述如何才能形成一套比較好的Code Review規則和流程,后續講述了Code review中一些可以遵守的比較好的規則,最后講述了如何才能讓Code review流程跑起來,

本文為最近了解code review相關內容的總結,有問題/有建議可以在評論區幫忙指出,感謝!!!

2. 為什么要code review

代碼審查(Code Review)是現代軟體開發團隊中非常重要的一環,因為它可以帶來以下幾個方面的好處:

  1. 提高代碼質量: 通過代碼審查,開發團隊可以及時發現和修復代碼中的問題,包括代碼中的錯誤、潛在的安全漏洞、缺陷和性能問題等,從而提高代碼的質量,
  2. 減少維護成本: 通過及時發現和修復問題,代碼審查可以降低后續維護成本,因為修復問題的成本通常比在后期修復更低,
  3. 加強知識共享和團隊協作: 代碼審查可以幫助團隊成員了解專案中其他成員的作業,從而促進知識共享和團隊協作,提高團隊整體的開發能力,
  4. 提高編碼規范和標準的遵守: 通過代碼審查,可以促進團隊成員遵守編碼規范和標準,統一團隊的代碼風格和代碼質量要求,提高代碼可讀性和可維護性,
  5. 促進開發者的技能提升和成長:代碼審查可以幫助開發者了解專案中的技術細節和最佳實踐,從而促進開發者的技能提升和成長,

總之,代碼審查可以幫助開發團隊提高代碼質量和開發效率,降低維護成本,提高團隊協作和開發者技能,從而在軟體開發專案中發揮重要作用,

3.review哪些部分的內容呢

Code Review整個流程中,比較重要的一個節點,是對代碼進行Review,然后指出代碼中可能存在的問題,具體主要關注哪些代碼問題,應該是每個團隊,在實踐中總結出適合自己的一套規范,這里大概說明一些通用的Code Review可能需要關注的內容,

3.1 代碼結構

  1. 代碼的組織結構:代碼應該按照一定的組織結構進行撰寫,例如按照功能模塊進行組織、按照層次結構進行組織等等,在審查代碼結構時,應該關注代碼的組織結構是否清晰、是否符合設計原則等方面,
  2. 模塊化和可重用性:代碼應該具有一定的模塊化和可重用性,以便于代碼的復用和維護,在審查代碼結構時,應該關注代碼是否具有可重用的模塊、是否具有良好的介面設計等方面,
  3. 代碼的層次結構:代碼應該按照一定的層次結構進行撰寫,例如分為界面層、業務邏輯層、資料訪問層等等,在審查代碼結構時,應該關注代碼的層次結構是否清晰、是否具有良好的模塊劃分等方面,

3.2 代碼邏輯

代碼邏輯Review主要 包括條件分支、回圈結構、例外處理、錯誤處理等方面的實作是否合理,

  1. 條件分支的檢查, 判斷條件是否覆寫了所有可能的情況,是否有重復的判斷條件是否有不必要的嵌套,
  2. 回圈結構的檢查, 檢查回圈是否能夠正常終止,是否存在死回圈,是否有更簡潔的回圈方式,
  3. 例外處理的檢查, 是否對所有的錯誤進行正確的處理,是否提供合適的錯誤提示,是否能夠記錄錯誤日志等,

3.3 代碼的可讀性和可維護性

Review代碼時,需要關注代碼的可讀性和可維護性,包括代碼的命名、注釋、縮進、代碼段的長度、函式和方法的引數和回傳值等方面,

  1. 命名應該清晰,簡潔,準確,代碼中的變數、函式、類等命名應該具有清晰、簡潔、準確的特點,而不是簡單的字母或數字,且應該使用一致的命名方式,避免混淆,
  2. 注釋應該清晰、準確地描述代碼的含義和作用,不應該重復代碼,也不應該存在無用的注釋,注釋應該保持最新狀態,以便后續維護,
  3. 代碼段的長度合適,:通常情況下,代碼段的長度應該保持在一個比較合理的范圍內,以保證代碼的可讀性,一些通用的建議是,每個函式或方法的長度應該控制在 100 行以內,
  4. 函式和方法的引數和回傳值規范, 函式和方法的引數應該盡量少,入參和出參較多的情況下,可以考慮使用DTO來封裝,函式和方法的回傳值應該盡可能明確,避免使用不必要的回傳值或無意義的回傳值,
  5. 避免使用魔法數字或魔法字串,

3.4 代碼的可靠性

  1. 入參合法性檢查, 是否對輸入引數進行了合法性檢查,避免出現意外的輸入錯誤,
  2. 單元測驗檢查, 是否進行了足夠的單元測驗,并且能夠覆寫各種邊界情況,

3.5 代碼的可測驗性

  1. 可測驗檢查, 代碼是否容易撰寫測驗用例,測驗用例是否易于理解和維護,
  2. 單元覆寫率檢查, 測驗覆寫率是否足夠,是否存在測驗漏洞或者未考慮到的場景,

4. 制定cr的規則和流程是什么呢

  1. 確定團隊的目標和需求

  2. 確定code review的規則和流程

    • code review的時間安排,確定審查時機,以及時間安排
    • 確定每次審查的代碼量
    • 確定審查的內容: 定義一份可用的checklist,確保審查者可以根據標準和指導進行 review,
    • 確定用于進行 code review 的工具和環境
    • 確定審查后需要進行修改的代碼如何重新提交,如何跟蹤意見的處理程序,
  3. 開始實施

  4. 收集和分析資料

    • 收集資料

      • 收集問題型別和解決方式的資料,例如代碼問題的型別、解決方式、處理時間等

        1. 記錄代碼問題,如代碼可讀性等內容
        2. 記錄問題的處理時間
        3. 對問題進行分類
      • 收集code review的時間安排/代碼量

        1. 收集每次code review的代碼量
        2. 收集開始code review的時機
        3. 每次code review耗時,包含開發和reviewer的耗時
        4. 對專案發布是否有影響
    • 資料分析

      • 根據資料記錄結果,獲取到code review經常出現的問題

        1. 添加代碼靜態掃描規則,掃描出通用問題,減少code review問題
        2. 進行對應的分享,完成團隊內的知識共享
      • 對code review的耗時進行分析,來改進流程

        1. 不同需求型別,每次code review的代碼量是否合適
        2. code review開始的時機是否合適
        3. code review是否對專案發布造成影響,在排期程序中,是否增加對code review的考慮
        4. 對reviewer的作業安排是否受到影響,有的話,如何解決
    • 效果分析

      1. 代碼質量的提升: 通過比較一段時間下來,發現的問題數量是否減少
  5. 規則和流程的優化

5. 可以遵守的比較好的code review的準則

  1. 每個提交的代碼必須經過代碼審查,以確保代碼的質量和可維護性,
  2. 在代碼審查之前,開發人員應該對自己的代碼進行一次自審查,確保代碼沒有明顯的錯誤和問題,
  3. 按照確定的規則進行審查:遵循指定的審查標準和流程,以確保一致性和準確性,
  4. 代碼審查應該專注于發現代碼中的問題和缺陷,而不是對開發人員進行評價或指責,
  5. 不要強制修改:審查人員應該將自己的建議視為建議而非命令,并與開發人員進行協商,
  6. 在代碼審查中,開發人員應該積極參與討論,提出自己的觀點和想法,并接受他人的反饋和建議,
  7. 代碼審查應該在合適的時間進行,以避免影響開發進度和專案交付時間,
  8. 代碼審查結果應該被記錄下來,并及時修復和追蹤問題,確保問題得到解決和修復,

6. 如何讓code review跑起來

6.1 通過checklist來做code review

通過checkList來做code review似乎是一個比較好的方式,下面是開發者和reviewer的一個checkList的示例,

6.1.1 開發者的checklist

  1. 需求評審需要邀請reviewer參加
  2. 代碼被審查前,自己先review一遍
  3. 需要提前和reviewer協調好代碼review的時間
  4. 每次合并代碼前都需要通過代碼審查
  5. 代碼有必要做單元測驗的位置,已完成單元測驗的覆寫,單元測驗已通過

6.1.2 reviewer的checkList

  1. 需要review的代碼,需要參加需求評審/測驗用例評審
  2. 需要預先留出code review的時間,排期時確定
  3. 代碼review根據審查標準執行
    • 每次合并代碼是否通過代碼審查
    • 代碼結構是否符合規范
    • 代碼邏輯是否存在問題
    • 代碼是否具有一定的可讀性
    • 代碼單元測驗用例是否覆寫充分
  4. 代碼review需要記錄問題型別,方便統計資料

6.2 限制 Code Review 時間

限制單次code review的時間,能夠避免待review的代碼量過多,如果一次待review的代碼量過多,此時整個流程很容易流于形式,因此,這里可以根據不同團隊的實際情況,定義好單次code review的耗時,限制在一個時間范圍內,

6.3 代碼靜態掃描規則的建立

對于一些常見的代碼review的問題,可以制定代碼掃描規則,在code review之前,先執行一次代碼掃描,識別出其中比較常見的問題,減少代碼review的時間,

這樣對于也減輕了reviewer的負擔,也利于開發者自行發現問題,自行解決,避免時間的浪費,

6.4 學習和分享

團隊中的成員可以定期分享 Code Review 的經驗和技巧,以便更好地提高審查的效率和質量,
有這樣一個分享,那么code review這個程序可以作為一個輸入,能夠增加大家code review的參與度,

6.5 反饋和改進

code review的流程,在執行程序中,大概率會發現其中并不合理的地方,或者有待改進的地方,此時應該每隔1個月/2個月,來回顧整個流程,發現其中不合理的地方,讓code review更好得進行下去,

同時,在code review程序中,也有收集一些code review的資料,可以對其進行分析,發現其中不合理的地方,針對不合理的地方進行改進,

7. 建立code review的流程的實踐程序

7.1 確定團隊目標

首先,團隊建立code reviwe的目標和需求,為什么要code review,有目標了,后續才能評估code review是否達到了目的,

7.2 時間節點的確定

首先需要確定code review的時間節點的安排,是開發完成后,提測前開始code review還是其他時間節點呢,code review的時間安排是否包含到專案排期中,

reviewer是否得提前知會,在何時知會? 其是否要參加需求評審以及測驗用例評審等專案相關需求的評審會? 以及reviewer在code review程序的所耗工時要怎么統計呢,是不是在專案排期時,也需要考慮到code review的耗時,然后耗時大致的排期,是否設定為開發時間的10%,還是其他,是否先執行,后續再根據實際情況調整呢?

7.3 review平臺以及review形式的確定

上面code review的時間安排已經確定好了,之后便需要開始code review,這里需要團隊內確定code review的工具,是使用開源工具,如reviewBoard,亦或者是直接gitlab平臺提交mr的時候順便review呢,這個也需要確定,

當平臺確定好之后,我們需要確定review的形式,是開發和reviewer一起review,reviwer一邊看一遍提問,亦或者是reviewer先整體看一遍,然后有疑問再提出,然后開發再當面說明,或者是其他形式,這個也是需要確定的,

7.4 review代碼量的確定

之后比較重要的點,便是每次review的代碼量的問題,我們可以想象,如果每次需要review的幾千行的代碼,此時往往review便會流于形式,其實并不會起到太大的作用,這里應該由團隊內部協商好code review的形式,是單次少量,多次review; 還是專案開發完成之后,再整體review; 或者是兩者的結合,一些專案整體開發完成之后再review,一些專案采取單次少量,多次review的形式,亦或者是其他,

7.5 review內容的確定

接著,就要開始代碼review,這里就需要確定review主要review哪些內容,這個示例可以參考第三點所說的,review哪些部分的內容,不過還是需要團隊自行確定,不過這里有個前置依賴,團隊需要有一套統一的代碼規范,如命名規范等,這里假設已經確定review的內容包含代碼的可讀性,如果沒有一套統一的規范,review流程是比較難執行下去的,

7.6 資料收集方式確定

到這里,我們可以算是完成了一次code review的流程,但是一個流程如果只有執行,沒有回顧,那是不太合適的,所以對于code review的流程是需要定時回顧的,當進行回顧時,需要有資料來做支撐的,才能識別出整體流程是否存在不合理的地方,那資料從哪里來呢?那只能從每次代碼review的程序中獲取,

所以,這里也需要定義每次review流程中,需要記錄下來一些內容,方便后續回顧,具體記錄的內容,可以參考第四點制定cr的規則和流程是什么呢 中第四點的內容,然后資料記錄的方式也可以統一一下,比如使用飛書檔案或者多維表格,亦或者是其他形式來存盤,方便后續回顧使用,

7.7 code review如何更好得執行

當上面的內容都確定好之后,在我看來,一個code review的流程其實就已經完成了,這個時候便可以考慮如何讓code review整個流程跑得更順暢,這里可以參考第六點如何讓code review跑起來中的內容,比如使用checkList來減輕心智負擔,其次可以建立靜態掃描規則集,能夠減少code review的作業量等,

7.8 定時回顧

然后再定時回顧整個code review的流程,發現其中不合理的地方,再對其進行改進,

8. 總結

該檔案是一篇關于Code Review的輸出,介紹了Code Review的規則和流程需要包含的內容,以及具體需要Review的內容,此外,還描述了一些在Review程序中需要遵守的原則,如尊重,建議等,以保持Review的積極性和有效性,
最后,列舉了一些方式,如定期進行Review、使用靜態代碼掃描工具、checklist來進行code review,進行學習和分享,能夠讓Code Review更好地執行下去,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/550220.html

標籤:其他

上一篇:如何快速而優雅的解決問題(提問的智慧簡略版)

下一篇:為什么我的代碼庫那么大?聊聊Git使用壞習慣

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more