Повышение надежности специального программного обеспечения (СПО) комплексов, функционирующих в реальном масштабе времени под управлением oc2000, может быть достигнуто применением при его создании автоматизированных средств построения и анализа архитектурных и структурных моделей вычислительных систем реального времени (ВС РВ), автоматизированной генерации заготовок программных модулей на языке программирования Си для компонентов СПО ВС РВ, имитационного моделирования работы ВС РВ.
Разработанные НИИСИ РАН технологические средства автоматизированной генерации СПО (ТСАГ СПО) позволяют снизить трудоемкость разработки СПО, повысить его надежность за счет применения типовых программных компонентов, автоматизировать значительную часть работ процесса разработки СПО (в том числе работ по подготовке проектной документации).
ТСАГ СПО представляют собой совокупность следующих взаимодействующих программных средств: подсистема графического интерфейса (ППГИ РВ), подсистема графического представления (ПГП РВ), подсистема текстовой поддержки графического представления (ПТП РВ) и подсистема генерации текстов программ в исходном виде (ПГЕН РВ). Программные средства ТСАГ СПО функционируют под управлением операционной системы типа Linux (например Red Hat Fedora Core 7).
ТСАГ СПО реализованы на основе стандарта унифицированного языка моделирования UML [1] и расширяемого языка разметки XML [2]. Согласно стандарту UML особенности моделируемого объекта должны изображаться графически в виде совокупности связанных между собой графических элементов.
В процессе проектирования программ ТСАГ СПО используют заготовки UML, которые представляются XML-документами и визуализируются ТСАГ СПО графическими вершинами (graphic node [1]) типа action [1]. XML-документы содержат представления конструкций языка программирования Си в соответствии со стандартом [3] в виде XML-разметки, а также данные, требуемые для отображения этих заготовок на диаграммах (количество графических вершин, отображаемый в графических вершинах текст).
Проект разрабатываемых программ может содержать сотни (и более) логически связанных диаграмм различных типов (например, диаграммы классов, деятельностей, состояний, развертывания). Диаграммы, как и заготовки UML, представляются XML-документами.
Среди диаграмм проекта особое место занимают диаграммы программной деятельности (ДПД), представляющие собой новый вид диаграмм деятельности UML (таким образом, ДПД расширяют стандарт UML). Создавая программу, пользователь переносит заготовки UML из библиотеки заготовок UML (отражающие конструкции языка программирования Си) на ДПД и заполняет значения параметров этих заготовок. Такой перенос может предполагать вставку заготовки UML внутрь уже имеющейся. Заполнение значений параметров заготовки UML предполагает установку и сохранение значений полей диалогового окна «Параметры» ДПД.
XML-документы, представляющие заготовки UML, соответствуют XML-схеме, разработанной на основе стандарта языка Си [3] и позволяющей устанавливать синтаксическую правильность генерируемых из ДПД программ без предварительной компиляции. Кроме конструкций языка программирования Си, описанных в стандарте [3], библиотеки заготовок UML могут содержать заготовки, объединяющие несколько конструкций языка программирования Си, а также заготовки, представляющие собой XML-представления вызовов специальных функций, относящихся к работе на конкретной платформе (например, на платформе ос2000 [4]).
XML-документы, представляющие заготовки UML, содержат специальные технологические теги , позволяющие настраивать заготовки UML в процессе составления ДПД, а также специальные разделительные теги , при помощи которых заготовки UML разбиваются на логические части, отображаемые на ДПД, со своими именами и графическими вершинами.
Для каждой ДПД можно построить результирующий XML-документ, объединяющий в себе XML-документы, которыми представлены на ДПД заготовки UML. Порядок объединения XML-документов соответствует порядку следования заготовок UML на конкретной ДПД. Результирующий XML-документ содержит конкретные значения параметров XML-документов, которыми представлены заготовки UML. ДПД считается корректной, если построенный из нее результирующий XML-документ соответствует XML-схеме языка Си. Проверка корректности ДПД обеспечивается на лету, непосредственно в момент ее построения. Единственным источником синтаксических ошибок могут быть параметры заготовок UML, значения которых определяет пользователь.
Представленные XML-документами данные удобны для автоматизированного разбора. Существуют программные библиотеки функций, например LibXML 2.0 или Expat, которые предоставляют программисту интерфейс для работы с XML-документами. В ТСАГ СПО для работы с XML-документами используется библиотека LibXML 2.0.
Следует отметить, что данные, представленные XML-документами, удобны для обмена между программами. В ТСАГ СПО результирующий для ДПД XML-документ генерируется утилитой xmlgen, входящей в состав ТСАГ СПО. Этот документ преобразуется в текст программы в исходном виде на языке Си программой ПГЕН РВ, а также может быть открыт для просмотра и редактирования в программе ptp-editor, входящей в состав ТСАГ СПО.
Так как язык XML является стандартом представления данных де-факто, XML-документы можно просматривать и редактировать с помощью программ, входящих в стандартные поставки операционных систем Linux, например gedit и kate. Просмотр и редактирование XML-документов возможны и в коммерческих программных продуктах, например, SyncRO Soft Oxygen XML editor или Altova XMLSpy.
Программа ПГЕН РВ
ДПД являются основой для получения программы на языке программирования Си. Преобразование ДПД в текст программы в исходном виде выполняет входящая в состав ТСАГ СПО программа ПГЕН РВ, предназначенная для перевода программных моделей ВС РВ в набор файлов с текстом в исходном виде на языке Си. Программа ПГЕН РВ поддерживает программный протокол обмена данными между программами, входящими в состав ТСАГ СПО. Программа использует библиотеки GTK 2.0 и LibXML 2.0.
Программа ПГЕН РВ выполняет преобразование результирующих XML-документов ДПД в файлы с текстом в исходном виде на языке Си. Документы XML, передаваемые ПГЕН РВ, должны соответствовать схеме XML языка Си. Пользователь имеет возможность контролировать процесс преобразования XML-документов с помощью параметров запуска, сообщений и графических интерфейсных компонентов главного окна ПГЕН РВ (кнопок, элементов ввода текста, пунктов меню, панелей инструментов). Программа сохраняет результаты работы в текстовый файл, который может использоваться для детального анализа работы программы и обработанных данных.
Алгоритм преобразования XML-документов, реализованный в ПГЕН РВ, предполагает, что в документе присутствуют теги , , , , , , , . Эти теги являются управляющими для алгоритма: по ним ПГЕН РВ определяет начало, конец и тип синтаксических конструкций.
Таким образом, ПГЕН РВ, используя структурированные в XML-документах данные, порождает форматированную последовательность символов, являющуюся текстом программы в исходном виде на языке Си. Правила обработки XML-документов определяются как в схеме XML, так и непосредственно в алгоритме преобразования.
Вызов ПГЕН РВ в ТСАГ СПО выполняют программа ППГИ РВ, программа ПГП РВ, утилиты xmlgen, ptp-editor.
В ПГЕН РВ реализованы дополнительные функции, такие как форматирование файлов, проверка на соответствие схеме XML, отображение документа XML в виде дерева, вывод информации о результатах преобразования документов XML, вывод отладочной информации, вывод конфигурации ПГЕН РВ, запуск ПГЕН РВ в оконном режиме. Наличие этих функций позволяет использовать ПГЕН РВ отдельно от ТСАГ СПО как самостоятельную программу.
Логическая структура ПГЕН РВ
Программа ПГЕН РВ реализована на языке программирования Си. Список программных модулей с кратким описанием приведен в таблице 1.
У каждого программного модуля имеется препроцессорная директива #include с одноименным заголовочным файлом. Заголовочные файлы содержат объявления используемых в программном модуле функций и располагаются в подкаталоге include.
Таблица 1
Имя модуля
|
Функция
|
gui_interface.c
|
Построение интерфейсных компонентов окна ПГЕН РВ (функции построения меню, элементов ввода, кнопок, списка, панелей инструментов)
|
pgengraph.c
|
Работа с главным окном ПГЕН РВ (создание, закрытие)
|
pgenparse.c
|
Разбор XML-документов
|
pgenutils.c
|
Разбор документов XML (резервное копирование файлов, обработка комментариев, обработка проектов ППГИ РВ)
|
regularexpr.c
|
Разбор документов XML (используется механизм регулярных выражений)
|
spawns.c
|
Запуск подсистем ППГИ РВ и ПГП РВ (xmlgen) из ПГЕН РВ
|
fifo_io_channels.c
|
Обеспечение обмена данными между ПГП РВ (xmlgen) и ПГЕН РВ
|
package_info.c
|
Работа с диаграммами ПГП РВ (получение списка ДПД проекта)
|
codeformat.c
|
Форматирование исходного кода
|
Программные модули логически связаны между собой объявлениями внешних функций (extern). Список внешних функций приведен в таблице 2. Под внешней для программного модуля функцией понимается функция, не входящая в состав стандартных библиотек и определенная в другом модуле ПГЕН РВ.
Логические связи между программными модулями на уровне объявлений внешних функций (extern) представлены на рисунке 1.
После запуска ПГЕН РВ порождает следующие процессы: главный процесс ПГЕН РВ pgen_start; процесс графического интерфейса ПГЕН РВ (создание окон ПГЕН РВ, интерфейсных компонентов и т.д.) pgen_graph; процесс pgen_parse, обеспечивающий генерацию текстов программ в исходном виде на языке Си из документов XML и проектов ТСАГ СПО; проверку на корректность и соответствие документов XML схеме XML. Модель реализации ПГЕН РВ в контексте взаимодействия с подсистемами ТСАГ СПО представлена на рисунке 2.
Функция PgenfileParse() является основополагающей в ПГЕН РВ – в ней реализован алгоритм анализа и обработки XML-данных, выполняющий генерацию текста программы в исходном виде на языке Си. Функция PgenfileParse() определена в программном модуле pgenparse.c и является внешней для программных модулей pgenutils.c и gui_interface.c (см. табл. 2). Объявление PgenfileParse() выполнено в заголовочном файле include/ pgenparse.h.
Функция PgenfileParse() реализована в соответствии с поточно-событийным принципом разбора XML-данных. Функция получает дескриптор XML-документа (вызов open) и начинает последовательное чтение строк этого документа, тем самым напоминая канал, исходными данными для которого выступает XML-разметка. Этот канал условно называется потоком событий. Р-схемы функции PgenfileParse() представлены на рисунках 3–5.
Прочие функции, реализованные в ПГЕН РВ, в этой статье не рассматриваются, так как они являются утилитарными и используются для обеспечения корректной работы оконного интерфейса ПГЕН РВ (процесс pgen_graph), обмена данными с подсистемами ТСАГ СПО (процессы pgen_start, pgen_parse) и управления протоколированием и отладкой ПГЕН РВ.
Используемые технические и программные средства
Программа ПГЕН РВ эксплуатируется на персональном компьютере типа IBM PC (инструментальная ЭВМ). Необходимая и достаточная для работы ПГЕН РВ конфигурация: корпус ATX, процессор Intel Celeron 3,06 ГГц, оперативная память 2 Гб, сетевая карта Marvell Technology Group Ltd, 88E8001 Gigabit Ethernet Controller (или аналогичная), жесткий диск не менее 80 Гб, DVD-RW-дисковод.
Для работы в диалоговом режиме требуются цветной графический монитор, клавиатура, манипулятор типа «мышь».
На инструментальную ЭВМ должно быть установлено следующее ПО: операционная система Linux Fedore Core 7, подсистемы ТСАГ СПО, пользовательская среда GNOME 2.18.0, обозреватель файлов для среды GNOME Nautilus 2.18.1.
Вызов и загрузка
Обращение к подсистеме ПГЕН РВ может быть выполнено как из командной строки Unix-shell, так и из прикладной программы. Предположим, что /usr/local/bin/pgen – путь к исполняемому файлу pgen подсистемы ПГЕН РВ, тогда вызов из командной строки Unix-shell будет выглядеть следующим образом:
$ ./usr/local/bin/pgen [параметры]
При использовании ключа –pgp ПГЕН РВ после завершения обработки входных документов XML отправляет сообщения в канал FIFO. Файл канала FIFO PGEN_xxxx_yyyy_OUT размещается в каталоге /$HOME_DIR/.pgp/, где $HOME_DIR – пользовательский каталог; xxxx – числовой идентификатор родительского процесса; yyyy – числовой идентификатор процесса ПГЕН РВ. Сообщение соответствует следующему формату: Mxxxx, где xxxx – числовой идентификатор процесса ПГЕН РВ.
При использовании ключей –prj и –isrp ПГЕН РВ создает файлы каналов FIFO XMLGEN_xxxx_ yyyy_OUT и XMLGEN_xxxx_yyyy_IN в каталоге /$HOME_DIR/pgp/, где $HOME_DIR – пользовательский каталог; xxxx – числовой идентификатор процесса ПГЕН РВ; yyyy – числовой идентифи- катор процесса программы-потомка. ПГЕН РВ ожидает получения сообщения по каналу FIFO XMLGEN_xxxx_yyyy_IN, которое свидетельствует о завершении программы-потомка.
Сообщение соответствует формату Mxxxx, где xxxx – числовой идентификатор процесса программы-потомка.
Входные и выходные данные
Программа ПГЕН РВ выполняет преобразование XML-документов в файлы с текстом в исходном виде на языке Си. Пути к XML-документам в файловой системе инструментальной ЭВМ передаются ПГЕН РВ в качестве параметров. Вызов ПГЕН РВ из командной строки UNIX-shell может быть выполнен, например, следующим образом:
$ /usr/local/bin/pgen –in while.xml –out while.c –sch schema.xsd
Входными данными для ПГЕН РВ при работе в текстовом режиме являются входные параметры, которые передаются ПГЕН РВ при запуске (полный список параметров вызова приведен в таблице 3). При работе ПГЕН РВ с документами XML необходимыми являются следующие входные данные:
–in file – ключ специфицирует файл входного документа XML;
–out file – ключ специфицирует файл, в который будут помещены исходные тексты на языке Си;
–sch file – ключ специфицирует схему XML.
При работе ПГЕН РВ с проектами ТСАГ СПО необходимыми являются следующие входные данные:
–prj path – ключ специфицирует каталог, где располагается проект ТСАГ СПО;
–isrp file – ключ специфицирует файл проекта ТСАГ СПО.
Выходными данными для ПГЕН РВ являются один или несколько файлов с текстом в исходном виде на языке Си, сообщения, передаваемые ПГЕН РВ вызывающей подсистеме через канал FIFO, сообщения, передаваемые ПГЕН РВ другим программам, сообщения средств контроля ПГЕН РВ, файл отчета.
При использовании ключей –in и –out ПГЕН РВ генерирует на основании документа XML, специфицированного ключом –in, файл с исходным текстом на языке Си, специфицированный входным параметром –out. Имя и путь к файлу с исходным текстом определяются параметром –out.
Таблица 3
Синтаксис входных параметров
|
Назначение ключа
|
–in файл1
|
Определяет входной XML-документ
|
–out файл
|
Определяет файл, в который будет сохранен исходный текст программы на языке Си
|
–sch файл
|
Определяет схему XML
|
–io
|
Вывод в стандартный поток ввода/вывода представления XML-документа в виде дерева
|
–с
|
Вывод в стандартный поток ввода/вывода внутреннего представления XML-документа в виде конструкций языка Си
|
–v
|
Вывод текущей версии ПГЕН РВ
|
–pgp
|
Отправка сообщения в FIFO-канал после завершения обработки входного документа XML
|
–t
|
Вывод в стандартный поток ввода/вывода времени обработки входного документа XML
|
–g1
|
Запуск ПГЕН РВ с выводом окна, отображающего ход процесса обработки входного документа XML в процентах
|
–g2
|
Запуск ПГЕН РВ c инициализацией графического (оконного) интерфейса
|
–r файл
|
Определяет файл, в который будет помещен отчет об анализе выходного документа XML
|
–debug
|
Вывод в стандартный поток ввода/вывода диагностической информации (активация средств внутреннего контроля)
|
–valid
|
Проверка входного документа XML на соответствие схеме XML и вывод результатов в стандартный поток ввода/вывода
|
–sets
|
Вывод конфигурации ПГЕН РВ в стандартный поток ввода/вывода
|
–prj файл
|
Определяет каталог с проектом ТСАГ СПО (используется совместно с ключом –isrp)
|
–isrp файл
|
Определяет файл проекта ТСАГ СПО (используется совместно с ключом –prj)
|
При использовании ключей –prj и –isrp ПГЕН РВ генерирует один или несколько файлов с исходным текстом на языке Си и помещает их в каталог $ISRP_PROJ_PATH/pgen/ src/last, где $ISRP_PROJ_PATH специфицируется ключом –prj. Сообщения, передаваемые ПГЕН РВ вызывающей подсистеме через FIFO-канал, соответствуют формату Mxxxx, где xxxx – числовой идентификатор процесса ПГЕН РВ. Файл отчета создается ПГЕН РВ в случае, если был указан параметр –r, который специфицирует путь к файлу отчета и его имя.
Перспективы развития
ПГЕН РВ может применяться как в виде отельного полнофункционального приложения, так и в составе системы проектирования. В настоящее время активно развиваются приложения, предоставляющие интерфейсы для разработки собственных расширений (add-on) и плагинов (plug-in). Таким образом, генератор исходных текстов может быть реализован для систем типа Eclipse, NetBeans и т.д.
Не менее важны перспектива создания библиотек конструкций для популярных языков типа Java, C#, VisualBasic, а также реализация средств автоматизированного документирования сгенерированного исходного кода.
Особое место занимает подготовка скелетов программ, которые могут быть включены в общую библиотеку заготовок UML. Это могут быть скелеты потоков управления, процессов, критические
участки кода, обработчики исключений и прерываний [4] и др.
Литература
1. ISO/IEC 19501:2005(E), January 2005. Unified Modeling Language Specification. Version 1.4.2 formal/05-04-01.
2. Extensible Markup Language (XML) 1.0 (Fourth Edition) W3C Recommendation 16 August 2006, edited in place 29 September 2006. URL: http://www.w3.org/TR/REC-xml/ (дата обращения: 16.09.2010).
3. ISO/IEC 9899:1999: Programming languages – C (Second Edition), N.Y.: American National Standards Institute, 1999, pp. 402–416.
4. Безруков В.Л. [и др.]. Введение в ос2000. Вопросы кибернетики. Информационная безопасность. Операционные системы реального времени. Базы данных [под. ред. В.Б. Бетелина]. М.: НИИСИ РАН, 1999. С. 76–109.