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

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

(Batch edit: replace <!-- {{webm-oseduconf|}} --> with {{oseduconf-2015-draft}})
 
(не показаны 62 промежуточные версии этого же участника)
== Аннотация ==
;Докладчик: {{Speaker|Павел Сутырин}}
<blockquote>
В докладе описывается опыт проведения семестрового спецкурса начального уровня по языку программирования Python (2.7) для студентов (50 чел.) факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова.

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

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

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

== Видео ==

{{vimeoembed|118003796|800|450}}
{{youtubelink|}}|-ApFaj5a2Ic}}
{{oseduconf-2015-draft}}
<!-- pollholder --> 
<poll>
ALTERNATIVE
REVOTE
UNIQUE
Оцените доклад «{{PAGENAME}}»:
Отлично!
Хорошо.
Нормально…
Не очень :(
Просто хочу узнать результаты.
</poll>


<!-- == Слайды ==
[[File:Об одном опыте проведения спецкурса по Python с автоматической проверкой домашних заданий (Павел Сутырин, OSEDUCONF-2015).pdf|left|page=-|256px]]
 -->

<!-- == Тезисы ==  -->


=== О спецкурсе ===
В осеннем семестре 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.  общее количество ошибочных посылок (не прошедших хотя бы один тест);

Статистика по заданиям
<tab sep=bar class=wikitable>
Всего задач     | 31
Всего тестов| 124
Зарегистрировалось пользователей|       285
Решило хотя бы одну задачу| 156
Решило 50% задач| 92
Решило 80% задач| 73
Решило 90% задач| 63
Решило 95% задач| 56
Решило 100% задач| 29
Всего посылок| 8430
</tab>

* 4.  количество посылок, ошибочных на первом тесте (заведомо известном!);
* 5.  количество  посылок,  превысивших  время  выполнения  (неэффективный алгоритм).

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

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

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

;Литература:
* Г. Курячий, П. Сутырин. Язык программирования Python (страничка спецкурса) (https://uneex.ru/LecturesCMC/PythonIntro2014)
* А. Чернов. Ejudge contest management system. (https://ejudge.ru/)

{{----}}

== Примечания и отзывы ==
<!-- <blockquote>[©]</blockquote> -->

<references/>

[[Category:OSEDUCONF-2015]]
[[Category:ОбразованиеОнлайн-обучение]]
[[Category:Open-source projects]]
[[Category:ToPublishPython]]

<!-- topub -->
{{stats|disqus_comments=0|refresh_time=2021-08-31T17:37:18.182039|vimeo_comments=0|vimeo_plays=96|youtube_comments=0|youtube_plays=80}}

Текущая версия на 07:32, 20 октября 2025

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

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