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

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

Версия от 07:32, 20 октября 2025; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Аннотация[править | править вики-текст]

Докладчик
Павел Сутырин.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:176   Comments:0