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

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

Coding Assistant

Руководитель проекта: Тимофей Брыксин
Статус: Активный

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

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

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

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

Участники