Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP)

来源:https://www.cnblogs.com/jurendage/archive/2020/06/01/13023125.html
-Advertisement-
Play Games

Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP) 說明:Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP) 代碼審查也就是我們常說的:CodeReview,常見的生鮮電商小程式或者APP中CodeReview有以下的規範與目標: 1. 目標和原則 提高代碼質量, ...


Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP)

 

說明:Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP)

           代碼審查也就是我們常說的:CodeReview,常見的生鮮電商小程式或者APP中CodeReview有以下的規範與目標:

 

         1. 目標和原則

  1. 提高代碼質量,及早發現潛在缺陷,降低修改/彌補缺陷的成本
  2. 促進團隊內部知識共用,提高團隊整體水平
  3. 評審過程對於評審人員來說,也是一種思路重構的過程,幫助更多的人理解系統
  4. 是一個傳遞知識的手段,可以讓其它並不熟悉代碼的人知道作者的意圖和想法,從而可以在以後輕鬆維護代碼
  5. 可以被用來確認自己的設計和實現是一個清楚和簡單的
  6. 鼓勵相互學習對方的長處和優點
  7. 高效迅速完成Code Review

          2. 代碼審查清單 

        Code Review主要檢查代碼中是否存在以下方面問題:代碼的一致性、編碼風格、代碼的安全問題、代碼冗餘、是否正確設計以滿足需求(功能、性能)等等

  • 完整性檢查代碼是否完全實現了設計文檔中提出的功能需求代碼是否已按照設計文檔進行了集成和Debug代碼是否已創建了需要的資料庫,包括正確的初始化數據代碼中是否存在任何沒有定義或沒有引用到的變數、常數或數據類型
  • 一致性檢查代碼的邏輯是否符合設計文檔代碼中使用的格式、符號、結構等風格是否保持一致
  • 正確性檢查代碼是否符合制定的標準所有的變數都被正確定義和使用所有的註釋都是準確的所有的程式調用都使用了正確的參數個數
  • 可修改性檢查代碼涉及到的常量是否易於修改(如使用配置、定義為類常量、使用專門的常量類等)代碼中是否包含了交叉說明或數據字典,以描述程式是如何對變數和常量進行訪問的代碼是否只有一個出口和一個入口(嚴重的異常處理除外)
  • 可預測性檢查代碼所用的開發語言是否具有定義良好的語法和語義是否代碼避免了依賴於開發語言預設提供的功能代碼是否無意中陷入了死迴圈代碼是否是否避免了無窮遞歸
  • 健壯性檢查異常處理和清理(釋放)資源代碼是否採取措施避免運行時錯誤(如數組邊界溢出、被零除、值越界、堆棧溢出等)
  • 結構性檢查程式的每個功能是否都作為一個可辯識的代碼塊存在迴圈是否只有一個入口
  • 可追溯性檢查代碼是否對每個程式進行了唯一標識是否有一個交叉引用的框架可以用來在代碼和開發文檔之間相互對應代碼是否包括一個修訂歷史記錄,記錄中對代碼的修改和原因都有記錄是否所有的安全功能都有標識
  • 可理解性檢查註釋是否足夠清晰的描述每個子程式是否使用到不明確或不必要的複雜代碼,它們是否被清楚的註釋使用一些統一的格式化技巧(如縮進、空白等)用來增強代碼的清晰度是否在定義命名規則時採用了便於記憶,反映類型等方法每個變數都定義了合法的取值範圍代碼中的演算法是否符合開發文檔中描述的數學模型
  • 可驗證性檢查代碼中的實現技術是否便於測試
  • 可重用性DRY(Do not Repeat Yourself)原則:同一代碼不應該重覆兩次以上考慮可重用的服務,功能和組件考慮通用函數和類
  • 可擴展性輕鬆添加功能,對現有代碼進行最小的更改。一個組件可以被更好的組件替換
  • 安全性進行身份驗證,授權,輸入數據驗證,避免諸如SQL註入和跨站腳本(XSS)等安全威脅 ,加密敏感數據(密碼,信用卡信息等)
  • 性能使用合適的數據類型,例如StringBuilder,通用集合類懶載入,非同步和並行處理緩存和會話/應用程式數據

         代碼檢查包括不局限於上述清單,提交人應在本地自我完成代碼格式、架構設計、面向對象分析與設計等檢查。備註:

  • Java服務端開發必須遵循阿裡巴巴Java開發手冊(終極版),IDEA中安裝相關插件有告警提示不允許提交合併

      3.Code Review的步驟

  1. 代碼編寫者和代碼審核者坐在一起,由代碼編寫者按照UC依次講解自己負責的代碼和相關邏輯,從Web層->DAO層;
  2. 代碼審核者在此過程中可以隨時提出自己的疑問,同時積極發現隱藏的bug;對這些bug記錄在案。
  3. 代碼講解完畢後,代碼審核者給自己安排幾個小時再對代碼審核一遍。代碼需要一行一行靜下心看。同時代碼又要全面的看,以確保代碼整體上設計優良。
  4. 代碼審核者根據審核的結果編寫“代碼審核報告”,“審核報告”中記錄發現的問題及修改建議,然後把“審核報告”發送給相關人員。
  5. 代碼編寫者根據“代碼審核報告”給出的修改意見,修改好代碼,有不清楚的地方可積極向代碼審核者提出。
  6. 代碼編寫者 bug fix完畢之後給出反饋。
  7. 代碼審核者把Code Review中發現的有價值的問題更新到"代碼審核規範"的文檔中,對於特別值得提醒的問題可群發email給所有技術人員。

備註:Code Review必備的文檔:“Code Review規範”文檔:記錄代碼應該遵循的標準。代碼審核者根據這些標準來Code Review代碼,同時在Code Review過程中不斷完善該文檔。

4.Code Review的執行

準備階段

  1. 評審規範和標準
  2. 在CR前設計確定評審規範和標準是必要,通過規範和標準我們在審查過程中可以有據可依,有理可循,而且還可以做到標準統一。
  3. 選擇CR活動的參與者
  4. 在CR開始前,必須把本次CR活動的對象、審查內容以及審查的規範和標準通過email通報給所有的參與者。
  5. 選擇CR活動的實施方式
  6. CR活動有很多形式可供我們選擇,我們可以根據實際情況選擇桌面式CR、演示講解式CR、一對一的座位CR等等。(一般按新增功能桌面式CR、里程碑功能演示講解式CR、BUG修複一對一的座位CR)

5.實施階段

充分的事前準備,只是做好CR活動的前提,在CR實施過程中,我們要做好以下工作。

  1. 準確記錄
  2. 對於CR過程發現的問題,我們必須清晰準確的記錄,可以使用問題點記錄單,明確記錄的項目和內容。
  3. 講解與提問
  4. CR過程中,要採用代碼作者講解和審查者提問方式。審查者不能只在發現問題時提問,同時也要根據本次審查的內容要求代碼作者對某個特定問題的講解。
  5. 逐項審查
  6. 對事前確定的審查內容,要逐項審查,不能因為時間不足等因素一掃而過。
  7. 註意氣氛
  8. 實施審查時,要營造一個討論問題、解決問題的氛圍,不能把審查會搞成批判會,這樣會影響相關人員的積極性。

6.事後跟蹤

  1. 確認發現的問題 CR結束後,對發現的問題,首先需要確定以下內容。
  2. 問題點的難易程度以及影響的範圍;
  3. 解決問題的責任者和問題點修正結果的確認者;
  4. 解決問題點的時限。
  5. 修正問題責任者 對於修正問題責任者,在問題點的修正過程中,要三方面內容的記錄。問題點的原因;
  6. 解決問題點的對策;
  7. 修正的內容。

修正結果確認者做為修正結果的確認者,必須按照事前約定的時限及時的對修正結果進行全面的確認

7.註意事項

  • 經常進行Code Review

(1)要Review的代碼越多,那麼要重構,重寫的代碼就會越多。而越不被程式作者接受的建議也會越多,唾沫口水戰也會越多。(2)程式員代碼寫得時候越長,程式員就會在代碼中加入越來越多的個人的東西。 (3)越接近軟體發佈的最終期限,代碼也就不能改得太多。

  • Code Review不要太正式,而且要短

忘了那個代碼評審的Checklist吧,走到你的同事座位跟前,像請師父一樣請他坐到你的電腦面前,然後,花5分鐘給他講講你的代碼,給他另外一個5分鐘讓他給你的代碼提提意見,這比什麼都好。而如果你用了一個Checklist,讓這個事情表現得很正式的話,下麵兩件事中必有一件事會發生:(1)只有在Checklist上存在的東西才會被Review。(2)Code Reviews 變成了一種禮節性的東西,你的同事會裝做很關心你的代碼,但其實他心裡想著儘快地離開你。只有不正式的Code Review才會讓你和評審者放輕鬆,人只有放鬆了,才會表現得很真實,很真誠。記住Review只不過是一種形式,而只有在相互信任中通過相互的討論得到了有意義和有建設性的建議和意見,那才是最實在的。不然,作者和評審者的關係就會變成小偷和警察的關係。

  • 儘可能的讓不同的人Review你的代碼

如果可能的話,不要總是只找一個人來Review你的代碼,不同的人有不同的思考方式,有不同的見解,所以,不同的人可以全面的從各個方面評論你的代碼。但不要太多了,人多嘴雜反而適得其反,基本上來說,不要超過3個人,這是因為,這是一個可以圍在一起討論的最大人員尺寸。 下麵是幾個優點:(1)從不同的方向評審代碼總是好的。(2)會有更多的人幫你在日後維護你的代碼。(3)這也是一個增加團隊凝聚力的方法。

  • 保持積極的正面的態度

程式員最大的問題就是“自負”,尤其當我們Review別人的代碼的時候,我已經見過無數的場面,程式員在Code Review的時候,開始抨擊別人的代碼,質疑別人的能力。太可笑了,我分析了一下,這類的程式員其實並沒有什麼本事,因為他們指責對方的目的是想告訴大家自己有多麼的牛,靠這種手段來表現自己的程式員,其實是就是傳說中所說的“半瓶水”。 所以,無論是代碼作者,還是評審者,都需要一種積極向上的正面的態度,作者需要能夠虛心接受別人的建議,因為別人的建議是為了讓你做得更好;評審者也需要以一種積極的正面的態度向作者提意見,因為那是和你在一個戰壕里的戰友。記住,你不是一段代碼,你是一個人!

  • 學會享受Code Review

這可能是最重要的一個提示了,如果你到了一個人人都喜歡Code Review的團阿,那麼,你會進入到一個生機勃勃的地方,在那裡,每個人都能寫出質量非常好的代碼,在那裡,你不需要經理的管理,團隊會自適應一切變化,他們相互學習,相互幫助,不僅僅是寫出好的代碼,而且團隊和其中的每個人都會自動進化,最關鍵的是,這個是一個團隊。

 

 QQ:137071249

共同學習QQ群:793305035


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 在vue的視圖層與modal層進行數據交互的時,視圖層的數據傳入到modal層,modal層通過defineProperty來劫持每個元素,並綁定監聽事件進行監聽,一旦監聽到數據變化,就通過defineProperty的set函數重新更新視圖層。 二、使用Object.defineProp ...
  • 一、當用戶在瀏覽器地址欄中輸入網址,到看到頁面,經歷的步驟 tips:hexo自己搭一個博客 1.解析輸入的URL地址 傳輸協議(把信息在客戶端和伺服器端進行傳遞,類似於快遞小哥) http 超文本傳輸協議(傳輸的內容除了文本,還有可能是其它類型:二進位編碼、BASE64碼、文件流等等) https ...
  • 不管你是做哪個語言的,只要是個程式員都懂: 哈哈啥哈哈哈 來跟我一起學習java吧,做個牛b的程式員。我們一起來敲bug吧 “大清亡於閉關鎖國,學習技術需要交流和資料”。 在這裡我給大家準備了很多的學習資料免費獲取,包括但不限於技術乾貨、大廠面試題系列、技術動向、職業生涯等一切有關程式員的分享. w ...
  • # 5.Utilities:工具 - 1. 邊框 中文網站邊框部分:http://bs4.vx.link/index.html?tmpui_page=/pages/utilities - 2. 清除浮動 - 3. 關閉圖標 - 4. 顏色 - 5. 顯示 3.x版本顯示只有三種:block, inl ...
  • 一、 1、打開方式 打開Chrome瀏覽器,按下F12或者右擊空白處然後點擊檢查 最左邊是顯示效果,中間是html代碼,右邊是html樣式。 2、樣式的修改 點擊中間代碼框,左上角的小箭頭,然後點擊css樣式,可以直接修改屬性的值。也可以點擊鍵盤上的上下箭頭,對屬性的值進行修改 需要註意的是,調試工 ...
  • 平時常用的一些功能性函數 關於原生JS 文件大小單位轉換 /** * @desc bytesToSize 位元組單位換算 * @param bytes 傳入以bit為單位的數據 */ const bytesToSize = function (bytes) { const k = 1024; if ( ...
  • Command模式屬於行為模式,作為大名鼎鼎的23個設計模式之一,Command模式理解起來不如工廠模式,單例模式等那麼簡單直白。究其原因,行為模式著重於使用,如果沒有編程實踐,確實不如創造模式那麼直白。我們先看看UML類圖。 估計很多同學看著圖就暈了,那麼多東西,Command和Concrete ...
  • J2SE(Java 2 Platform Standard Edition) J2ME(Java 2 Platform Micro Edtion) J2EE(Java 2 Platform Enterprise Edition) Java語言特點:開源 跨平臺(JVM) 面向對象等 JRE與JDK ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...