вторник, 27 декабря 2016 г.

Документация в формате MS Word из моделей Capella

На основе моделей Capella необходимо уметь генерировать документацию в формате MS Word.  Стандартный дополнительный компонент Capella позволяет генерировать только гипертекстовую документацию в формате HTML. Данный компонент необходимо устанавливать дополнительно после установки Capella

Для генерации документации в формате MS Word необходимо использовать универсальный компонент Eclipse Gendoc , позволяющий генерировать документацию в форматах MS Word и OpenOffice на основе любых EMF моделей, в том числе на основе моделей Capella. С использование GenDoc шаблоны документов создаются с помощью MS Word (или Open Office) и языка для создания шаблонов Acceleo.

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

Есть и неудобство от использования GenDoc. При разработке шаблонов приходится использовать яызк Acceleo без подсветки синтаксиса и без контекстной подсказки по API и элементам мета-модели. Если сравнить работу с Acceleo в специализированном редакторе Eclipse, то это очень большое неудобство. С этим неудобством получается справиться, используя интерактивное окно запросов в Capella, которое позволяет выполнять Acceleo запросы к модели. При разработке шаблона документа приходится постоянно проверять запросы элементов в окне запросов и только потом вставлять их в шаблон.

Устанавливать GenDoc в Capella нужно по инструкции на форуме (используя версию GenDoc с форума)

По этой же ссылке есть пример шаблона для GenDoc. Попробовать его можно на модели
In-Flight Entertainment (IDE) Sample Model

Документация поGenDoc доступна по ссылке

Для своих целей я создал отельные шаблоны GenDoc для каждого типа моделей в Capella
- System Analysis
- Logical Architecture
- Physical Architecture
И генерирую отдельные документы для каждой из этих моделей.

Ниже скриншоты моих документов, которые я генерирую c использованием GenDoc.


суббота, 24 декабря 2016 г.

Реализация системных функций в логическом проекте

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

Это пост дополняет информацию в посте 

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




Для передачи системных функций в логический проект необходимо выполнить команду Functional Transition на корневой функции (SystemFunctionRealization)

В результате в логическом проекте будут созданы соответствующие логические функции. Пока они отличаются только иконкой ( LF вместо SF)

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

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

Если просмотреть информацию о функции LF SystemFunction 1 в семантическом браузере модели, то видно, что данная функция логического проекта реализует системную функцию SystemFunction 1 из системного анализа. Более подробно об использовании семантического браузера модели Capella см в посте по ссылке.





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


Чтобы завершить декомпозицию функций в логическом проекте необходимо для функций 2-го уровня указать системные функции, которые они реализуют.  Просмотрим в семантическом браузере информацию о логической функции LF Logical Function. Видим, что данная функция не реализует ни одной системной функции.



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

Запустим валидацию модели для корневой системной функции в системном анализе. 


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



Capella позволяет исправлять многие ошибки в модели автоматическим образом. Для этого необходимо выделить сообщения об ошибках и выполнить команду из раздела Quick Fix. В нашем случае это будет Realize Function.


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



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

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

Диграммы Capella позволяют анализировать функциональность системы на разных уровнях абстракции.
  1. На диаграмме могут быть отображены функции системы с различной степень детализации вложенных функций
  2. На диаграмме можно "схлопывать" связи функциональных взаимодействий (FunctionExchange), отображая несколько связей в виде одной групповой связи. 

На диаграмме ниже отображены 2 уровня функциональной декомпозиции. На диаграмме связи функциональных взаимодействий соединяют функции 2-го уровня декомпозиции. А функции 1 уровня просто являются контейнерами для функций 2 уровня. 


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


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



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


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

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

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

пятница, 23 декабря 2016 г.

Множественные связи функционального взаимодействия

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

Вариант 1. Для функции SystemFunction1 создаются отдельные выходные функциональные порты для каждой связи. 

Вариант 2. Для функции SystemFunction1 создаются один выходной функциональный порт и все связи исходят из него
  1. Вариант 3 Используется элемент Dublicate для того чтобы размножать порты функционального взаимодействия
На данный момент я пришел к выводу, что правильно использовать Вариант 1.

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

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

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

Гораздо понятнее смотреть на диаграмму последовательности, получаемую при использовании Варианта 1 и 2


А вот так стоит поступать при переходе на следующий уровень декомпозиции функций при использовании Варианта 1. Выходные порты просто переносятся на вложенные функции.


Evernote помогает вам помнить всё и без труда организовать свою жизнь. Загрузить Evernote.

среда, 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.

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

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