Инструмент для анализа и сравнения логики схожих функций?

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

Итак, есть ли инструменты, которые я могу использовать для сравнения реальной логики двух функций? Вот некоторые из ограничений, которые могут быть полезны.

  • Игнорировать порядок, если порядок не важен (например, установка свойств)
  • Имена переменных должны быть проанализированы на сходство, но не обязательны для сопоставления, если используются по тем же причинам.
  • Изучите другие методы, вызываемые функциями сравниваются и сглаживают логику для сравнения

В идеале, инструмент должен выдавать единственную функцию вывода. Фактические логические различия будут некоторым образом подчеркнуты. Он может даже иметь форму, которая определяет отдельные функции для различий в логике, передавая их в основную функцию, которая содержит идентичную логику.

Звучит сложно, но встречался ли кто-нибудь с инструментами, которые пытаются делать что-либо из этих вещей?

Править

Хотя упоминаются некоторые классные инструменты, это не похоже ни на один из них будет учитывать содержимое вызываемых функций при сравнении логики двух методов. Если я ошибаюсь, дайте мне знать!

8
задан John Fisher 23 February 2012 в 03:22
поделиться