Открытая система для дистанционного сопровождения процесса прохождения онлайн-экзаменов

в 15:14, , рубрики: javascript, kurento, mongodb, node-webkit, node.js, open source, WebRTC, Веб-разработка, дистанционное образование, свободное программное обеспечение

Летом прошлого года в Университете ИТМО прошел дистанционный экзамен для поступающих в аспирантуру, а в январе этого года для слушателей курсов Национальной платформы открытого образования, желающих получить подтвержденный сертификат, была предоставлена возможность пройти итоговую аттестацию по выбранному курсу под присмотром проктора. Все это было организовано на базе открытой системы дистанционного надзора, специально разработанной для этих целей. В данной статье я постараюсь провести обзор системы, а также рассказать о некоторых особенностях ее разработки.

Дистанционный экзамен с проктором

Система дистанционного надзора (далее СДН) предназначена для сопровождения процесса территориально удаленного прохождения экзаменов, подтверждения личности испытуемого и подтверждения результатов его аттестации. Конечно, эта система не уникальна, есть зарубежные сервисы, предоставляющие услуги дистанционного ассистирования, такие как ProctorU или Mettl Online Assessment, а есть отечественный сервис Экзамус. Однако у разрабатываемой СДН есть основное отличие — это не услуга, а программное обеспечение с открытым исходным кодом, которое может использовать в своих целях любой желающий, будь то организация собственного прокторинг-центра, проведение подтвержденных аттестаций в своей системе электронного обучения или что-то еще. Конечно, для полноценного функционирования системы нужны люди (прокторы), рабочие места с камерами и аудиогарнитурами, а также серверное оборудование и системные администраторы для развертывания и обслуживания системы. Но когда необходимая инфраструктура уже есть, остается вопрос программного обеспечения. И именно на этот вопрос дает ответ данная система.

Работа с СДН делится на две основные части: интерфейс испытуемого и интерфейс проктора. Сначала испытуемый скачивает и запускает приложение, авторизуется в нем и видит список доступных ему экзаменов для прохождения в режиме прокторинга (список экзаменов создается заранее, либо автоматически подгружается из LMS через API). Далее он может запланировать время прохождения этих экзаменов, на каждый запланированный экзамен испытуемому назначается доступный в данное время проктор. Доступное время формируется на основе расписания, которое составляют прокторы, у них для этого есть соответствующий интерфейс. Далее студент в указанное им время через приложение подключается к проктору и экзамен начинается. Проктор сопровождает испытуемого на протяжении всего времени прохождения экзамена, в его обязанности входит проведение процедуры идентификации и отслеживание нарушений правил прохождения экзамена. После завершения сеанса прокторинга студент видит заключение проктора по данному экзамену и его комментарий.

Интерфейс испытуемого до начала экзамена
Интерфейс испытуемого до начала экзамена

Проктор работает с СДН также через приложение. Главный интерфейс проктора — это таблица расписания экзаменов, где он видит все экзамены, на которые он назначен, и их состояние, которое меняется в режиме реального времени. Когда студент подключается к экзамену, проктор это видит, подключается к нему, и экзамен начинается. Проктор видит испытуемого через веб-камеру, а также видит его рабочий стол. Перед началом экзамена проктор должен провести процедуру идентификации, при которой студент показывает удостоверяющий личность документ, а проктор сверяет указанные данные в профиле испытуемого с фотографией документа и лицом испытуемого на веб-камере. При успешной идентификации данные и фотография документа сохраняются в протоколе экзамена, а испытуемому открывается доступ к экзамену в LMS. После этого испытуемый заходит в LMS и приступает к выполнению заданий. На протяжении всего экзамена проктор может делать заметки и сохранять скриншоты в протоколе экзамена, которые могут пригодиться при разрешении спорных моментов в будущем. По окончанию экзамена проктор подписывает протокол и выносит заключение, которое отображается студенту и передается в LMS по API. В случае нарушения правил прохождения экзамена проктор может прервать экзамен с указанием причины досрочного завершения экзамена. Проктор может одновременно наблюдать за несколькими испытуемыми, число одновременных сессий ограничивается возможностями проктора, ресурсами его компьютера и пропускной способностью сети.

Таблица экзаменов в интерфейсе проктора
Таблица экзаменов в интерфейсе проктора

Интерфейс проктора, процедура идентификации личности
Интерфейс проктора, процедура идентификации личности

Общая архитектура СДН приведена рисунке ниже. Все используемые технологии являются открытыми и распространяются под свободными лицензиями.

Архитектура СДН

Система полностью написана на JavaScript, в качестве среды разработки использовалась облачная IDE Cloud9. Основные части системы — это сервер на node.js и express, база данных MongoDB с хранением небольших файлов в GridFS, медиасервер Kurento, хранилище архива медиаданных (видеозаписи сеансов прокторинга) с доступом по протоколу WebDAV и декстопное приложение на node-webkit (в качестве альтернативы приложению можно использовать специальное расширение Chrome для работы из веб-браузера).

В качестве основы для передачи видео был выбран протокол WebRTC и медиасервер Kurento для организации и управления медиапотоками между клиентами, а также записи этих потоков. На данный момент Kurento удовлетворяет всем потребностям как по функционалу, так и по производительности, однако стоит упомянуть другие похожие решения — это Licode и Jitsi Videobridge.

Авторизация в СДН основана на модуле PassportJS, на данный момент поддерживается вход по логину и паролю или через OAuth. При необходимости можно добавить стратегию авторизации из уже поддерживаемых в PassportJS или написать собственную, как это было сделано для авторизации через систему единого входа Университета ИТМО (для этого написана специальная стратегия passport-ifmosso).

Клиент реализован в виде одностраничного веб-приложения, которое может работать в веб-браузере, однако функция захвата экрана и скриншоты доступны только после установки специального расширения Chrome или через специальное приложение node-webkit, которое доступно для платформ Windows, Linux и OS X. Отдельное приложение особенно полезно, если не хочется привязываться к веб-браузеру и его версиям, где, к тому же, могут быть установлены сторонние расширения, которые могут влиять на работу приложения в браузере, что нежелательно.

СДН не содержит в себе функций системы управления обучением (LMS), однако может быть связана с ней через API. Для взаимодействия с Национальной платформой открытого образования (НПОО) был реализован специальный API, который может быть расширен для взаимодействия с другими LMS. Ниже на рисунке приведена диаграмма взаимодействия участников системы с использованием такого API.

Диаграмма взаимодействия участников СДН

В рамках одной сессии передается несколько видеопотоков: камера испытуемого, камера проктора и рабочий стол испытуемого. Параметры каждого потока задаются в настройках приложения, где можно задать видео- и аудиоисточник, максимальное разрешение и частоту кадров. Для проверки качества связи и картинки есть соответствующий интерфейс, что позволяет заранее узнать о возможных технических проблемах.

Все видео- и аудиопотоки сессии прокторинга записываются. Видеозаписи сессий сохраняются на отдельном хранилище с доступом по протоколу WebDAV, что позволяет логически отделить хранилище от самой системы. Благодаря протоколу WebDAV, для хранения видеозаписей можно, например, использовать Яндекс.Диск. Позже эти записи и протоколы экзаменов можно просматривать через интерфейс СДН. Для перекодирования видеозаписей и загрузки их на сервер написан специальный модуль, описание которого планируется вынести в отдельную статью.

В приложении используется точное серверное время, которое не зависит от компьютерных часов, для удобства восприятия время корректируется с учетом часового пояса клиента.

Для доступа к базе данных СДН реализован специальный JSON REST API с гибкой настройкой прав доступа и параметров выдачи данных. Например, можно настроить доступ по токену доверенному серверу, который будет агрегировать и обрабатывать статистику. Данный API полностью поддерживает CRUD (создание, чтение, обновление и удаление) для работы с коллекциями MongoDB на основе созданных в СДН моделей Mongoose, а также поддерживается оригинальный синтаксис запросов Mongo.

Минимальные технические требования

Клиентская часть
Операционная система Windows XP+; OS X 10.7+; Linux
Процессор Intel i3 1.2 ГГц или эквивалент
Скорость сетевого соединения 1 Мбит/c
Свободное место на диске 100 МБ
Свободная оперативная память 1 ГБ
Разрешение веб-камеры 640x480
Частота кадров веб-камеры 15 кадров/с
Разрешение экрана монитора 1280x720
Серверная часть
Операционная система Ubuntu 14.04 (64 бита)
Процессор AMD Six-Core Opteron 2427 2.2 ГГц или эквивалент
Средняя нагрузка на процессор 5% / сессия
Оперативная память 2 ГБ + 100 МБ / сессия
Сетевое соединение 1.5 Мбит/c / сессия
Запись на диск 150 КБ/c / сессия
Дисковое пространство 500 МБ/час / сессия
Архивирование видео 100 МБ/час / сессия (5 кадров/с со звуком)

На данный момент через систему было проведено около 120 сессий прокторинга, однако в первой половине этого года планируется провести уже несколько тысяч сессий. Система активно развивается и дорабатывается, инструкции и исходные коды выложены на GitHub. Систему можно развернуть самостоятельно, либо использовать готовый Vagrant бокс.

Упоминания в СМИ

Автор: meefik

Источник

Поделиться новостью

* - обязательные к заполнению поля