Как я могу сравнить похожие кодовые базы?

У нас есть несколько проектов C ++, созданных на основе одной и той же кодовой базы. У них много общего и общего кода, но они были разработаны независимо; источник никоим образом не был передан. Классы и файлы будут переименованы, даже если базовый код не изменился, а отдельные строки были настроены, изменены и заменены.

Я хотел бы иметь возможность сравнить разные кодовые базы и узнать, какая часть кода осталась прежней. Это может быть достаточно высокий уровень - это то же самое в% кода. Мне также нужно уметь автоматизировать этот процесс.

Есть ли инструмент, который я могу запустить на базе кода и получить какой-то отчет / оценку того, насколько распространено?


person Mendokusai    schedule 22.09.2009    source источник
comment
@Mendokusai: CMS не использовалась?   -  person Massa    schedule 22.09.2009
comment
Да, мы используем Perforce, хотя проекты распределены по разным хранилищам.   -  person Mendokusai    schedule 22.09.2009
comment
Связанный вопрос - stackoverflow .com / questions / 2490884 /.   -  person Oded    schedule 25.07.2010


Ответы (4)


У меня нет большого опыта в подобных вещах, но это заставило меня вспомнить школьные годы, когда наш университет запускал любой код через программу, чтобы найти читеров. Это привело меня к следующей ссылке:

Определение сходства исходного кода

Он называет некоторое программное обеспечение с открытым исходным кодом и коммерческое программное обеспечение, которое должно удовлетворить ваши потребности.

person RC.    schedule 22.09.2009
comment
Тесты на плагиат для кодов студентов работают с крошечными файлами. К тому же они довольно просты; они ищут только точные совпадения. Если вы хотите обнаруживать похожий код в очень больших системах, вам нужны масштабируемые инструменты обнаружения клонов, и очень полезно, если они могут сопоставить почти промахи, а не точные копии, потому что парадигма не копирует и вставляет, а копирует / вставляет /*редактировать*. - person Ira Baxter; 11.10.2009
comment
Я могу согласиться с небольшими файлами, но, по крайней мере, в моем университете были инструменты плагиата, которые обнаруживали не только точные совпадения. Большинство студентов колледжа достаточно умны, чтобы знать, что им нужно отредактировать то, что они скопировали в некоторой степени, чтобы скрыть факт, что они обманывают. Было немало тех, кто пытался это сделать, но в итоге их поймали и отправили в суд. - person RC.; 11.10.2009
comment
Также обратите внимание, что все решения по ссылке, которую я предоставил, указывают на обнаружение, выходящее далеко за рамки простого копирования и вставки и возможности работы с большими наборами файлов. Они делают это на основе снятия отпечатков пальцев и анализа структуры кода. Разве это не причина того, что голосование "против"? - person RC.; 11.10.2009

Есть инструмент java dude, часть набора инструментов для реинжиниринга программного обеспечения MOOSE, авторства Ричарда Веттеля. . Это задокументировано в его (магистерской?) Диссертации. MOOSE предоставляет гораздо больше, чем просто это, вы можете взглянуть на его Codecity.

Я использовал его на java, c #, delphi, xml. Он должен работать и на C ++. Для больших баз кода не забудьте выделить достаточно места в куче и начните с простой метрики подобия.

person Stephan Eggermont    schedule 22.09.2009

Вероятно, это не решит вашу проблему полностью, но если вы хотите сравнить / сравнить / объединить источники, я настоятельно рекомендую BeyondCompare из

http://www.scootersoftware.com/

Это лучший вариант. Насколько я знаю, он также использовался создателями SO.

person RED SOFT ADAIR    schedule 22.09.2009

См. Наш CloneDR, который определяет точное и близкое к отказу дублирование кода. Вы можете применить это к своим двум системам, чтобы увидеть, что они разделяют. CloneDR работает на различных языках программирования, включая C ++.

person Ira Baxter    schedule 29.09.2009