Семантический поиск в программном коде Научный руководитель к.ф.-м.н. Д.В.Барашев Рецензент А.А.Бреслав Студент 545 группы Всеволод Иванов Дипломная работа
Актуальность задачи поиска Разные уровни абстракции поисковых запросов и результатов Большие проекты Много компонентов Много связей между ними, в т.ч. неявных Много авторов Большая продолжительность Развитая инфраструктура
Виды поиска Полнотекстовый С регулярными выражениями Семантический Только по исходному коду Используя метаданные
Обзор Инструменты для просмотра кода (IDE, online) Синтаксический поиск, поиск по истории JRipples Поиск через зависимости Статья "An Information Retrieval Approach to Concept Location in Source Code» Семантический поиск с помощью LSA только по исходному коду
Постановка задачи Разработать систему, которая в проекте, имеющем: Систему контроля версий Баг-трекер Провязку VCS и баг-трекера по данному поисковому запросу находит: Список файлов, связанных с этим запросом Список разработчиков, внесших наибольший вклад в данную функциональность, отсортированные по релевантности
Индексирование Анализируемый язык – Java Особенности парсинга: Только нужные файлы Stop words: English Java Разбиение идентификаторов на слова: Регистр Подчеркивания и точки
Поиск 1. Базовые результаты – SemanticVectors 2. Изменение на основе метаданных (git, баг-трекер): Blame найденных файлов Объединение коммитов, относящихся к одной задаче Подсчет частоты встречаемости в коммитах Математическая модель 3. Поиск авторов
Математическая модель targetRank = sourceRank + commitCount * coefficient targetRank – итоговый рейтинг документа sourceRank – рейтинг документа из SemanticVectors commitCount – количество связанных коммитов, содержащих документ coefficient – константа, зависящая от размера проекта
Class Diagram
Апробация Проводилась на open-source проектах компании JetBrains: Kotlin и MPS Сравнение с Lucene, SemanticVectors и дальнейшая оценка результатов экспертом Выводы: Использование метаданных улучшает результаты Неточность рейтингов Возможно, модели словесных пространств не подходят для программного кода Размытый критерий релевантности
Результаты Разработана система, которая в проекте, имеющем: Систему контроля версий Баг-трекер Провязку VCS и баг-трекера по данному поисковому запросу находит: Список файлов, связанных с этим запросом Список разработчиков, внесших наибольший вклад в данную функциональность, отсортированные по релевантности