Генерация программного кода
Баев Д.Э., Григорьев А.В.
Донецкий национальный технический университет
azo.cw@yandex.ru, grigorievalvl@gmail.com
Баев Д.Э., Григорьев А.В. Генерация программного кода. В статье описан термин генерации программного кода, основные бизнес-процессы, методы и требования генерации. Выполнен обзор программных продуктов для генерации программного кода. Проанализированы проблемы, возникающие при генерации программного кода, а также рассмотрен вопрос различия шаблонов и генераторов.
Ключевые слова: САПР ПО «Генерация программного кода», генерация программного кода, программные шаблоны, генераторы кода, графическая модель, программное представление.
Введение
Генерация кода – это автоматическое создание программного кода специальным приложением, при котором по заданным условиям полностью или частично формируется исходный код программы. Такое специальное приложение называется генератором кода.
Актуальность использования генераторов программного кода обусловлена повышением скорости разработки программного обеспечения; мобильности и гибкости платформ для разработки, а также самих разработчиков; минимизацией ошибок на этапе проектирования, подготовки программного обеспечения и выбора программных средств для реализации определенной задачи.
Целью предлагаемой статьи является:
- анализ назначения и структуры современных генераторов программного кода;
- анализ рынка программных продуктов с возможностью генерации программного кода;
- анализ проблем, возникающий при использовании шаблонов или генераторов.
1. Описание основных бизнес-процессов генераторов программного кода
Генерация классифицируется по выбранному языку программирования, по методам генерации и типу генерации.
Наиболее популярные методы генерации:
- с применением шаблонов;
- прямой подстановкой текста;
- бъектным моделированием.
Типы генерации:
- с нуля (предварительного кода нет);
- модификация (изменение уже существующего кода).

Рисунок 1 - Структура процесса генерации программного кода

Рисунок 2 - Структура системы генерации программного кода
2. Анализ рынка программных продуктов с возможностью генерации программного кода
Самыми популярными генераторами программного кода среди программистов различных областей считаются: Visual Studio, Android Studio, Qt Creator/Qt Designer, а также различные библиотеки или узкоспециализированные программы.
Visual Studio – интегрированная среда разработки для малых и больших проектов, которая представляет из себя многофункциональную программу, используемую для различных аспектов разработки программного обеспечения. Помимо стандартного редактора и отладчика, Visual Studio включает в себя компиляторы, средства автозавершения кода и многие другие функции для упрощения процесса разработки программного обеспечения. Visual Studio использует сразу два варианта генерации программного кода. При создании проекта среда разработки подготавливает шаблон, подходящий под выбранный тип проекта, далее разработчик модифицирует шаблон, наполняя его необходимыми модулями. При использовании WPF среда разработки подгружает разработчику заранее подготовленный макет, а при использовании Windows Forms среда разработки модифицирует соответственный шаблон в зависимости от расположения элементов управления на Canvas’ном холсте.

Рисунок 3 - Шаблон WPF проекта Visual Studio
Android Studio – интегрированная среда разработки для работы с платформой Android, включающий в себя SDK (Software Development Kit), поддержку различных устройств (платформы разработки): умные часы, телевизоры и т.д. Android Studio генерирует код по заготовленному шаблону под отдельную платформу разработки, однако весь процесс генерации сводиться к загрузке шаблона в созданный проект Android Studio. Разработку пользовательского интерфейса, позиционирование элементов управление, подключение обработчиков происходит вручную.

Рисунок 4 - Шаблон проекта мобильного приложения Android Studio
Qt Design Studio (ответвлениями/ранними стадиями продукта являются Qt Designer и Qt Creator) - мощнейший инструментарий по созданию пользовательского интерфейса на сегодняшний момент. Qt Design Studio сокращает разрыв между дизайнерами и разработчиками. Теперь они могут работать одновременно с одной объединяющей структурой, одним общим языком, меньшим количеством циклов обратной связи и более быстрыми итерациями. «Дизайнеры могут импортировать файлы дизайна пользовательского интерфейса из Adobe Photoshop, Sketch, Maya, MODO или Blender в Qt Design Studio, которая может превратить их в код для ваших разработчиков. Функции прототипирования Qt Design Studio воплотят ваши проекты в жизнь, а также имитируют и проверяют взаимодействия и динамическое поведение. Вы даже можете протестировать, просмотреть и настроить свои проекты до совершенства пикселей в реальном времени на целевом устройстве. Начните проектирование с Qt. Получите бесплатную пробную версию. Найдите вдохновение для вашего следующего дизайн-проекта.» — заверяют создатели Qt Design Studio.
Также существует множество программных модулей, пользовательских библиотек. Индивидуальных наработок, которые самостоятельно генерируют программный код по заранее определенному стандартом шаблону, к примеру, это может быть и Django, Flask, Bottle для языка программирования Python, и Ruby on Rails, Sinatra для языка Ruby, а также множество других схожих библиотек.
3. Анализ возможностей генераторов программного кода
Рассмотрим два примера генерации программного кода. Первым примером будет выступать программный продукт Qt Designer для создания пользовательского графического интерфейса для языков программирования C++ или Python. Вторым примером рассмотрим программный интерфейс приложения (API) Ruby on Rails для создания web-приложений с помощью языка программирования Ruby.
Процесс генерации программного кода средствами Qt Designer для языка программирования Python происходит в два этапа: первый - создание .ui файла пользовательского интерфейса, второй - подключение файла в проект.

Рисунок 5 - Пользовательский графический интерфейс

Рисунок 6 - Сгенерированный код

Рисунок 7 - Подключение сгенерированного кода в Python проект
Ruby – динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования.
Ruby on Rails – полноценный, многоуровневый фреймворк для построения веб-приложений, использующих базы данных, который основан на архитектуре Модель-Представление-Контроллер (Model-View-Controller, MVC).
Генерация проекта средствами RoR происходит консольной командой: rails new <название_проекта>. Создается каталог с указанным названием, где и будет располагаться сгенерированный код фреймворком. В таком случае, RoR создаст все необходимые файлы, подключит актуальные библиотеки и зависимости, а также сгенерирует файл-конфигурации будущего web-приложения.

Рисунок 8 - Генерация программного кода фреймворком RoR

Рисунок 9 - Сгенерированные файлы (проводник)
Выводы
В статье описаны и проанализированы основные бизнес-процессы генерации программного кода. Выполнен обзор и анализ функциональных программных продуктов с возможностью генерации кода, проведён их анализ, а также на нескольких примерах рассмотрены методы генерации программного кода различными средствами.
Литература
- АВТОМАТИЧЕСКАЯ ГЕНЕРАЦИЯ КОДА ПРОГРАММ С ЯВНЫМ ВЫДЕЛЕНИЕМ СОСТОЯНИЙ, «Software Engineering Conference (Russia) – 2006», Канжелев Сергей Юрьевич, Шалыто Анатолий Абрамович
- Генерация исходного кода программного обеспечения на основе многоуровневого набора правил, научная статья по специальности «Компьютерные и информационные науки», Самохвалов Э.Н., Ревунков Г.И., Гапанюк Ю.Е.
- Инструментальные средства разработки и сопровождения программного обеспечения на основе генерации кода, научная статья по специальности «Компьютерные и информационные науки», Александров А.Е., Шильманов В.П.
Баев Д.Э., Григорьев А.В. Генерация программного кода. В статье описан термин генерации программного кода, основные бизнес-процессы, методы и требования генерации. Выполнен обзор программных продуктов для генерации программного кода. Проанализированы проблемы, возникающие при генерации программного кода, а также рассмотрен вопрос различия шаблонов и генераторов.
Ключевые слова: САПР ПО «Генерация программного кода», генерация программного кода, программные шаблоны, генераторы кода, графическая модель, программное представление.
Baev D.E., Grigoriev A.V. Program code generation. The article describes the term of program code generation, the main business processes, methods and requirements of generation. A review of software products for generating program code is performed. The problems arising during the generation of program code are analyzed, and the issue of the difference between templates and generators is also considered.
Keywords: CAD "Software code generation", software code generation, software templates, code generators, graphical model, software representation.