Embedded Systems in UML

Mellor, S. J. (2007). Embedded systems in UML. Object Management Group, Tech. Rep.

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

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

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

Исполняемая модель состоит из трех основных компонент:

  1. ​ Объявление сущностей программной системы. Представляется в виде диаграммы классов UML.
  2. Описание поведения системы в времени. Задается с помощью диаграммы состояний UML (точнее, некоторого ее подмножества со строгой семантикой).
  3. ​ Правила исполнения. В исполняемом UML, программа представляется с помощью набора конечных автоматов, которые работают одновременно. Взаимодействие между автоматами осуществляется путем обмена сигналами. Правила обмена сигналами задаются правилами исполнения.

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

  1. Верификация не имеет отношения к тестированию производительности. Цель верификации – проверить поведение модели.
  2. ​ Выбор тестовых случаев – отдельная задача, решение которой зависит от специфики приложения.

Трансляция исполняемой модели осуществляется с помощью компилятора, который состоит из набора переиспользуемых компонент (определяющих, например, способы хранения данных и доступа к ним) и совокупности формальных правил (задающих соответствие между элементами модели и данными компонентами). Концепция использования переиспользуемых компонент заключается в том, что архитектура системы задается структурой составляющих ее простых компонент и способами взаимодействия между ними. Основные этапы компиляции следующие:

  1. ​ Трансляция модели в семантическую базу. Семантическая база представляет собой описание всех объектов, пригодное для трансляции в код.
  2. ​ Транслирование объектов семантическй базы в код. С помощью правил, генерируется код для заданной архитектуры.
  3. ​ Компиляция (при необходимости – линковка) кода под заданную архитектуру.

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

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