Материал: Модернизация дистанционного практикума по программированию для поддержки новых правил проведения олимпиад школьников

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Модернизация дистанционного практикума по программированию для поддержки новых правил проведения олимпиад школьников

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

. АНАЛИТИЧЕСКИЙ ОБЗОР

.1 Постановка задачи

.2 Анализ существующих решений

.3 Анализ системы дистанционного практикума ВоГУ, подлежащий модернизации

. ПРОЕКТИРОВАНИЕ СИСТЕМЫ

.1 Определение решаемых задач

.2 Проектирование изменений в ядре системы

.3 Проектирование изменений в базе данных системы

.4 Проектирование изменений в веб-интерфейсе пользователя

. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ

.1 Программная реализация изменений в ядре системы

.2 Программная реализация изменений в базе данных системы

.3 Программная реализация изменений в веб-интерфейсе пользователя

. ТЕСТИРОВАНИЕ СИСТЕМЫ

. РАЗРАБОТКА ДОКУМЕНТАЦИИ

.1 Разработка инструкции для участника олимпиад

.2 Разработка инструкции для членов жюри

.3 Разработка инструкции для администратора

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЯ

ВВЕДЕНИЕ


В информационную эпоху, дисциплина по программированию присоединилась в образовательный стандарт многих специальностей инженерного профиля. Направления обучения, связанные с IT-технологиями, стали наиболее популярными среди студентов и востребованными среди работодателей.

Наряду с этим, актуальность приобрели олимпиады по программированию, которые позволяют выявить и улучшить у студентов творческие способности, усилить интерес к науке, математическому знанию.

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

Данная выпускная квалификационная работа представляет собой разработку подсистемы для проведения подобных олимпиад среди школьников. В основной части это будет модернизация уже существующего дистанционного практикума по программированию. Система построена на реляционной базе данных Firebird, для написания графического интерфейса используются средства языков HTML и Perl, ядро разработано на языке C++, также будет реализована отдельная программа для вывода турнирной таблице, написанная на языке Java.

1. АНАЛИТИЧЕСКИЙ ОБЗОР


1.1    Постановка задачи

Согласно требованиям региональной олимпиаде по информатике за 2015 - 2016 год, решением задачи является программа, которая формирует по известным входным данным, поступающим со стандартного потока ввода, выходные данные, идущие через стандартный поток вывода [1]. В тексте условия должны быть обязательно указаны предельное время работы программы, количество доступной памяти должно быть не более 256 мегабайт. Размер файла - исходника, должен быть не более 256 килобайт, а время компиляции не больше минуты.

Участник олимпиады должен иметь возможность выбрать язык программирования и соответствующий ему компилятор. Таблица команд компиляции должна быть доведена до сведения всех участников перед началом каждого тура и размещена в памятке участнику. Если программная среда проведения соревнований с автоматической проверкой не используется, то участник в комментарии в начале текста программы указывает, каким компилятором компилировать его программу − это должно быть указано в памятке участника.

Оценка правильности решения задач осуществляется в следующей последовательности:

Участники отправляют на автоматическую проверку файлы с исходным текстом кодом своих решений. При отправке участники указывают язык программирования, на котором выполнено решение.

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

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

Если решение проходит все тесты из условия, участнику сообщается об этом и решение принимается на окончательную проверку.

Окончательная проверка осуществляется следующим образом. Решение последовательно запускается на всех тестах для всех подзадач. Результаты исполнения решений на тестах составляют итог окончательной проверки. Решение запускается на всех тестах даже в том случае, если оно не прошло некоторые из них.

Если в процессе исполнения используемая программой память превышает значение, указанные в условии задачи, работа программы участника завершается и результатом работы программы на этом тесте является сообщение «Превышено ограничение по памяти» («Memory limit exceeded»).

Если программа успешно завершила работу, но не создала выходной файл, указанный в условии задачи, результатом работы программы на этом тесте является сообщение «Неверный формат вывода» («Presentation Error»).

Если в процессе исполнения программа использованное программой процессорное время превышает значение, указанные в условии задачи, работа программы участника завершается и результатом работы программы на этом тесте является сообщение «Превышено ограничение по времени» («Time limit exceeded»).

Если исполнение программы завершилось с ошибкой или код выхода программы не равен 0, то считается, что у программы произошла ошибка исполнения и результатом работы программы на этом тесте является сообщение «Ошибка во время выполнения» («Runtime Error»).

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

Общее количество баллов за задачу равно сумме баллов, полученных за каждую подзадачу.

По каждой задаче участнику сообщается результат окончательной проверки не более 10 раз. Пример предоставления информации в случае, если сообщается результат проверки решения на каждом тесте, приведен на рис. 1.1 (здесь приведена лишь часть полученной информации).

Рисунок 1.1- Пример предоставления информации в случае, если сообщается результат проверки решения на каждом тесте.

1.2 Анализ существующих решений

Существует несколько сайтов в свободном доступе, которые позволяют участвовать в соревнованиях по программированию и выполняющих автоматическую проверку принятых решений.

Подобные системы можно разделить на два типа:

1.      Проверяющие системы с определенным архивом задач

.        Системы для соревнований в режиме реального времени

Одной из интересных систем, является система второго типа под названием ejudge [2]. У неё следующие особенности:

·        Виртуальные турниры

·        Многоязычный интерфейс

·        Интерфейс администратора турнира

·        Вариантность задач

·        Кастомизируемый внешний вид

·        Множество олимпиадный режимов по различным системам

Архитектура системы состоит из следующих компонентов:

·        Компоненты работающие с базой данных, компиляцией решений, учетом действующих турниров

·        Обслуживающие запросы пользователей

·        Второстепенные программы, дающие доступ к управлению системой через командную строку

Управляющие компоненты работают все время, в течении жизни системы. Эти компоненты работают в одном экземпляре на запущенные олимпиады. Запуск системы ejudge состоит в запуске компонент управления, к ни относят программы userlist-server, super-serve, compile, job-server.

Userlist-server - позволяет пользователям регистрироваться на олимпиаду, просматривать других участников, проводить аутентификацию пользователей. По сути, она выполняет обязанности сервера базы.

Super-serve следит за активными олимпиадами, может запускать средства обслуживания олимпиады, принимает запросы на изменение параметров олимпиады.

Compile занимается компиляцией решений участников олимпиады.

Job-server занимается рассылкой электронных сообщений, воспроизведением звуковых откликов и других низкоприоритетных запросов.

Существует система acm.timus Это система уральского государственного университета, представляет собой архив задач, т.е. система первого типа. Позволяет проверить задачу в любое удобное время[3].

Рассмотрим систему Яндекс.Контест. Это платформа для создания тестов и проведения онлайн-тестирований [4]. Основное назначение платформы - проведение соревнований по спортивному программированию. С помощью Яндекс.Контест проводятся как индивидуальные, так и командные соревнования различных уровней - от школьных олимпиад до международных чемпионатов.

На платформе Яндекс.Контест проводятся следующие соревнования:

·        По типу доступа: открытые, закрытые

·        По времени начала: реальные, виртуальные

На платформе могут быть созданы соревнования, не имеющие никаких ограничений по времени. Это могут быть пробные туры, контрольные работы к учебным курсам, сертификационные экзамены и т. п.

Существуют различные системы правил проведения турниров по программированию. Например ACM International Collegiate Programming Contest, где победитель определяется по количеству решенных задач, в спорных ситуациях победит участник с наименьшим штрафным временем. Штрафное время - это время которое прошло с момента начала турнира до момента сдачи верного решения.

Система правил школы анализа данных (ШАД) - побеждает участник, набравший наибольшее количество баллов, за каждую неудачную попытку отправки решения, участнику начисляет штраф в определенное количество баллов. Существуют и другие турнирные системы.

Пример предоставления информации условий задач и отправки решений показан на рисунке 1.2.

Рисунок 1.2-Пример представления информации для участника турнира в системе Яндекс.Контест.

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

Справа от статуса указывается количество неудачных попыток решения задачи, под статусом - время, прошедшее от начала соревнования до момента отправки верного решения.

Пример предоставления итоговой таблицы предоставлен на рисунке 1.3.

Рисунок 1.3- Пример отображения турнирной таблицы в системе Яндекс.Контест.

.3 Анализ системы дистанционного практикума ВоГУ, подлежащий модернизации

Система представлена в классической клиент-серверной архитектуре, когда пользователь через интернет-браузер отсылает запросы на удаленный веб-сервер [5]. На веб-сервере находятся скрипты, которые обрабатывают запросы клиента и формируют для клиента html страницы.

Система состоит из нескольких модулей:

·        Аутентификация - модуль занимается проверкой подлинности пользователя.

·        Просмотр задач - модуль для отображения задач в виде иерархической структуры.

·        Формирование статистики - модуль формирует отчет по результатам и спискам решенных и не решенных задач.

·        Управление пользователями - модуль отвечает за создание групп юзеров, передачи прав и создание новых пользователей.

·        Отображение результатов тестирования - данный модуль предоставляет полный отчет по результатам проверки решений пользователя.

·        Управление системой - позволяет запускать и останавливать сервера, сконфигурированных в системе, управляет и настраивает систему защиты , определяет опасный код.

·        Анализ плагиата - модуль выявляет «похожие» решения у различных пользователей для любого языка программирования.

Существуют и другие модули, все они работают под управлением веб-сервера с использованием fasr-cgi скриптов [6].

Концептуальная схема базы данных приведена на рисунке 1.4.

Рисунок 1.4- Концептуальная схема базы данных.

Алгоритм работы модулей представлен на рисунке 1.5.

Рисунок 1.4- Обобщенный алгоритм работы модулей.

Страницы веб-интерфейса построены по правилу - каждая страница делится на навигационную часть и информативную. В навигационной части располагаются ранее рассмотренные функции, содержимое навигационной части одинаково для любых страниц [7]. Информативная часть показывает полезную для пользователя информацию, формы ввода, эта часть зависит от запросов юзера.

Схема навигации между формами показана на рисунке 1.5.

Рисунок 1.5- Схема навигации интерфейса.

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

1.      Компилятор Borland C++ 5.02 при разработке ядра системы.

2.      Firebird 1.5 в качестве базы данных.

3.      Apache 1.3 - веб сервер, с модулями fast-cgi скриптов.

4.      Perl 5.6 с модулями FCGI - интерфейс для работы с fast-cgi, DBI - для работы с базой данных.

2. ПРОЕКТИРОВАНИЕ СИСТЕМЫ


.1 Определение решаемых задач

На основании требований центральной предметно-методической комиссии по информатике, система должна удовлетворять определенными требованиям при проверке задач и оценке результатов.

Все представленные на проверку решения участников сначала проходят тестирование на тестах из примера или примеров, приведенных в условии задачи. Если на этих тестах решение участника выдает правильный ответ, то тогда это решение проверяется с использованием всего комплекта тестов для этой задачи. В противном случае решение участника считается неверным, и за него участнику не начисляются какие-либо баллы.

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

·        участнику сообщается суммарное количество баллов;

·        сообщается результат проверки его решения на каждом тесте

По каждой задаче участник может сделать во время тура не более 10 запросов на вывод результатов окончательной проверки на всем наборе тестов для этой задачи.

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

Общее количество баллов за задачу будет равно сумме баллов, полученных за решения каждой подзадачи.