Семантический поиск в программном коде Дипломная работа Научный руководитель

advertisement
Дипломная работа
Семантический поиск
в программном коде
Научный руководитель
к.ф.-м.н. Д.В.Барашев
Рецензент
А.А.Бреслав
Студент 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 и баг-трекера
по данному поисковому запросу находит:
• Список файлов, связанных с этим запросом
• Список разработчиков, внесших наибольший вклад в
данную функциональность,
отсортированные по релевантности
Download