Исследовательская группа

Методы машинного обучения в области программной инженерии

Coding Assistant

Тимофей БрыксинАктивный

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

Для достижения данной цели мы разработали набор инструментов для сбора и обработки активностей студентов во время решения задач по программированию. Первый инструмент - плагин для IntelliJ-based IDE, который позволяет собирать последовательные снепшоты кода, а также действия, совершаемые студентами во время написания кода, что позволит нам проанализировать процесс программирования. Плагин в настоящее время поддерживает Python, Java, Kotlin, и C++. Второй инструмент является инструментом для пост-обработки собранных плагином данных, а также их анализа и визуализации.

Для валидации и демонстрации работы набора инструментов к настоящему моменту мы собрали небольшой датасет. Он детально описывает процесс решения задач по программированию для 148 участников (разного возраста и с разным опытом программирования; решения задач представлены на различных языках программирования). Для публикации датасета необходимо полностью его анонимизировать в соответствии с нашей политикой конфиденциальности. Мы разработали дополнительный инструмент для решения этой задачи.

В настоящее время мы работаем над PyCharm плагином, который необходим для унификации Python кода путем применения различных трансформаций к PSI, таким как анонимизация переменных, удаление мертвого кода и т.д. Он поможет нам в дальнейшем максимально точно определить, действительно ли синтаксически разные фрагменты кода имеют одинаковую семантику. Данный инструмент нужен нам для алгоритма генерации подсказок (мы уже реализовали прототип алгоритма на Python, его можно найти здесь). Однако инструмент унификации кода может быть полезен также и в других проектах (например для поиска семантических клонов).

Участники