Вы пробовали некоторые инструменты для распознавания шаблонов дизайна в коде? - PullRequest
3 голосов
/ 04 октября 2010

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

Я ищу тот, который более или менее эффективен и ожидает некоторый разумный ввод (например, файл xmi, созданный с помощью реверса).инструмент разработки или другие данные, которые могут быть легко сгенерированы из исходного кода).

Я нашел некоторые академические инструменты, такие как CrocoPat, Columbus + Maisa, но еще не пробовал их.

Буду признателен, если кто-то поделится своим опытом в таких экспериментах.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Шаблоны проектирования обычно не появляются непосредственно в коде;обычно код содержит реализацию шаблона проектирования.

Чтобы выполнить такое распознавание образов, вам потребуется:

  1. Возможность надежного анализа исходного языка
  2. Возможностьраспознавать низкоуровневые кодовые шаблоны, которые намекают на высокоуровневый шаблон
  3. Возможность связывать наборы низкоуровневых шаблонов вместе с помощью близости или, как правило, потока управления и данных

Существует не так много инструментов, которые могут это сделать.В то время как мы явно не охотились за общими шаблонами проектирования, мы создали инструмент, отвечающий указанным выше критериям: наш DMS Software Reengineering Toolkit .DMS может анализировать C, Java и COBOL на том же уровне точности, что и их компиляторы, может сопоставлять шаблоны с использованием явных шаблонов и вычисляет контроль и анализ потока данных для этих языков.

Одним интересным применением DMS было распознавание«шаблон проектирования» для производства интерактивных экранов в приложении на 35 миллионов строк C.Вам известен этот шаблон проектирования: «используйте printf для создания фрагментов вывода на экран».Хотя фрагменты шаблона легко распознать (большинство вызовов printf являются примерами), реальная проблема заключается в распознавании самого изображения экрана из запутанной стопки кода, который его реализует.Задача, которую мы выполнили, заключалась в извлечении изображения печатного вывода на экран (представленного в виде XML-файла, содержащего текст на экране и XML-теги, представляющие выходные данные с переменным содержимым) путем связывания отдельных вызовов printf.Детали для выполнения этого довольно сложны;Вы должны найти последовательности printfs, которые обычно пересекают вызовы функций и управляются множеством условных выражений (XML также записывает условную часть экранов).Инструмент генерировал изображения экранов для всех экранов, которые можно распечатать с помощью кода, начинающегося с main .

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

1 голос
/ 04 октября 2010

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

  • Почти каждый вызов метода в поле можно рассматривать как мост / адаптер / staregy
  • Практически каждый не пустой метод можно считать фабричным (включая, например, toString ())
  • Почти каждый объект с полями и не возвращаемым методом возврата можно считать Строителем
  • 1010 * И т.д. *
...