Научный журнал
Фундаментальные исследования
ISSN 1812-7339
"Перечень" ВАК
ИФ РИНЦ = 1,074

МОДЕЛЬ ДВУХФАЗНОЙ ТРАНСЛЯЦИИ КОДА МУЛЬТИВЕРСИЙ ПРОГРАММНЫХ МОДУЛЕЙ

Грузенкин Д.В. 1 Царев Р.Ю. 1 Кузнецов А.С. 1
1 ФГАОУ ВПО «Сибирский федеральный университет»
Статья посвящена проблеме автоматизации и ускорения процесса разработки программного обеспечения, в том числе мультиверсионного программного обеспечения. Рассмотрены особенности автоматической и автоматизированной генерации программного кода по диаграммам и блок-схемам различного вида. Приведено описание предметно-ориентированного языка для определения программных алгоритмов. Описаны средства и методы генерации кода на целевом языке программирования по блок-схемам с использованием описания алгоритма на предметно-ориентированном языке в качестве промежуточного представления. В статье предложена новая концептуальная модель двухфазной трансляции кода мультиверсий программных модулей, которая позволяет упростить процесс создания мультиверсионного программного обеспечения, а также программного обеспечения других типов. Приведен практический пример генерации кода на целевом языке программирования Cи алгоритма равномерного поиска по его графическому представлению в виде блок-схемы.
предметно-ориентированный язык
генерация кода
кодогенерация
кодогенерация на основе блок-схемы
кодогенерация на основе xml
1. Артамошин С.А. Подходы к созданию автоматизированных систем, предназначенных для обработки информации ограниченного распространения / С.А. Артамошин, С.И. Нагорный, В.В. Донцов // Спецтехника и связь. – 2009. – № 2. – С. 41–48.
2. Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы. – СПб.: Символ-Плюс, 2010. – 304 с.
3. ГОСТ 19.701-90 Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. Дата введ. 01.01.1992. – М.: Государственный стандарт Союза ССР, 1990.
4. Ершов, А.П. Алгоритмический язык в школьном курсе информатики и вычислительной техники // Микропроцессорные средства и системы – 1985. – № 2. – С. 48–51.
5. Кузнецов, А.С. Генерация компиляторов мультисинтаксических языков программирования мультиверсионных систем / А.С. Кузнецов, И.В. Ковалев // Программные продукты и системы. – 2008. – Вып. 4 (84). – С. 101–103.
6. Сухов, А.О. Сравнение систем разработки визуальных предметно-ориентированных языков // Математика программных систем: межвузовский сборник научных статей. – Пермь: Пермский государственный национальный исследовательский университет, 2012. – Вып. 9. – С. 84–111.
7. Царев Р.Ю. Методология многоатрибутивного формирования мультиверсионного программного обеспечения сложных систем управления и обработки информации: монография; Краснояр. гос. аграр. ун-т. – Красноярск, 2011. – 210 с.
8. Aho A.V., Lam M.S., Sethi R., Ullman J.D. Compilers: Principles, Techniques and Tools Addison Wesley; 2nd edition 2006, 1000 p.
9. Beazley, D.M. PLY (Python Lex-Yacc) Home page // URL: http://www.dabeaz.com/ply/ (Дата обращения: 03.12.2015).
10. Dia Home page // URL: http://wiki.gnome.org/Apps/Dia (Дата обращения: 03.12.2015).

Графические или визуальные языки проектирования и программирования уже прочно вошли в «арсенал» средств инженеров-разработчиков и проектировщиков программного обеспечения (ПО), в том числе и мультиверсионного программного обеспечения. Для графических языков разработаны свои среды разработки, отладчики, трансляторы [6, 8].

На сегодняшний день уже решено множество прикладных задач в области программного обеспечения [1, 7]. Причем прикладные задачи зачастую решаются с помощью уже готовых, известных алгоритмов, которые требуется лишь модифицировать для применения их при реализации конкретной задачи [1, 6]. В условиях постоянно растущего темпа жизни, развития новых технологий, увеличения потребностей общества и каждого человека в частности возрастает и потребность в качественном программном обеспечении для удовлетворения нужд пользователей. Скорость создания ПО приходится также постоянно увеличивать за счет использования современных методов и средств проектирования и разработки программного обеспечения [2, 6].

В современной программной инженерии существует практика разработки предметно-ориентированных языков программирования для решения конкретных практических задач и описания объектов предметной области решаемой задачи. Причем для разработки сложных предметно-ориентированных языков применяются специализированные инструменты [6]. Для описания программных алгоритмов были разработаны и широко применяются такие визуальные языки, как блок-схемы и UML-диаграммы деятельности. При этом нет полноценного прикладного унифицированного предметно-ориентированного символьного (текстового) языка для описания программных алгоритмов, кроме учебного алгоритмического языка, предложенного в [4]. Он, как видно из названия, является учебным и был создан для обучения учащихся средних школ основам информатики, а не для практического применения при разработке программного обеспечения.

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

Предметно-ориентированный язык описания алгоритмов

В качестве графического языка, на основании представления которого будет производиться генерация кода на предметно-ориентированном языке, для записи программного алгоритма на первом этапе разработки были выбраны блок-схемы алгоритмов. Данный выбор был обусловлен применением ГОСТ 19.701-90 для стандартизации условных обозначений [3], что является важным аспектом для устранения неоднозначности понимания и начертания элементов блок-схемы.

К промежуточному представлению программного алгоритма на предметно-ориентированном языке предъявляются следующие требования:

1) простота для понимания человека;

2) хорошая формализация;

3) четкая структурированность;

4) легкость создания программного алгоритма на основе графического представления.

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

Каждой фигуре, представленной в [3], ставится в соответствие элемент (тег) с ее названием, переведенным на английский язык. В зависимости от свойств графического элемента каждый тег может иметь определенный набор атрибутов и/или определенное количество наследников (вложенных в него тегов). На основе данных положений был создан предметно-ориентированный язык промежуточного представления программных алгоритмов на базе XML.

Промежуточное представление программного алгоритма, созданное с помощью специальных программных средств на основе блок-схемы, сложно использовать непосредственно для генерации кода на целевом языке. Поэтому XML-представление разбивается на последовательность строк, или лексем. Множество лексем разбивается на непересекающиеся подмножества (лексические классы) [5, 8].

Транслятор предметно-ориентированного языка использует традиционную схему взаимодействия синтаксического и лексического анализаторов, когда синтаксический анализатор обращается к лексическому за очередной лексемой. Задача синтаксического анализа заключается в построении синтаксической структуры XML-документа для последующей генерации на ее основе программного кода на целевом языке программирования. Построение синтаксической структуры документа осуществляется путем нахождения порождения (если таковое существует) конкретной языковой конструкции, для чего применяется заданная грамматика языка. Более наглядно процесс создания кода на целевом языке программирования на основе блок-схемы алгоритма приведен на рис. 1. Для упрощения на рис. 1 не показано взаимодействие с окружением транслятора.

Практический пример кодогенерации

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

На основе блок-схемы (рис. 2) создается промежуточное XML-представление на предметно-ориентированном языке, которое приведено в листинге 1. В листинге 2 представлен код программы на целевом языке программирования Cи.

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

pic_8.tif

Рис. 1. Блок-схема процесса автоматизированной кодогенерации

pic_9.tif

Рис. 2. Блок-схема алгоритма равномерного поиска

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

Заключение

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

pic_10.wmf

Листинг 1. XML-представление алгоритма равномерного поиска

pic_11.wmf

Листинг 2. Программный код исходного алгоритма на целевом языке C

Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта № 16-57-46016 СТ_а.


Библиографическая ссылка

Грузенкин Д.В., Царев Р.Ю., Кузнецов А.С. МОДЕЛЬ ДВУХФАЗНОЙ ТРАНСЛЯЦИИ КОДА МУЛЬТИВЕРСИЙ ПРОГРАММНЫХ МОДУЛЕЙ // Фундаментальные исследования. – 2015. – № 12-5. – С. 886-890;
URL: http://fundamental-research.ru/ru/article/view?id=39645 (дата обращения: 09.12.2019).

Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»
(Высокий импакт-фактор РИНЦ, тематика журналов охватывает все научные направления)

«Фундаментальные исследования» список ВАК ИФ РИНЦ = 1.074