Как автоматически проверять лабораторные работы по программированию: пять способов проверки, инструменты от бесплатного Яндекс.Контеста и плагинов Moodle до автогрейдера, план внедрения из семи шагов и проблемы, о которые спотыкаются на второй неделе. Apricot собирает и тестирует лабы студентов в изолированном Docker-контейнере и ставит балл в ведомость: 80% работ без участия преподавателя. Python, C++, Java, Go, Bash, SQL, Git, Docker, ML. Кафедры МФТИ, ВШЭ, МГТУ и Центрального университета.
● МФТИ, ВШЭ, МГТУ, Центральный университет · курсы до 400 человек
Определение, из-за чего ручная проверка лаб не масштабируется и что именно берёт на себя автоматика.
Автоматическая проверка лабораторных работ — это запуск решения студента в изолированной среде на тестах преподавателя с выставлением балла без участия человека. Преподаватель один раз готовит тесты, критерии и лимиты, а система прогоняет через них каждую сдачу и возвращает студенту лог: какие тесты прошли, какие упали и почему. Проверять вручную остаются только спорные и нестандартные решения.
Проверка лабораторных работ по программированию — самая массовая и рутинная нагрузка преподавателя. Каждую лабу нужно скачать, собрать, запустить, прогнать тесты, сверить вывод с эталоном — и так десятки раз за вечер. К сороковой работе вы уже не проверяете, а пролистываете. Половина времени уходит на решения, которые не собираются или не проходят первый тест.
Машина закрывает всё, у чего есть однозначный ответ: собирается ли код, проходят ли тесты, укладывается ли решение в лимиты, соблюдён ли дедлайн. Оценка архитектуры, стиля и глубины понимания остаётся за человеком — но только для работ, которые уже прошли тесты. На Apricot так работают кафедры МФТИ, ВШЭ, МГТУ им. Баумана и Центрального университета: один преподаватель ведёт курс до 400 студентов без ассистентов на рутинной проверке.
Способы комбинируются: типовая лабораторная проходит через два-три из них по очереди.
Программа запускается на наборе входных данных, вывод сравнивается с эталоном. Самый распространённый способ для алгоритмов и структур данных; частая причина «незачёта» — формат вывода, поэтому его нужно проговаривать в условии.
Преподаватель даёт шаблон тестов или студент пишет свои, система запускает их против решения. Подходит для объектно-ориентированных и модульных лабораторных, где важен интерфейс, а не вывод в консоль.
PEP8, clang-tidy, Checkstyle и подобные проверяют стиль и потенциальные ошибки. Не заменяют функциональные тесты, но снимают с преподавателя рутину оформления и дают студенту точный список замечаний.
Время выполнения, память, размер решения, запрет на готовые сортировки или библиотеки там, где алгоритм нужно реализовать самому. Решение, которое формально проходит тесты, но нарушает условие, не получает балл.
Сравнение работ студентов между собой, чтобы заметить копирование. Полезно как сигнал для преподавателя, а не как основной критерий оценки: похожие решения типовой задачи бывают и у честных студентов.
Для SQL, Docker и ML сравнивать вывод бесполезно: запрос выполняется на реальной базе и сравнивается выборка, образ собирается и проверяется поведение контейнера, модель оценивается по метрике на отложенной выборке.
Честно про чужие: у каждого инструмента есть сценарий, где он лучше нас.
Сверено 2026-09-07
Подробное сравнение одиннадцати систем — на странице «Сравнение систем проверки заданий».
От разбора типов лабораторных до пилота на одном курсе. Полное внедрение занимает до двух недель.
Алгоритмические задачи со входом и выходом, проекты из нескольких файлов, SQL-запросы, Docker и инфраструктура, ML-модели. Тип определяет способ проверки: для первых хватает тестов ввода-вывода, для остальных нужен запуск в окружении курса.
Минимум пять-десять тестов на задание: обычные случаи, граничные значения, отрицательные сценарии. Часть тестов сделайте скрытыми, чтобы решение нельзя было подогнать под примеры из условия.
Алгоритмический курс — контест, курс в Moodle — плагины, сдача через Git — CI, лабораторные с SQL, Docker, ML и ведомостью — автогрейдер. Сочетать можно: алгоритмы в контесте, остальное в автогрейдере.
Код студента запускается в отдельном контейнере с ограничением процессора, памяти, времени и сети, без доступа к хосту и чужим посылкам. Окружение проверки одно для всех и совпадает с тем, что описано в условии.
Стиль, статический анализ, время и память выносятся в отдельные проверки с собственным весом. Так студент видит, что упало — тест или оформление, а балл за функциональность не смешивается с баллом за стиль.
Максимальный балл, веса тестов, дедлайны, штрафы за просрочку, правила пересдачи. Студент должен видеть, на каком тесте упало решение и какой был вывод, а неудачная посылка — получать статус «на доработку» с открытой формой.
Возьмите один курс, два-три задания и посылки прошлого семестра. Смотрите на время настройки задания, на то, что видит студент после проверки, и куда попал балл. В Apricot пилот на один курс бесплатный, настройка занимает 1–2 дня.
Платформа Apricot поддерживает автоматическую проверку лабораторных работ по широкому спектру дисциплин и технологий.
Лабораторные по Python, C++, Java, Go, Rust: компиляция, запуск тестов, проверка вывода, анализ кода.
Лабораторные по SQL: автоматическая проверка запросов к реальной базе данных с мгновенной обратной связью.
Лабораторные по Git: визуальные упражнения, проверка веток, коммитов и истории репозитория.
Лабораторные по Dockerfile, docker-compose, Kubernetes-манифестам, CI/CD-пайплайнам и Bash-скриптам.
Лабораторные по ML: автоматическая оценка моделей по метрикам качества на тестовых данных, поддержка GPU.
Лабораторные по обработке больших данных и численным методам с автоматической верификацией результатов.
То, что всплывает после первого дедлайна, если не продумать заранее.
Студенты подбирают решение под примеры из условия. Помогают скрытые тесты, рандомизация входных данных и запрет готовых функций там, где нужен свой алгоритм.
Слишком жёсткий тест валит верные решения из-за пробела в выводе, слишком мягкий пропускает ошибки. Если многие падают на одном тесте, сначала проверьте тест.
«У меня локально работает» закрывается одним образом проверки для всех: версии компиляторов и библиотек совпадают с условием, а студент и преподаватель смотрят на один лог.
За час до дедлайна сдают все. Нужна очередь, изоляция каждой посылки и лимиты по времени, чтобы одно зависшее решение не остановило проверку потока.
Расскажите про курс — сколько студентов, какие языки и дисциплины. Пришлём расчёт экономии преподавательских часов и предложение под ваши объёмы. Настройка — 1–2 дня, пилот на один курс — бесплатно.