代碼重復檢查工具——python的使用CPD比較好用,clone digger針對py2,其他有名的如Simian PMD-CPD CloneDR CCCD CCFinder Bauhaus CodePro


代碼重復檢測:

cpd --minimum-tokens 100 --files g:\source\python\ --language python >log.txt

輸出類似:

=====================================================================
Found a 381 line (1849 tokens) duplication in the following files: 
Starting at line 24 of xxxxalysis\policy_analysis.py
Starting at line 30 of xxxxxis\policy_analysis_cluster_1.py

logger = None
logger_running = None

COUNT = 2

SRC_IP = 0
SRC_PORT = 0
DEST_IP = 0
DEST_PORT = 0
PROTOCOL = 0
COMMAND = 0
COMMAND_ARGUMENT = 0
FATHER_PID = 0

  

 

重復代碼檢測工具

 

何謂重復代碼

簡單說,就是指重復或近似的代碼。程序猿在碼代碼時,往往使用CP(copy and paste)大法,飛快的完成開發任務。不經意間代碼中充斥着大量的重復、相似的代碼。重復代碼不僅讓代碼量大增,造成編譯速度慢,而且占用大量存儲空間,更嚴重的后果是造成了代碼可維護性差,代碼質量下降。
重復可能是軟件中一切邪惡的根源,許多原則與實踐規則都是為了控制與消除重復而創建。……軟件開發領域的所有創新都是不斷在嘗試從源代碼中消除重復。——《代碼整潔之道》 馬丁

重復代碼都有哪些類型?

最簡單明了的是完全一樣的代碼片段。此外,還有如下類型的重復代碼:

  1. 類型Ⅰ,代碼片段中除了空格、注釋以及換行以外的內容完全一致
  2. 類型Ⅱ,代碼片段中除了空格、注釋、換行以及變量名以外的內容完全一致
  3. 類型Ⅲ,代碼片段中除了空格、注釋、換行以及變量名以外的語句可能有增刪改,功能不變
  4. 類型Ⅳ,兩個或更多個代碼段執行相同的運算,但通過不同的語法和變量來實現。

不同的重復代碼檢測工具,由於在實現算法上有所不同,其所能檢測的重復代碼類型也不盡相同,如下表所示。

名稱 Simian PMD-CPD CloneDR CCCD CCFinder Bauhaus CodePro
檢測類型 Ⅰ,Ⅱ Ⅰ,Ⅱ Ⅰ,Ⅱ Ⅰ,Ⅱ,Ⅲ Ⅰ,Ⅱ,Ⅲ
支持語言 C/C++,Java C/C++,Java C/C++,Java C,Java C/C++,Java C/C++,Java Java
授權類型 商用,可免費 開源 商用,可免費 開源 開源 商用,可免費 開源
推薦星級 ** *** ** * * ** ***

怎么消除重復代碼?

《代碼大全》在第七章“高質量的子程序”中指出,創建子程序是消除重復代碼的有效方法。
在《重構——改善既有代碼的設計》一書中,建議如下方法消除重復代碼:

  1. 提取類,如果多個類中含有相同或相似的成員變量,方法,可以定義一個新的類來實現這些功能。原有的類可以作為子類繼承。
  2. 提取函數,如果多個類中含有相同或相似的方法,可以把這些方法集中到新的類,供其他類調用。
  3. 替換函數,相同或相似的代碼可以通過調用實現該功能的函數來實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM