УДК 004.4242
Баев Д.Э., Суров А.Д., Григорьев А.В.
ГОУ ВПО «Донецкий национальный технический университет» (г. Донецк)
azo.cw@yandex.ru, emoxypine@gmail.com, grigorievalvl@gmail.com
Генерация кода – это автоматическое создание программного кода специальным приложением, при котором по заданным условиям полностью или частично формируется исходный код программы [1]. Такое специальное приложение называется генератором кода.
Актуальность использования генераторов программного кода обусловлена повышением скорости разработки программного обеспечения; мобильности и гибкости платформ для разработки, а также самих разработчиков; минимизацией ошибок на этапе проектирования, подготовки программного обеспечения и выбора программных средств для реализации определенной задачи.
Целью предлагаемой статьи является:
Генерация классифицируется по выбранному языку программирования, по методам генерации и типу генерации. Структуры генерации программного кода показаны на рисунках 1-2.
Наиболее популярные методы генерации [1]:
Типы генерации:
Рисунок 1 - Структура процесса генерации программного кода
Рисунок 2 - Структура системы генерации программного кода
Потенциально может применяться как возможность автоматизировать процесс создания электронной информации. Наиболее применимыми областями являются [1]:
При правильном задании параметров и корректной разработке генератора большая часть кода может быть автоматически сгенерирована. Для того, чтобы программный код мог быть создан генератором, необходимо наличие следующих трех ключевых компонентов (см. рис. 3-4) [1]:
Рисунок 3 - Ключевые составляющие генерации кода
Рисунок 4 - Формирование кода без применения генерации (слева), формирование кода с применением генерации кода (справа)
Рассмотрим генераторы кода с применением средств искусственного интеллекта.
Bayou - это система для создания идиом API, которые представляют собой фрагменты кода, использующие API в Java [2]. Основная задача этой системы - использовать код пользователя и запрос для генерации соответствующей программы, процесс показан на рисунке 5. Bayou интерпретирует этот запрос, используя метод обучения Neural Sketch [3].
Рисунок 5 - Bayou - ИИ, помогающий писать код
DeepCode - это программная платформа для искусственного интеллекта, которая учится у программистов с открытым исходным кодом и использует полученные знания для внесения предложений о том, как можно улучшить код. Разработчик может использовать эту платформу как инструмент проверки кода или как инструмент аудита (см. рис. 6). Он предупреждает пользователя об уязвимостях в коде. DeepCode интегрируется с платформами хостинга кода, такими как GitHub, Bitbucket Server или GitLab, и для всех интеграций платформа предоставляет один и тот же базовый набор функций, таких как Аудит контроля качества и ИИ анализ кода [2].
Deep Code - инструмент поиска уязвимостей в коде программ, написанных на Java, JavaScript, TypeScript и Python, в котором машинное обучение присутствует в качестве компонента. По заявлению Бориса Паскалева, уже работает более 250 тысяч правил. Этот инструмент обучается на основе изменений, вносимых разработчиками в исходный код открытых проектов (миллион репозиториев). Сама компания говорит, что их проект - это Grammarly для разработчиков [3].
Рисунок 6 - Рабочая среда DeepCode
Clever-Commit – анализатор, созданный Mozilla в сотрудничестве с Ubisoft. Он основан на исследовании CLEVER (Combining Levels of Bug Prevention and Resolution Techniques), проведенном Ubisoft, и основанном на нем продукте Commit Assistant, который выявляет подозрительные коммиты, скорее всего содержащие ошибку. Благодаря тому, что CLEVER основан на сравнении кода, он не только указывает на опасный код, но и делает предложения о возможных правках. Согласно описанию, в 60-70% случаев Clever-Commit находит проблемные места и с той же частотой предлагает для них верные правки. В целом, информации об этом проекте и об ошибках, которые он способен находить, немного, на официальном сайте есть только логотипы компаний-основателей, показанные на рисунке 7.
Рисунок 7 - Логотипы компаний-основателей Clever-Commit
Sketch2Code - это веб-решение, использующее ИИ для преобразования рукописного дизайна пользовательского интерфейса в действующий код HTML-разметки. Для этого сначала необходимо указать шаблоны проектирования (см. рис. 8). Решение понимает рукописный чертеж или текст, понимает структуру, а затем создает код HTML в соответствии с обнаруженным макетом, содержащим обнаруженные элементы дизайна.
Рисунок 8 - Выбор шаблонов макетирования на главной форме Sketch2Code
Также рассмотрим самые популярные генераторы программного кода среди программистов различных областей, которыми считаются: Visual Studio, Android Studio, Qt Creator/Qt Designer, а также различные библиотеки или узкоспециализированные программы.
Visual Studio – интегрированная среда разработки для малых и больших проектов, которая представляет из себя многофункциональную программу, используемую для различных аспектов разработки программного обеспечения. Помимо стандартного редактора и отладчика, Visual Studio включает в себя компиляторы, средства автозавершения кода и многие другие функции для упрощения процесса разработки программного обеспечения. Visual Studio использует сразу два варианта генерации программного кода. При создании проекта среда разработки подготавливает шаблон, подходящий под выбранный тип проекта, далее разработчик модифицирует шаблон, наполняя его необходимыми модулями. При использовании WPF среда разработки подгружает разработчику заранее подготовленный макет (см. рис. 9), а при использовании Windows Forms среда разработки модифицирует соответственный шаблон в зависимости от расположения элементов управления на Canvas’ном холсте.
Рисунок 9 - Шаблон WPF проекта Visual Studio
Android Studio – интегрированная среда разработки для работы с платформой Android, включающий в себя SDK (Software Development Kit), поддержку различных устройств (платформы разработки): умные часы, телевизоры и т.д. Android Studio генерирует код по заготовленному шаблону под отдельную платформу разработки (см. рис. 10), однако весь процесс генерации сводиться к загрузке шаблона в созданный проект Android Studio. Разработку пользовательского интерфейса, позиционирование элементов управление, подключение обработчиков происходит вручную.
Рисунок 10 - Шаблон проекта мобильного приложения 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, а также множество других схожих библиотек.
В качестве небольшого бонуса, представлю список программ для генерации G-кода. Качественные G-коды невозможно создать без специализированного программного обеспечения.
Конструктор G-кода - любительский софт от независимого разработчика, распространяющего свой продукт на бесплатной основе. На данный момент он находится на стадии разработки, однако уже доступен для скачивания [4]. Софт основан на модульном принципе, при котором каждый блок обозначен уникальным кодом и отвечает за свой сегмент деятельности. Одним из них является «Генерация G-кода» под кодом 900. В качестве исходных данных допускается использование графического изображения любого формата, а также DXF, PLT и Gerber-файлов.
Различные пресеты для программы необходимо устанавливать дополнительно, они тоже являются бесплатными. Напротив каждого из них на официальном сайте представлено подробное описание и видеофайл с примером. Рабочее пространство Конструктора G-кода поделено на четыре блока, как показано на рисунке 11: область меню, панель навигации, область вывода текущего обрабатываемого модуля и панель действий с доступными инструментами. Все необходимые операции экспортируются в отдельный файл.
Рисунок 11 - Интерфейс программы Генератор G-кода
SheetCAM — многофункциональный пакет подготовки G-кодов для последующей обработки на станках плазменного раскроя с ЧПУ (см. рис. 12). Главная особенность — наличие понятного и интуитивного интерфейса, с которым разберется даже начинающий пользователь. В качестве исходных данных используются форматы EMF, DXF, HPGL и Excellon. Если проект предварительно не обрабатывался в сторонних системах автоматизированного проектирования, можно сделать это непосредственно в меню SheetCAM. Редактор оснащен внушительным перечнем инструментов для обработки деталей. Их можно вращать, дублировать, перемещать и, естественно, вносить изменения. Предусмотрена 3D-визуализация маршрута обработки объекта под углом, заданным пользователем [4].
Рисунок 12 - Интерфейс программы SheetCAM
Сига - удобный редактор для преобразования графических объектов в G-коды для дальнейшей печати на 3D-принтере. Приложение поддерживает все современные принтеры торговых марок BQ, ALYA, Creality, Delta, Innovo, Folger и др.
При первом запуске требуется выбрать подходящую модель, чтобы система оптимизировалась под ее особенности. В ходе работы пользователь выбирает материалы, из которых будет изготовлена деталь.
Сюда входит весь перечень сырья, поддерживаемого выбранной моделью. Достаточно выделить один из пунктов, чтобы отобразить подробную информацию о нем.
Разработчики предусмотрели возможность импортировать в приложение сторонние плагины, открывающие дополнительные функции из библиотеки сообщества. Присутствуют скрипты для постобработки готовых G-кодов. Стоит отметить сложный интерфейс (см. рис. 13) и отсутствие инструкций, что усложняет работу для начинающих пользователей.
CAM-приложение для генерации G-кодов с названием Bmp2Cnc, в качестве исходных данных использует растровые форматы JPEG и BMP. После загрузки начального изображения необходимо установить простые параметры и отрегулировать показатели под свои нужды, с помощью предусмотренного редактор с несколькими инструментами (см. рис.14).
Рисунок 13 - Интерфейс программы Cura
Рисунок 14 - Интерфейс программы Bmp2Cnc
Рассмотрим два примера генерации программного кода. Первым примером будет выступать программный продукт Qt Designer для создания пользовательского графического интерфейса для языков программирования C++ или Python. Вторым примером рассмотрим программный интерфейс приложения (API) Ruby on Rails для создания web-приложений с помощью языка программирования Ruby.
Процесс генерации программного кода средствами Qt Designer для языка программирования Python происходит в два этапа: первый - создание .ui файла пользовательского интерфейса, второй - подключение файла в проект.
Создадим интерфейс простого калькулятора, как показано на рисунке 15. Сохраним в формате .ui, который сохраняет созданные компоненты в виде XML разметки (см. рис. 16). После создания интерфейс необходимо подключить к программе, подключение происходит с помощью методов подключаемой библиотеки Qt в Python (см. рис. 17).
Рисунок 15 - Пользовательский графический интерфейс
Рисунок 16 - Сгенерированный код
Рисунок 17 - Подключение сгенерированного кода в Python проект
Ruby – динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования.
Ruby on Rails – полноценный, многоуровневый фреймворк для построения веб-приложений, использующих базы данных, который основан на архитектуре Модель-Представление-Контроллер (Model-View-Controller, MVC).
Генерация проекта средствами RoR происходит консольной командой: rails new <название_проекта> (см. рис. 18). Создается каталог с указанным названием, где и будет располагаться сгенерированный код фреймворком. В таком случае, RoR создаст все необходимые файлы, подключит актуальные библиотеки и зависимости, а также сгенерирует файл-конфигурации будущего web-приложения (см. рис. 19).
Рисунок 18 - Генерация программного кода фреймворком RoR
Рисунок 19 - Сгенерированные файлы (проводник)
Множество разработчиков ошибочно считают, что Visual Studio и Android Studio применяют методы генерации кода. На самом деле это не так. В данных IDE применяется создание шаблона с уже заготовленными строками кода. Исключением является Windows Forms, т.к. в заготовленный шаблон пользовательской формы Visual Studio автоматически изменяет/добавляет компоненты проектируемой формы. Однако, удалять компоненты IDE не умеет - дизайнеру приходится вручную исправлять ошибку в классе пользовательской формы после удаления какого-либо компонента, имеет тот ссылки на методы или нет - Visual Studio расценит удаление как за ошибку. Касательно WPF и Android Studio - сгенерированный «код» программисту или дизайнеру придется исправлять вручную. При изменении какой-то мелкой детали в проекте возникнут горы ошибок - потянутых автоматически.
Что касается генерации кода, то она находится не на самом высоком уровне. Специалисты приводят довольно внушительный список преимуществ и недостатков.
Преимущества [1]:
Недостатки [1]:
В статье описаны и проанализированы основные бизнес-процессы генерации программного кода. Выполнен обзор и анализ функциональных программных продуктов с возможностью генерации кода, проведён их анализ, а также на нескольких примерах рассмотрены методы генерации программного кода различными средствами.
Баев Д.Э., Суров А.Д., Григорьев А.В. Генерация программного кода. В статье описан термин генерации программного кода, основные бизнес-процессы, методы и требования генерации. Выполнен обзор программных продуктов для генерации программного кода. Проанализированы проблемы, возникающие при генерации программного кода, а также рассмотрен вопрос различия шаблонов и генераторов.
Ключевые слова: CAПР ПО «Генерация программного кода», генерация программного кода, программные шаблоны, генераторы кода, графическая модель, программное представление.
Baev D.E., Surov A.D., 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.