如果您将代码从一种语言移植到另一种语言,如何检测到它?
假设您正在将代码从c ++移植到Java,您怎么知道?
用Java设计和实现的程序与移植到Java的几乎相同的程序有什么区别?
答案 0 :(得分:6)
如果移植工作正确(由两种语言的专家完成并准备将源语言的习语翻译成目标语言的最佳类似习语),那么你无法判断是否已经进行了任何移植。
如果无法完成移植,你有时可以识别愚蠢的音译成语......但是这很难与人们用他们所知道的语言编写新程序的人区分开来,这些语言很难从他们所使用的语言中抄写成语知道;。 - )
答案 1 :(得分:0)
根据隐藏移植意图的努力程度,很容易无法检测到。
我会使用模式识别来完成这项任务。想想可以表明代码相似性的“特征”。从每个代码中提取这些功能并进行比较。
e.g: 一个功能可能是类似的符号名称。使用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/