В статье авторы исследуют современные сервисы проверки лабораторных работ, а также разрабатывают свой.
Ключевые слова: автоматизированная проверка лабораторных работ, образовательные технологии, веб-приложение .
1. Анализ технологий и решений автоматического тестирования лабораторных работ
1.1. Анализ существующих решений
Современные сервисы автоматизированной проверки работ призваны упростить жизнь преподавателей и ускорить получение обратной связи для студентов. Они используют передовые технологии: статический и динамический анализ кода, тестирование в изолированных средах (песочницах), а также интеграцию с системами управления обучением (LMS). Однако, несмотря на их возможности, ни одна из платформ пока не предлагает идеального решения. Сейчас мы рассмотрим некоторые из них и выделим у каждой свои сильные и слабые стороны.
Stepik — популярная образовательная платформа, позволяющая преподавателям загружать учебные материалы и автоматически проверять лабораторные работы. С одной стороны, она поддерживает множество языков программирования и предоставляет удобные инструменты для создания интерактивных заданий. С другой — отличается излишней строгостью: даже лишний пробел или неверный перенос строки может привести к ошибке проверки. Кроме того, Stepik не подходит для задач, требующих гибкости — например, для тестирования сетевых стендов или работы с аппаратным обеспечением [1].
Яндекс.Контест — мощный инструмент для проведения соревнований и автоматической проверки задач по программированию. Он поддерживает широкий спектр языков (от Python до MATLAB) и позволяет гибко настраивать временные рамки для контрольных и олимпиад. Преподаватели также могут отслеживать честность выполнения работ. Однако платформа не лишена недостатков: сложные задания (например, взаимодействие с базами данных или сетевыми сервисами) настраиваются с трудом, а аналитика ограничивается простой статистикой «сдано/не сдано» без детального разбора ошибок [2].
GitHub Classroom — решение, идеально подходящее для проектной работы. Оно интегрируется с GitHub и позволяет настраивать автоматические тесты через GitHub Actions, что особенно удобно для веб-разработки и многомодульных программ. Кроме того, система проверяет не только код, но и сопутствующую документацию. Однако её использование требует от студентов хотя бы базового понимания Git, что может стать барьером для начинающих. Ещё один минус — отсутствие встроенного антиплагиата, который приходится добавлять отдельно [3].
Таким образом, несмотря на широкий выбор инструментов, ни один из них не покрывает все потребности кафедры «Телекоммуникационные системы». Stepik слишком жёсткий, Яндекс.Контест не подходит для сложных сетевых задач, а GitHub Classroom требует дополнительных усилий по адаптации. Это говорит о необходимости разработки более специализированного решения, учитывающего специфику технических дисциплин.
1.2. Постановка задачи и требования к системе
Разработка эффективной системы автоматизированной проверки лабораторных работ требует четкого определения задач и требований, которые обеспечат её функциональность, надежность и удобство использования.
Постановка задачи.
Основная цель проекта — разработать новую систему проверки, которая сможет заменить рутинный труд преподавателей при оценке лабораторных работ. Новое решение должно не просто автоматизировать процесс, но и сделать его более эффективным и прозрачным. Для студентов система станет персональным ассистентом, который моментально укажет на ошибки и подскажет, как их исправить. Преподаватели же получат мощный аналитический инструмент, позволяющий отслеживать успеваемость всей группы в режиме реального времени.
Ключевой особенностью системы должна стать её адаптивность. Она должна легко подстраиваться под специфику разных дисциплин — от классического программирования на Python и C++ до работы с сетевыми симуляторами в GNS. При этом важно сохранить простоту использования — интерфейс должен быть интуитивно понятен как для технически подкованных пользователей, так и для тех, кто только начинает свой путь в IT.
1.3. Требования к системе
Функциональные:
1. Автоматизированная проверка работ на Python (unittest/pytest), C/C++ (Google Test), MATLAB, GNS3.
2. Формирование отчетов:
Для студентов: ошибки с рекомендациями;
Для преподавателей: аналитика успеваемости (экспорт в PDF/CSV).
3. Веб-интерфейс с адаптивным дизайном.
4. Интеграция с ОРИОКС МИЭТ для авторизации.
5. Разграничение прав: студент, преподаватель, администратор.
Нефункциональные:
1. Производительность:
Проверка ≤1 мин/работу;
Параллельная обработка запросов.
2. Масштабируемость: поддержка новых языков через модули.
3. Технологии:
Клиент: React/Vue.js;
Сервер: Node.js (Express) + PostgreSQL.
4. Развертывание: Docker-контейнеры.
2. Техническая реализация сервиса
2.1. Программная архитектура
Программная архитектура сервиса представлена на рисунке 1. Основу системы составляют клиентское и серверное приложение. Приложения связаны общим веб-сервером Nginx. Клиентское приложение реализовано на языке TypeScript с использованием библиотеки React, оно использует дополнительный nginx сервер для обработки скриптов и выдачи их в браузер. Серверное приложение также написано на языке TypeScript с использованием фреймворка Express.js и базой данный PostgreSQL, оно использует общий nginx сервер для балансировки нагрузки.
Рис. 1. Структурная схема сервиса автоматизированного тестирования лабораторных работ
Описанный подход к разработке сервиса автоматизированного тестирования лабораторных работ позволит обеспечить модульность приложения, следовательно расширить функционал или масштабировать его при необходимости в дальнейшем. Кроме этого, при модульном подходе упрощается процесс отладки отдельных компонент сервиса, снижается время локализации проблем при их наличии.
Современные образовательные процессы всё активнее интегрируют цифровые технологии, направленные на повышение эффективности обучения, контроля знаний и автоматизации рутинных задач преподавателя. Одним из таких решений стал разработанный веб-сервис, предназначенный для автоматической проверки лабораторных и практических заданий студентов. Он предоставляет удобные интерфейсы для разных категорий пользователей и включает в себя модули анализа, хранения и представления результатов. В этой статье рассмотрена техническая реализация системы, включающая клиентскую и серверную части, модуль автоматической проверки, базу данных и особенности взаимодействия компонентов.
2.2. Клиентская часть
Фронтенд-составляющая сервиса реализована как одностраничное веб-приложение на базе библиотеки React и языка TypeScript. Это позволило создать типобезопасную и модульную архитектуру, что значительно упростило поддержку и развитие проекта. Все элементы интерфейса разработаны в виде переиспользуемых компонентов, охватывающих такие функции, как авторизация, выбор дисциплин, загрузка работ и просмотр результатов.
Интерфейс приложения разделён на два режима: студенческий и административный. В студенческом режиме пользователь может выбрать нужную дисциплину, загрузить свою работу и получить подробный отчёт о результатах проверки с баллами, ошибками и рекомендациями. Административный режим предназначен для преподавателей и администраторов и предоставляет средства для анализа успеваемости, фильтрации данных по группам, а также экспортирования отчетов в различные форматы.
Рис. 2. Интерфейс пользователя
Для стилизации интерфейса применяется гибкий подход, сочетающий модульные CSS-стили, встроенные стили для динамических компонентов и библиотеку готовых визуальных компонентов. Адаптивная верстка позволяет комфортно работать с сервисом как на настольных компьютерах, так и на мобильных устройствах. Кроме того, предусмотрена поддержка многоязычного интерфейса, что делает систему удобной для пользователей с различными языковыми предпочтениями.
2.3. Серверная часть
Серверная логика реализована с использованием платформы Node.js и фреймворка Express.js. Она отвечает за обработку запросов от клиента, взаимодействие с базой данных, а также запуск модулей проверки студенческих работ. Одной из ключевых задач сервера является аутентификация и авторизация пользователей. Для этого используется интеграция с LDAP-сервером учебного учреждения, что позволяет применять единую систему входа на основе институциональных учётных данных. После успешной проверки пользовательских данных формируется токен доступа, содержащий информацию о роли (студент, преподаватель, администратор), сроке действия и других параметрах, необходимый для дальнейших запросов к защищённым ресурсам сервиса.
Сервер также управляет запуском автоматической проверки загруженных работ. В зависимости от типа задания и языка программирования вызывается соответствующий скрипт анализа, результаты которого далее сохраняются и отправляются клиенту в виде отчёта.
Рис. 3. Интерфейс администратора
2.4. Модуль автоматической проверки
Автоматическая проверка студенческих работ реализована на языке Python в виде набора специализированных скриптов. Эти скрипты запускаются на стороне сервера и обеспечивают выполнение ряда задач: получение загруженного кода, запуск соответствующих тестов, сбор результатов и генерация отчета. Проверка реализуется с использованием стандартных фреймворков тестирования — таких как unittest или pytest для Python, а также Google Test для программ на языке C++. Скрипты выполняют как функциональное тестирование, так и проверку на наличие синтаксических и логических ошибок.
Отчёт, формируемый в результате проверки, содержит баллы, комментарии по каждому этапу выполнения, а также общие рекомендации по улучшению качества кода. Для заданий сетевого профиля (например, при работе с симулятором GNS3) предусмотрен отдельный механизм валидации конфигураций, основанный на взаимодействии с API симулятора. Это позволяет анализировать не только программный код, но и правильность построения сетевых схем.
С целью обеспечения безопасности и независимости выполнения проверок, каждая работа запускается в отдельной изолированной среде, реализованной на базе контейнерной технологии. Это исключает возможность вмешательства одного процесса в другой и позволяет обрабатывать сразу несколько работ параллельно.
2.5. База данных
Для хранения всех данных используется реляционная система управления базами данных PostgreSQL. В ней хранятся сведения о пользователях, дисциплинах, лабораторных работах, результатах проверок и другая необходимая информация. Учетные записи синхронизируются с LDAP-сервером, что упрощает администрирование и управление доступом.
Особое внимание при проектировании структуры базы данных было уделено производительности и целостности данных. Для ускорения операций поиска и фильтрации активно применяются индексы по ключевым полям. При выполнении операций записи и обновления используются транзакции, обеспечивающие консистентность данных даже при одновременной работе большого числа пользователей.
2.6. Взаимодействие компонентов
Обмен данными между клиентской и серверной частями осуществляется по протоколу HTTP с использованием асинхронных запросов. Все защищённые запросы сопровождаются передачей токена авторизации, обеспечивая тем самым доступ только к разрешённым данным. Ответы сервера стандартизированы по структуре, что упрощает их обработку на клиентской стороне и повышает устойчивость интерфейса к ошибкам.
Сервер обеспечивает выполнение всех операций по логике взаимодействия пользователя с системой: от авторизации до получения результатов проверки. Запросы обрабатываются централизованно и возвращаются клиенту в формате, удобном для отображения и дальнейшей обработки.
2.7. Особенности реализации и производительность
Проект изначально создавался с учётом модульности и возможности масштабирования. Клиент и сервер разработаны как независимые части, что позволяет развивать их отдельно, в том числе внедрять поддержку новых языков программирования и форматов заданий.
Безопасность обеспечивается как на уровне аутентификации, так и в процессе запуска проверок. Вся передаваемая информация защищается с использованием современных алгоритмов шифрования, а запуск кода осуществляется в изолированных средах.
Производительность системы оптимизирована за счёт кэширования статических ресурсов и использования пула соединений к базе данных. Это позволяет обслуживать большое количество пользователей одновременно без потери скорости работы. Среднее время проверки одной работы составляет около 45 секунд, что удовлетворяет требованиям учебного процесса и позволяет использовать систему в рамках реального расписания занятий.
2.8. Заключение
Разработанный сервис представляет собой гибкое, надёжное и масштабируемое решение для автоматической проверки студенческих работ. Он сочетает в себе современные веб-технологии, безопасную архитектуру, модульность и высокую производительность. Благодаря поддержке различных языков программирования, интеграции с учебными сервисами и адаптивному интерфейсу, система успешно внедрена в образовательный процесс и демонстрирует высокую эффективность как для студентов, так и для преподавателей.
3. Развертывание сайта на тестовом сервере
Развертывание сайта — это отдельная часть разработки приложения, предназначенная для тестирования написанных компонентов, моделирования угроз и проверки нагрузки на сайт.
Docker-это система контейнеризации, которая помогает развертывать приложения в изолированной среде. С точки зрения человека, контейнеризация удобна тем, что не надо самому скачивать большое количество пакетов, потому что прописав несколько команд, контейнер сам скачает нужные зависимости. Для системы Docker удобен изоляцией контейнеров, каждый контейнер работает в изолированном пространстве, что предотвращает конфликты между приложениями. Контейнеры легко масштабируется и запускаются быстрее, чем виртуальные машины.
NGINX-это веб-сервер с открытым исходным кодом, который позволяет развернуть несколько веб-страниц.
В проекте будем использовать два Dockerfile для frontend и backend. Также в развертывании нужен NGINX: один для обработки статических файлов frontend, а второй для работы всего сервиса.
Современные веб-приложения требуют комплексного подхода к развёртыванию, особенно когда речь идёт о системах с микросервисной архитектурой. В данном проекте процесс деплоя реализован через связку контейнеризации Docker, оркестратора Docker Compose и веб-сервера Nginx, что обеспечивает воспроизводимость окружения и отказоустойчивость.
Основу инфраструктуры составляют изолированные Docker-контейнеры. Frontend-часть, построенная на React, упаковывается в образ с двухэтапной сборкой: на первом этапе выполняется компиляция статических файлов через Webpack, на втором — оптимизированный образ на базе Nginx обслуживает готовые ресурсы. Backend-сервис на Node.js размещается в отдельном контейнере, где инициализируется Express-сервер и подключается к PostgreSQL. База данных разворачивается из официального образа Postgres с предустановленными параметрами аутентификации и health-check-проверками, гарантирующими корректный запуск перед подключением backend.
Ключевая роль в системе отводится Docker Compose. Этот инструмент описывает взаимосвязи между сервисами в YAML-манифесте, автоматизируя сборку образов и управление жизненным циклом контейнеров. Особое внимание уделено порядку инициализации: сначала стартует база данных, затем — дождавшись её готовности через механизм health-check — запускается backend, и только после этого активируется frontend. Nginx-контейнер завершает цепочку, выступая обратным прокси-сервером. Он перенаправляет пользовательские запросы по принципу маршрутизации: статические ресурсы (HTML, CSS, JS) обслуживаются напрямую из frontend-контейнера, тогда как API-вызовы к /api/v1/* проксируются на backend-сервис.
Для работы в production-режиме конфигурация Nginx дополняется оптимизациями: кэшированием статики, gzip-сжатием и лимитами запросов. SSL-терминация реализуется через Let's Encrypt с автоматическим обновлением сертификатов. Важной особенностью является использование Docker-сетей — все контейнеры объединены в изолированную подсеть «app_network», что исключает несанкционированный доступ извне и минимизирует attack surface.
Процесс развёртывания сводится к трём командам:
1. Клонирование репозитория с Dockerfile и compose-манифестом;
2. Сборка образов через docker-compose build;
3. Запуск системы в detached-режиме: docker-compose up -d.
Такая архитектура обеспечивает мгновенное масштабирование: для увеличения производительности backend-сервиса достаточно добавить реплики в compose-файл. Мониторинг реализуется через Prometheus и Grafana, собирающие метрики из каждого контейнера. При обновлениях используется blue-green-деплой: новая версия системы разворачивается параллельно со старой, а Nginx перенаправляет трафик после успешных smoke-тестов.
Главное преимущество подхода — идентичность окружений на всех этапах разработки. Контейнеры, собранные на локальной машине разработчика, гарантированно работают в тестовой и production-среде. Это устраняет проблемы с «работает на моём компьютере» и сокращает время на устранение конфликтов зависимостей. Интеграция с CI/CD-системами (GitLab CI, GitHub Actions) позволяет автоматизировать pipeline: линтеры, юнит-тесты и сборка образов запускаются при каждом коммите, а ручное подтверждение требуется только для деплоя в прод.
Таким образом, предложенная инфраструктура не просто упрощает развёртывание, но и формирует фундамент для устойчивой работы распределённых систем. Сочетание изоляции контейнеров, интеллектуальной маршрутизации и автоматизированных pipelines делает процесс деплоя предсказуемым, что критически важно для образовательных систем с высокими требованиями к доступности.
4. Заключение
В ходе выполнения работы был разработан автоматизированный сервис проверки лабораторных работ, предназначенный для использования в образовательных учреждениях. Основной целью проекта являлось создание удобного, масштабируемого и безопасного решения, способного сократить временные затраты преподавателей на проверку заданий и обеспечить студентов мгновенной обратной связью.
Реализованная система состоит из двух основных компонентов: клиентского и серверного приложений. Клиентское приложение поддерживается во всех современных браузерах и выполнено с применением передовых веб-технологий, таких как React, TypeScript, Redux, Material UI и Axios.
Это позволяет обеспечить высокое качество и надежность приложения, а также удобство и интуитивность его использования для конечного пользователя. Серверное приложение реализовано на основе популярного фреймворка Express и базы данных PostrgreSQL. Это обеспечивает высокую производительность и масштабируемость серверной части приложения, а также удобство и гибкость в работе с базой данных.
В рамках разработки также успешно была выполнена интеграция сервиса с авто тестами и получены тестовые отчеты. Также удачно интегрирован LDAP, позволяющий контролировать всех пользователь сайта.
Для повышения отказоустойчивости и надежности системы были применены инструменты сквозного тестирования. Это позволяет выявить и исправить возможные ошибки и недоработки на ранних этапах разработки, а также обеспечить высокое качество и стабильность работы приложения в производственной среде.
Литература:
1. Zhilmagambetova, R., Kopeyev, Z., Mubarakov, A., Alimagambetova, A. The Role of Adaptive Personalized Technologies in the Learning Process: Stepik as a Tool for Teaching Mathematics //International Journal of Virtual and Personal Learning Environments (IJVPLE). — 2023. — Т. 13. — №. 1. — С. 1–15.
2. Гостева И. Н., Мирошникова А. Ю. Особенности выполнения этапа добавления задач средствами сервиса онлайн-проверки заданий по информатике //Актуальные проблемы теории и практики обучения математике, информатике и физике в современном образовательном пространстве. — 2018. — С. 117–125.
3. Angulo M. A., Aktunc O. Using GitHub as a teaching tool for programming courses //2018 Gulf Southwest Section Conference. — 2019.
4. Kaur A. App Review: Trello //Journal of Hospital Librarianship. — 2018. — Т. 18. — №. 1. — С. 95–101.
5. Shchetynina, O., Kravchenko, N., Horbatiuk, L., Alieksieieva, H., Mezhuyev, V. Trello as a tool for the development of lifelong learning skills of senior students //Postmodern Openings. — 2022. — Т. 13. — №. 2. — С. 143–167.
6. Milojević, D., Macuzic, I., Djordjevic, A., Savković, M., Djapan, M. COMPARATIVE ANALYSIS OF SOFTWARE TOOLS FOR AGILE PROJECT MANAGEMENT. — 2023.
7. Документация React / [Электронный курс]// React: [Сайт]. — URL: https://ru.react.js.org/docs/getting-started.html / (дата обращения: 25.11.2024).
8. Документация фреймворка React / [Электронный ресурс] // React: [сайт]. — URL: https://react.dev/learn / (дата обращения: 10.10.2024).
9. Aggarwal S. Modern web-development using reactjs //International Journal of Recent Research Aspects. — 2018. — Т. 5. — №. 1. — С. 133–137.
10. Boduch A., Derks R. React and React Native: A complete hands-on guide to modern web and mobile development with React. js. — Packt Publishing Ltd, 2020.
11. Sahani A. K., Singh P., Jeyamani V. P. Web Development Using Angular: A Case Study //J. Infor. Electr. Electron. Eng. — 2020. — Т. 1. — №. 2. — С. 1–7.
12. Tadi S. Expanding Web Development Horizons: Integrating WebAssembly with React, Vue, and Angular //Journal of Scientific and Engineering Research. — 2021. — Т. 8. — №. 10. — С. 250–261.
13. Saundariya, K., Abirami, M., Senthil, K. R., Prabakaran, D., Srimathi, B., Nagarajan, G. Webapp service for booking handyman using mongodb, express JS, react JS, node JS //2021 3rd International Conference on Signal Processing and Communication (ICPSC). — IEEE, 2021. — С. 180–183.
14. Куницын В. И., Новикова Т. П. Особенности написания баз данных PostgreSQL //Новые аспекты моделирования систем и процессов. — 2023. — С. 364–369.
15. Сараев П. В., Комаров М. Н. Организация интервальных баз данных в СУБД PostgreSQL //Вести высших учебных заведений Черноземья. — 2016. — №. 2. — С. 52–59.
16. Батыр Э. И. Миграция базы данных Oracle в PostgreSQL: основные подходы //Информационно-компьютерные технологии в экономике, образовании и социальной сфере. — 2018. — №. 1. — С. 38–47.
17. Кукарцев В. В., Бадарчы С. А. Сравнение систем контроля версий: Git, Mercurial, CVS и SVN //Синергия наук. — 2018. — №. 19. — С. 538–548.
18. Бедняк С. Г., Кузнецова А. А. Система контроля версий Git //Актуальные проблемы информатики, радиотехники и связи. — 2023. — С. 148–148.
19. Руденко В. А. Контейнеризация сервисов с помощью инструмента docker-compose и практическое применение в НФИ КемГУ //Информационные технологии. — 2019. — С. 109–109.
20. Чиганов Д. Р. Docker: ключ к контейнеризации и масштабируемости //Вестник науки. — 2023. — Т. 4. — №. 7 (64). — С. 270–272.