Задачу проверяет не преподаватель, а тесты
Ученик написал программу, преподаватель посмотрел на неё и сказал «вроде верно». Через неделю выясняется, что на нуле она падает, а на отрицательном числе выдаёт ерунду. Проверка глазами ловит опечатки, но не крайние случаи — на них не хватает ни времени, ни внимания, когда в группе восемнадцать человек.
ItCube гоняет решение по нескольким наборам данных. У задачи есть кейсы: вход, ожидаемый ответ, баллы. Часть кейсов скрытая — ученик видит только «сошёлся или нет», без входа и без ответа. Иначе решение подгоняют под известный ответ вместо того, чтобы заставить его работать. Первая версия сервиса жила в 2023 году на процедурном PHP; от неё осталась только предметная область.
Что внутри
Четырнадцать языков без своей песочницы
Python, JavaScript, TypeScript, PHP, C, C++, Java, C#, Go, Rust, Ruby, Паскаль, SQL, Bash. Код уходит на Wandbox: держать инфраструктуру для запуска чужого кода школьной платформе не по средствам, а там она уже есть.
Одна площадка вместо трёх — из-за stdin
Go Playground не принимает входные данные, а без них не существует тест-кейса с вводом, то есть и настоящей контрольной. Wandbox покрывает всё сам, включая Rust, Паскаль и SQL.
Проверка в очереди, а не в запросе
Не архитектура ради архитектуры, а следствие замера: одна сборка на Go идёт около двадцати секунд, пять кейсов — минуту. Кейсы уходят параллельно, страница опрашивает результат.
Тесты с таймером и контрольные
Когда время выходит, ответы отправляются сами. Контрольная собирает тесты и задачи в одну работу с окном сдачи, а ведомость приводит балл каждой работы к назначенному ей весу.
Журнал, который различает группы
Отметка привязана к группе и, если известно, к занятию. В схеме 2023 года посещаемость была парой «ученик и дата», и у ходящего на два направления день был неразличим.
Три языка, ключ — сама строка
Русский, английский, немецкий по схеме gettext: непереведённое остаётся читаемым текстом, а не именем ключа посреди страницы. Команда сверяет словари с кодом, тест не даёт им разъехаться.
Панель, которая отвечает на вопросы
Главная таблица — задачи по доле решивших, снизу вверх: она показывает тему, которую стоит переобъяснить, чего не сделает ни один счётчик активности. Рядом посещаемость по неделям и группам, сдачи по дням, трудные вопросы теста.
Кабинет родителя без доступа к коду
Взрослый видит посещаемость, результаты, расписание и контрольные своих детей. Кода ребёнка не видит намеренно: у родителя вопросы «ходит ли» и «справляется ли», разбор решения — дело преподавателя.
Скриншоты