Мы автоматизировали проверку решений с кодом для различных наших курсов. В том числе и для курса по 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. Но об этом расскажем позже, в отдельной статье.

Эта статья написана совместно с Дмитрием Ивановым.

Комментарии (1)


  1. kozlyuk
    28.12.2021 12:54

    Мало! Watcher'ы полностью свои или на основе чего-то готового? Ограничены ли доступные им ресурсы, и если да, то как? Какая трудоемкость поднять все это (за вычетом написания специфичного кода), есть ли подводные камни?