Как обнаружить портированный код? - PullRequest
1 голос
/ 10 апреля 2010

Если вы переносите код с одного языка на другой, как это можно обнаружить?

Скажем, вы переносили код с c ++ на Java, как вы могли бы сказать?

Какая разница между программой, разработанной и реализованной на Java, и почти идентичной программой, портированной на Java?

Ответы [ 2 ]

6 голосов
/ 10 апреля 2010

Если портирование выполнено правильно (специалистами, владеющими обоими языками и готовыми перевести идиомы исходного языка в лучшие похожие идиомы целевого языка), вы не сможете сказать, что какое-либо портирование имело место.

Если портирование выполняется некомпетентно, иногда вы можете распознать глупо-транслитерированные идиомы ... но это может быть трудно отличить от людей, пишущих новую программу на языке, который они мало знают, просто глупо транслитерировать идиомы с языка, который они делают знаю; -)

.
0 голосов
/ 17 сентября 2012

В зависимости от того, сколько усилий было приложено к намерению скрыть перенос, его может быть очень просто или невозможно обнаружить.

Я бы использовал распознавание образов для этой задачи. Подумайте о «функциях», которые указывают на сходство кода. Извлеките эти функции из каждого кода и сравните их.

например: Одной особенностью могут быть похожие имена символов. Извлеките все символы, используя ctags или регулярные выражения, сделайте все строчными, сделайте uniq-сортировку обоих списков и сравните их. Еще одна возможная особенность: Список класса + количество участников, например:

MyClass1 10
...

Список методов + последовательность блоков управления. например:

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

Другой простой способ - представить код в виде картинки - например, загрузите код как текст в Word и установите размер шрифта 1. Люди очень хорошо умеют сравнивать картинки. Для других идей визуализации кода вы можете проверить http://www.se -radio.net / 2009/03 / episode-130-code-visualization-michele-lanza /

...