2009-09-22 61 views
3

我們有幾個從相同代碼庫構建的C++項目。它們之間有很多相似之處和共同的代碼,但它們是獨立開發的;來源不以任何方式共享。類和文件將被重命名,即使底層代碼沒有改變,單個行將被調整,更改和替換。如何比較類似的代碼庫?

我希望能夠比較不同的代碼庫,並找出有多少代碼仍然是相同的。它可以是相當高的水平 - %的代碼是相同的罰款。我也需要能夠自動化這個過程。

有沒有一種工具可以在代碼庫上運行,並獲得某種報告/評估多少是常見的?

+0

@Mendokusai:沒有使用CMS? – Massa 2009-09-22 18:44:13

+0

是的,我們使用Perforce,儘管項目分佈在不同的倉庫。 – Mendokusai 2009-09-22 19:29:10

+0

相關問題 - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded 2010-07-25 17:45:31

回答

3

我對這類事情沒有太多經驗,但它讓我回想起我的學校時代,當時我們的大學會通過程序運行每個人的代碼來找到作弊者。這給我帶來了以下鏈接:

Source Code Similarity Detection

它的名字一些開源軟件和商業軟件應當能夠滿足您的需求。

+0

學生代碼抄襲測試在小文件上運行。他們也相當不古板;他們只看完全匹配。如果您想在非常大的系統中檢測類似的代碼,則需要可擴展的克隆檢測工具,如果它們可以匹配幾乎錯過而不是精確副本,這非常有用,因爲範例不是「複製和粘貼」,它的「複製/粘貼/ * *編輯」。 – 2009-10-11 02:12:05

+0

我可以同意這些小文件,但至少在我的大學裏,他們有剽竊工具,它們檢測到的不僅僅是完全匹配的文件。大多數大學水平的學生都足夠聰明,知道他們需要編輯他們在某種程度上複製的內容,以便掩蓋他們作弊的事實。有不少人嘗試過這種做法,最終被抓獲並將向法院提起訴訟。 – 2009-10-11 12:46:56

+0

另請注意,我提供的鏈接上的所有解決方案都指示檢測遠遠超出了簡單複製和粘貼以及在大型文件集上工作的能力。他們根據指紋識別和分析代碼結構來做到這一點。這不是爲投票表決而提出的理由嗎? – 2009-10-11 13:04:17

0

它可能不會完全解決你的問題,但如果你要比較/比較/合併源,我極力從

http://www.scootersoftware.com/

其最好的建議BeyondCompare強得多。據我所知,SO的製造商也使用它。

2

由Richard Wettel提供的java工具dude是MOOSE軟件重新設計工具箱的一部分。這是他的(碩士?)論文記錄。 MOOSE提供的不僅僅是這一點,你可能想看看他的Codecity。我已經在java,c#,delphi,xml中使用過它。它應該在C++上也能​​正常工作。對於大型代碼庫,不要忘記給它足夠的堆空間,並從一個簡單的相似性度量開始。

0

請參閱我們的CloneDR,它可以檢測到精確和接近錯誤的代碼重複。你可以在你的兩個系統中應用它,看看他們共享什麼。 CloneDR適用於各種編程語言,包括C++。