ИССЛЕДОВАНИЕ И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ МЕТОДА ОПРЕДЕЛЕНИЯ ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ ДЛЯ ИСХОДНОГО КОДА НА ЯЗЫКЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО
ПРОГРАММИРОВАНИЯ
ВВЕДЕНИЕ 3
ГЛАВА 1. ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ 5
1.1 ОПРЕДЕЛЕНИЕ ПАТТЕРНА ПРОЕКТИРОВАНИЯ 5
1.2. МЕТОДЫ ПОИСКА ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ 9
ГЛАВА 2. ЗАДАЧА ПОИСКА ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ... 18
2.1. ФОРМАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ 18
2.2. МЕТОДЫ И АЛГОРИТМЫ РЕШЕНИЯ 19
ГЛАВА 3. ПРОЕКТИРОВАНИЕ И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
ПРИЛОЖЕНИЯ 28
3.1. АРХИТЕКТУРА ПРИЛОЖЕНИЯ 28
3.2. ФОРМИРОВАНИЕ НАБОРА ПРОЕКТОВ 30
3.3. ПРОЕКТИРОВАНИЕ ПАРСЕРА 32
3.4. МОДЕЛЬ ДАННЫХ 36
3.5 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 37
ЗАКЛЮЧЕНИЕ 39
СПИСОК ЛИТЕРАТУРЫ 40
ПРИЛОЖЕНИЕ. КОНСТРУИРОВАНИЕ ДЕРЕВА ВО ВНЕШНЕМ
ПАРСЕРЕ 42
В настоящее время число IT специалистов постоянно возрастает по причине их востребованности. При этом их подготовка отличается из-за наличия значительного количества материалов и курсов для их обучения. Каждый программист пишет свой код по-своему, используя свои подходы, идеи и умения или, наоборот, отражая в коде недостаток квалификации.
Однако, несмотря на все разнообразие программ, сложились часто используемые конструкции кода, шаблоны, идиомы и принципы разработки. Они помогают ускорить командную разработку программного обеспечения (ПО), быстро решать часто возникающие задачи проектирования ПО, возникающие в процессе разработки, а также делать код более читаемым и расширяемым. Кроме «полезных» конструкций также существуют и другие шаблоны, отрицательно влияющие на разработку.
Все подобные конструкции называют паттернами проектирования [1]. Зачастую знание определенных паттернов проектирования считается обязательным для квалифицированного разработчика, ведь их знание и правильное использование позволяет достичь более качественного кода .
Среди паттернов есть те, которые хорошо описаны, как, например, паттерны проектирования по GoF'у [1], а есть те, которые наоборот не имеют конкретного описания, однако используются тоже часто.
Идея данной работы состоит в том, чтобы на основе анализа исходных кодов набора проектов находить часто используемые конструкции кода, которые являются известными или, наоборот, неизвестными паттернами.
Цель работы - разработать программный продукт для выявления паттернов проектирования на основе исходного кода одного или нескольких проектов, написанных на объектно-ориентированных языках
программирования.
Для достижения данной цели были поставлены следующие задачи:
• Изучить существующие методы и подходы для анализа кода на наличие паттернов проектирования.
• Реализовать парсер для извлечения признаков, описывающих паттерны, и для создания структуры данных для их хранения.
• Разработать и реализовать алгоритмы для анализа паттернов.
• Разработать и протестировать программный продукт для анализа кода на паттерны проектирования.
В результате работы были изучены существующие методы поиска паттернов, основанные как на методах машинного обучения, так и на методах статического анализа кода.
В ходе работы был реализован метод поиска паттернов на основе анализа синтаксических деревьев на наличие повторяющихся конструкций, которые могут являться не именованными паттернами. Результат достигнут трансформацией синтаксического дерева в дерево описания паттернов, содержащее необходимую информацию для описания структуры проектов. Данный метод работает вне зависимости от языка программирования и позволяет применять его к любому языку, если для него реализован соответствующий парсер.
В дальнейшем этот метод можно расширить, добавив новые алгоритмы для работы с деревьями паттернов, а также увеличив информативность этих деревьев.