2010-04-10 79 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/