Воробьёв Л. О., Полетаев В. А., Моргайлов Д. Д. Разработка интегрированной CASE–системы для обучения студентов программированию. Выполнен сравнительный анализ возможностей современных CASE–средств, выявлены их основные ограничения. Обоснована актуальность создания интегрированной CASE–системы с поддержкой генерации алгоритмического программного кода. Приведено описание внутреннего устройства разработанной системы и результатов ее работы
Ключевые слова: CASE–система, язык UML, проектирование, генерация исходного кода, обучение студентов.
Сложность и объемы разрабатываемых программных систем с каждым годом неуклонно повышаются. Усложнение процессов анализа, проектирования, разработки, тестирования и сопровождения программных продуктов приводит к необходимости увеличения числа участников проекта и ужесточению требований к качеству и срокам выхода продукта на рынок [1].
Для решения этой проблемы создаются автоматизированные программные инструменты (CASE–системы), главным назначением которых является сокращение трудозатрат на выполнение рутинных операций в процессе жизненного цикла разработки программного обеспечения, улучшение качества программных продуктов, поддержание унифицированного и согласованного стиля работы [1, 2].
На данный момент разработано множество различных CASE–инструментов, облегчающих процесс проектирования и документирования программных систем. Они поддерживают построение на специализированном формальном языке набора визуальных диаграмм и спецификаций, описывающих структурные и поведенческие аспекты проектируемого продукта.
Наиболее популярными являются системы IBMRationalRose, ParadigmPlus, BPWin, SybasePowerDesigner, Silverrunи прочие [3, 4]. Большинство из них ориентированы на применение унифицированного языка моделирования UML как основного модельного аппарата CASE–технологий при объектно–ориентированном подходе [5].
Однако главным ограничением таких систем является узкие возможности генерации исходного кода, поскольку генерация объектно–ориентированного кода по статическим моделям программы (например, по диаграммам классов и компонентов языка UML) дает на выходе исключительно каркас (скелет
) программного продукта, представляющий собой набор программных модулей (файлов исходного кода). Модули каркаса состоят из сгенерированного объявления классов с полями, сигнатурами и заглушками
методов, но не содержат при этом алгоритмического кода методов класса.
Выявленное ограничение является обоснованным при создании реальных программных продуктов и объясняется многообразием современных средств разработки: языков, технологий, фреймворков, платформ, — и их непрерывным развитием. Однако в случае, если объектом разработки является учебный программный проект, использующий только стандартный набор библиотек языка, такие ограничения можно обойти, реализовав поддержку генерации исполняемого кода по графической записи алгоритма.
Кроме того, использование интегрированной CASE–системы с возможностью генерации программного кода для решения учебных задач позволит улучшить понимание студентами взаимосвязей между различными моделями представления программной системы, а также между моделями системы и ее исходными кодами
Цель работы — разработка интегрированного CASE–средства для повышения эффективности обучения студентов программированию.
На языке программирования Java была разработана программная система, позволяющая создавать логическую модель программного продукта, а также описывать реализацию методов классов в виде графической модели алгоритма.
Логическая модель программной системы представлена в виде UML–диаграммы классов. При этом, в отличие от других CASE–систем на диаграмме отображаются связи между сущностями, представленными на диаграмме в зависимости от указанных пользователем типов свойств, методов, аргументов методов. Это позволяет оптимизировать время программиста, направленное не на разработку визуальной составляющей диаграммы, а на разработку самой модели (рис. 1)
Другой важной особенностью разрабатываемой системы является возможность создания функциональной модели работы программы — описания алгоритмов — реализации методов классов, определенной в UML–диаграмме классов. Для редактирования алгоритма разработанная система предоставляет пользователю интерфейс типа Drag&Drop для манипулирования операторами программы и отношениями между ними (рис. 2).
С помощью данного интерфейса пользователь может изменять реализацию методов и генерировать на их основе программный код. Например, для изображенного на рис. 2 алгоритма кодбудет иметь вид, показанный на рис. 3.
Модель представления данных условно разделяется на модель представления алгоритмов функций и модель представления UML–диаграммы классов. Для взаимодействия с графической частью используются механизм обработки событий. События необходимы для корректного отображения UML–диаграммы, поскольку изменение одного элемента (например, типа аргумента) может изменить схему связей между классами.
В модели представления UML диаграммы широко используется Java Reflection API, который позволяет с легкостью использовать существующие классы в разрабатываемой UML–диаграмме. Элементы языка программирования (классы, методы, члены классов и локальные переменные) могут быть преобразованы из программного кода и выведены на экран, благодаря использованию этой библиотеки.
На рис. 4 изображена UML–диаграмма классов, которые реализуют внутреннее представление проектируемой диаграммы классов. Основным элементом диаграммы является класс UMLClass,который содержит в себе поля,методы и вложенные классы, которые также могут содержать вложенные члены. Класс для представления классов на UML–диаграмме предоставляет список полей, методов и вложенных классов.
Алгоритмы составляются из блоков, которые обозначают действия или могут содержать коллекцию действий. Каждое такое действие может иметь тип возвращаемого значения, или может содержать набор действий. Эти действия называются операторами. Для представления всего разнообразия операторов используется библиотека JSON, которая позволяет хранитьнабор значений в текстовых файлах. Таким образом, набор операторов может быть адаптирован для любого языка программирования путем изменения структуры текстового файла в формате JSON.
За реализацию методов отвечает класс Method, который хранит список параметров, локальных переменных и тип возвращаемого значения. Класс Method содержит также коллекцию операторов, которая является реализацией метода. Один оператор может быть либо литералом, либо простым или составным оператором. Составные операторы примечательны тем, что они являются объединением нескольких операторов, которые также могут быть составными. По сути, реализация метода – это также составной оператор.
Метод не всегда может содержать реализацию. Так, например,абстрактные или native–методы не могут иметь тела. Однако, поскольку в разработанной CASE–системе все алгоритмы записываются исключительно в терминах языка Java, поэтому необходимость работы с native–методами возникает лишь при использовании классов, которые их содержат.
CASE–система по построенным моделям генерирует программный код на языке программирования Java, однако она может быть адаптирована для использования с любым объектно–ориентированным языком программирования.
Исследованы особенности существующих средств автоматизированной разработки программных средств, проанализированы их преимущества и недостатки. Была разработана CASE–система с учетом обнаруженных недостатков существующих решений
Разработанная система применима для быстрой разработки несложных программных продуктов, а также может быть применена при обучении программированию учащихся школ и студентов, поскольку пользователь программы оперирует только функциональными и структурными диаграммами, абстрагируясь от особенностей конкретного языка программирования.