Skip to content

Instantly share code, notes, and snippets.

@pavlov200912
Last active November 11, 2021 16:13
Show Gist options
  • Save pavlov200912/b2af8507806453c0b78ab95c6e146bf1 to your computer and use it in GitHub Desktop.
Save pavlov200912/b2af8507806453c0b78ab95c6e146bf1 to your computer and use it in GitHub Desktop.
Отчет по проекту весна 2021

Comment Updater. Report Spring 2021.

Про что проект?

Данные проект - попытка создать инструмент для определения comment inconsistency. Это ситуация, когда разработчик обновил код, но забыл обновить комментарий. Из-за таких несоответсвий усложняется читаемость и поддерживаемость кода.

Задача не новая, существует несколько статей, которые описывают различные подходы решения. Но на данный момент нет прикладного решения, которое можны было бы, например, использовать в современных IDE.

С другой стороны, существующие решения, в основном описывают rule-based подход (Решение о том, что комментарий устарел принимается на основе эмпирически выведенных правил, например если тип функции поменялся, а в комментарии есть прямое указание типа - его точно нужно поменять). Такие алгоритмы часто имеют недостатки, например у них могут возникнуть трудности при использовании другого языка программирования, стилизации или языка комментария. Хочется использовать для этой задачи машинное обучения. Статьи на эту тему есть, но вышли относительно недавно - осенью 2020, а значит задача не исследована до конца и представляет научный и прикладной интерес.

В это проекте мы используем подход, использующий техники NLP и машинного обучения.

В этом семестре я продолжаю работать над этим проектом (т.е в осеннем семестре у меня был такой же проект).

Кто? Где?

Из студентов в команде я один, проектом руководит Зарина Курбатова (JetBrains Research) и Тимофей Брыксин (JetBrains Research), активно помогает Егор Богомолов (JetBrains Research).

Кому оно надо?

Из постановки задачи можно понять, что реализованный проект будет полезен многим разработчикам. Особенно забывчивым, которые не меняют свои комментарии (я среди них).

Задача

Глобальная задача проекта - исследовать и реализовать подходы обноружения и устранения comment inconsistency. В этом семестре хотелось бы использовать рабочий алгоритм обнаружения и обернуть его в плагин для Intellij Idea.

Как организована работа?

Каждую неделю я трачу 10+ часов, чтобы решить задачу, которую выдал руководитель. Каждый четверг мы созваниваемся по видеосвязи (я, Зарина, Егор) и обсуждаем: что я сделал, кто виноват, что мне делать дальше, кому на руси жить хорошо.

А ты сделал в прошлом семестре?

  • Исследовал существующие решения
  • Писал свои модели разной архитектуры и сравнивал их
  • Написал инструмент для сбора новых данных для задачи

А что ты уже сделал в этом семестре?

  • В этом семестре авторы статьи на эту тему опубликовали свой код и данные
  • Изучал их код, эксперементировал с их моделями на разных данных
  • В процессе обнаружил, что модель работает очень долго, некоторое время пытался ускорять ее выполнение
  • Проанализировал результаты модели, качество недостаточно, чтобы использовать модель как единственную или основную
  • Считал разные метрики, чтобы понять, можно ли дообучить модель, предоставив ей больше данных. (оказалось, что скорее всего - нет)
  • Эксперементировал с архитектурой модели (Например, добавлял Control Flow, Data Flow ребра в AST-граф для представления кода, использовал другие Encoder-ы, например Transformer, LSTM вместо GRU)
  • Писал код, который загружает данные для обучения с диска, а не из оперативной памяти, как было у авторов модели. (Загрузка данных в RAM требует ~16gb места)
  • Запускал модель на реальных проектах на github, получилось найти реальные примеры code-comment inconsistency в некоторых проектах JetBrains-Research
  • Последние две недели я пишу плагин для Intellij IDEA, который помимо своего основного назначения поможет нам собирать более детальные данные с проектов для развития дальнейших моделей.

Чем ты пользуешься?

Модели я пишу на Python + Pytorch. В таком проекте важнее не инструменты программирования как таковые, а подходы и методы решения задачи. (Например сейчас используется: LSTM, GRU, Attention, Embeddings, Gated Graph Sequence NN)

Плагин я пишу на Kotlin.

Можно код посмотреть?

Старый код с прошлого семестра: JetBrains-Research/comment-updating

Код, в котором я модифицирую уже существующую модель: pavlov200912/deep-jit-inconsistency

Код плагина на Kotlin (в разработке): JetBrains-Research/CommentUpdater

Много кода я пишу в колабах, в основном эксперименты с моделями. Оставлять ссылку не буду, потому что читать его достаточно сложно.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment