В настоящее время профессии из сферы информационных технологий становятся все более востребованными и динамично развивающимися, требуя от высших учебных заведений и преподавателей IT-специальностей более эффективных методов обучения и оценки знаний [1]. При этом значительная часть процесса обучения сопряжена с написанием кода программ на различных языках программирования, набор которых с каждым днем становится шире. В этом контексте автоматизация процесса проверки заданий по написанию кода становится необходимой и актуальной задачей.
Автоматизация процесса проверки заданий по программированию имеет ряд значимых преимуществ. Прежде всего, она позволяет освободить время преподавателя от монотонной и рутинной работы, связанной с проверкой большого объема кода. Это время можно использовать для более важных задач, таких как разработка учебных материалов, проведение индивидуальных консультаций со студентами и повышение качества обучения в целом. Кроме того, автоматизированные системы проверки кода (АСПК) позволяют улучшить качество обратной связи для студентов. Быстрая и точная оценка и комментирование кода помогают студентам лучше понять свои ошибки и улучшить свои навыки программирования. АСПК также обеспечивают необходимую объективность. Оценки основываются на заданных критериях и алгоритмах, что исключает субъективные суждения и обеспечивает равные условия для всех студентов. АСПК могут легко масштабироваться для обработки большого объема работ, что особенно важно при проведении массовых офлайн- или онлайн-курсов. При этом время, необходимое для проверки одного задания, существенно сокращается. В условиях дистанционного обучения АСПК становится особенно ценной, поскольку облегчает оценку работ студентов и обеспечивает непрерывное обучение без необходимости присутствия в аудитории. В целом использование современных технологий в обучении, включая АСПК, демонстрирует передовой подход учебного заведения и его готовность использовать инновации для обеспечения высокого качества образования, что соответствует Указу Президента РФ от 21.07.2020 № 474 «О национальных целях развития Российской Федерации на период до 2030 года» [2].
Цель исследования заключается в разработке автоматизированной системы проверки кода студентов IT-специальностей.
Материалы и методы исследования
Рассмотрим различные подходы и инструменты, которые могут быть использованы для реализации АСПК, включая использование тестовых фреймворков, статический анализатор кода, различные плагины и расширения для интегрированных сред разработки (IDE), интеграция с системами управления версиями.
Использование тестовых фреймворков: тестовые фреймворки, такие как JUnit для Java, pytest для Python или Jasmine для JavaScript, позволяют написать автоматизированные тесты для разных аспектов кода, включая его функциональность, производительность и безопасность.
Статические анализаторы кода: инструменты статического анализа кода, например, ESLint для JavaScript или pylint для Python, автоматически проверяют код на соответствие стандартам кодирования, выявляют потенциальные ошибки и предупреждают о неправильном использовании языковых конструкций [3].
Плагины и расширения для IDE: многие современные интегрированные среды разработки (IDE), такие как Visual Studio Code, IntelliJ IDEA или PyCharm, предлагают плагины и расширения для автоматической проверки кода на лету, а также для выполнения автоматизированных тестов и анализа качества кода [4].
Все рассмотренные выше варианты реализации АСПК вполне пригодны для проверки кода в контексте разработки программного обеспечения, однако их сложно применить для проверки кода студентов, выполняющих определенное задание. Во-первых, все описанные системы напрямую не поддерживают обмен кодом и возможность его обсуждения со студентом. Во-вторых, использование конкретного инструментария накладывает ограничение на использование различных языков программирования в рамках одной АСПК. В-третьих, многие из описанных решений так или иначе являются коммерческими продуктами западных разработчиков, что в условиях санкций может накладывать определенные ограничения на их использование. Описанные недостатки можно преодолеть благодаря использованию в качестве основы для АСПК систем управления версиями. Использование систем управления версиями, таких как Git, в сочетании с автоматизированными средствами непрерывной интеграции и непрерывной доставки (CI/CD), позволяет автоматически проверять код, оставлять обратную связь и реализовать возможность проверки кода на разных языках программирования в рамках одной АСПК.
В работе предложено использовать систему контроля версий Git в качестве основы для создания АСПК. Следует отметить, что знание студентами основ системы контроля версий Git является необходимым условием для успешного применения АСПК в процессе обучения. Однако, как показывает опыт, подобные знания легко прививаются в рамках 5-часового лабораторного практикума и в свою очередь являются весьма полезными в контексте будущего трудоустройства по ряду причин, описанных ниже.
Git – это распределенная система контроля версий (DVCS), которая позволяет разработчикам отслеживать изменения в коде, работать совместно над проектами и управлять различными версиями кода [5]. В отличие от централизованных систем контроля версий, Git позволяет каждому разработчику иметь полную копию репозитория, что увеличивает надежность и гибкость работы. Git упрощает совместную работу над проектами, особенно в больших командах. Возможность создавать ветки и выполнять слияние изменений позволяет разработчикам работать над разными частями проекта одновременно, не мешая друг другу. Это важное умение для студентов, так как большинство проектов в индустрии разрабатываются коллективно. Git сохраняет историю всех изменений, сделанных в проекте, что позволяет разработчикам отслеживать и анализировать каждое из них в отдельности. Это полезно для выявления ошибок и анализа их причин. Студенты могут экспериментировать с новыми идеями без риска повредить основной код, что способствует более глубокому пониманию принципов разработки программного обеспечения. Git интегрируется с множеством современных инструментов и платформ, таких как GitHub, GitLab, Bitbucket и др. [6]. Знание Git предоставляет студентам доступ к этим инструментам, что позволяет им участвовать в открытых проектах open-source сообщества. Знание Git является необходимым требованием для большинства позиций в сфере разработки программного обеспечения. Это важный навык, который значительно повышает конкурентоспособность будущих специалистов на рынке труда.
Алгоритм работы АСПК на базе системы контроля версий Git и облачного сервиса GitHub в нотации BPMN 2.0 показан на рис. 1.
Рис. 1. Алгоритм работы АСПК на базе системы контроля версий Git и облачного сервиса GitHub в нотации BPMN 2.0
Преподаватель, использующий АСПК, начинает работу с создания репозитория с текущим заданием по написанию кода. Предполагается, что репозиторий создается на локальной машине педагога и далее отправляется на облачный сервис удаленных репозиториев GitHub. Здесь следует отметить, что использование GitHub в качестве основы для создания АСПК обусловлено высокой популярностью данного сервиса. Однако справедливо будет заметить, что и прочие подобные сервисы (GitLab, Bitbucket и др.), также обладают всем необходимым функционалом. Таким образом, на данном шаге алгоритма мы имеем репозиторий, который содержит файл с описанием задания. Затем ссылка на данный репозиторий отправляется студентам. Здесь может быть использован любой сервис обмена сообщениями либо система электронного обучения вуза. Получив сообщение, студент делает форк (fork) репозитория с заданием (рис. 2), то есть создает его копию в своем аккаунте облачного сервиса репозиториев, в нашем случае это GitHub. Затем студент клонирует упомянутый форк-репозиторий на свой локальный компьютер, использую команду git clone <URL репозитория>. В данном репозитории студент создает ветку, в качестве названия для которой выбирается фамилия студента. Команда для создания ветки git branch <название ветки>. Далее студент приступает к выполнению задания.
По завершении выполнения задания студент делает последний коммит командой git commit и отправляет изменения в свой удаленный репозиторий на облачном сервисе GitHub командой git push. Затем, используя инструмент Pull Request, студент отправляет задание на проверку преподавателю (рис. 2).
Рис. 2. Управляющие элементы на странице репозитория в GitHub для создания fork и pull request
При создании pull request преподаватель получает уведомление о новом решении на задание по написанию кода. Если в дальнейшем не требуются автоматические тесты, то на этом шаге можно остановиться, проверить код вручную и отправить комментарий непосредственно на странице pull request. В случае необходимости автоматической проверки кода в АСПК на базе Git и GitHub должны быть настроены инструменты GitHub Actions.
GitHub Actions – это встроенная в GitHub платформа автоматизации, предназначенная для упрощения выполнения различных задач в процессе разработки программного обеспечения. Этот набор инструментов позволяет автоматизировать такие процессы, как CI/CD, тестирование, развертывание и отправка уведомлений [7].
Как было отмечено выше, автоматическое тестирование кода можно настроить для абсолютного большинства современных языков программирования. Приведем в качестве примера алгоритм для настройки автоматической проверки кода на языке Python через GitHub Actions при создании pull request:
Создание файла конфигурации GitHub Actions:
1. Перейдите в репозиторий на GitHub.
2. В верхнем меню выберите вкладку Actions.
3. Нажмите на кнопку New workflow.
4. В появившемся окне выберите Set up a workflow yourself или один из предустановленных шаблонов, например Python application.
Создание основного файла конфигурации:
1. В каталоге репозитория должна быть создана директория .github/workflows.
2. В этой директории должен быть создан файл с расширением .yml, например python-app.yml (рис. 3).
Настройка кода проекта:
1. Убедитесь, что в вашем проекте есть файл requirements.txt для установки зависимостей, если они требуются.
2. Убедитесь, что у вас есть тесты в проекте. Например, создайте директорию tests и добавьте туда файл test_sample.py (рис. 4) с простым тестом.
Автоматическое выполнение GitHub Actions:
1. После создания pull request, GitHub Actions автоматически запустит конфигурацию, указанную в файле .github/workflows/python-app.yml.
2. На вкладке Actions в репозитории преподавателя можно будет наблюдать за ходом выполнения задачи, включая установку зависимостей, проверку стиля кода с помощью flake8 и выполнение тестов с помощью pytest.
Таким образом, GitHub Actions позволяет автоматизировать процесс проверки кода в рамках АСПК при создании pull request студентами. Это помогает обеспечить высокое качество кода и способствует выявлению ошибок.
Рис. 3. Код для файла python-app.yml
Рис. 4. Код для файла test_sample.py
Результаты исследования и их обсуждение
В данной статье была рассмотрена система автоматической проверки кода студентов IT-специальностей, основанная на использовании Git и GitHub. Подробно описаны преимущества этой системы, которые делают ее незаменимым инструментом в образовательной среде, позволяя преподавателям сосредоточиться на более важных аспектах обучения и профессионального развития студентов.
Следует также отметить направления дальнейшей работы, которые включают в себя: расширение функциональности: интеграция дополнительных инструментов для проверки кода, таких как статические анализаторы, профайлеры производительности и инструменты для тестирования безопасности; персонализация обратной связи: разработка методов автоматической генерации персонализированных комментариев и рекомендаций для студентов на основе их кода и истории работы; машинное обучение и искусственный интеллект: использование методов машинного обучения для анализа кода студентов, предсказания возможных ошибок и предоставления рекомендаций по улучшению кода; интеграция с учебными платформами: создание интеграций с популярными образовательными платформами и системами управления обучением, что позволит упростить процесс создания и управления учебными материалами.
Заключение
Возможность использования современных инструментов и платформ, таких как системы контроля версий, облачные сервисы удаленных репозиториев, скрипты для автоматической проверки кода на различных языках программирования, позволяют реализовать эффективную и надежную инфраструктуру для проверки заданий по созданию компьютерных программ различной сложности. Реализация таких систем особенно важна в условиях многочисленных групп и дистанционного обучения, которые соответствуют текущей ситуации в высшем техническом образовании в нашей стране.