Мы автоматизировали проверку решений с кодом для различных наших курсов. В том числе и для курса по xv6, про который можно прочитать в отдельной статье. Одним из главных преимуществ является то, что это работает с Moodle.
Подробнее про архитектуру
Реализованная система task.cub-it.org, именуемая далее система, поддерживает работу с задачами типа grader, для проверки которого необходим ансамбль сервисов: сервис (XQueue), управляющий очередями присланных решений, а также сервисы, занимающиеся проверкой решений конкретных очередей (watchers).
-
XQueue определяет интерфейс для взаимодействия с внешними системами, проверяющими и оценивающими решения. Взаимодействие системы с XQueue:
Система отправляет решения в XQueue с помощью POST-запроса, содержащего URL-адрес обратного вызова, указывающий, куда следует отправить результат проверки.
Когда решение проверено, XQueue отправляет ответ по указанному URL.
Watchers – сервисы, опрашивающие XQueue на предмет наличия решений в обслуживаемой очереди, проводящие проверку полученных решений, а также отправляющие результат проверки обратно в XQueue.
Рассматриваемая система, в рамках взаимодействия с системой управления обучением (LMS, Moodle), представляет из себя “внешний инструмент” (англ. external tool), систему, предоставляющую материалы и обучающие задачи, расширяющие базовые возможности Moodle, взаимодействие с которой производится по стандарту IMS для взаимодействия средств обучения LTI. После получения результата проверки решения от XQueue, система перенаправляет его в LMS.
Таким образом, студенты могут загружать свои решения в наши курсы на Moodle, а система обеспечивает их проверку, возвращая результаты в обучающую систему Moodle.
Также мы запустили терминал, с которым студенты могут работать в Moodle. Но об этом расскажем позже, в отдельной статье.
Эта статья написана совместно с Дмитрием Ивановым.
kozlyuk
Мало! Watcher'ы полностью свои или на основе чего-то готового? Ограничены ли доступные им ресурсы, и если да, то как? Какая трудоемкость поднять все это (за вычетом написания специфичного кода), есть ли подводные камни?