回答
你的問題的一個子集:檢測重複代碼:
嘗試:PMD
重複的代碼可以是很難找到,特別是在一個大型項目。但PMD的複製/粘貼檢測器(CPD)可以爲您找到它! CPD已經通過三個主要的化身:
- 首先,我們寫的使用邁克爾·懷斯的貪婪字符串拼接算法的一個變種(我們的變種這裏描述)
- 然後,它是由布萊恩Ewins使用Burrows-完全重寫Wheeler變換
- 最後,它被Steve Hawkins改寫爲使用Karp-Rabin字符串匹配算法。
...
注意CPD工作與Java,JSP,C,C++,Fortran和PHP代碼。
我已經在Java代碼中使用CPD進行類似的任務。輸出可以是xml,所以自動化很容易。 – vkraemer 2009-12-15 16:59:42
猿猴(前面提到)是一個很好的工具。我在我的項目中一直使用CloneDetective,它效果很好。 CloneDetective是免費的,所以它不會受到傷害,試試看。
CloneDetective是否適用於除C#之外的任何語言? – 2013-03-06 20:36:44
請注意,您不能只比較文本行。您將不得不解析代碼,通過這種方式,您還可以檢測語義上正確但可能具有不同命名標識符的段。
例如,給定兩個等價但使用不同標識符的函數,文本搜索不會將它們視爲相同,而是解析器可以。
另請注意,編寫C++解析器並不是一項簡單的任務,即使在給定語法的情況下也是如此。我建議其他人的建議,併爲此尋找工具。還搜索重構工具。
托馬斯是正確的:你想要一個解析器,並且構建解析器對於真正的語言來說非常困難。請參閱CloneDR答案以獲取解析並處理C和C++的克隆檢測工具。 – 2010-02-19 10:00:03
請參閱CloneDR,該工具用於在源代碼中查找精確複製和接近未命中(複製粘貼編輯)克隆。它使用完整的語言解析器,使其能夠根據語言結構查找克隆,最大限度地減少誤報,並完全刻畫代碼的註釋或格式,從而最大限度地實現真正的檢測。當克隆塊更改變量,插入statemens或代碼塊時,CloneDR將查找克隆。它具有C,C++,COBOL,C#,Java,PHP和其他一些語言的語言前端。
您可以在網站上查看樣本克隆檢測報告。
https://github.com/hudayou/fib
工具來查找一個文件或目錄相同的代碼塊。
- 1. 如何將文本塊定期從一個文本文件複製到另一個文本文件
- 2. 在文本(XML)文件中查找重複部分的工具?
- 3. 的Python:從另一個文本文件文本文件查找的關鍵字
- 4. PowerShell的:文本塊到一個文件
- 5. WPF引用來自另一個模塊,類或窗口的文本框文本
- 6. 在一個文本文件
- 7. 在一個文本文件
- 8. 從一個文本文件
- 9. 寫一個文本文件
- 10. 在一個文本文件
- 11. 在兩個文本文件中查找類似的行?
- 12. 複製一個文本文件
- 13. 如何在一個版本中確定文件的文本塊來自以前版本中的哪個文件?
- 14. 在文本文件的兩列之一中查找重複值
- 15. 用C++重寫一個文本文件
- 16. 需要一個python模塊來填充文本文檔
- 17. 我需要創建一個文本文件的用戶列表
- 18. ,我需要一個線串的從文本文件在C#
- 19. 需要一個ebj耳樣本文件
- 20. 如何從兩個文本文件中創建一個文本文件使用Apple腳本的文本
- 21. 需要使用jmeter將文本文件從一個文件夾複製到另一個文件夾中
- 22. 我想創建一個文本文件
- 23. Shell腳本查找文本文件中的文本
- 24. plist或文本文件
- 25. Linux命令或腳本計算文本文件中重複的一堆行?
- 26. 與特定的文件名創建從一個單一的文本文件,多個文本文件
- 27. 將文本文件內容複製到另一個文本文件
- 28. 批處理文件將特定行從一個文本文件複製到另一個文本文件
- 29. Shell或Perl腳本,從文本文件
- 30. 查找文本文件
我主張使用工具來簡單地識別代碼的類似部分。自動化這種重構需要問題。 – luke 2009-12-15 17:21:32
可能的重複:http://stackoverflow.com/questions/546487/tools-to-identify-code-duplications – 2013-03-06 22:05:54
相同的C + +:http://stackoverflow.com/questions/191614/how-to-detect-code-開發過程中的複製 – 2014-08-31 13:13:16