代碼審查(Code Review)是軟件開發中常用的手段,和QA測試相比,它更容易發現和架構以及時序相關等較難發現的問題,還可以幫助團隊成員提高編程技能,統一編程風格等。
一.審查原因(Why)
持續、有效的開展代碼走查,將會收獲許多收益,具體表現在:
1. 能及時發現代碼中的Bug,保證版本質量。
2. 提升代碼的可讀性、可維護性,建立團隊共同的編碼風格。
3. 有利於知識共享,打破技能壁壘,避免單點故障。
4. 通過展示自己的優秀代碼和設計思路,提升了個人成就感。
5. 通過講解自己的代碼,對個人溝通能力也是一種提升。
6. 提高開發者的對編碼的責任感。
二.審查對象內容(What)
前后端所有研發人員審查周期內提交的代碼及數據庫腳本
如代碼數量過多可挑選部分重要功能模塊進行
三.審查人員(Who)
代碼走查不只是開發人員的事情!需要多種角色同時參與,因為走查活動不僅僅要看功能是否實現了,還要看代碼和設計是否一致?測試用例是否完備和有效?
1. 主持人(老王)
負責主持整個走查活動,控制時間和進度。
2. 講解人(被審查研發人員)
負責對走查的代碼進行講解。
3. 評審人(其他研發人員,測試,UI)
負責對走查代碼提出問題,建議。
四.審查地點(Where)
會議室
五.周期計划(When)
一周一次,時間每周四下午17:30
六.審查規范方法(How)
6.1編碼習慣:(關注點-框架使用與基本功)
1. 沒有被使用的變量要刪除。
2. 針對不同的 Exception 要用不同的 catch 語句,而不是一個 Exception 解決所有問題。
3. 針對變量,方法和類要用相同的命名方法。
4. 常量應該被寫在獨立的常量類中。
5. 每行代碼的尾部不要有多余的空格。在什么地方放置空格和斷行符?使用制表符還是空格?大括號如何放置?
6. 對於括號,循環,if語句等等要用統一的格式。
7. 每一個單獨的方法不應該超過100行。
8. 一個單獨的語句不應該超過編輯器的可視區域,它可以被拆分成幾行。
9. 檢查 String 對象既不是null也不是空的最好方法是 if(“”.equals(str))
10. 假如類有很多成員變量,並且實例化的時候只需要少數變量傳入的話,最好使用靜態工廠方法,而不是重載構造函數。
11. 給方法添加適當的訪問控制,而不是所有都是 public。
12. 遵守項目中使用的框架的最佳實踐建議,例如 Spring,Struts,Hibernate,jQuery。
13. 域、常量、變量、參數、類的名稱是否符合標准?命名是否太短?
6.2業務實現:(關注點-設計思路與業務邏輯)
1. 如果類似的邏輯被使用了多次,應該把它寫成一個幫助類,然后在多出調用。
2. 鼓勵使用 API 而不是重復編寫代碼解決相同的問題。
3. 要強調代碼的單元測試。
4. 任何新加的代碼不應該破壞已有的代碼。
6.3安全:(關注點-系統安全性sql注入等)
1. 任何代碼都不能執行用戶的輸入,除非轉義過了。這個常常包含 JavaScript 的 eval 函數和 SQL 語句。
2. 禁止那些在短時間內提交非常多請求的 IP。
3. 任何類,變量,還有方法都應該有正確的訪問域。
6.4性能:(關注點-系統運行消耗和可擴展性)
1. 所有數據庫和文件操句柄在不需要的時候都應該被關閉。
2. SQL 語句的寫法會導致性能千差萬別。
3. 鼓勵創建不可變(immutable)的類。
4. 類似的邏輯代碼,盡量通過 if else 語句來實現更多的重用。
5. 盡量避免使用重對象(heavy objects)。
6. 如果是 Web 項目,請檢查是否使用了合適的圖片尺寸,CSS sprites 和瀏覽器緩存等技術。
7. 全局都需要的信息保存在 application context 中。
8.檢查代碼是否包含無效代碼、多余變量、可復用方法、不必要的開銷
9.操作碼,異常碼是否符合統一要求規范
6.5注釋:(關注點-代碼可讀性注釋清晰完善)
1.在有處理邏輯的代碼中,源程序有效注釋量必須在20%以上。
2.文件注釋:文件注釋寫入文件頭部。
3.類和接口的注釋:該注釋放在class定義之前,using或package關鍵字之后。
4.類和接口的注釋內容:類的注釋主要是一句話功能簡述、功能詳細描述,說明:可根據需要列出:版本號、生成日期、作者、內容、功能、與其它類的關系等。
5.類屬性、公有和保護方法注釋:寫在類屬性、公有和保護方法上面。用//來注釋,需要對齊被注釋代碼。
6.注釋的內容要清楚、明了,含義准確,防止注釋二義性。說明:錯誤的注釋不但無益反而有害
7.對於方法內部用throw語句拋出的異常,必須在方法的注釋中標明,對於所調用的其他方法所拋出的異常,選擇主要的在注釋中說明。對於非RuntimeException ,即throws子句聲明會拋出的異常,必須在方法的注釋中標明。
6.6新技術:(關注點-適用性和擴展學習)
1.代碼使用新技術是否有效,是否最優,一起討論學習
推薦閱讀
【遠程醫療】互聯網醫院 衛健委數據上報平台技術方案
【技術選型】你的公司,你的項目真的適合微服務嗎?
【划划重點】論大數據中主數據的重要性
【視頻問診】ffmpeg+HLS直播與回放技術
【遠程醫療】智能導診技術方案