1. 簡介
本文將介紹 Code Review的相關內容,包含為什么要Code Review,以及Code Review主要review哪些部分的內容,之后講述如何才能形成一套比較好的Code Review規則和流程,后續講述了Code review中一些可以遵守的比較好的規則,最后講述了如何才能讓Code review流程跑起來,
本文為最近了解code review相關內容的總結,有問題/有建議可以在評論區幫忙指出,感謝!!!
2. 為什么要code review
代碼審查(Code Review)是現代軟體開發團隊中非常重要的一環,因為它可以帶來以下幾個方面的好處:
- 提高代碼質量: 通過代碼審查,開發團隊可以及時發現和修復代碼中的問題,包括代碼中的錯誤、潛在的安全漏洞、缺陷和性能問題等,從而提高代碼的質量,
- 減少維護成本: 通過及時發現和修復問題,代碼審查可以降低后續維護成本,因為修復問題的成本通常比在后期修復更低,
- 加強知識共享和團隊協作: 代碼審查可以幫助團隊成員了解專案中其他成員的作業,從而促進知識共享和團隊協作,提高團隊整體的開發能力,
- 提高編碼規范和標準的遵守: 通過代碼審查,可以促進團隊成員遵守編碼規范和標準,統一團隊的代碼風格和代碼質量要求,提高代碼可讀性和可維護性,
- 促進開發者的技能提升和成長:代碼審查可以幫助開發者了解專案中的技術細節和最佳實踐,從而促進開發者的技能提升和成長,
總之,代碼審查可以幫助開發團隊提高代碼質量和開發效率,降低維護成本,提高團隊協作和開發者技能,從而在軟體開發專案中發揮重要作用,
3.review哪些部分的內容呢
Code Review整個流程中,比較重要的一個節點,是對代碼進行Review,然后指出代碼中可能存在的問題,具體主要關注哪些代碼問題,應該是每個團隊,在實踐中總結出適合自己的一套規范,這里大概說明一些通用的Code Review可能需要關注的內容,
3.1 代碼結構
- 代碼的組織結構:代碼應該按照一定的組織結構進行撰寫,例如按照功能模塊進行組織、按照層次結構進行組織等等,在審查代碼結構時,應該關注代碼的組織結構是否清晰、是否符合設計原則等方面,
- 模塊化和可重用性:代碼應該具有一定的模塊化和可重用性,以便于代碼的復用和維護,在審查代碼結構時,應該關注代碼是否具有可重用的模塊、是否具有良好的介面設計等方面,
- 代碼的層次結構:代碼應該按照一定的層次結構進行撰寫,例如分為界面層、業務邏輯層、資料訪問層等等,在審查代碼結構時,應該關注代碼的層次結構是否清晰、是否具有良好的模塊劃分等方面,
3.2 代碼邏輯
代碼邏輯Review主要 包括條件分支、回圈結構、例外處理、錯誤處理等方面的實作是否合理,
- 條件分支的檢查, 判斷條件是否覆寫了所有可能的情況,是否有重復的判斷條件是否有不必要的嵌套,
- 回圈結構的檢查, 檢查回圈是否能夠正常終止,是否存在死回圈,是否有更簡潔的回圈方式,
- 例外處理的檢查, 是否對所有的錯誤進行正確的處理,是否提供合適的錯誤提示,是否能夠記錄錯誤日志等,
3.3 代碼的可讀性和可維護性
Review代碼時,需要關注代碼的可讀性和可維護性,包括代碼的命名、注釋、縮進、代碼段的長度、函式和方法的引數和回傳值等方面,
- 命名應該清晰,簡潔,準確,代碼中的變數、函式、類等命名應該具有清晰、簡潔、準確的特點,而不是簡單的字母或數字,且應該使用一致的命名方式,避免混淆,
- 注釋應該清晰、準確地描述代碼的含義和作用,不應該重復代碼,也不應該存在無用的注釋,注釋應該保持最新狀態,以便后續維護,
- 代碼段的長度合適,:通常情況下,代碼段的長度應該保持在一個比較合理的范圍內,以保證代碼的可讀性,一些通用的建議是,每個函式或方法的長度應該控制在 100 行以內,
- 函式和方法的引數和回傳值規范, 函式和方法的引數應該盡量少,入參和出參較多的情況下,可以考慮使用DTO來封裝,函式和方法的回傳值應該盡可能明確,避免使用不必要的回傳值或無意義的回傳值,
- 避免使用魔法數字或魔法字串,
3.4 代碼的可靠性
- 入參合法性檢查, 是否對輸入引數進行了合法性檢查,避免出現意外的輸入錯誤,
- 單元測驗檢查, 是否進行了足夠的單元測驗,并且能夠覆寫各種邊界情況,
3.5 代碼的可測驗性
- 可測驗檢查, 代碼是否容易撰寫測驗用例,測驗用例是否易于理解和維護,
- 單元覆寫率檢查, 測驗覆寫率是否足夠,是否存在測驗漏洞或者未考慮到的場景,
4. 制定cr的規則和流程是什么呢
-
確定團隊的目標和需求
-
確定code review的規則和流程
- code review的時間安排,確定審查時機,以及時間安排
- 確定每次審查的代碼量
- 確定審查的內容: 定義一份可用的checklist,確保審查者可以根據標準和指導進行 review,
- 確定用于進行 code review 的工具和環境
- 確定審查后需要進行修改的代碼如何重新提交,如何跟蹤意見的處理程序,
-
開始實施
-
收集和分析資料
-
收集資料
-
收集問題型別和解決方式的資料,例如代碼問題的型別、解決方式、處理時間等
- 記錄代碼問題,如代碼可讀性等內容
- 記錄問題的處理時間
- 對問題進行分類
-
收集code review的時間安排/代碼量
- 收集每次code review的代碼量
- 收集開始code review的時機
- 每次code review耗時,包含開發和reviewer的耗時
- 對專案發布是否有影響
-
-
資料分析
-
根據資料記錄結果,獲取到code review經常出現的問題
- 添加代碼靜態掃描規則,掃描出通用問題,減少code review問題
- 進行對應的分享,完成團隊內的知識共享
-
對code review的耗時進行分析,來改進流程
- 不同需求型別,每次code review的代碼量是否合適
- code review開始的時機是否合適
- code review是否對專案發布造成影響,在排期程序中,是否增加對code review的考慮
- 對reviewer的作業安排是否受到影響,有的話,如何解決
-
-
效果分析
- 代碼質量的提升: 通過比較一段時間下來,發現的問題數量是否減少
-
-
規則和流程的優化
5. 可以遵守的比較好的code review的準則
- 每個提交的代碼必須經過代碼審查,以確保代碼的質量和可維護性,
- 在代碼審查之前,開發人員應該對自己的代碼進行一次自審查,確保代碼沒有明顯的錯誤和問題,
- 按照確定的規則進行審查:遵循指定的審查標準和流程,以確保一致性和準確性,
- 代碼審查應該專注于發現代碼中的問題和缺陷,而不是對開發人員進行評價或指責,
- 不要強制修改:審查人員應該將自己的建議視為建議而非命令,并與開發人員進行協商,
- 在代碼審查中,開發人員應該積極參與討論,提出自己的觀點和想法,并接受他人的反饋和建議,
- 代碼審查應該在合適的時間進行,以避免影響開發進度和專案交付時間,
- 代碼審查結果應該被記錄下來,并及時修復和追蹤問題,確保問題得到解決和修復,
6. 如何讓code review跑起來
6.1 通過checklist來做code review
通過checkList來做code review似乎是一個比較好的方式,下面是開發者和reviewer的一個checkList的示例,
6.1.1 開發者的checklist
- 需求評審需要邀請reviewer參加
- 代碼被審查前,自己先review一遍
- 需要提前和reviewer協調好代碼review的時間
- 每次合并代碼前都需要通過代碼審查
- 代碼有必要做單元測驗的位置,已完成單元測驗的覆寫,單元測驗已通過
6.1.2 reviewer的checkList
- 需要review的代碼,需要參加需求評審/測驗用例評審
- 需要預先留出code review的時間,排期時確定
- 代碼review根據審查標準執行
- 每次合并代碼是否通過代碼審查
- 代碼結構是否符合規范
- 代碼邏輯是否存在問題
- 代碼是否具有一定的可讀性
- 代碼單元測驗用例是否覆寫充分
- 代碼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
標籤:其他
