Разработка модуля для проверки задач по программированию в электронной обучающей системе "Moodle"

"Moodle" - модульная объектно-ориентированная динамическая среда обучения, ее использование для разработки систем дистанционного обучения. Общее представление о дистанционном практикуме по программированию. Разработка структуры данных и алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 09.11.2016
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Содержание

  • Введение
  • 1. Аналитический обзор
  • 1.1 Общее представление о системе Moodle
  • 1.2 Общее представление о дистанционном практикуме по программированию АВТ
  • 1.3 Обоснование необходимости интеграции данных систем
  • 1.4 Анализ сходных решений
  • 1.5 Постановка задачи
  • 2. Проектирование ПП
  • 2.1 Определение функциональности ПП
  • 2.2 Выбор и обоснование средств разработки
  • 2.3 Разработка структур данных и алгоритмов
  • 3. Реализация ПП
  • 3.1 Реализация алгоритмов
  • 3.2 Особенности реализации пользовательского интерфейса
  • 4. Тестирование ПП
  • 4.1 Методика тестирования работы ПП
  • 4.2 Результаты тестирования
  • 5. Разработка документации
  • 5.2 Инструкции пользователя
  • 5.2 Инструкции для администратора
  • Заключение
  • Список использованных источников
  • Приложения

Введение

В большинстве современных систем для построения сайтов имеется возможность расширения изначального функционала системы путём установки различных дополнительных модулей. Система дистанционного обучения Moodle - не исключение.

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

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

Одному из таких модулей и посвящена эта работа. Появилась необходимость разработать модуль для системы Moodle, который позволит отправлять задачу по программированию на проверку в автоматическую проверяющую систему кафедры АВТ ВоГУ напрямую из системы Moodle. Так же нужно, чтобы разрабатываемый модуль получал результат проверки, выставлял оценку и вёл статистику отправленных решений для каждого пользователя. Это позволит систематизировать и хранить в одном месте все данные учётных записей студентов и все данные статистики.

1. Аналитический обзор

1.1 Общее представление о системе Moodle

Moodle - это аббревиатура от Modular Object Oriented Dynamic Learning Environment, что расшифровывается как модульная объектно-ориентированная динамическая среда обучения [1].

Moodle относится к классу LMS (Learning Management System) - систем управления обучением. В России такие программы обычно называют системами дистанционного обучения (СДО), т.к. дистанционное обучение во многих вузах страны устроено с помощью подобных систем.

Разработка системы дистанционного обучения Moodle продолжается начиная с 1999 года (с 2001 года в текущей архитектуре). Текущая версия системы дистанционного обучения Moodle - 2.0. Версия 2.0 системы дистанционного обучения Moodle выпущена в ноябре 2010 года. Интерфейс системы дистанционного обучения Moodle переведен на 82 языка и используется почти в 50 тысячах организаций из более чем 200 стран мира. В Российской федерации зарегистрировано более 600 инсталляций. Количество пользователей Moodle в некоторых инсталляциях достигает 500 тысяч человек. На сегодняшний день система дистанционного обучения Moodle является самой распространенной системой дистанционного обучения с самым большим количеством пользователей и разработчиков.

Наиболее значимые улучшения в системе дистанционного обучения Moodle были сделаны в версии 1.5 [2].

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

электронная обучающая система программирование

Источником финансирования проекта Moodle является сеть партнеров, которые оказывают услуги по установке, технической поддержке, хостингу и т.д. Партнеры Moodle выплачивают членские взносы и процент с продаж в пользу MOODLE PTY LTD AS TRUSTEE FOR THE MOODLE TRUST.

Moodle позволяет организовать обучающие курсы в различных формах - преподаватель может выдавать задания в виде текстов, презентаций, файлов, опросников и др. Для использования системы Moodle достаточно иметь любой web-браузер, что удобно как для преподавателей, так и для учащихся.

Moodle надёжен и ему доверяют по всему миру - на данный момент по всему миру используется более десяти тысяч копий системы Moodle. Систему Moodle используют институты и другие учебные заведения - маленькие и большие, включая школу экономики в Лондоне, Нью-Йоркский государственный университет, фирмы Microsoft и Open University. На данный момент число пользователей системы Moodle - более 79 миллионов это делает её самой используемой обучающей платформой!

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

Moodle легко использовать - простой интерфейс, возможности "drag-and-drop", и подробно задокументированные возможности на ряду с постоянно улучшающимся юзабилити сделали Moodle очень простым и удобным в использовании.

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

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

Moodle - это обучающая платформа "всё в одном".

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

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

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

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

Используется в любое время, любом месте и на любом устройстве - Moodle это система основанная на web-технологиях и таким образом может быть использована пользователями со всего мира. По умолчанию Moodle имеет мобильный интерфейс и кроссбраузерный дизайн, контент на платформе Moodle легкодоступен и удобен для восприятия на различных устройствах и браузерах.

Доступно огромное количество материалов - постоянно расширяемая документация, а так же пользовательские форумы доступны на всех языках мира, огромное количество бесплатных разработок и настроек предоставленных пользователями системы Moodle находятся в открытом доступе [4].

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

Система Moodle бесплатна, имеет открытый исходный код и распространяется по свободной лицензии GLP, что позволяет вносить в систему любые изменения необходимые учебному учреждению [3].

Может быть установлена на Windows, Mac и Linux серверах с поддержкой PHP.

Так же функционал системы Moodle может быть расширен за счёт установки различных модулей. Каждый отдельный модуль решает какую-то конкретную задачу и может быть установлен в любой момент времени на уже работающую систему Moodle. Возможности модулей очень обширны и позволяют реализовать практически любой функционал. На данный момент существуют сотни модулей для системы Moodle и их список постоянно растёт.

Основным средством обучения, используемым в системе дистанционного обучения Moodle, являются дистанционные курсы. Система дистанционного обучения Moodle предоставляет инструменты для разработки дистанционных курсов. Также могут использоваться дистанционные курсы, разработанные в соответствии со стандартом дистанционного обучения SCORM.

1.2 Общее представление о дистанционном практикуме по программированию АВТ

Дистанционный практикум по программированию АВТ находится по адресу http://atpp. vstu.edu.ru/cgi-bin/arh_problems. pl и представляет из себя сборник задач по программированию. В данном сборнике содержится более тысячи задач по программированию на разные темы. Все задачи разбиты на учебные курсы [5].

Всего в системе имеется десять различных курсов:

- Базы данных. SQL.

- Базы данных. PL/SQL.

- Программирование и основы алгоритмизации.

- Структуры и алгоритмы.

- Задачи с olimpiads.ru для начинающих.

- Задачи с olimpiads.ru.

- Программирование на языке высокого уровня.

- Передача данных в ИУС

- Сборник задач Абрамова и др.

- Архитектура компьютера

Решать и отправлять на проверку задачи можно на следующих языках программирования - Free Pascal 3.0, Pascal ABC.net 3.0, Turbo Delphi 10, GNU C++ 4.8.1, Microsoft Visual C++ 2013, Java (JDK 1.8.0), Python 3.4, Python 2.7, Free Basic 1.0, Microsoft Visual Basic 2013, Microsoft Visual C# 2013, Perl 5.6, Ruby 2.2, Lua 5.1.4, MASM 6.15, JScript (WSH 5.6), VBScript (WSH 5.6).

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

1.3 Обоснование необходимости интеграции данных систем

На данный момент у кафедры АВТ ВоГУ есть два ресурса для дистанционного обучения - это автоматическая проверяющая система, где собрано большое количество задач по программированию и где можно проверить решение той или иной задачи в онлайн режиме, а так же есть система дистанционного обучения Moodle, где собран различный теоретический материал.

Для работы с каждой из систем необходимо создавать отдельную учётную запись.

Интеграция данных систем позволит систематизировать и хранить в одном месте всю статистику и все данные пользователей.

1.4 Анализ сходных решений

Одним из наиболее приближённых аналогов является модуль автоматической проверки задач на сайте Московского центра непрерывного математического образования [6].

На рисунке 1 показана часть интерфейса данного интерфейс модуля:

Рисунок 1 - Пример оформления текста задачи

Как видно с рисунка 1, для задачи имеется пример входных и выходных данных, а так же указаны ограничения по времени и памяти.

Сам же текст задачи необходимо отправлять в виде файла, предварительно выбрав компилятор. Форма отправки задачи представлена на рисунке 2:

Рисунок 2 - Пример оформления формы отправки задачи

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

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

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

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

Необходимо достичь высокой степени интеграции дистанционного практикума по программированию АВТ в систему Moodle и согласованности интерфейсов. Наиболее оптимальным решением в данном случае будет разработка модуля для Moodle.

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

2. Проектирование ПП

2.1 Определение функциональности ПП

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

а) Возможность добавления задачи в систему Moodle, по ID задачи в автоматической проверяющей системы кафедры АВТ, а так же возможность добавления текста и названия задачи в ручную при необходимости.

б) Выбор компилятора и отправка кода решения задачи в автоматическую проверяющую систему кафедры АВТ, непосредственно из среды Moodle.

в) Вывод на экран результата проверки задачи.

г) Автоматическое выставление оценки студенту, на основе результата проверки отправленного им решения.

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

е) Вывод на экран таблицы содержащей статистику десяти последних отправленных решений.

Подробный алгоритм работы модуля с описанием используемых функций описан ниже:

1) После установки модуля в систему Moodle появится новый юнит, который отображается при добавлении заданий в курсы - 'autochecker'.

2) Выбрав данный юнит вам предложит ввести ID задачи (ID можно узнать из URL или названия задачи на сайте автоматической проверяющей системы кафедры АВТ).

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

4) Модуль создаст новую задачу в курсе. На странице задачи будет указано её название, текст задачи и форма в которой будет содержаться поле для кода решения задачи, а так же эемент select для выбора компилятора и кнопка отправки задачи на проверку.

5) После того, как студент введёт код решения задачи в указанное поле, выберет компилятор и нажмёт кнопку отправить. Все данные формы (текст задачи и выбранный компилятор) будут сохранены в переменные.

6) С помощью сохранённых переменных, будет сгенерирован POST запрос и отправлен на сервер автоматической проверяющей системы кафедры АВТ.

7) После выполнения POST запроса, на сайте автоматической проверяющей системы кафедры АВТ будет выведен результат проверки решения задачи (всего может быть 11 различных результатов).

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

9) Полученный результат будет выведен студенту на странице задачи на сайте системы Moodle.

10) Так же на основании результата проверки решения студенту автоматически будет выставлена оценка.

11) В самом конце работы модуль занесёт необходимую информацию в таблицу статистики отправленных решений.

2.2 Выбор и обоснование средств разработки

Так как разработка модуля ведётся для уже готовой системы - Moodle, то средства разработки выбираются на основании совместимости с данной системой. Конкретно, для разработки будут использованы:

Язык php - на данном языке будут реализована вся работа основных функций модуля.

Язык mysql - модуль требует использования базы данных для работы. Так как система Moodle использует базу данных mysql, то и база данных модуля будет использовать mysql.

Язык xml - будет использован для автоматического создания таблиц используемых модулем в базе данных системы Moodle.

Так же будут использованы различные возможности API Moodle:

Database API - используется для построения и отправки любых запросов к базе данных системы Moodle.

Grade API - используется для работы с оценками в системе Moodle. С помощью Grade API разрабатываемый модуль будет создавать grade_item (необходимый для выставления оценки), а затем выставлять оценку в автоматическом режиме.

2.3 Разработка структур данных и алгоритмов

Структурная схема разрабатываемого модуля показана на рисунке 3:

Рисунок 3 - Структурная схема модуля

Пользователь будет взаимодействовать только с интерфейсом самого модуля, который будет интегрирован в систему Moodle. После того, как пользователь отправит решение, оно будет перенаправлено на автоматическую проверяющую систему кафедры АВТ. Там оно будет обработано и проверено в штатном режиме, после чего на сайте автоматической проверяющей системы кафдры АВТ будет выведен результат проверки задачи. Результат проверки будет обработан разрабатываемым модулем - модуль получит результат проверки и выведет его на экран, а так же выставит оценку соответствующую результату проверки. Так же в автоматическом режиме в таблицу статистики будет добавлена вся необходимая информация: ID задачи, имя и фамилия студента отправившего задачу, время отправки решения и результат проверки задачи.

3. Реализация ПП

3.1 Реализация алгоритмов

На данный момент официальный сайт системы Moodle предоставляет готовый каркас для простейшего модуля, который не выполняет несколько самых основных функций может служить основой для дальнейшей разработки практически любого модуля. Для разработки своего модуля я так же использовал данный каркас. Скачать каркас модуля Moodle можно по следующей ссылке - https: // docs. moodle.org/dev/NEWMODULE_Documentation#Getting_started.

В данном каркасе находятся все необходимые файлы для наботы модуля. Сам скачаный модуль изначально может выполнять только одну функцию - добавление материала в курс (у материала есть название и описание).

Для разработки собственного модуля необходимо модифицировать файлы каркаса и добавлять туда необходимые функции. При разработки модуля автоматической проверки задач по программированию были модифицированы следующие файлы каркаса: mod_form. php, version. php, view. php, /db/install. xml, /lang/en/autochecker. php а так же был был добавлен один дополнительный файл - check. php, для удобства разработки.

Каждый из указанных файлов отвечает за какие-то функции/части модуля:

version. php - содержит информацию о версии модуля.

В данном файле необходимо указать версию модуля, а так же версию Moodle, на которой данный модуль будет работать.

Код выглядит следующим образом:

$plugin->version = 2015111600; // версия модуля $plugin->release = 'v1.0'; // релиз $plugin->requires = 2014051200; // какая версия Moodle нужна для работы

mod_form. php - содержит в себе функции и интерфейс формы добавления материалов модуля.

Изначально в данном файле содержится:

- Поле для имени материала (обязательное поле).

- Поле описания материала (необязательное).

- Выбор оценки материала (автоматически заполнено, можно менять).

Так же в данный файл можно добавить любое количество требуемых дополнительных полей информацию из которых можно отправить непосредственно в базу данных Moodle или же использовать другим способом.

Для разрабатываемого мной модуля, мне потребовалось добавить поле ID задачи. В которое необходимо вписать порядковый номер задачи с сайта автоматической проверяющей кафедры АВТ. Поле обязательное.

Код выглядит следующим образом:

// добавляем поле с инеднефикатором ProgID. Данные из данного поля отправляются в таблицу mdl_autochecker и строку с названием progid.

$mform->addElement ('text', 'progid', get_string ('ProgID', 'autochecker'));

// добавляем правило, что поле обязательно к заполнению $mform->addRule ('progid', null, 'required', null, 'client');

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

Изначально данный файл просто выводит описание материала. В данном файле содержится большая часть функций разрабатываемого модуля.

Весь исходный код файла view. php предоставлен в Приложении 1.

Основные функции выполняемые данным файлом описаны ниже:

// подключаем переменную, которая нужна чтобы работало выставление оценок

global $CFG;

// подключаем библиотеку для выставления оценок

require_once ($CFG->libdir. '/gradelib. php');

// получаем локальный id задачи в нашем модуле, через глобальный id задачи в системе

$courseid = $DB->get_records_sql ('SELECT * FROM {course_modules} WHERE id =? ', array ($id));

// получаем массив с данными текущей задачи модуля

$arr = $DB->get_records_sql ('SELECT * FROM {autochecker} WHERE id =? ', array ($courseid [$id] - >instance));

// получаем id задачи в проверяющей системе

$progid = $arr [$courseid [$id] - >instance] - >progid;

// получаем имя + фамилию пользователя и записываем в переменную

$username = $USER->lastname;

$username. = ' ';

$username. = $USER->firstname;

// получаем текущую системную дату + время и записываем в переменную

$date_today = date ("d. m. y");

$date_today. = ' ';

$date_today. = date ("H: i: s");

// открываем соединение с сайтом кафедры и переходим на страницу задачи

$curlT = curl_init ("http://atpp. vstu.edu.ru/cgi-bin/arh_problems. pl? id_prb=$progid");

// указываем, что сайт на который мы перешли нужно возвращать в виде строки

curl_setopt ($curlT, CURLOPT_RETURNTRANSFER,true);

// записываем полученную строку в переменную

$problem = curl_exec ($curlT);

// закрываем соединение

curl_close ($curlT);

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

preg_match ('|<hr class="hr_up_prb"> (. *) <hr class="hr_down_prb">|isU', $problem, $problemtext);

// меняем кодироку полученного текста на UTF-8, чтобы русские буквы отображались корректно

$utftext = mb_convert_encoding ($problemtext [0], "UTF-8", "windows-1251");

// выводим название задачи, по середине страницы (название берётся из базы данных из таблицы mdl_autochecher.

echo "<h2 align='center'>";

echo format_string ($autochecker->name);

echo "</h2>";

// если заполнено поле текст задачи, то выводим его, если нет, то берём текст задачи со страницы задачи на сайте кафедры

if ($autochecker->intro) {

echo $OUTPUT->box (format_module_intro ('autochecker', $autochecker, $cm->id), 'generalbox mod_introbox', 'autocheckerintro');

} else {

echo $utftext;

}

// далее идёт html код формы, которая необходима для получения данных задачи. Конкретно данная форма содержит элементы: select, в котором выбирается компилатор, textarea, куда записывается код решения задачи и submit - кнопку "Отправить".

echo"

<form name='forma1' method='post'>

<p>Выберите компилятор: <select name='id_compiler' size='1'><OPTION VALUE='19' selected>Free Pascal 3.0</option><OPTION VALUE='23' >Pascal ABC.net 3.0</option><OPTION VALUE='3' >Turbo Delphi 10</option><OPTION VALUE='18' >GNU C++ 4.8.1</option><OPTION VALUE='17' >Microsoft Visual C++ 2013</option><OPTION VALUE='5' >Java (JDK 1.8.0) </option><OPTION VALUE='14' >Python 3.4</option><OPTION VALUE='24' >Python 2.7</option><OPTION VALUE='25' >Free Basic 1.0</option><OPTION VALUE='22' >Microsoft Visual Basic 2013</option><OPTION VALUE='21' >Microsoft Visual C# 2013</option><OPTION VALUE='9' >Perl 5.6</option><OPTION VALUE='10' >Ruby 2.2</option><OPTION VALUE='20' >Lua 5.1.4</option><OPTION VALUE='8' >MASM 6.15</option><OPTION VALUE='15' >JScript (WSH 5.6) </option><OPTION VALUE='16' >VBScript (WSH 5.6) </option><OPTION VALUE='4' >SQL (Oracle database) </option><OPTION VALUE='11' >PL/SQL (Oracle database) </option></select></p>

<p><b>Введите код решения задачи: </b></p>

<p><textarea name='source' wrap='virtual' rows='20' cols='100' name='text'></textarea></p>

<p><input type='submit' name='nazvanie_knopki' value='Отправить'></p>

</form>";

// получаем из полей формы данные и записываем их в переменные

$compid = $_POST ['id_compiler'];

$progtext = $_POST ['source'];

// в коде программы заменяем некоторые символы, чтобы можно было отправить POST запрос

$progtext = str_replace (";", "%3B", "$progtext");

$progtext = str_replace ("&", "%26", "$progtext");

$progtext = str_replace ("+", "%2B", "$progtext");

// меняем кодировку коде программы

$progtext = mb_convert_encoding ($progtext, "windows-1251", "UTF-8");

// создаём два элемента стандартного класса

$record = new stdClass ();

$grade = new stdClass ();

// при нажатии кнокпи отправить выполняем функции внутри скобок

if (isset ($_POST ['nazvanie_knopki']))

{

// подключаем файл check. php, в котором идёт проверка решения задачи.

include '. /check. php';

// добавляем данные в таблицу статистики

$record->postid = $courseid [$id] - >instance;

$record->userid = $USER->id;

$record->username = $username;

$record->timeposted = $date_today;

$record->result = $theanswer;

$lastinsertid = $DB->insert_record ('autocheckerstats', $record, false);

// если решение Верно или Частично верно и удалось получить баллы, то выставляем эти баллы

if (mark1)

{

// заполняем в элементе стандартного класса необходимые данные

$grade->rawgrade = $mark1; // оценка - балл полученный с сайта кафедры

$grade->timemodified = time ();

$grade->userid = $USER->id;

$grade->usermodified = $USER->id;

// запрос выставляющий оценку

grade_update ('mod/autocheker', $COURSE->id, 'mod', 'autochecker', $courseid [$id] - >instance, 0, $grade, NULL);

}

}

// получаем из таблицы статистики последнюю добавленную строку

$rectest = $DB->get_record_sql ('SELECT * FROM {autocheckerstats} ORDER BY id DESC LIMIT 1');

// получаем из таблицы статистики последние 10 строк

$rec = $DB->get_records_sql ('SELECT * FROM {autocheckerstats} ORDER BY id DESC LIMIT 10');

// узнаём id последней записи в таблице статистики

$lastnum = $rectest - >id;

// оформляем внешний вид таблицы, выводимой на экран

echo "<style type='text/css'>

TABLE {

border-collapse: collapse; /* Убираем двойные линии между ячейками */

}

TD, TH {

padding: 3px; /* Поля вокруг содержимого таблицы */

border: 1px solid black; /* Параметры рамки */

}

TH {

background: #b0e0e6; /* Цвет фона */

}

</style>";

// выводим таблицу с десятью последними отправленными решениями

echo "<br>";

echo"

<table>

<tr>

<th>Id задачи</th><th>Имя отправителя</th><th>Результат</th><th>Время</th>

</tr>";

for ($i = $lastnum; $i >= $lastnum - 9; $i--)

{

echo"<tr><td>";

echo $rec [$i] - > postid;

echo"</td>";

echo"<td>";

echo $rec [$i] - > username;

echo"</td>";

echo"<td>";

echo $rec [$i] - > result;

echo"</td>";

echo"<td>";

echo $rec [$i] - > timeposted;

echo"</td></tr>";

}

echo"</table>";

check. php - в данный файл содержит функции отвечающие за отправку решения на сайт автоматической проверяющей системы кафедры АВТ, а так же за получение и обработку результата проверки задачи.

Весь исходный код файла view. php предоставлен в Приложении 2.

Основные функции выполняемые данным файлом описаны ниже:

// задаём рандомное число

$randomnum = rand (1, 1000);

// создаём специальный url необходимый для авторизации

$url = "http://atpp. vstu.edu.ru/cgi-bin/submit. pl? re_login=$randomnum&id_prb=$progid";

// создаём соединение и переходим по указанному url

$curl = curl_init ("$url");

// включаем поддержку перенаправления

curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);

// используем функцию, которое проходи Basic авторизацию

curl_setopt ($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt ($curl, CURLOPT_USERPWD, "epo2012_vis: 11111");

// идём на страницу отправки решения задачи

curl_setopt ($curl, CURLOPT_URL, "http://atpp. vstu.edu.ru/cgi-bin/submit. pl? id_prb=$progid");

// указываем, что html-код страницы нужно возвращать в виде строки

curl_setopt ($curl, CURLOPT_RETURNTRANSFER,true);

// отправляем POST запрос в систему, с данными полученными с сайта кафедры

curl_setopt ($curl, CURLOPT_POST, true);

curl_setopt ($curl, CURLOPT_POSTFIELDS, "id_prb=$progid&source=$progtext&id_compiler=$compid&mode=send");

// получаем ответ

$out = curl_exec ($curl);

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

$reg00 = 'Ждёт';

$regconv00 = mb_convert_encoding ($reg00, "windows-1251", "UTF-8");

$reg0 = 'Выполняется';

$regconv0 = mb_convert_encoding ($reg0, "windows-1251", "UTF-8");

$theanswer = $regconv0;

$reg = 'Ошибка компиляции';

$regconv = mb_convert_encoding ($reg, "windows-1251", "UTF-8");

$reg1 = 'Верно';

$regconv1 = mb_convert_encoding ($reg1, "windows-1251", "UTF-8");

$reg2 = 'Неправильный ответ';

$regconv2 = mb_convert_encoding ($reg2, "windows-1251", "UTF-8");

$reg3 = 'Ошибка представления';

$regconv3 = mb_convert_encoding ($reg3, "windows-1251", "UTF-8");

$reg4 = 'Ошибка выполнения';

$regconv4 = mb_convert_encoding ($reg4, "windows-1251", "UTF-8");

$reg5 = 'Предел времени';

$regconv5 = mb_convert_encoding ($reg5, "windows-1251", "UTF-8");

$reg6 = 'Предел памяти';

$regconv6 = mb_convert_encoding ($reg6, "windows-1251", "UTF-8");

$reg7 = 'Нарушение безопасности';

$regconv7 = mb_convert_encoding ($reg7, "windows-1251", "UTF-8");

$reg8 = 'Обнаружено бездействие';

$regconv8 = mb_convert_encoding ($reg8, "windows-1251", "UTF-8");

$reg9 = 'Неуникально';

$regconv9 = mb_convert_encoding ($reg9, "windows-1251", "UTF-8");

$reg10 = 'Частично верно';

$regconv10 = mb_convert_encoding ($reg10, "windows-1251", "UTF-8");

// переходим на страницу где выводятся результаты проверки всех задач

curl_setopt ($curl, CURLOPT_URL, 'http://atpp. vstu.edu.ru/cgi-bin/status. pl');

$out = curl_exec ($curl);

// получаем html код столбца, где содержится id решения из первой строки статистики

preg_match ('|<tr><td align="left" nowrap>&nbsp; (. *) &nbsp|isU', $out, $content1);

// превращаем html код в строку

$htmlcontent = htmlspecialchars ($content1 [0]);

// оставляем только цифры (таким образом получили из html кода только id решения)

$idresult = preg_replace ("/ [^0-9] /", '', $htmlcontent);

// если задача Выполняется или Ждёт проверки, то повторяем проверку статуса задачи

while ($theanswer == $regconv0 or $theanswer == $regconv00) {

// ставим задержку 3 секунды, чтобы код успел выполниться

sleep (3);

// идём на страницу где содержится статистика по конкретному отправленному решению

curl_setopt ($curl, CURLOPT_URL, "http://atpp. vstu.edu.ru/cgi-bin/status. pl? mode=report&id_stat=$idresult");

$out = curl_exec ($curl);

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

preg_match ('|<table class="tbbd2" WIDTH=100% border=1 align=center cellspacing=1> (. *) </table>|isU', $out, $content2);

// смотрим какой результат решения задачи и записываем его в переменную

preg_match ("/$regconv0|$regconv|$regconv1|$regconv2|$regconv3|$regconv4|$regconv5|$regconv6|$regconv7|$regconv8|$regconv9|$regconv10/", $content2 [0], $resarr);

$theanswer = $resarr [0];

}

// закрываем соединение

curl_close ($curl);

// записываем результат решения в переменную и меняем кодировку

$theanswer = mb_convert_encoding ($resarr [0], "UTF-8", "windows-1251");

// Выводим на экран результат проверки

echo "Результат проверки: ";

echo "<b>";

echo $theanswer;

echo "</b>";

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

if ($theanswer! = $reg1) {

echo "<br><br>";

// получаем сообщение с информацией об ошибке

preg_match ('|<table align="center" border="0" width="100%" cellpadding="0" cellspacing="0"> (. *) <table class="other">|isU', $out, $content3);

// записываем текст ошибки в переменную и меняем кодировку

$err = mb_convert_encoding ($content3 [0], "UTF-8", "windows-1251");

// выводим текст ошибки на экран

echo $err;

echo "<br>";

}

// если ответ Верно или Частично верно, то получаем балл с сайта кафедры

if ($theanswer == $reg10 or $theanswer == $reg1) {

$test = mb_convert_encoding ($content2 [0], "UTF-8", "windows-1251");

$htmlcontent123 = htmlspecialchars ($test);

// разбиваем строку, чтобы найти там подстроку в которой содержится балл за задачу

$mark = explode ("td", $htmlcontent123);

// оставляем только цифры (таким образом получаем баллы).

$mark1 = preg_replace ("/ [^0-9] /", '', $mark [13]); }

/lang/en/autochecker. php - в данном файле содержатся различные вспомогательные тексты для описания модуля, а так же имена полей формы добавления материала.

Исходный код выглядит следующим образом:

// имя модуля, которое будет выводится в системе

$string ['modulename'] = 'autochecker';

// описание модуля, которое выводится при добавлении новых материалов

$string ['modulename_help'] = 'Модуль позволяет в полуавтоматическом режиме добавлять задачи в систему Moodle (требудется название задачи и её ID на сайте автоматической проверяющей системы кафедры АВТ ВоГУ). Так же модуль позволяет отправлять решения задачи и проверять их в автоматическом режиме, выставляет студенту оценку и ведёт статистику отправленных решений. ';

// название поля autocheckerame в форме добавления материала

$string ['autocheckername'] = 'Название задачи';

// название поля ProgID в форме добавления материала

$string ['ProgID'] = 'ID задачи в проверяющей системе';

/db/install. xml - в данном файле содержится информация о структуре таблиц, которые необходимы для работы модуля. Данные таблицы будут автоматически добавлены в базу данных при установке модуля.

Используется язык XML разметки. Код выглядит следующим образом:

<TABLES>

<TABLE NAME="autochecker" COMMENT="Name of module table">

<FIELDS>

<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>

<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" COMMENT="Course autochecker activity belongs to"/>

<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="name field for moodle instances"/>

<FIELD NAME="progid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="id of the problem in AVT system"/>

<FIELD NAME="intro" TYPE="text" NOTNULL="true" SEQUENCE="false" COMMENT="General introduction of the autochecker activity"/>

<FIELD NAME="introformat" TYPE="int" LENGTH="4" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Format of the intro field (MOODLE, HTML, MARKDOWN.)"/>

<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false"/>

<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false"/>

<FIELD NAME="grade" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="100" SEQUENCE="false" COMMENT="The maximum grade. Can be negative to indicate the use of a scale. "/>

</FIELDS>

<KEYS>

<KEY NAME="primary" TYPE="primary" FIELDS="id"/>

</KEYS>

<INDEXES>

<INDEX NAME="course" UNIQUE="false" FIELDS="course"/>

</INDEXES>

</TABLE>

<TABLE NAME="autocheckerstats" COMMENT="Name of module stats table">

<FIELDS>

<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>

<FIELD NAME="postid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false"/>

<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>

<FIELD NAME="username" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>

<FIELD NAME="timeposted" TYPE="char" LENGTH="70" NOTNULL="true" UNSIGNED="true" SEQUENCE="false"/>

<FIELD NAME="result" TYPE="char" LENGTH="50" NOTNULL="true" DEFAULT="100" SEQUENCE="false"/>

</FIELDS>

<KEYS>

<KEY NAME="primary" TYPE="primary" FIELDS="id"/>

<KEY NAME="foreign" TYPE="foreign" FIELDS="postid" REFFIELDS="id" REFTABLE="autochecker"/>

</KEYS>

</TABLE>

</TABLES>

Создаётся две таблицы, первая таблица - стандартная, называется autochecker, в ней содержится вся информация о материалах добавленных с помощью данного модуля. И вторая таблица - дополнительная, называется autocheckerstats, в будет хранится статистика отправленных решений.

3.2 Особенности реализации пользовательского интерфейса

Как уже было сказано ранее, вся информация, которую видит пользователь находится в файле view. php, соответственно весь пользовательский интерфейс так же содержится в этом файле.

Пользовательский интерфейс реализован полностью на языке HTML и CSS. Для отправки решения на проверку используется простая форма и три стандартных элемента формы - select для выбора компилятора, textarea в которую вводится код решения задачи и кнопка submit для отправки задачи на проверку [7].

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

И последний элемент пользовательского интерфейса - таблица в которой содержится статистика по 10 последним отправленным решениям. Таблица так же реализована с помощью html и CSS.

4. Тестирование ПП

4.1 Методика тестирования работы ПП

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

Тестирование проводилось в ручную, по мере разработки ПП. Каждая новая добавленная функция проверялась на работоспособность несколькими тестами. Так же проверялось не повлияла ли новая добавленная функция на работоспособность предыдущих.

4.2 Результаты тестирования

Тестирование показало, что все функции модуля работают корректно, а именно:

- Добавление новых материалов модуля работает корректно

- Получение и вывод на экран текста задачи с сайта автоматической проверяющей системы работает корректно

- Отправка кода решения задачи на сайт автоматической проверяющей системы работает корректно

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

- Выставление студенту оценок в системе Moodle работает корректно

- Сбор и вывод на экран статистики отправленных решений работает корректно

5. Разработка документации

5.2 Инструкции пользователя

Создайте или зайдите в один из существующих курсов в вашей системе Moodle. Нажмите на кнопку "Перейти в режим редактирования". Данная кнопка обычно находится в правом верхнем углу экрана, как показано на рисунке 4:

Рисунок 4 - Переход в режим редактирования

После перехода в режим редактирования вы сможете добавлять новые материалы в курс. Нажмите на кнопку "Добавить элемент или ресурс", как показано на рисунке 5:

Рисунок 5 - Добавление материала

В открывшемся окне выберите элемент "autochecker" и нажмите кнопку "Добавить", как показано на рисунке 6:

Рисунок 6 - Добавление материала модуля "autochecker"

После этого перед вами появится форма добавления нового материала.

При добавлении нового материала необходимо заполнить как минимум два поля - "Название задачи” и "ID задачи”. Пример заполнения полей материала показан на рисунке 7:

Рисунок 7 - Заполнение основных полей нового материала

"Название задачи” - произвольно название, оно будет отображаться на странице задачи, а так же на странице курса в Moodle.

ID задачи - порядковый номер задачи на сайте автоматической проверяющей системы. Данный номер обычно указан на станице задачи перед её названием. Например, если название задачи: "695. I - близкие задачи”, то в данном случае ID будет 695. Это число необходимо вписать в поле ID задачи.

Так же ID задачи может быть найден в URL страницы, на которой находится текст задачи. Например: "http://atpp. vstu.edu.ru/cgi-bin/arh_problems. pl? id_prb=695” нужные цифры находятся в самом конце URL и опять же это будет 695.

Есть ещё третье поле - "Описание”, оно опционально. Туда можно вписать текст задачи. Оно добавлено на тот случай если модуль не сможет получить текст задачи с сайта автоматической проверяющей системы. По умолчанию же данное поле не следует заполнять.

Больше никакой информации не требуется. Нажмите кнопку "Сохранить и вернуться к курсу" или "Сохранить и показать", как показано на рисунке 8, чтобы добавить новый материал и вернуть к курсу или сразу просмотреть его соответственно. После этого новый материал будет добавлен в систему Moodle.

Рисунок 8 - Сохранение нового материала модуля

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

Рисунок 9 - Пример текста задачи, полученного модулем

Так же ниже будет указан пример входных и выходных данных и различные пояснения к условию задачи, как это показано на рисунке 10:

Рисунок 10 - Пример входных и выходных данных задачи

После текста и пояснения к задаче расположена форма для отправки решения задачи. Как выглядит данная форма показано на рисунке 11:

Рисунок 11 - Интерфейс формы отправки задачи

При работе с материалами данного модуля пользователю необходимо выбрать компилятор из выпадающего списка. Записать в специальное поле код своей программы и нажать кнопку "Отправить”.

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

Рисунок 12 - Пример текста описания ошибки

Всё остальное (выставление оценки, сбор статистики) модуль сделает сам. Так же в самом конце страницы материала выводится статистика десяти последних отправленных решений, как это показано на рисунке 13:

Рисунок 13 - Таблица статистики отправленных решений

Решения для каждой задачи можно отправлять неограниченное количество раз.

5.2 Инструкции для администратора

Модуль состоит из одной папки, которая называется Autochecker. Перед установкой модуля зайдите в эту папку и убедитесь, что там содержаться все необходимые для его работы файл. Набор файлов, необходимых для работы показан на рисунке 14.

Рисунок 14 - Необходимый набор файлов модуля

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

Необходимо зайти вначале в файл view. php и найти там строчку вида:

curl_setopt ($curl, CURLOPT_USERPWD, "epo2012_vis: 11111");

Часть кода, в которой находится данная строчка вы можете видеть на рисунке 15:

Рисунок 15 - Часть кода файла view. Php

Как видно с рисунка 15, искомая строка кода находится под номером 107. Необходимо заменить в ней "epo2012_vis" на имя пользователя, а "11111" на пароль пользователя от имени которого вы хотите работать в автоматической проверяющей системе.

Затем необходимо зайти в файл check. php и опять же найти там строчку вида:

curl_setopt ($curl, CURLOPT_USERPWD, "epo2012_vis: 11111");

Она находится в самом начале кода:

Рисунок 16 - Часть кода файла check. php

Как видно с рисунка 16 искомая строка код находится под номером 8. Необходимо проделать те же действия, что и в файле view. php - заменить в найденной строке "epo2012_vis" на имя пользователя, а "11111" на пароль пользователя от имени которого вы хотите работать в автоматической проверяющей системе.

После этого можно приступать к установке модуля. Чтобы установить модуль в систему Moodle скопируйте папку содержащую все файлы модуля на сервер в директорию "/mod”. После этого зайдите в систему Moodle с правами администратора и система выведет вам сообщение, что доступны новые модули для установки, как это показано на рисунке 17:

Рисунок 17 - Уведомление о необходимости обновления системы

Нажмите кнопку "Обновить Moodle” и модуль будет установлен.

В старых версиях системы Moodle, сообщение о необходимости установки нового плагина может не быть выведено автоматически. Если вы закачали папку с модулем в каталог /mod вашей системы Moodle и при этом не получили сообщения, о необходимости установки нового модуля, то воспользуйтесь следующей инструкцией:

В блоке "Настройки" зайдите в "Администрирование", пункт "Управление", как показано на рисунке 5:

Рисунок 18 - Панель администратора Moodle

Вы попадёте на страницу, где будут показаны все неустановленные модули, в том числе и модуль autochecker. Нажмите кнопку "Обновить Moodle" и все модули будут установлены.

Заключение

В ходе данной работы были достигнуты все поставленные цели. Разработан модуль интегрирующий систему автоматической проверки задач по программированию кафедры АВТ ВоГУ в систему Moodle. Достигнута высокая степень интеграции и согласованность интерфейсов. Модуль был успешно установлен на уже работающую систему Moodle кафедры АВТ ВоГУ.

Список использованных источников

1. Moodle - Википедия [Электронный ресурс] // свободная энциклопедия - Режим доступа: https: // ru. wikipedia.org/wiki/Moodle

2. Система дистанционного обучения Moodle [Электронный ресурс] // сайт компании - Режим доступа: http://www.web-learn.ru/23-about-moodle

3. Moodle - Open Source Learning Platform [Электронный ресурс] // сайт разработчиков системы - Режим доступа: https: // moodle.org/

4. Плагины Moodle [Электронный ресурс] // образовательное сообщество - Режим доступа: http://moodlefree.ru/plagins_for_moodle

5. Портфолио|Adrem [Электронный ресурс] //: сайт компании - Режим доступа: http://adremamici.ru/proekty/portfolio

6. Дистанционная подготовка [Электронный ресурс] // система дистанционного обучения - Режим доступа: http://informatics. mccme.ru/

7. HTML Формы [Электронный ресурс] //: SITE-DO: сайт - Режим доступа: http://www.site-do.ru/html/html11. php

8. Тестирование программного обеспечения - Википедия [Электронный ресурс] // свободная энциклопедия - Режим доступа: https: // ru. wikipedia.org/wiki/Тестирование_программного_обеспечения

Приложения

Приложение 1

Исходный код файла view. php

$courseid = $DB->get_records_sql ('SELECT * FROM {course_modules} WHERE id =? ', array ($id)); // получаем локальный id задачи в нашем модуле, через глобальный id задачи в системе

$arr = $DB->get_records_sql ('SELECT * FROM {autochecker} WHERE id =? ', array ($courseid [$id] - >instance)); // получаем массив с данными текущей задачи модуля

$progid = $arr [$courseid [$id] - >instance] - >progid; // получаем id задачи в проверяющей системе


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.