2010-04-10 82 views
1

如果您將代碼從一種語言移植到另一種語言,如何檢測到這種情況?如何檢測移植的代碼?

假設你將代碼從C++移植到Java,你怎麼知道?

用Java設計和實現的程序和移植到Java的幾乎完全相同的程序之間會有什麼不同?

回答

6

如果移植工作正確(通過兩種語言的專家,並準備將源語言的習語翻譯成目標語言的最佳類似習語),您無法判斷是否發生了移植。

如果移植工作無能爲力,您有時可以識別愚蠢的音譯成語...但這很難與使用他們知道的語言編寫新程序的人區分,只是將他們的成語從他們的語言中愚蠢地音譯知道;-)。

+0

如果移植是自動完成的(機器翻譯,仿真層等),則更易於說明。 – Thilo 2011-03-23 05:18:35

0

根據隱藏移植的意圖付出了多少努力,可能很容易無法檢測到。

我會爲此任務使用模式識別。考慮一下代表相似性的「特徵」。從每個代碼中提取這些功能並進行比較。

例如: 一個特徵可以是相似的符號名稱。使用ctags或正則表達式提取所有符號,使所有符號均爲小寫,將uniq排序並將兩個列表進行比較。 另一個可能的特徵:

MyClass1 10 
... 

方法+控制研究的塊的序列的列表:成員e.g的類+數目的 列表。例如:

doSth() if, while, if, ix, case 
... 

另一個簡單的方法是將代碼表示爲圖片 - 例如,在Word中將代碼加載爲文本並將字體大小設置爲1.人類在比較圖片時非常出色。對於代碼可視化的另一種想法,您可以檢查http://www.se-radio.net/2009/03/episode-130-code-visualization-with-michele-lanza/