
Система дистанционного надзора (далее СДН) предназначена для сопровождения процесса территориально удаленного прохождения экзаменов, подтверждения личности испытуемого и подтверждения результатов его аттестации. Конечно, эта система не уникальна, есть зарубежные сервисы, предоставляющие услуги дистанционного ассистирования, такие как ProctorU, Mettl Online Assessment, ProctorExam или Pearson VUE, а есть отечественный сервис Экзамус и система ProctorEdu. Однако у разрабатываемой СДН есть основное отличие — это не услуга, а программное обеспечение с открытым исходным кодом, которое может использовать в своих целях любой желающий, будь то организация собственного прокторинг-центра, проведение подтвержденных аттестаций в своей системе электронного обучения или что-то еще. Конечно, для полноценного функционирования системы нужны люди (прокторы), рабочие места с камерами и аудиогарнитурами, а также серверное оборудование и системные администраторы для развертывания и обслуживания системы. Но когда необходимая инфраструктура уже есть, остается вопрос программного обеспечения. И именно на этот вопрос дает ответ данная система.
Работа с СДН делится на две основные части: интерфейс испытуемого и интерфейс проктора. Сначала испытуемый скачивает и запускает приложение, авторизуется в нем и видит список доступных ему экзаменов для прохождения в режиме прокторинга (список экзаменов создается заранее, либо автоматически подгружается из 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 / сессия |
| Дисковое пространство | 10 ГБ + 500 МБ/час / сессия |
| Архивирование видео | 100 МБ/час / сессия (5 кадров/с со звуком) |
На данный момент через систему было проведено около 120 сессий прокторинга, однако в этом году планируется провести уже несколько тысяч сессий. Систему можно развернуть самостоятельно, либо использовать готовый Vagrant бокс. Инструкции и исходные коды выложены на GitHub.

