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

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

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

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

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

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

5

Дипломная работа

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

СОДЕРЖАНИЕ

  • Введение
  • 1. Технический проект
  • 1.1 Описание предметной области
  • 1.1.1 Семантический редактор
  • 1.1.2 Интерпретатор языка высокого уровня
  • 1.1.3 Модели оценки программы и навыка программиста
  • 1.1.4 Генерация вариантов заданий на основе шаблонов
  • 1.2 Технология обработки информации
  • 1.2.1 Входные и выходные данные
  • 1.2.2 Пользователи системы
  • 1.2.3 Варианты использования системы
  • 1.3 Информационно-логическая модель системы
  • 1.3.1 Структура и содержание входных и выходных данных
  • 1.3.2 Процесс обработки информации
  • 1.3.3 Требования к интерфейсу пользователя
  • 1.4 Требования к техническому и программному обеспечению
  • 2. Рабочий проект
  • 2.1 Общие сведения о работе системы
  • 2.2 Функциональное назначение
  • 2.3 Установка и выполнение программного продукта
  • 2.4 Описание структуры системы
  • 2.5 Даталогическая модель системы
  • 2.6 Общий алгоритм программного продукта
  • 2.7 Руководство пользователя
  • 2.8 Сообщения системы
  • 3. Программа и методика испытаний
  • Заключение
  • Литература
  • Приложение 1. Диаграмма классов
  • Введение
  • По прогнозам Министерства образования и науки РФ в ближайшие пять лет ожидается сокращение численности студентов высших учебных заведений. Одновременно с этим по результатам исследований аналитического центра REAL-IT потребность в IT-специалистах в ближайшие пять лет продолжит расти, а в случае модернизационного сценария развития российской экономики при текущем уровне выпуска вузов потребность в IT-специалистах станет неудовлетворительной, что сделает невозможным такой сценарий. Организовать выпуск IT-специалистов, удовлетворяющий потребности государства, можно только путем автоматизации процесса обучения.
  • Одной из важнейших дисциплин при обучении на IT-направлении является программирование. Однако в последние годы в вуз приходит все больше школьников, не изучавших программированию в школе, поэтому в настоящее время требуется осуществлять обучение программированию с начального уровня. При этом большинство школ и университетов используют профессиональные промышленные системы разработки программного обеспечения и языки высокого уровня со сложной формальной грамматикой, что затрудняет процесс обучения программированию, заставляя обучаемого разбираться в особенностях синтаксиса и реализации конкретного языка.
  • На данный момент одной из серьезнейших проблем при обучении программированию является проверка выполненной студентом работы.
    В лучшем случае эта проверка осуществляется в два этапа. На первом этапе проверяется правильность выполнения программы посредством проверки выходных данных на тестовых наборах входных. Если программа прошла все тесты, то преподаватель вручную проверяет структуру написанной программы с целью выявить недостатки стиля или неэффективности реализации. Окончательная оценка выполненной работы возможна только по результатам ручной проверки. Такая проверка занимает много времени, однако обойтись без нее нельзя, потому что если, например, поставлена задача, реализовать пузырьковую сортировку, то программист может не реализовать необходимый код, а просто вызвать стандартную процедуру быстрой сортировки, и такая программа гарантированно пройдет все тесты. Таким образом, без ручной проверки структуры программы для оценки ее корректности и качества обойтись нельзя. Поэтому актуальной является задача автоматизации процесса проверки лабораторных работ.
  • Целью настоящей работы является автоматизация процесса обучения программированию с помощью разработки интегрированной среды, позволяющей оценить структуру и качество программы, а также навык программиста.
  • Назначением разрабатываемой автоматизированной системы является повышение качества подготовки программистов и снижение трудозатрат на подготовку и проверку лабораторных работ.
  • автоматизация обучение программист интегрированная среда
  • 1. Технический проект

1.1 Описание предметной области

Интегрированная среда разработки (англ. Integrated Development Environment) -- система программных средств, используемая программистами для разработки программного обеспечения.

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

1.1.1 Семантический редактор

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

Рассмотрим предлагаемый вид языка.

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

· небольшое множество элементарных типов данных;

· множество типичных операций с элементарными типами;

· минимальный набор управляющих операторов;

· небольшой набор мощных агрегатов данных;

· средства определения новых функций;

· поддержка обработки исключений;

· механизмы определения новых типов данных (классы);

· поддержка модульности.

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

Определим основные свойства языка.

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

Агрегат данных в языке только один -- контейнер. Его характеристики:

· имя и тип;

· тип элементов;

· способ доступа к элементам;

· размер и количество элементов;

· способ создания и время жизни.

Имя контейнера -- это имя переменной в программе. Тип элементов может быть либо встроенным, либо реализованным. Способы доступа к его элементам: прямой, последовательный и ассоциативный доступ. При последовательном доступе используются следующие операции:

· переход к первому элементу;

· переход к последнему элементу;

· переход к следующему элементу;

· переход к предыдущему элементу;

· переход на n элементов вперед (от первого к последнему элементу контейнера);

· переход на n элементов назад (от конца к началу контейнера);

· получение (изменения) значения текущего элемента.

Размер может задаваться явно при создании контейнера. Контейнер может быть фиксированным или динамическим. Динамический контейнер с заданным размером является ограниченным. Объявление переменной фактически означает создание соответствующего контейнера. Контейнер может быть создан явно (например, операцией new). В этом случае он уничтожается явным образом. Файл также является контейнером и создается с помощью специальной операции «открыть».

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

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

В объявлении переменной задаются тип, имя и возможное начальное значение. Для числовых переменных разрешается задавать диапазон изменений. Для строковых переменных разрешается задавать максимальную длину. Объявление константы обозначается ключевым словом «константа».

В качестве начального значения может задаваться выражение соответствующего типа. В выражениях не допускается смешивать операции разного типа. Преобразования типов по умолчанию не выполняются, за исключением преобразования «целое» -> «вещественное».

Объявление ссылки начинается с ключевого слова «ссылка». Ссылка может быть инициализирована именем уже объявленной переменной. Ссылку можно инициализировать и динамической переменной, создаваемой с помощью операции «новая».

Операторы управления: «если», «цикл». Каждый оператор завершается символом «;». Выражение, завершенное точкой с запятой, является оператором.

Условный оператор «если» имеет следующий формат:

если

условие тогда операторы;

условие тогда операторы;

условие тогда операторы;

иначе

операторы;

конец если;

Выполняются только те блоки операторов, условия которых истинны. Часть else может отсутствовать. Условие в скобках -- выражение булевского типа. Конструкция операторы; называется блоком.

Оператор цикла только один и имеет следующий синтаксис:

цикл

условие: операторы;

условие: операторы;

условие: операторы;

конец цикла;

Выполняются только те блоки операторов, условия которых истинны.

Определение функции имеет вид:

тип имя (параметры)

операторы;

конец имя;

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

Параметры передаются либо как значения, либо как ссылки.

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

Новый тип данных определяется конструкцией класса:

группа имя

операторы;

конец имя;

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

Формат определения методов совпадает с форматом объявления функций. Любой метод -- виртуальный («виртуальный»). Метод можно объявить как статический (такой метод не является виртуальным), абстрактный («абстрактный») или бесплодный («бесплодный»). В классе можно объявлять специальные методы: конструкторы и деструктор. Один конструктор может быть статическим.

Разрешено простое открытое наследование, принцип подстановки выполняется. Синтаксис наследования:

группа имя: имя_базовой_группы

Можно объявить класс публичным, абстрактным или бесплодным.

Как было сказано выше, конструкции являются блоком. Любые имена, объявленные в блоке, являются локальными по умолчанию. Имя можно сделать публичным («открытое») -- имя становится доступным на следующем уровне вложенности. Переменные, объявленные в блоке, являются локальными с традиционной семантикой. Разрешается объявлять переменные статическими («статичное»).

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

Компилируемой единицей является модуль. Модуль определяется конструкцией:

модуль имя

операторы;

конец имя;

В модуле определяются переменные, константы, функции, классы, интерфейсы. Тело модуля -- это блок. Модули тоже могут быть вложенными; как обычно, для доступа к вложенному модулю его нужно объявить публичным. Экспорт имен определяется модификатором доступа «открытое». Импорт имен в данном модуле из другого модуля осуществляется конструкцией:

использовать имя_модуля;

В среде определен модуль «система», в составе которого определены все системные модули, классы, интерфейсы, функции, переменные и константы. Любой модуль, объявленный публичным, является общедоступным для любых других модулей в среде.

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

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

Каждая конструкция - неделимый блок, который начинается с ключевого слова. При вводе ключевого слова конструкция создается автоматически (сниппет) с минимальным телом. Например, при вводе ключевого слова «если» создается конструкция

если условие тогда

операторы;

иначе

операторы;

конец если;

Пользователь имеет возможность редактировать условие1 и добавлять операторы и новые условия. Блок «иначе», условия и весь блок «если» удаляется только целиком. Удалять ключевые слова «если» «иначе» «конец» отдельно нельзя.

Аналогично построены сниппеты для остальных конструкций.

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

Рис 1.1. Семантическое дерево программы

Операторы ввода и вывода объявлены в отдельном модуле с минимальным необходимым набором операций ввода/вывода.

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

1.1.2 Интерпретатор языка высокого уровня

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

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

Схема интерпретации может быть представлена в виде рекурсии следующим образом:

1. Выполнение действий, характерных для данного оператора.

2. Проверка на наличие дочернего элемента. В случае его существования - запуск процедуры интерпретации у дочернего элемента. Иначе - очистка памяти от объектов, вышедших из области видимости.

3. Проверка на наличие следующего элемента. В случае его существования - запуск процедуры интерпретации у следующего элемента. Иначе - очистка памяти от объектов, вышедших из области видимости.

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

5. В случае возникновения ошибки процесс интерпретации прерывается, и управление передается отладчику. Процесс интерпретации также прерывается при интерпретации оператора, помеченного как «остановочный».

Данная схема характерна для большинства операторов за исключением оператора условного перехода и оператора цикла.

Оператор условного перехода «если» вычисляет значение логического выражения, объявленного в условии, и в случае ложного выражения передает управление дочернему оператору оператора «иначе». Если оператор «иначе» отсутствует, то управление передается согласно стандартной схеме интерпретации.

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

Операторы «переменная», «константа» и «массив» не интерпретируются, так как загружаются в память программы при объявлении, либо загрузке программы с диска.

Оператор «группа» также не интерпретируется, так как представляется как класс в памяти программы.

Оператор «присвоить» производит вычисление выражения справа и пытается присвоить его выражению слева.

Оператор «вызвать» производит интерпретацию функции или процедуры, указанную пользователем.

Оператор «вернуть» производит вычисление выражение и возвращает полученное значение оператору, вызвавшему данную функцию. Процесс интерпретации функции при этом прерывается.

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

1.1.3 Модели оценки программы и навыка программиста

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

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

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

· Ошибка алгоритма - нарушение основного алгоритма, выполняющего вычисление. Возникает в случае, если обучаемый решил задачу методом, отличным от указанного в задании. Например, реализовал сортировку вставками вместо пузырьковой сортировки. Является фатальной ошибкой - программа считается не правильной и не принимается;

· Ошибка ограничений условий задачи. Возникает в случае, если обучаемый нарушает условия задачи и пользуется другим работающим способом. Например, передает значения переменных по значению. Является фатальной ошибкой - программа считается не правильной и не принимается;

· Грубые ошибки: ненужные операторы, запутанная длинная логика программы, отсутствие функций для выполнения однотипных действий и т.д. Данные ошибки накладывают серьезный штраф на получаемую обучаемым оценку;

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

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

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

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

Система так же учитывает грубые ошибки.

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

1.1.4 Генерация вариантов заданий на основе шаблонов

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

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

Рассмотрим это задание. Очевидными претендентами в параметры являются значения 100, -50 и 50. Можно обобщить эти значения до параметров K, xн, xк. Тогда данное задание будет выглядеть следующим образом:

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

Для параметров xн и xк существует естественное ограничение: xн xк. Очевидно, что параметр K зависит от параметров xн и xк , и имеет естественную нижнюю границу 1 (при xн = xк - в данном случае будет K одинаковых чисел), но верхняя может быть любой - она и будет являться параметром.

Однако установить ограничения можно не только на числовые значения, но и на часть текста задания. В формулировке задания указаны следующие данные: тип случайных чисел, способ задания количества случайных чисел, способ задания границ диапазона, тип выходного файла, способ задания имени выходного файла. Например, способ задания значений K, xн, xк может быть задан следующими вариантами:

1. Осуществить ввод с клавиатуры;

2. Сгенерировать случайным образом;

3. Осуществить ввод из текстового (или бинарного) файла;

4. Задать в качестве параметра командной строки.

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

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

Пусть в шаблоне определено n параметров и пусть количество значений параметра pi равно mi. Тогда максимальное количество вариантов, которая может сгенерировать система по шаблону, определяется известной формулой:

(1.1)

Реально количество вариантов будет меньше, поскольку некоторые параметры зависят друг от друга. Например, параметр K зависит от параметров xн и xк. Можно установить и специальные ограничения значения K, включить этот способ получения для xн и xк. Тем не менее, количество вариантов остается достаточно большим. Рассмотрим полный список параметров приведенного выше задания:

1) p1: тип входного файла; m1 = 2;

2) p2: способ задания имени файла; m2 = 2;

3) p3: способ ввода K; K > 0; m3 = 4;

4) p4: способ ввода xн и xк; xн xк; m4 = 4;

5) p5: тип случайных чисел; m5 = 2;

6) p6: тип выходного файла; m6 = 2;

7) p7: способ задания имени файла; m7 = 5;

8) p8: способ обработки значений; m8 = 20.

Количество вариантов обработки значений соответствует количеству вариантов заданий в сборниках задач и упражнений В.В.Лаптева (20 вариантов), Т.А. Павловской (20 вариантов), Эпштейна (24 варианта), что означает, что такого количества вариантов заданий достаточно для всех студентов группы.

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

p9: количество файлов; p1 = p6 = “двоичный”; m9 = 2.

Таким образом, имеем (без учета параметра p9):

N =

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

Это - теоретический максимум. При условиях m3 = 4 и m4 = 3 (параметр p4 обязательно задается способом, не совпадающим со способом задания параметра p3), m2 = 4 и m7 = 4 (параметр p7 обязательно задается способом, не совпадающим со способом задания параметра p2) имеем N = 15360. Но даже если из-за зависимостей параметров нам придется ограничиться только 100 вариантами - этого с лихвой хватит, чтобы задать каждому студенту индивидуальный вариант. Понятно, что при индивидуальном обучении студент, выполнивший хотя бы половину подобных заданий, приобретет устойчивый навык написания подобных программ.

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

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

Если функция имеет аргумент x, то ее сложность равна 0 (сложной она не является).

Если же аргумент функции представляет собой другую математическую функцию, то ее сложность равна 1.

Учитывая все факторы генерации случайной функции, получим следующие параметры:

1) p1: количество слагаемых; m1 = 4;

2) p2: количество базовых функций; m2 = 10;

3) p3: сложность функции; m3 = 2;

4) p4: длина диапазона значений коэффициентов; m4 = 100;

5) p5: максимальное количество коэффициентов базовой функции; m5 = 3.

По формуле (1.1) получаем следующее число вариантов:

N =

Из полученного значения количества вариантов генерации случайной математической функции следует, что каждый студент получит задание, отличающееся от заданий его одногруппников, что исключит возможность «списывания».

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

1.2 Технология обработки информации

Система состоит из четырех компонентов: семантического редактора, интерпретатора, модуля оценки и модуля генерации вариантов заданий. Диаграмма процесса работы автоматизированной системы представлена на рис. 1.2.

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

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

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

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

Рис. 1.2 Диаграмма активностей системы

1.2.1 Входные и выходные данные

В систему от пользователей поступают следующие входные данные:

1. Шаблоны заданий на лабораторные работы.

2. Эталонные решения заданий преподавателя.

3. Решение лабораторной работы обучаемым.

4. Сохраненные файлы программ в формате XML.

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

Входные данные семантического редактора представлены в таблице 1.1.

Таблица 1.1 Входные данные семантического редактора

Название

Описание

Ключевые слова

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

Выражения

Арифметические или логические выражения. После ввода выражения осуществляется проверка на корректность выражения и соответствие типа.

Типы данных

Встроенные или пользовательские определения представления переменных. Встроенные типы данных: целое, вещественное, логическое, символ.

Выходными данными системы являются:

1. Варианты заданий на лабораторную работу.

2. Семантическое дерево программы, которое может быть сохранено на диск в формате XML.

3. Результат выполнения лабораторной работы.

4. Статистика за период обучения программированию.

Все выходные данные визуализируются с помощью GUI-интерфейса в удобном для пользователей виде.

1.2.2 Пользователи системы

Основными потенциальными пользователями системы являются:

· преподаватель;

· обучаемый (школьник, студент и т.д.).

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

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

1.2.3 Варианты использования системы

Модель вариантов использования системы представлена на рис. 1.3. Описание сценариев для каждого варианта использования системы представлено в таблицах 1.2-1.5.

Рис. 1.3. Модель вариантов использования системы

Таблица 1.2 Варианты использования семантического редактора

Название

Пользователь

Сценарий

Добавить конструкцию

Обучаемый

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

Удалить конструкцию

Обучаемый

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

Редактировать выражение

Обучаемый

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

Сохранить программу

Обучаемый

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

Загрузить программу

Обучаемый

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

Таблица 1.3 Варианты использования интерпретатора

Название

Пользователь

Сценарий

Выполнить программу

Обучаемый

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

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

Название

Пользователь

Сценарий

Сдать работу

Обучаемый

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

Проанализировать ошибки

Обучаемый

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

Таблица 1.5 Варианты использования модуля генерации вариантов заданий

Название

Пользователь

Сценарий

Получить задание на лабораторную работу

Обучаемый

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

Добавить задание

Преподаватель

Преподаватель создает новую тему лабораторной работы, оформляет шаблон задания и реализует эталонное решение.

Редактировать задание

Преподаватель

Преподаватель редактирует тему лабораторной работы, шаблон задания, эталонное решение.

Удалить задание

Преподаватель

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

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

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

На рисунке 1.4 приведена диаграмма последовательностей для варианта использования «Добавить конструкцию».

Рис. 1.4. Диаграмма последовательностей для варианта «Добавить конструкцию».

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

1.3 Информационно-логическая модель системы

На основании исследования предметной области, а также определения основных функциональных особенностей проектируемой системы можно выделить следующие сущности:

1. Обучаемый.

2. Группа.

3. Преподаватель.

4. Задание.

5. Лабораторная работа.

Сущность «Обучаемый» содержит информацию об имени, фамилии, отчестве обучаемого, группе и имени пользователя.

Сущность «Группа» содержит информацию о названии группы.

Сущность «Преподаватель» содержит информацию об имени, фамилии, отчестве преподавателя и его имени пользователя.

Сущность «Задание» содержит информацию о теме лабораторной работы, номере, шаблоне условия и эталонном семантическом дереве.

Сущность «Лабораторная работа» содержит информацию об авторе, задании, варианте условия и варианте эталонного дерева, полученной оценке и балле навыка программиста.

На основании исследования семантического редактора и интерпретатора системы можно выделить следующие сущности:

6. Поле семантического редактора.

7. Презентер.

8. Семантическое дерево.

9. Словарь.

10. Интерпретатор.

11. Память:

· куча;

· стек.

12. Анализатор выражений.

13. Оператор и его виды:

· модуль;

· функция;

· процедура;

· переменная;

· константа;

· массив;

· вызов функции;

· присвоение;

· условие;

· иначе;

· цикл;

· возврат из функции;

· группа;

· пустой оператор.

Сущность «Поле семантического редактора» содержит информацию о семантических конструкциях, порядке их следования и форматировании, а также методы редактирования текста.

Сущность «Презентер» содержит методы проверки корректности вставки и удаления элементов семантического поля и методы вставки, редактирования и удаления семантических конструкций.

Сущность «Семантическое дерево» содержит информацию о коренном узле (модуле) и методы поиска, вставки, удаления, редактирования и замены оператора или группы операторов.

Сущность «Словарь» содержит словари ключевых слов, встроенных типов и значений по умолчанию, используемых семантическим редактором.

Сущность «Интерпретатор» содержит информацию о текущем интерпретируемом операторе и методы передачи управления при ветвлении, цикле и вызове функции. Сущность «Память» содержит информацию об объявленных переменных, методы создания, чтения, записи и удаления объектов. Данная сущность является абстрактной и от нее наследуются сущности «Куча» и «Стек». «Куча» является глобальной областью памяти, формируемой в процессе объявления объектов и очищаемой в конце работы программы. «Стек» является локальной областью памяти и создается заново для каждого вызова функции.

Сущность «Анализатор выражений» содержит методы синтаксического разбора выражений.

Сущность «Оператор» содержит информацию обо всех элементах оператора, мета данные и методы интерпретации и клонирования. Далее от этой сущности наследуются все возможные операторы, при необходимости переопределяя методы интерпретации и клонирования.

Диаграмма «сущность-связь» (entity-relationship) представлена на рис. 1.5.

Рис. 1.5. Диаграмма «сущность-связь» (ERD).

1.3.1 Структура и содержание входных и выходных данных

1.3.1.1 Сохраненное семантическое дерево программы в формате XML

Корневым элементом XML файла является модуль:

<модуль атрибуты>

</модуль>

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

Пример XML файла для алгоритма пузырьковой сортировки:

<?xml version="1.0" encoding="utf-16"?>

<модуль NameWord="ПузырьковаяСортировка">

<константа Type="целое" Expression="10" NameWord="размер"></константа>

<массив Type="целое" NameWord="а" Size="размер"></массив>

<пустая_строка></пустая_строка>

<функция Type="логическое" Expression="" NameWord="ИнициализацияМассива">

<переменная Type="целое" NameWord="и"></переменная>

<присвоить Left="и" Expression="0"></присвоить>

<цикл Expression="и &lt; 10" BodyWord="и &lt; 10">

<присвоить Left="а[и]" Expression="Рандом(0, 50)"></присвоить>

<вывести Expression="стр(а[и]) + &quot; &quot;"></вывести>

<присвоить Left="и" Expression="и + 1"></присвоить>

</цикл>

<вывести Expression="&quot;\n&quot;"></вывести>

</функция>

<пустая_строка></пустая_строка>

<процедура Expression="" NameWord="Сортировка">

<переменная Type="целое" NameWord="и"></переменная>

<переменная Type="целое" NameWord="ж"></переменная>

<присвоить Left="и" Expression="0"></присвоить>

<цикл Expression="и &lt; 10" BodyWord="и &lt; 10">

<присвоить Left="ж" Expression="и + 1"></присвоить>

<цикл Expression="ж &lt; 10">

<если Expression="а[и] &gt; а[ж]">

<переменная Type="целое" NameWord="временная"></переменная>

<присвоить Left="временная" Expression="а[ж]"></присвоить>

<присвоить Left="а[ж]" Expression="а[и]"></присвоить>

<присвоить Left="а[и]" Expression="временная"></присвоить>

</если>

<присвоить Left="ж" Expression="ж + 1"></присвоить>

</цикл>

<присвоить Left="и" Expression="и + 1"></присвоить>

</цикл>

</процедура>

<пустая_строка></пустая_строка>

<процедура Expression="" NameWord="Распечатать">

<переменная Type="целое" NameWord="и"></переменная>

<присвоить Left="и" Expression="0"></присвоить>

<цикл Expression="и &lt; 10 ">

<вывести Expression="стр(а[и]) + &quot; &quot;"></вывести>

<присвоить Left="и" Expression="и + 1"></присвоить>

</цикл>

</процедура>

<пустая_строка></пустая_строка>

<процедура Expression="" NameWord="Главная">

<вызвать Expression="ИнициализацияМассива()"></вызвать>

<вызвать Expression="Сортировка()"></вызвать>

<вызвать Expression="Распечатать()"></вызвать>

</процедура> </модуль>

1.3.1.2 Шаблон задания на лабораторную работу

Шаблон задания представляет собой список параметров, заключенных между знаками '<' и `>'. Например, шаблон <type_variable> характеризует тип переменной, генерируемой программой, а шаблон <size, begin, end> означает генерацию целого положительного числа в интервале [begin; end].

Пример шаблона задания для темы «Функции»:

Написать программу для нахождения значения цепочно-заданной функции:
f(x) = { <FUNCTION>, x меньше <NUMBER, begin, end>; <FUNCTION>, x >= <SIZE, begin, end> }. Переменная x <TYPE_VARIABLE> типа и следует задать её с помощью <TYPE_INPUT>.

1.3.2 Процесс обработки информации

Процесс обработки информации разделяется на следующие этапы:

1. Запустить процесс генерации варианта задания на основе выбранной обучаемым темы и получить в результате конкретное условие и эталонное дерево.

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

3. В случае некорректности решения выдать обучаемому уведомления о допущенных ошибках.

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

1.3.3 Требования к интерфейсу пользователя

Пользовательский интерфейс с системой должен быть реализован в виде стандартной оконной программы под ОС Microsoft Windows. Основное внимание следует уделить визуализациям семантической модели и проекта программы, списка ошибок, имитатора консоли. В частности, необходимо реализовать следующие визуализации:

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

2. Визуализация в виде дерева структуры проекта программы. Реализовать возможность добавления, удаления, переименования и перемещения файлов и папок проекта. Для каждого узла дерева использовать пояснительную иконку.

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

1.4 Требования к техническому и программному обеспечению

Требования к техническому обеспечению:

x86-совместимый процессор с тактовой частотой не ниже 1 GHz;

оперативная память объемом не менее 256 MB;

монитор SVGA (предпочтительнее широкоформатный);

клавиатура;

мышь.

Требования к программному обеспечению: операционная система Microsoft Windows 2000/XP/2003/Vista/7; программная платформа Microsoft .NET Framework 4.0.

2. Рабочий проект

2.1 Общие сведения о работе системы

Система состоит из нескольких файлов, описание основных приведено в табл. 2.1.

Таблица 2.1 Файлы, составляющие систему

Имя файла

Назначение

IDE.exe

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

WPFToolkit.dll

Библиотека компонента интерфейса Data Grid

IronPython.dll

IronPython.Modules.dll

Microsoft.Dynamic.dll

Microsoft.Scripting.dll

Microsoft.Scripting.Metadata.dll

Библиотеки, необходимые для подключения интерпретатора Iron Python'а.

Пузырьковая сортировка.xml

XML файл тестовой программы

dotNetFx40_Full_x86_x64.exe

Платформа .NET Framework 4.0 Client Profile

Требования к техническому обеспечению:

x86-совместимый процессор с тактовой частотой не ниже 1 GHz;

оперативная память объемом не менее 256 MB;

монитор SVGA (предпочтительнее широкоформатный);

клавиатура;

мышь.

Требования к программному обеспечению:

операционная система Microsoft Windows 2000/XP/2003/Vista/Seven;

программная платформа Microsoft .NET Framework 4.0.

Разработка данного проекта выполнялась на языке программирования C# с помощью следующих программных продуктов:

интегрированная среда разработки Microsoft Visual Studio 2010 Ultimate;

программная платформа Microsoft .NET Framework 4.0;

среда для дизайна интерфейсов Microsoft Expression Blend 4;

клиент для работы с репозитарием исходного кода TortoiseHG 2.0.5;

текстовый редактор с подсветкой исходного кода Notepad++ 5.9.

2.2 Функциональное назначение

Система обладает следующими функциональными возможностями:

загрузка программы:

валидация XML файла;

XML-парсинг во внутренний формат программы;

сохранение программы в формате XML.

выполнение программы интерпретатором;

анализ семантических ошибок;

анализ ошибок времени выполнения;

добавление конструкции:

проверка на корректность вставки;

автоматическое табулирование текста

удаление конструкции;

удаление оператора целиком;

замена оператора его телом.

редактирование выражений:

определение типа выражения;

валидация выражения;

автоматическая табуляция выражения.

выбор языка:

русский язык;

английский язык.

2.3 Установка и выполнение программного продукта

Для использования исполняемого модуля системы пользователю необходимо разместить относящиеся к системе файлы в какой-либо папке на жестком диске своего компьютера. Если на компьютере пользователя еще не установлена платформа Microsoft .NET Framework 4.0, то ее необходимо установить. Она доступна для свободной загрузки с официального сайта компании Microsoft по адресу: http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=e5ad0459-cbcc-4b4f-97b6-fb17111cf544, либо в дистрибутиве с системой dotNetFx40_Full_x86_x64.exe.

2.4 Описание структуры системы

Семантический редактор реализует паттерн Вид-Модель-Презентер.

Видом в данном случае является текстовый редактор MS WPF Rich Textbox, который поддерживает работу со структурированным тестом. Текст делится на документы, документы на параграфы, параграфы на атомарные единицы.

Набор атомарных единиц редактора, содержащий все элементы оператора, является оператором.

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

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

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

· обработка нажатий клавиш и вызов соответствующей контролирующей функции;

· проверка корректности ввода;

· проверка правильности имен;

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

· добавление операторов в семантическое дерево;

· удаление операторов из семантического дерева;

· копирование, вырезание и вставка операторов;

· изменение языка текстового редактора (русский и английский);

· подсветка синтаксиса;

· загрузка и сохранение программы.

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

Ошибки ввода выводятся в строку состояния, семантические ошибки выводятся в список ошибок.

Интерпретатор вызывает процедуру интерпретации у функции, определенной пользователем и следит за выполнением процедур интерпретации у операторов.

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

2.5 Даталогическая модель системы

Система сохраняет информацию о лабораторных работах в базе данных
MS SQL Server Compact Edition.

Схема базы данных была получена на основе инфологической модели системы. Диаграмма схемы базы данных представлена на рисунке 2.1.

Рис 2.1. Структура базы данных.

В табл. 2.2-2.6 приведено описание таблиц используемой базы данных.

Таблица 2.2 Таблица ГРУППА

Название поля

Тип данных

Описание

Номер_группы

int

Первичный ключ - уникальный идентификатор

Название

varchar(MAX)

Имя группы

Таблица 2.3 Таблица ОБУЧАЕМЫЙ

Название метода (свойства)

Тип возвращаемого значения

Описание

Номер_обучаемого

int

Первичный ключ - уникальный идентификатор

Номер группы

int

Внешний ключ - идентификатор группы

ФИО

varchar(MAX)

Фамилия, имя и отчество обучаемого

Имя_пользователя

varchar(MAX)

Имя пользователя в системе авторизации

Таблица 2.4 Таблица ПРЕПОДАВАТЕЛЬ

Название поля

Тип данных

Описание

Номер_преподавателя

int

Первичный ключ - уникальный идентификатор

ФИО

varchar(MAX)

Фамилия, имя и отчество преподавателя

Имя_пользователя

varchar(MAX)

Имя пользователя в системе авторизации

Таблица 2.5 Таблица ЗАДАНИЕ


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

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