среда, 30 ноября 2016 г.

Синхронизация функциональных декомпозиций на разных этапах проектирования

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

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

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

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

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

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

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

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

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


Если открыть эти разделы, то на первый взгляд в них содержатся одни и те же функции. 


Но если присмотреться к иконкам функций, то можно увидеть, что это разные элементы модели, имеющие разные типы SF - системная функция, LF - логическая функция, PF - физическая функция

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


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


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

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

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

Диаграмма функционального сценария

Диаграмма потоков данных


В случае использования документов Word на данном этапе предстоит тяжелая работа по приведению логической функциональной декомпозиции в соответствие с новой версией системной функциональной декомпозиции.

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


После нажатия Apply и Ok изменения логической модели будут произведены.

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

Для всех созданных логических функции также были  созданы трассировочные связи к исходным системным функциям. Например для логической функции "Обеспечение удаленного управления калиткой" в семантическом браузере модели видим в категории Realized System Functions ссылку на системную функцию "Обеспечение удаленного управления". 


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

Основу для данной диаграммы можно создать на основе диаграммы функциональных потоков данных, которую мы ранее создали для системной функции.  Для этих целей используем команда  Initialize from Existing diagram но вновь созданной диаграмме.


В открывшемся диалоговом окне выбираем интересующую нас исходную диаграмму 


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



Результаты декомпозиции функция системы "Обеспечение удаленного управления" калиткой в стандартном браузере модели. 

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




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

Привязка функций системы к целям ее использования

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

Для моделирования целей использования системы в Capella предназначены элементы Mission (Миссия, Цель) и Capability (Возможность). Mission - это цель использования системы, обычно формулируемая как задача пользователя, решаемая с помощью системы. Capability - это возможность системы, используемая для решения задачи пользователя.  Capability в языке моделирования Capella  - это аналог варианта использования (Use case) в UML/SysML.

С помощью элементов Mission/Capability, создается декомпозиция системы по целям/возможностям. Именно эта декомпозиция используется для планирования работ по разработке проектов системы и ее построения. Можно спроектировать/реализовать 80% функций системы не обеспечив ни одной ее возможности для реализации целей ее использования. Но можно реализовать 20% функций и обеспечить 80% возможностей по использованию системы. В связи с этим декомпозиция на возможности является основной для планирования работ в проектах. 

Для реализации определенной Возможности системы задействуется определенный набор ее функций. Одни и те же функции могут быть задействованы для реализации нескольких Возможностей. 

Для элемента Возможность (Capability) в Capella могут быть определены два типа элементов, которые ее описывают
- функциональные сценарии (functional scenario)
- функциональные цепочки (functional chain)

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


Отображение функционального сценария в браузере модели показано на рисунке ниже. 

Еще одним элементов для описания Возможности системы являются функциональные цепочки (Functional Chain). Данные элементы создаются внутри элемента Возможность.  Для графического отображения функциональных цепочек используется тип диаграмм Functional Chain Description. Данные диаграммы визуально очень похожи на диаграммы потоков данных. Но по способу использования, они скорее похожи на сценарии.

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


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

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

Два монитора для работы с моделями

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

На дополнительном мониторе у меня отображены стандартный браузер модели, семантический браузер и окно свойств Capella.


На мониторе ноутбука отображены редакторы Eclipse - в которых и отображаются диаграммы Capella.

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

И хотя мечта о супер большом мониторе для работы с моделями у меня до сих пор есть, использованием двух небольших мониторов сильно повысило мою производительность.

Быстрая навигация внутри модели с использованием семантического браузера модели в Capella

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

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

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

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

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

Далее, в семантическом браузере находим интересующую нас функцию, которая связана с выбранной функцией.

Выбрав интересующую функцию, нажимаем F8 для отображения функции в стандартном браузере модели. Либо выполняем команду из контекстного меню Select in Capella Explorer.

В результате интересующая нас функция будет отображена в стандартном браузере модели. 

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

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

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

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

Связи в семантическом браузере отображаются двух видов
- связи самого выбранного элемента
- связи составных элементов выбранного элемента

Так для функции "Инженерное обеспечение" в семантическом браузере отображаются все входящие/исходящие связи его составных элементов, хотя они и не являются связями самого элемента. Данные связи отображаются в категории Internal Incoming Functional Exchanges и Internal Outgoing Functional Exchanges. То есть это связи внутренни элементов (Internal - внутренний)

У функции Инженерное обеспечение нет собственных связей. Зато они есть у входящей в нее функции "Электроснабжение в мастерской". Собтвенные связи элемента отображаются в категориях Incoming Functional Exchanges и Outgoing Functional Exchanges.



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


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

вторник, 29 ноября 2016 г.

Функциональное описание систем/ПО в Capella

Решил проиллюстрировать выполнение функционального описания систем/ПО с использованием Capella.
Специально использую слово описание, а не, например, функциональный моделирование. Этим хочу подчеркнуть решаемую задачу - описание системы/ПО. 
Способы ее решения могут быть разные. Можно создать текстовый документ, а можно создать формальную модель в Capella.
Чем отличается функциональное описание с использованием формальной модели и хочу проиллюстрировать.

Итак, система/ПО выполняют некоторые высокоуровневые функции. Эти функции могут быть декомпозированы на более детальные и так далее.
Иерархия декомпозированных функций системы/ПО составляет основу функционального описания. Степень детальности декомпозиции функций
зависит от этапа проектирования, на котором мы сейчас находимся: концептуальный дизайн, системный анализ, логическое проектирование, физическое проектирование.

Для примера  будут использовать модель, которую я создаю при проектировании небольшой мастерской-гостевого домика.
Для определенности, возьму этап системного анализа. 

Часть модели Capella, предназначенная для фиксации результатов системного анализа содержит раздел Функциональное описание.

Браузер модели отображает функциональное описание в иерархическом виде, точно также как документ Word отображает разделы документы в панели навигации.


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

Для работы с элементами модели наряду с браузером модели активно используются диаграммы различных типов. 
Диаграммы создаются и открываются из браузера модели и могут быть созданы для любой функции функционального описания.
Например, для функции "Инженерное обеспечение мастерской" на скриншоте ниже показана созданная диаграмма типа SFBD (System Function Breakdown) - диаграмма функциональной декомпозиции

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



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

Назначение данной диаграммы такое же как у браузера модели - определение иерархии функций. 

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

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


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

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


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

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

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

понедельник, 21 ноября 2016 г.

ESON - универсальный текстовый DSL для создания любых моделей

Создание моделей с использованием диаграмм или иерархических редакторов модели не всегда удобно и производительно. Для быстрого создания моделей может быть разработан текстовый DSL с использованием технологии XText. Но это требует некоторых усилий. Оказывается для создания любых моделей с помощью текстового DSL можно использовать универсальный DSL под названием ESON.

ESON - текстовый DSL на базе Xtext, который позволяет создавать модели для любых мета-моделей, будь-то UML2, Capella или собственная мета-модель.

Как всегда, использованием универсальной текстовой нотации менее наглядно и выразительно, чем при использовании специализированной текстовой нотации. Но в каких-то случаях и универсальная нотация сгодится.

ESON  от EMF Single Object Notation (по аналогии с JSON)
Ниже пример создания модели на языке Capella с использование текстового языка ESON.
Как обычно для текстовых редакторов DSL на базе XText справа отображается outline модели (может тоже использоваться и для создания элементов). Снизу - свойства выбранного элемента
Да, кстати, ссылки (подсвечиваются синим цветом) на элементы в тексте позволяют навигироваться. Достаточно на ссылке нажать F3 и курсор устанавливатеся на определение элемента. Например для перехода на определение компонента устанавливаем курсор на SE.LogicalArchitecture.LogicalSystem.Cmp1 , нажимаем F3

Курсор оказывается на определении


А вот пример создания UML модели с использованием текстового языка ESON.
Нельзя сказать, что ESON очень удобен для создания UML моделей, привожу только для примера.
Модели, созданные с помощью ESON также могут быть отображены на представлениях (диаграммах/таблицах/деревьях) Sirius.

На рисунке ниже отображено представление файла eson в виде дерева модели в ProjectExplorer. В DataPkg я создал Capella Class Diagram Blank и перетащил на диаграмму Class4 , который был определен в текстовом DSL ESON.


С помощью диаграммы можно создавать и новые элементы. При этом они добавляются в виде текстовых элементов в файл ESON. Class 1 я создал на диаграмме. В ESON файле добавился соответствующий элемент.



Чтобы создать модель с ипользованием языка ESON в Eclipse:
- устанавливается плагин ESON (используя updatesite)
- создается файл c расширением eson
- в начале файла указывается используемые мета-модели


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

AMALTHEA - Разработка мульти-ядерных систем на основе моделей

 AMALTEA - набор инструментов на базе Eclipse для разработки мульти-ядерных систем на основе моделей. В центре данных инструментов находится модель для описания ПО и аппаратуры, которая позволяет решать задачи автоматического анализа и размещения ПО для мульти-ядерных систем.

Данный набор инструментов позволяет решать такие задачи, как 
- распределение функциональности ПО по потокам
- распределение потоков по ядрам 
- симуляция параллельной работы ПО с сохранением и анализом логов 
Изначально проект AMALTEA возник в автомобильной промышленности.
 Результаты проекта далее планируется развивать в рамках Eclipse, как универсальную технологию разработки много-ядерных систем, без привязки к автомобильной промышленности.
Для этих целей создан уже проект Eclipse APP4MChttps://projects.eclipse.org/projects/technology.app4mc
Меня прежде всего заинтересовала мета-модель, предназначенная для описания ПО.
В центре данного набора инструментов находится модель (EMF) для описания программных систем. Общая модель включает несколько разделов (под-моделей)
В том числе она включает компонентную модель ПО, которая определяет компоненты с портами, экземпляры компонентов и коннекторы

Компонент ссылается на элементы модели ПО

 В рамках компонентной модели для определения интерфейсов используется Franca IDL. Вот мета-модель компонентной модели. Здесь мета-тип FInterface как раз из Franca IDL EMF model



Приведу еще несколько скриншотов иерархического браузера модели
с отображением различных частей модели ПО

Моделирование задач ПО

Моделирование sheduler-а операционной системы
 Моделирование аппаратуры
В составе примеров к AMALTHEA есть модель, рассмотренная в данной монографии

A timing model for real-time control-systems and its application on simulation and monitoring of AUTOSAR systems
https://oparu.uni-ulm.de/xmlui/handle/123456789/1770


Чтобы детальнее познакомиться с моделью данных и функциональностью инструментов нужно скачать дистрибутив 
Модель данных описана в документации (Меню Help)