Особенности реализации автоматизированной проверки заданий
по IT-дисциплинам

В настоящее время во многих учебных заведениях организованы дистанционные электронные ресурсы, содержащие наборы задач по программированию и предоставляющие возможность круглосуточной автоматической проверки решений. Студент через web-интерфейс отправляет на сервер своё решение - текст программы на языке высокого уровня. На сервере полученный текст компилируется и выполняется на заранее подготовленном наборе тестов. По результатам прохождения тестов начисляется соответствующее количество баллов. В том числе подобная система разработана и функционирует и в Вологодском государственном техническом университете по адресу http://atpp. vstu. *****/cgi-bin/arh_problems. pl

В большинстве случаев наполнение такого рода ресурсов ограничивается исключительно алгоритмическими и математическими задачами (часто – только олимпиадными). Однако, данный подход можно применять для значительно большего числа учебных курсов, хотя здесь и возникает ряд затруднений. Рассмотрим особенности использования проверяющей системы для преподавания ряда дисциплин.

В курсе объектно-ориентированного программирования одной из важных тем является разработка классов. Возьмём для определённости язык программирования C++, который используется в ВоГТУ при изучении данного курса. Студенту в задании выдаётся интерфейс класса и описание его работы, на выходе должна получиться полная программная реализация.

Поскольку решением будет уже не готовая программа, а программный модуль, при проверке она должна подключаться к написанной преподавателем тестирующей программе. Для этого достаточно потребовать, чтобы студент в конце своего решения добавил соответствующую директиву #include. Чтобы автоматическая система могла адекватно выполнить оценку разработанного студентом класса, необходимо предусмотреть достаточно большое число проверок. Так, нужно протестировать все методы класса на допустимых по условию объёмах входных данных, учитывая при этом возможные частные случаи. Необходимо отследить возможные утечки памяти – наиболее вероятны утечки в деструкторе, при создании копий объектов и выполнении операции присваивания. Для этого выполняется многократное создание и удаление объектов. Нужно проверять корректность создания копий объектов, являются ли виртуальные функции действительно виртуальными и ряд других условий. Несмотря на то, что написание такой программы может отнять у преподавателя до нескольких часов времени, это окупается тем, что в дальнейшем значительно сокращается время на проверку решений каждого студента. Кроме того, значительная часть однажды написанного проверяющего кода переносится от задания к заданию без существенных изменений.

НЕ нашли? Не то? Что вы ищете?

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

Для каждой схемы базы данных предусмотрены их идентичные по структуре копии, заполненные другими данными. В этих копиях не разрешен вывод ошибок и сообщений. Во-первых, это даёт возможность отлаживать запросы через WEB-браузер, не имея под рукой какой-либо СУБД, во-вторых – исключает возможность простого “подгона” запроса под верные данные.

Чтобы облегчить отладку запросов и устранить необходимость для каждого дистанционного студента в установке сервера БД, желательно, чтобы учащийся мог видеть результаты исполнения своего запроса и верные результаты. Однако, при этом он сможет «подгонять» неправильный запрос под выдачу верных данных. Чтобы избежать этого, запрос должен выполняться минимум на двух тестовых базах с одной схемой, но разными данными, причём лишь на одной из них результаты разрешены для просмотра. Студенту также выводится подробная информация о синтаксических ошибках,

В случае запросов типа INSERT и UPDATE, изменяющих данные, необходимо обеспечить корректную многопользовательскую работу. Это достигается за счёт отката транзакций после выполнения запроса. Безопасность реализуется путём анализа текста запроса на наличие операторов, которые явно не разрешены (например, фиксация транзакций), и настройкой прав доступа на уровне СУБД.

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

Выполненная разработка ориентирована на сервер БД Oracle, имеется и аналогичная разработка для Microsoft SQL Server - см. [1].

В настоящее время на кафедре АВТ ВоГТУ читается факультативный курс по разработке административных сценариев и применению средств командной строки при администрировании операционных систем. Многие из решаемых при этом задач требуют полных прав доступа и внесения существенных изменений в операционную систему. Возможным вариантом решения является запуск студенческого сценария под виртуальной машиной. Параллельная обработка достигается запуском нескольких виртуальных машин и организацией очереди запросов. Проверка корректности реализуется путём запуска проверяющей программы, разрабатываемой отдельно для каждого задания. Такая программа может, например, проанализировать сетевые настройки, выполненные сценарием, проверить структуру объектов в службе каталогов Active Directorу или протестировать прохождение сетевых пакетов между двумя виртуальными машинами.

Рассмотрим более подробно работу данной подсистемы. В качестве виртуальной машины используется свободно распространяемый VMWare Server. Одна из основных причин такого выбора - наличие прикладного программного интерфейса API VIX 2.0, предоставляющего все необходимые для наших целей функции, включая: запуск гостевой операционной системы (т. е. ОС, выполняющейся в виртуальной машине), передача в неё файлов и запуск приложений, выполнение откатов и восстановление состояния [2]. Для работы данного API на гостевых операционных системах устанавливается пакет драйверов и утилит VMWare Tools.

Работа с ресурсом происходит следующим образом. Пользователь решает одну из задач по теме " конфигурирование ОС ". В результатате решени полуется сценарий на языке Visual Basic либо bat-файл, выполняющий необходимые настройки. Когда пользователь нажал на кнопку «Послать решение» решение пользователя передается на сервер, при этом запрос ставится в очередь. Обработка запроса начинается с включения виртуальной машины. Поскольку виртуальная машины находится в режиме ожидания (suspend), т. е. в файле на жестком диске хранится образ оперативной памяти, то её запуск требует не более нескольких секунд. Далее с помощью API сценарий передаётся в гостевую ОС и запускается на выполнение. При этом он работает с правами администратора и может выполнять любые действия, в том числе в случае непреднамеренных (или преднамеренных) ошибок и полностью вывести операционную систему из строя. Если после выполнения студенческого кода система осталась работоспособной, запускается ещё один сценарий, который создаётся преподавателем или автором задачи. Его цель - проанализировать текущую конфигурацию системы и оценить правильность решения задачи. Проверяющий скрипт возвращает результат серверному приложению, которое в свою очередь отображает результат пользователю и выводит необходимые пояснения (например, что неверно и требуется исправить). Наконец, на последнем шаге выполняется откат гостевой операционной системы в первоначальное состояние и перевод её в suspend-режим.

На данный момент электронный ресурс кафедры содержит уже более семисот заданий по нескольким учебным курсам. Разработка демонстрировалась на региональном межвузовском конкурсе компьютерных программ в Вологде и получила первое место в номинации «Информационные технологии обучения». Сочетание с электронными учебниками, традиционными формами тестирования и с такими элементами образовательных порталов, как форум и новости, позволяет реализовать большую часть функций для полноценного дистанционного обучения.

1. Моисеенко, С. И. SQL. Задачи и решения / - СПб.: Питер, 20с.

2. VIX API Reference Guide // http://pubs. /vix-api/ReferenceGuide/