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