Об одном опыте проведения спецкурса по Python с автоматической проверкой домашних заданий (Павел Сутырин, OSEDUCONF-2015)

Материал из 0x1.tv

Аннотация

Докладчик
Павел Сутырин.jpg
Павел Сутырин

В докладе описывается опыт проведения семестрового спецкурса начального уровня по языку программирования Python (2.7) для студентов (50 чел.) факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова.

Применено разделение труда между преподавателями: один читает собственно лекции и готовит домашние задания, другой отвечает за сопровождение тестирующей системы и подготовку видеозаписей (скринкастов) лекций.

Описывается опыт применения олимпиадной системы автоматического тестирования программ (ejudge) для проверки домашних заданий, выполняемых слушателями в течение семестра (100 пользователей, 30 заданий, 8 000 посылок заданий на проверку).

Дается обзор задач, которые использовались в курсе, а также методики тестирования программ, использованные для проверки домашних заданий. Проанализированы особенности применения этой системы в контексте спецкурса.

Видео

on youtube

Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.








Тезисы

О спецкурсе

В осеннем семестре 2014-2015 учебного года на факультете ВМК МГУ проводился экспериментальный спецкурс по языку программирования Python 2.7.

Аудитория спецкурса — студенты 1-5 курсов факультета и несколько слушателей не из МГУ.

Лектор и автор заданий: Георгий Курячий, ассистент: Павел Сутырин.

Лекции проводились в режиме непрерывной демонстрации экрана, на котором большую часть времени велась работа с интерактивным интерпретатором Python: опробование обсуждаемых возможностей языка, иногда написание более крупных программ в виде файлов.

Запись экрана со звуком (screencast) через короткое время выкладывалась в открытый доступ.

Для каждой лекции (кроме двух последних) был подготовлен набор из 3-4 заданий на программирование на языке Python, требующих как эффективной алгоритмизации, так и применения инструментария языка.

Для проверки домашних заданий и проведения предэкзаменационного тестирования была использована свободная программная система ejudge (автор: Александр Чернов, ВМК МГУ), широко используемая для проведения олимпиад по программированию (в т.ч. региональных этапов ACM ICPC), для поддержки основного факультетского практикума по программированию (некоторые группы 2 курса: системное программирование под Unix и объектно-ориентированное программирование), а также на других образовательных веб-ресурсах по программированию.

Система была новой для авторов курса, и в качестве одной из метазадач было задумано практическое испытание этой системы для целей преподавания языка программирования.

Автоматическая проверка заданий

Начальный этап освоения системы был облегчен наличием штатного образа виртуальной машины VirtualBox. На основном факультетском экземпляре системы (ejudge.cs.msu.ru), администрируемом самим автором системы, для спецкурса был создан отдельный турнир и выданы ограниченные права доступа для его администрирования через веб-панель (на уровне ejudge), а также заведены ssh-пользователи с доступом в каталоги конфигураций турнира (на уровне ОС). Таким образом, можно назвать эту конфигурацию прикладным shared-хостингом (ejudge-хостингом).

Система ejudge позволяет аутентифицированным (и авторизованным на участие в турнире) пользователям турнира (или спецкурса) отправлять на проверку файлы через веб-интерфейс посредством HTTPS-запросов. Каждое полученное решение запускается в защищенном режиме выполнения (для этих целей автором ejudge также разработан и поддерживается патч к ядру Linux, позволяющий существенно ограничить работу запущенной программы с файловой системой, процессами и т.п.), и его правильность проверяется на наборе формальных тестов. В системе сохраняются все варианты программ, отправленные пользователями на тестирование (т.н. «посылки») вместе с протоколами их тестирования.

Система ejudge позволяет задавать тесты вида «вход-выход» (входные данные подаются в текстовом формате на stdin программе, выходные данные ожидаются на stdout), а также по нашей просьбе автором любезно было добавлено косвенное тестирование: запуск отдельной тестирующей программы, которой в качестве параметра передается имя файла, отправленного на проверку.

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

По итогам семестра работа пользователей с системой оценивалась по следующим критериям:

  • 1. число полностью сданных задач (прошедших все тесты);
  • 2. число полностью и вовремя сданных задач;
  • 3. общее количество ошибочных посылок (не прошедших хотя бы один тест);

Статистика по заданиям

Всего задач 31
Всего тестов 124
Зарегистрировалось пользователей 285
Решило хотя бы одну задачу 156
Решило 50% задач 92
Решило 80% задач 73
Решило 90% задач 63
Решило 95% задач 56
Решило 100% задач 29
Всего посылок 8430
  • 4. количество посылок, ошибочных на первом тесте (заведомо известном!);
  • 5. количество посылок, превысивших время выполнения (неэффективный алгоритм).

В соответствии с этими критериями были предложены оценки «автоматом».

Таким образом было отсеяно значительное количество слушателей, своевременно и плодотворно трудившихся в семестре. Для остальных был назначен экзамен, которому предшествовало тестирование — еще один турнир в ejudge из 5 задач, подобных семестровым, на 4 часа времени.

Таким образом, из двух наборов студентов («ранних», прослушавших курс в реальном времени, и «поздних» — хорошо знающих Python и желающих получить тематический спецкурс «малой кровью», или же пропустивших лекции) к очному экзамену остались лишь те, чьи знания требуют более детальной беседы, для каковой уже подготовлен рабочий материал — решенные задачи, отправленные программы (вместе с их динамикой развития от посылки к посылке, отражающей ход мысли решающего).

Литература

Примечания и отзывы


Plays:169   Comments:0