Проф., к.т.н. Бондарев В.М., Черепанова Ю.Ю.
Харьковский национальный университет радиоэлектроники
Цель разработки
Основная цель
обучения программированию – умение писать программы. Знание языков,
алгоритмов, библиотек или способность правильно отвечать на собеседовании тоже
нужны, но это скорее средства, а не цель. Кратчайшим, если не единственным,
путем к цели являются упражнения, поэтому обеспечить студента задачами по
программированию и, что тоже важно, мотивировать к их решению есть первой
обязанностью преподавателя.
Выполнить в полной мере эту
обязанность преподавателю мешает недостаток финансирования, нехватка времени и
сил, ведь задачу нужно не только поставить, но и проверить ее решения. Если не
проверять или проверять небрежно, то большинство студентов и решать задачи не
будет.
Справиться с проблемой
может автоматическая проверка студенческих решений, чему и посвящено это
сообщение.
Задачи по программированию
Задача - не обязательно программа, которая что-то
вводит, вычисляет и выводит. Наоборот, работа программиста заключается в
написании фрагментов кода, которые войдут в уже имеющуюся кодовую базу. Такими
же должны быть и учебные задачи. Основной формой задачи может быть определение
функции, удовлетворяющей поставленным условиям, но это может быть и объявление
класса, метода, события или иного программного объекта с заданными свойствами.
Еще это может быть любой частью всего перечисленного, например, код с пропуском
или ошибкой, нужно этот пробел заполнить или ошибку исправить.
Задачу готовит
преподаватель. Он должен четко сформулировать условие, написать программу,
которая компилируется, и выделить в ней часть, которую назовем авторским
решением задачи. Код программы за пределами выделенной части должен обеспечить
достаточную с точки зрения преподавателя проверку решения. Казалось бы,
преподавателю не обязательно предоставлять свою версию решения, но это
необходимо, чтобы быть уверенным в корректности подготовленной задачи.
Студент получает условие
задачи и пишет свою версию решения. Система автоматической проверки подставляет
решение студента вместо авторского, компилирует и выполняет программу. Если
программа завершается успешно, решение считается правильным. В противном случае
студенту направляется уведомление, что решение отвергнуто. В сообщении может
быть указана причина, по которой решение не прошло проверку. Если решение не
скомпилировано, то студент получит отчет об ошибках компиляции. В любом случае
студент может исправить решение и повторить попытку, до окончания времени,
отведенного на задачу.
Кроме условия и программы,
задача может содержать необязательные элементы: подсказки и прототип решения.
Подсказки выдаются по требованию студента и касаются алгоритма решения или
техники программирования.
Прототип решения
предлагается студенту вместе с условием задачи и может содержать, например
заголовок требуемой функции.
В основе системы лежит
веб-служба (TSS - Task Set Service), которая предоставляет условия задач и
сервис для проверки их решений.

Рис.
1 Схема системы
Вокруг этой службы строятся
сетевые приложения: для самостоятельной работы над задачами (Judge), для
проведения контрольных работ (Exam), для ведения задачника (Admin), для
проведения соревнований и другие.
Приложение для
самостоятельного решения задач, Judge, имеет две категории зарегистрированных
пользователей, назовем их преподаватели и студенты. Преподаватели могут
создавать разделы задачника и наполнять их задачами, выбранными из тех, что
предоставляет служба. Студенты могут отправлять решения на проверку и вести
учет задач, которые решили лично (видеть условия и свои собственные решения).
Преподаватели могут отслеживать активность студентов в отношении любой задачи и
просматривать присланные решения.
В приложении к оценке
знаний, Exam, зарегистрированными пользователями являются только преподаватели.
Преподаватель создает "экзамен", выбирая студентов и задачу,
вынесенную на экзамен, и устанавливает продолжительность экзамена. Студенты
решают предложенную задачу в течение установленного времени. В ходе экзамена и
после него преподаватель может наблюдать состояние студента (решает задачи, уже
решил или еще не начал работу) и присланные решения, в том числе и неудачные. В
конце экзамена преподаватель получает отчет. Вся накопленная в ходе экзамена
информация хранится на сервере и впоследствии может быть использована для
анализа.
Приложение для ведения
задачника (Admin) позволяет аутентифицированным преподавателям добавлять,
удалять и изменять задания. Задача определяет язык, на котором следует писать
решение. Сейчас есть возможность создавать задачи на языках C #, C ++, Python,
Haskell и JavaScript. Перечень языков является открытым и легко может быть расширен,
если это потребуется.
Описанная система
используется на кафедре программной инженерии ХНУРЭ при преподавании дисциплин
"Основы программирования", "Объектно-ориентированное
программирование" и "Функциональное программирование". С
внедрением системы практические занятия по программированию качественно
изменились, если раньше работала от силы половина группы, слабые студенты не
понимали, сильные скучали, то теперь в них вовлечены все студенты.
Изменился процесс контроля
знаний. Во-первых, повысилась доверие студентов полученным оценкам, у студентов
нет оснований сомневаться в их объективности. Во-вторых, снизилась нагрузка на
преподавателя, ему остается выбрать задачу (или разработать новую) и проследить
за тем, чтобы студенты решали ее самостоятельно.
Студенты стали больше задач
решать вне занятий, справедливо ожидая, что схожие задачи будут и на
контрольной работе. Благодаря автоматическому сбору статистики, преподаватель
имеет точное представление об объеме самостоятельной работы того или иного
студента.
Ценность предложенной
системы пропорциональна количеству задач в ее базе. Время подготовки одной
задачи колеблется от 10 минут до часа, в зависимости от ее сложности.
Развитие системе мы видим в
распространении базы задач и список доступных языков программирования.