Об одном опыте проведения спецкурса по Python с автоматической проверкой домашних заданий (Павел Сутырин, OSEDUCONF-2015)
Материал из 0x1.tv
Содержание
Аннотация[править | править вики-текст]
- Докладчик
- Павел Сутырин
В докладе описывается опыт проведения семестрового спецкурса начального уровня по языку программирования Python (2.7) для студентов (50 чел.) факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова.
Применено разделение труда между преподавателями: один читает собственно лекции и готовит домашние задания, другой отвечает за сопровождение тестирующей системы и подготовку видеозаписей (скринкастов) лекций.
Описывается опыт применения олимпиадной системы автоматического тестирования программ (ejudge) для проверки домашних заданий, выполняемых слушателями в течение семестра (100 пользователей, 30 заданий, 8 000 посылок заданий на проверку).
Дается обзор задач, которые использовались в курсе, а также методики тестирования программ, использованные для проверки домашних заданий. Проанализированы особенности применения этой системы в контексте спецкурса.
Видео[править | править вики-текст]
Тезисы[править | править вики-текст]
О спецкурсе[править | править вики-текст]
В осеннем семестре 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 и желающих получить тематический спецкурс «малой кровью», или же пропустивших лекции) к очному экзамену остались лишь те, чьи знания требуют более детальной беседы, для каковой уже подготовлен рабочий материал — решенные задачи, отправленные программы (вместе с их динамикой развития от посылки к посылке, отражающей ход мысли решающего).
- Литература
- Г. Курячий, П. Сутырин. Язык программирования Python (страничка спецкурса) (https://uneex.ru/LecturesCMC/PythonIntro2014)
- А. Чернов. Ejudge contest management system. (https://ejudge.ru/)
Примечания и отзывы[править | править вики-текст]
Plays:176
Comments:0
