Я недавно взял проект с большой базой кода, содержащей много дублирования. Проблема в том, что дублированные функции не были написаны одними и теми же людьми и не копировались между ними.
Итак, есть ли инструменты, которые я могу использовать для сравнения реальной логики двух функций? Вот некоторые из ограничений, которые могут быть полезны.
В идеале, инструмент должен выдавать единственную функцию вывода. Фактические логические различия будут некоторым образом подчеркнуты. Он может даже иметь форму, которая определяет отдельные функции для различий в логике, передавая их в основную функцию, которая содержит идентичную логику.
Звучит сложно, но встречался ли кто-нибудь с инструментами, которые пытаются делать что-либо из этих вещей?
Править
Хотя упоминаются некоторые классные инструменты, это не похоже ни на один из них будет учитывать содержимое вызываемых функций при сравнении логики двух методов. Если я ошибаюсь, дайте мне знать!