Научная статья на тему 'РАЗРАБОТКА ТРАНСЛЯТОРА СХЕМ В ЯЗЫК PROMELA'

РАЗРАБОТКА ТРАНСЛЯТОРА СХЕМ В ЯЗЫК PROMELA Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
39
10
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ / БЛОК-СХЕМА / МОДЕЛЬ / ТРАНСЛЯТОР / АВТОМАТНОЕ ПРОГРАММИРОВАНИЕ / ТЕХНИЧЕСКАЯ СИСТЕМА / SPIN / PROMELA / ВЕРИФИКАЦИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Болдырева Ю.Ю., Хворостухина Е.В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Болдырева Ю.Ю., Хворостухина Е.В.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DEVELOPMENT OF A SCHEME TRANSLATOR INTO PROMELA LANGUAGE

This paper describes the process of developing a prototype of the web service «Schema2Promela». This tool is a combination of a diagram editor and a translator. It will allow you to create a diagram to a model of a program or other technical system using visual blocks, and translate the created diagram into the Promela language in order to check this diagram with the SPIN tool. In this work we describe the specification of the language, functionality of the schema editor and the main points of the coding of the translator. Particular attention is paid to testing the service and analyzing the results.

Текст научной работы на тему «РАЗРАБОТКА ТРАНСЛЯТОРА СХЕМ В ЯЗЫК PROMELA»

ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ И ТЕЛЕКОММУНИКАЦИИ

УДК: 004.4'42; 004.4'236; 004.052

Ю.Ю. Болдырева, Е.В. Хворостухина РАЗРАБОТКА ТРАНСЛЯТОРА СХЕМ В ЯЗЫК PROMELA

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

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

Yu.Yu. Boldyreva, E.V. Khvorostukhina

DEVELOPMENT OF A SCHEME TRANSLATOR INTO PROMELA LANGUAGE

Abstract. This paper describes the process of developing a prototype of the web service «Schema2Promela». This tool is a combination of a diagram editor and a translator. It will allow you to create a diagram to a model of a program or other technical system using visual blocks, and translate the created diagram into the Promela language in order to check this diagram with the SPIN tool. In this work we describe the specification of the language, functionality of the schema editor and the main points of the coding of the translator. Particular attention is paid to testing the service and analyzing the results.

Keywords: visual programming, visual diagram, schema, model, translator, automata programming, engineering system, SPIN, Promela, verification

Введение

Одной из ключевых задач при разработке любой сложной информационной или иной технической системы, т. е. системы, состоящей из множества подсистем (компонентов), объединенных в единое целое и связанных между собой определенными отношениями, является построение ее корректной модели. В связи с этим в последнее время возрос интерес к использованию и усовершенствованию методов верификации и валидации таких моделей [1-3]. Некачественная проверка моделей критических систем может повлечь за собой различного рода ущерб: принести значительные финансовые потери, вызвать серьезные аварии, катастрофы и привести к гибели людей. Одним из самых надежных способов проверки корректности разработанной модели системы является формальная верификация, основанная на математических методах доказательства корректности. На сегодняшний день существует множество программных средств, называемых верификаторами, использующих данный подход и позволяющих автоматизировать процесс проверки правильности разработанной модели. Автоматизация формальной верификации моделей технических или информационных систем, компьютерных программ, в частности, позволяет исключить человеческий фактор при их проверке, что способствует повышению надежности проектируемой системы, объективности оценки, минимизации ошибок, ускорению этого процесса и принятию более качественных решений в целом. Однако, как правило, использование верификаторов требует от проектировщика знания языков программирования. При этом специалисты, занимающиеся проектированием сложных систем, зачастую такими навыками не обладают. В связи с этим было принято решение о разработке веб-сервиса «Schema2Promela», который позволит создать схему модели работы программы, алгоритма или иной технической системы, не используя языки программирования, а оперируя лишь визуальными блоками и связями между ними, а затем транслировать созданную схему в язык Promela для последующей верификации в известном верификаторе SPIN [3, 4]. Совмещение построения схемы модели с помощью методов визуального программирования и верификаторов для автоматизации ее проверки является ключевым фактором в упрощении проектирования моделей сложных систем и их валидации. Такой подход к проектированию систем призван повысить надежность и качество разрабатываемых технических и информационных систем. В работе [5] был проведен сравнительный анализ средств визуального программирования и представлены результаты проектирования данного сервиса. В настоящей работе описывается процесс разработки прототипа веб-сервиса «Schema2Promela».

1. Спецификация языка схем

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

па, последовательно соединённых между собой стрелками. В работе [5] были представлены диаграмма классов и диаграмма последовательностей, описывающая путь пользователя, создающего схему. Следующим важным и весьма трудоемким этапом разработки транслятора является процесс составления спецификации языка. Для этого было принято решение использовать формальную систему определения синтаксиса - расширенную форму Бэкуса-Наура (РБНФ) [6]. В общем случае формулы РБНФ записываются в виде: Определяемый_символ = выражение. Также используются следующие символы: конкатенация - «,»; выбор - «|»; необязательный элемент - «[ ]»; повторение (от 0 до бесконечности раз) - «{ }»; группировка элементов - «( )».

Далее представлено описание псевдоязыка схем в терминах расширенной формы Бэкуса-Наура.

Листинг 1. Описание псевдоязыка схем Цифра = "0" | ... |"9" Число = {[+|-]}Цифра{Цифра} Буква_лат = "a" | .. | "z" | "A" | .. | "Z" Буква_рус = "а" | .. | "я" | "А" | .. | "Я"

Управляющая_последовательность = "\n" | "\t" | "\'" | "\"" | "\\" ... Пробельный_символ = " "

Символьная_последовательность = {Буква_лат | Буква_рус | Число | Управляю-щая_последовательность | Пробельный_символ | Выводящая_последовательность} Спец_операторы = "skip" | "true" | "false" | "break" | "continue" ...

Блок_процедуры = "proctype ", Имя_процедуры, "(", Переменные_процедуры,"){", Те-ло_процедуры,"}"

Имя_процедуры = (Буква_лат|"_"),{Буква_лат|Цифра|"_"}

Переменные_процедуры = {Тип_Переменных, " ", Имя_Процедуры, {",",Тип_Переменных, " ", Имя_Процедуры} }

Тело_Процедуры = {Блок_вывод | Блок_вычисление | Блок_вызов | Блок_условие | Блок_цикл }

Тип_переменных = "bit " | "bool" | "byte" | "chan" | "pid" | "mtype" | "short" | "unsigned" Знаки_операций = "+" | "-" | "*" | "/" | "!" | "%" | ">>" | "<<" | "л" | "|" | "&" Знаки_сравнения = ">" | ">=" | "<" | "<=" | "==" | "!=" Отрицание = "!"

Логические_знаки_1 = "[]" | "<>" | "!" | "U" | "W" Логические_знаки_2 = "&&" | "||" | "->" | "<->" | "V" Выводящая_последовательность = "%",("e"|"d"|"b"|"m")

Выражение_условие = ([Отрицание] Имя_процедуры | Вычисление){ Знаки_сравнения, ([Отрицание] Имя_процедуры | Вычисление | Символьная_последовательность | Число)} Вычисление = ((Число,["++"|"--"]) | Имя_процедуры),{,Знаки_операций,((Число,["++"|"--"])| Имя_процедуры) }

Блок_вывод = "рпП£(",Символьная_последовательность, {Имя_процедуры}, ");" Блок_вычисление = Имя_процедуры,"=",Вычисление Блок_вызов = "run ", Имя_процедуры, "(",Переменные_процедуры,");" Блок_условие = '4:Р,"::(",{Выражение_условие},")->",(Блок_вычисление | Блок_вызов | Блок_условие | Блок_цикл | Спец_операторы),";", {"::(",{Выражение_условие},")->", (Блок_вычисление | Блок_вызов | Блок_условие | Блок_цикл | Спец_операторы),";"}, "fi" Блок_цикл = Мо","::([Выражение_условие])->",(Блок_вычисление | Блок_вызов | Блок_условие | Блок_цикл | Спец_операторы), {,"::([Выражение_условие])->", (Блок_вычисление | Блок_вызов | Блок_условие | Блок_цикл | Спец_операторы)}, "od" Блок_LTL = "ltl", Имя_процедуры, "{",ШЪ_Выражение_условие,"}" LTL_Выражение_условие = { [Логические_знаки_1], (Имя_процедуры | Вычисление) {[Логические_знаки_1], (Имя_процедуры | Вычисление)[Логические_знаки_2,, (Имя_процедуры | Вычисление| Символьная_последовательность | Число)] } { Знаки_сравнения, [Логические_знаки_1], (Имя_процедуры | Вычисление) {[Логические_знаки_1], (Имя_процедуры | Вычисление)[Логические_знаки_2,, (Имя_процедуры | Вычисление| Символьная_последовательность | Число)] } }

2. Основной функционал сервиса

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

- создание схемы:

- создание визуальных блоков;

- создание действий в блоках (вывод, вычисление, вызов);

- добавление предопределённых (глобальных) переменных;

- добавление LTL-формул;

- возможность переключить внешний вид составленной пользователем схемы на более компактный (в виде графа переходов) и обратно;

- трансляцию схемы на язык Promela.

Помимо вышеприведённых функций, сервис должен содержать справку по пользованию сервисом.

Визуальный блок (см. рис. 1) представляет собой визуальное представление блока «proctype» в языке Promela. Размер визуального блока можно изменить, потянув за правый нижний угол. Полосы прокрутки появляются автоматически, если содержимое превышает установленные размеры блока. Чекбокс в левом верхнем углу визуального блока отвечает за начальную процедуру (в Promela обозначается как init) - это аналог функции main в С#. Init - точка входа в программу, такая точка может быть только одна. Кнопка «Х» в правом верхнем углу удаляет визуальный блок с поля. Для создания действий (операций) в блоке необходимо в выпадающем списке выбрать тип (вычисление, вызов (других переменных), вывод (на экран), условие, цикл) и нажать на кнопку «Добавить». В блоке появится поле, где необходимо ввести значения для заданного типа. Например, если выбран тип «Вычисление», то в добавляемом поле можно ввести значение «a = b + 5». Для удаления операции из блока необходимо нажать на «х» рядом с операцией.

Рис. 1. Визуальный блок

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

3. Кодирование транслятора

С использованием РБНФ, приведённой в пункте 1, было произведено кодирование транслятора на языке JavaScript. В качестве исходного языка трансляции был использован псевдоязык схем, а в качестве объектного языка трансляции - язык Promela. Под псевдоязыком схем в данной работе понимается HTML-разметка и атрибуты созданной пользователем визуальной схемы. С помощью JavaScript и библиотеки JQuery HTML-код разбирается на лексемы «псевдоязыка схем», и далее, как описано в расширенной форме Бэкуса-Наура для псевдоязыка, транслируется в Promela.

Сам визуальный блок - это тэг div с уникальным id и CSS-классом .none. Имя класса берётся из соответствующего тэга input с id = «nameBlockN», где N - уникальный номер каждого блока. Операции из блоков - это ячейка в таблице, тэг td. Тип операции определяется по цвету ячейки.

Ключевые моменты трансляции приведены в табл. 1.

Таблица 1

Ключевые моменты трансляции

Псевдоязык визуальной схемы Аналогичная запись на Promela Код транслятора на JS

Блок_процедуры proctype $(".none"); nameProc = $("#nameBlock"+nnn).val(); txt+= "proctype "+nameProc + "(){\n"

Блок вывод printf let str = $(this).find('td input').val(); let vars = str.match(/\[[a-zA-Z0-9 ]*\]/g)+""; if(vars+"" != "null"){ str = str.replace(A[[a-zA-Z0-9_]*\]/g, "%d"); vars = vars.replace(/\[/g, " "); vars = vars.replace(/\]/g, " "); } if(vars+"" == "null"){ txt += "\nprintf(\"" + str + "\");\n"; } else{ txt += "\nprintf(\"" + str + "\","+ vars+");\n"; }

Блок вызов run txt += "\nrun "+$(this).find('td input').val() + "();\n";

Тип переменных bit, bool, byte, chan, pid, mtype, short, unsigned elId = getParentld(event); elVar = $("#currentAddVar").val(); elType = $("#typeAddVar").val(); rowColor = whichColorVar(elType); if(elType == 1) { $("#"+ elId +" table").append("<tr style='background-color: "+rowColor+";'><td style='width: 80%; background-color: "+rowColor+"'>int " + elVar + ";</td><td style-width: 10%;'><button class='remove'>X</button></td></tr>"); }

Имя_процедуры имя переменных, правило именования как в любых С-подобных языках nnn = $(els[i]).attr("numb"); nameProc = $("#nameBlock"+nnn).val();

Окончание табл. 1

Псевдоязык визуальной схемы Аналогичная запись на Promela Код транслятора на JS

Блок LTL ltl $("#ltls").each(function(){ var row = $('tr', this); var numRows = row.length; row. each(writeLTL); });

4. Тестирование сервиса

Одним из важных этапов разработки любого программного обеспечения является тестирование. Оно призвано установить соответствие между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов. Специфика работы разрабатываемого сервиса состоит в создании схемы (блоков и функций в них) и ее трансляции в код на языке Рготе1а. Отметим, что вопросы безопасности не исследуются в процессе тестирования.

Таким образом, основным направлением тестирования системы «^Лета2Рготе1а» является функциональное тестирование - вид тестирования, направленный на проверку корректности работы функциональности приложения.

По доступу к коду и архитектуре система «^Лета2Рготе1а» тестировалась по методу белого ящика (полный доступ к коду и архитектуре системы). Для проверки функциональности системы использовалось преимущественно позитивное тестирование. Перед созданием тест-кейсов был создан чек-лист тестирования (его фрагмент представлен в табл. 2) - это набор идей по тестированию, который чаще всего представляет собой обычный список: создание блоков, создание функций в блоках, проверка создания стрелок между блоками, переключение вида, добавление переменных по умолчанию, добавление ЦГЬ-формул, трансляция в Рготе1а.

Таблица 2

Фрагмент чек-листа по тестированию системы

Идентификатор Модуль Заглавие Шаги Ожидаемый результат

B1_1 Создание блоков Создание блока 1. Нажать на кнопку «Создать состояние» 2. Ввести в поле «Имя процедуры» текст: «test» 3. Поставить галочку рядом с именем процедуры 1. На странице появляется новый блок схемы. 2. При вводе имени процедуры видимых ошибок 3.не возникло

B1_2.1 Создание блоков Увеличение блока 1. В созданном в В1 1 блоке потянуть за правый нижний угол Блок увеличивается/уменьшается

Окончание табл. 2

Идентификатор Модуль Заглавие Шаги Ожидаемый результат

В1_2.2 Создание блоков Перемещение блоков 1. Кликнуть на любом месте созданного в В1_1 блока (на сером фоне) и переместить, а затем отпустить курсор. Блок перемещается на странице

B1_2.3 Создание блоков Удаление блока 1. В созданном в В1 1 блоке нажать на «Х» в правом верхнем углу Блок удалится со страницы, видимых ошибок не возникло

B1_3 Создание блоков Проставление связи между блоками 1. Нажать на «Создать состояние» 2. В появившемся блоке в поле «Имя процедуры» ввести: <^0» 3. В выпадающем списке выбрать «Вызов», нажать на кнопку «Добавить» 4. В появившемся поле ввести: <^1» 5. Нажать на «Создать состояние» 6. В появившемся блоке в поле «Имя процедуры» ввести: «^1» Кликнуть мышью вне поля 7. «Имя процедуры» Между блоками появилась стрелка

AB_2 Дополнительные блоки Добавление LTL-формул 1. Нажать на кнопку «Добавить LTL-формулы» 2. Ввести в поле «Название» значение «Бэгти1а1», ввести в поле «Содержание формулы» значение «[] а<6». Нажать на стрелку рядом с данными полями 3. Ввести в поле «Название» значение «Бэгти1а2», ввести в поле «Содержание формулы» значение «[] а<6». Нажать на стрелку рядом с данными полями 4. Удалить любую созданную формулу, нажав рядом с ней на «Х» 5. Нажать на «Х» в правом верхнем углу блока 1. На экране появляется блок «Добавление LTL-формул» 2. После каждого добавления формулы, поля очищаются 3. Формулы корректно удаляются 4. При закрытии блок исчезает с поля

Для тестирования использовалось следующее обеспечение:

- Браузер - Google Chrome (версия 49.0.2623.112), Mozilla Firefox 99.0.1,

- Компьютер с выходом в Интернет, Intel(R) Core(TM)2 QUAD CPU Q8200 2.33 ГГц 4 ГБ ОЗУ, Microsoft Windows 10.

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

БсЬета2Рготе1а

1/^струмент для создания и трансляции схем

Рис. 2. Схема системы «Кофейный автомат» в разрабатываемом сервисе

Подробное описание данной технической системы представлено в [7]. Кратко опишем ее суть. Предположим, что кофейный автомат работает следующим образом.

Пользователь вводит купюру номиналом 10, 50 или 100. Далее пользователь выбирает количество сахара (целое число от 0 до 6). Затем пользователь нажимает на кнопку выбора напитка (кофе, чай, какао). После этого из суммы денежных средств, внесенных пользователем, вычитается цена напитка. Если денег на напиток не хватает, пользователь может довнести нужную сумму. После выбора напитка напиток готовится, пользователю выдаётся сдача, а кофейный автомат переходит в начальное состояние.

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

Также сервис позволяет добавить предопределённые (глобальные) переменные и ЬТЬ-формулы. Для добавления переменных необходимо нажать на «Добавить переменные по умолчанию», ввести переменную (можно с присвоением значения), выбрать тип переменной и нажать на стрелочку справа. При нажатии на «х» блок скрывается, но не удаляется. Для добавления ЦГЬ-формулы необходимо нажать на кнопку «Добавить ЬТЬ-формулы» и в появившемся блоке ввести название и содержание формулы (т. е. условие, которое может использовать знаки логических и темпоральных операторов: [] (всегда), <> (иногда) и пр.).

Рис. 3. Компактный вид схемы (граф переходов)

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

Для проверки отсутствия синтаксических ошибок транслированные примеры были верифицированы с помощью интерфейса iSpin, который работает с верификатором SPIN (см. рис. 5). В результате проверки примеро, синтаксические ошибки не были обнаружены.

При генерации кода на Promela [4] более сложных схем моделей выявлены следующие недостатки:

1) генерируются лишние пробелы и переносы строк;

2) ключевое слово else в структуре if транслируется в скобках;

3) в визуальном представлении схемы иногда некорректно отображаются стрелки (на правильность модели и на трансляцию не влияет);

4) выбранная библиотека не отображает стрелки в случае, если функция вызова в визуальном блоке вызывает сама себя;

Рис. 4. Результат трансляции кода модели «Кофейный автомат»

5) отсутствует механизм вложенных условий и циклов;

6) нет возможности сохранять схемы, что делает невозможным создание и редактирование больших проектов.

Следует отметить, что при формулировании требований не ставилась задача адаптации сервиса для работы на мобильных устройствах, поскольку в реальной жизни вряд ли может возникнуть такая потребность. В настоящий момент прототип сервиса размещен в сети интернет [8].

Работы по тестированию и устранению недостатков продолжаются. Большинство выявленных недостатков не влияют на качество трансляции и не являются существенными. Однако п. 5, 6 влияют на масштабируемость проверяемых схем и, следовательно, проектируемых систем.

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

* pro™la.tiaislate-t«t.pml

Spin Version 6 4 5 -1 January 2016 : iSpJn Vernon 1X4 - 21 November 2014 ЕЛЬ View Simulate / Replay Verification Swarm Run <Help> Save Session Resloie Session cQuib

Open - ReOpen Save Save As.. Syniax Check Redundancy Check Symbol Table Find:

pi nr " nSO Начальный энрдн

truer -i cancel = true run S6 tr uei - > cancel = ialse

itrue) •> bash = 1. ciedit » credit - cash, printl (" щваш кредит •odi". credit): Itrue) •> tail: - 2 аш - cedH - casii print! Г гиваш кредит • " aedr.i true I •> cash • 5 ci edit « ci edit - cash, print! ! nleaiu кредит td " siedn>

nml 1

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

10 syntax check

11 I1:((s~0)) U «((s-1» l| <(S-2))> II <(s~B))) Hie n(((ten(ch)-i)) || Hlen(ch)—0))>

itl (3: ((sugar>-(20))) &4 ((sugat<=20)»

ttl 14: (((((whatdrink—0» || ((whaldrink==tea))) || Uwhatdnnk==cocoa|)) || ((whatdrink==coffee))) itl (5: ( ! ((s>-3)» || ((cancel—0))| ttl (6: ((! ((s=6)>) II (<> ((s=0)»)

Iti 17: [] ((! ((«crediktea puce)) && ((credr!<tea price))) && ((crediktea price»)) || ((costenaugh—0))) the model contains 7 never claims: 17.16. t5. t4.13,12. M only cne claim is used in a vesication run choose which one with .'pan a -N name (defaults to N11) or use e.g.: spin -search -itl (1 promela_tianslate_tesl.pml

Рис. 5. Проверка на синтаксические ошибки транслированного кода модели «Кофейный автомат»

Заключение

Разрабатываемый сервис [9] представляет собой редактор схем для создания модели работы технической, информационной системы или схемы алгоритма, который посредством многопроходного транслятора переводит спроектированную пользователем схему на язык Promela для последующей ее верификации в инструменте SPIN. Инструментальное средство «Schema2Promela» призвано сэкономить время и обеспечить наглядность представления схемы для пользователей (особенно это актуально для пользователей, работающих с высоким уровнем абстракции и не владеющих навыками программирования).

После перевода схемы на язык верификатора и проверки модели верификатором SPIN может возникнуть потребность автоматической трансляции Promela-кода на язык программирования. Для данных целей также был разработан транслятор с языка Promela на язык программирования C# [10].

В настоящее время разработанный прототип [8] используется как методическое обеспечение при проведении занятий по дисциплине «Конструирование компиляторов» для студентов магистратуры направления «Программная инженерия». Также данный программный продукт демонстрирует возможности использования средств

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

Список источников

1. Вельдер С.Э., Лукин М.А., Шалыто А.А., Яминов Б.Р. Верификация автоматных программ. СПб.: Наука, 2011. 244 с.

2. Егоров К.В., Шалыто А.А. Методика верификации автоматных программ // Информационно-управляющие системы. 2008. № 5. C. 15-21.

3. Шошмина И.В., Карпов Ю.Г. Введение в язык Promela и систему комплексной верификации Spin: учеб. пособие. СПб.: Санкт-Петербургский государственный политехнический университет, 2009. 66 с.

4. SPINROOT / Promela Grammar. URL: http://spinroot.com/spin/Man/grammar.html

5. Болдырева Ю.Ю., Хворостухина Е.В. Проектирование сервиса визуального программирования для трансляции на язык PROMELA // Вестник Саратовского государственного технического университета. 2021. № 2. C. 18-26.

6. Свердлов С.З. Языки программирования и методы трансляции: учеб. пособие. СПб.: Питер, 2007. 638 с.

7. Болдырева Ю.Ю. Моделирование работы кофейного автомата // Проблемы управления в социально-экономических и технических системах: сб. науч. статей по материалам конф. Саратов, 18-19 апреля 2018 года. Саратов: СГТУ, 2018. С. 215-216.

8. Schema2Promela / Инструмент для создания и трансляции схем. URL: http://y92722w7.beget.tech/

9. Свидетельство о государственной регистрации программы для ЭВМ № 2022664348 Российская Федерация. Schema2Promela: № 2022660024: заявл. 01.06.2022: опубл. 28.07.2022 / Ю.Ю. Болдырева, Е.В. Хворостухина; заявитель СГТУ имени Гагарина Ю.А.».

10. Свидетельство о государственной регистрации программы для ЭВМ № 2020663694 Российская Федерация. Транслятор с языка программирования Promela на язык программирования C#: № 2020662763: заявл. 21.10.2020: опубл. 30.10.2020 / Ю.Ю. Болдырева, Е.В. Хворостухина; заявитель СГТУ имени Гагарина Ю.А.

Сведения об авторах

Болдырева Юлия Юрьевна —

магистрант Саратовского государственного технического университета имени Гагарина Ю. А.

Yuliya Yu. Boldyreva -

Master student,

Yuri Gagarin State Technical

University of Saratov

Хворостухина Екатерина Владимировна —

кандидат физико-математических наук, доцент кафедры «Информационно-коммуникационные системы программная инженерия» Саратовского государственного технического университета имени Гагарина Ю.А.

Ekaterina V. Khvorostukhina -

PhD (Physics and Mathematics), Associate Professor, Department of Information and Communication Systems and Software Engineering, Yuri Gagarin State Technical University of Saratov

Статья поступила в редакцию 02.04.2023, принята к опубликованию 08.06.2023

i Надоели баннеры? Вы всегда можете отключить рекламу.