# ПРОЦЕССЫ Ресурсы Цикл разработки ПО Waterfall RUP Agile Kanban Управление Теория ограничений АРХИТЕКТУРА Ресурсы ПО для Архитектора Кто архитекторы? Архитектурные слои язык Archimate GAP-анализ SOA Типы интеграции Проектное решение ESB Микросервисы и service mesh HTTP/REST RPC DDD АНАЛИЗ Ресурсы ПО для Аналитика Кто аналитики? Бизнес-процесс Требования Уровни и типы Источники Стейкхолдеры Нотации Vision (Концепция) Сервисы DevOps CI/CD/CDP VM и Docker Контракты API Оценка задачи git Frontend Apache Регулярка Linux ТЕСТИРОВАНИЕ Ресурсы QA и QC Цикл тестирования Уровни тестирования Виды тестирования Баг-репорт Тестирование требований Тест-анализ и тест дизайн Интеграционное, API, E2E Тест план Метрики качества Автотесты Selenium XPATH Генератор данных Нагрузочное ДАННЫЕ Ресурсы MDM Big data Об информации SQL intro MongoDB intro БИБЛИОТЕКА Курсы Системная инженерия "Сумма технологии" "Антихрупкость" Экстраполяция в будущее Политэкономия Красивые диаграммы Сознание, интеллект

/ АНАЛИЗ: + АНАЛИЗ + Стейкхолдеры - Нотации | Приобщиться к мудрости | Инструменты | PlantUML, личные примеры. | Методы анализа и нотации | BPMN | UML | IDEF0 + Vision + Сервисы АРХИТЕКТУРА ДАННЫЕ DevOps Gaming Библиотека ПРОЦЕССЫ ТЕСТИРОВАНИЕ
Графические нотации
latest update of the page: 31-01-2023, 18:16 UTC
Приобщиться к мудрости
Инструменты
PlantUML, личные примеры.

Примитивное, чисто для иллюстрации:

Это я делал дерево технологий для "X-COM: Terror from the Deep":

@startuml '!theme plain 'left to right direction 'scale max 4000 width skinparam BackgroundColor #eee skinparam titleFontSize 26 skinparam titleFontName Verdana skinparam titleBorderThickness 0 skinparam titleBorderRoundCorner 12 skinparam titleBackgroundColor Aqua-CadetBlue skinparam groupInheritance 2 skinparam object { BorderColor grey BackgroundColor #ddd FontSize 13 FontName Verdana BorderColor<<blueprint>> transparent handwritten<<blueprint>> true } skinparam package { BorderThickness 1 BorderColor grey RoundCorner 20 Style default } <style> legend { FontSize 16 Padding 14 Margin 16 } </style> title "X-COM: Terror from the Deep" research tree package "The research projects available by default" { object "**Gauss Technology**" as GaussTechnology object "**Particle Disturbance Sensor**" as ParticleDisturbanceSensor { Blueprint: **Particle Disturbance Sensor** } object "**Medi-Kit**" as Medikit { Blueprint: **Medi-Kit** } object "**Gauss Pistol**" as GaussPistol #fbb { Blueprint: **Gauss Pistol** } object "**Gauss Pistol Clip**" as GaussPistolClip #fbb { Blueprint: **Gauss Pistol Clip** } object "**Gauss Rifle**" as GaussRifle #fbb { Blueprint: **Gauss Rifle** } object "**Gauss Rifle Clip**" as GaussRifleClip #fbb { Blueprint: **Gauss Rifle Clip** } object "**Heavy Gauss**" as HeavyGauss #fbb { Blueprint: **Heavy Gauss** } object "**Heavy Gauss Clip**" as HeavyGaussClip #fbb { Blueprint: **Heavy Gauss Clip** } object "**Gauss Cannon**" as GaussCannon #f9d { Blueprint: **Gauss Cannon** Blueprint: **Gauss Cannon Ammo** } object "**Gauss Defence**" as GaussDefence #ccf { Blueprint: **Gauss Defence** } diamond jointCoelacanth object "Blueprint: **Coelacanth/Gauss**" as CoelacanthGauss<<blueprint>> #f99 } package "Sonic research tree" { object "**Sonic Pistol**" as SonicPistol #fbb { Blueprint: **Sonic Pistol** } object "**Pistol Power Clip**" as PistolPowerClip #fbb { Blueprint: **Pistol Power Clip** } object "**Sonic-Blasta Rifle**" as SonicBlastaRifle #fbb { Blueprint: **Sonic-Blasta Rifle** } object "**Blasta Power Clip**" as BlastaPowerClip #fbb { Blueprint: **Blasta Power Clip** } object "**Sonic Cannon**" as SonicCannon #fbb { Blueprint: **Sonic Cannon** } object "**Cannon Power Clip**" as CannonPowerClip #fbb { Blueprint: **Cannon Power Clip** } object "**Sonic Oscillator**" as SonicOscillator #f9d { Blueprint: **Sonic Oscillator** } diamond jointSonicOscillator object "**Sonic Defence**" as SonicDefence #ccf { Blueprint: **Sonic Defence** } diamond jointDisplacerSonic object "Blueprint: **Displacer/Sonic**" as DisplacerSonic<<blueprint>> #f99 } object "**Zrbite**" as Zrbite #ef7 object "**Disruptor Pulse Launcher**" as DisruptorPulseLauncher #fbb { Blueprint: **Disruptor Pulse Launcher** } object "**Disruptor Pulse Ammo**" as DisruptorPulseAmmo #fbb { Blueprint: **Disruptor Pulse Ammo** } diamond jointPWTCannon object "**P.W.T. Cannon**" as PWTCannon #f9d { Blueprint: **P.W.T. Cannon** .. Blueprint: **P.W.T. Ammo** } object "**P.W.T. Defence**" as PWTDefence #ccf { Blueprint: **P.W.T. Defence** } diamond jointDisplacerPWT object "Blueprint: **Displacer/P.W.T.**" as DisplacerPWT<<blueprint>> #f99 { Blueprint: **P.W. Torpedo** } object "**Magnetic Navigation**" as MagneticNavigation { Blueprint: **Magnetic Navigation** } object "**Transmission Resolver**" as TransmissionResolver #ccf { Blueprint: **Transmission Resolver** } diamond jointAlienSubConstruction object "**Alien Sub Construction**" as AlienSubConstruction package "New subs" { diamond jointNewFighterFlyingSub object "**New Fighter Flying Sub**" as NewFighterFlyingSub #f9d { Blueprint: **New Fighter Flying Sub (Manta)** } object "**New Fighter Transporter**" as NewFighterTransporter #f9d { Blueprint: **New Fighter Transporter (Hammerhead)** } diamond jointTheLatestFlyingSub object "**The Latest Flying Sub**" as TheLatestFlyingSub #f9d { Blueprint: **The Latest Flying Sub (Leviathan)** } } object "**Bombardment Shield**" as BombardmentShield #ccf { Blueprint: **Bombardment Shield** } package "Armour" { object "**Ion-Beam Accelerators**" as IonBeamAccelerators { Blueprint: **Ion-Beam Accelerators** } object "**Deep One Corpse**" as DeepOneCorpse #6b6 object "**Aqua Plastics**" as AquaPlastics { Blueprint: **Aqua Plastics** } object "**Plastic Aqua-Armour**" as PlasticAquaArmour #fbb/ccc { Blueprint: **Plastic Aqua-Armour** } object "**Deep One Terrorist**" as DeepOneTerrorist #lightgreen diamond jointIonArmour object "**Ion Armour**" as IonArmour #fbb/ccc { Blueprint: **Ion Armour** } diamond jointMagneticIonArmour object "**Magnetic Ion Armour**" as MagneticIonArmour #fbb/ccc { Blueprint: **Magnetic Ion Armour** } } package "Main Storyline" { object "**Lobster Man Commander**" as LobsterManCommander #lightgreen object "<one of alive alien>" as AliveAlien #lightgreen { **Aquatoid** | **Gil Man** | **Lobster Man** } object "**Alien Origins**" as AlienOrigins object "<one of high rank alive alien>" as HighRankAliveAline #lightgreen { **Lobster Man Navigator** | **Lobster Man Commander** | **Gil Man Commander** } diamond jointUltimateThreat object "**Ultimate Threat**" as UltimateThreat diamond jointTleth object "**T'leth, The Aliens' City**" as Tleth } package "Mind-control technologies" { object "<one of alive alien> **Terrorist**" as AliveAlienTerrorist #lightgreen { **Calcinite** | **Bio-Drone** | **Tentaculat** | **Triscene** | **Xarquid** | **Hallucinoid** } object "**any alive Tasoth**" as AliveTasoth #lightgreen object "**M.C.-Lab**" as MCLab #ccf { Blueprint: **M.C.-Lab** } object "**M.C. Reader**" as MCReader { Blueprint: **M.C. Reader** } diamond jointMCDisruptor object "**M.C. Disruptor**" as MCDisruptor { Blueprint: **M.C. Disruptor** } object "**M.C. Generator**" as MCGenerator #ccf { Blueprint: **M.C. Generator** } } package "Melee weapons research" { object "**Calcinite corpse**" as CalciniteCorpse #6b6 object "**Vibro Blade**" as VibroBlade #fbb { Blueprint: **Vibro Blade** } object "**Gill Man corpse**" as GillManCorpse #6b6 diamond jointThermicLance object "**Thermic Lance**" as ThermicLance #fbb { Blueprint: **Thermic Lance** } object "**Heavy Thermic Lance**" as HeavyThermicLance #fbb { Blueprint: **Heavy Thermic Lance** } } package "Miscellaneous standalones" { object "<alien> **corpse**" as AlienCorpse #6b6 { <i>Gives just an autopsy info.</i> **Aquatoid** | **Lobster Man** | **Tasoth** | **Bio-drone** | **Tentaculat** | **Triscene** | **Hallucinoid** | **Xarquid** } object "**Sonic Pulser**" as SonicPulser #fbb { Blueprint: **Sonic Pulser** } object "**Thermal Shok Launcher**" as ThermalShokLauncher #fbb { Blueprint: **Thermal Shok Launcher** } object "**Thermal Shok Bomb**" as ThermalShokBomb #fbb { Blueprint: **Thermal Shok Bomb** } object "**Alien Cryogenics**" as AlienCryogenics object "**Alien Cloning**" as AlienCloning object "**Alien Learning Arrays**" as AlienLearningArrays object "**Examination Room**" as ExaminationRoom object "**Alien Implanter**" as AlienImplanter } GaussTechnology --> GaussPistol GaussPistol -l> GaussPistolClip GaussPistol --> GaussRifle GaussRifle -l> GaussRifleClip GaussRifle --> HeavyGauss HeavyGauss --> HeavyGaussClip HeavyGaussClip --> GaussCannon GaussCannon --> GaussDefence GaussCannon --> jointCoelacanth jointCoelacanth --> CoelacanthGauss SonicPistol --> jointSonicOscillator PistolPowerClip --> jointSonicOscillator SonicBlastaRifle --> jointSonicOscillator BlastaPowerClip --> jointSonicOscillator SonicCannon --> jointSonicOscillator CannonPowerClip --> jointSonicOscillator jointSonicOscillator --> SonicOscillator SonicOscillator --> SonicDefence SonicOscillator --> jointDisplacerSonic jointDisplacerSonic --> DisplacerSonic Zrbite --> DisruptorPulseLauncher Zrbite --> DisruptorPulseAmmo DisruptorPulseLauncher --> jointPWTCannon DisruptorPulseAmmo --> jointPWTCannon jointPWTCannon --> PWTCannon PWTCannon --> PWTDefence PWTCannon --> jointDisplacerPWT jointDisplacerPWT --> DisplacerPWT MagneticNavigation --> TransmissionResolver TransmissionResolver --> jointAlienSubConstruction Zrbite --> jointAlienSubConstruction jointAlienSubConstruction --> AlienSubConstruction MagneticIonArmour ---> jointNewFighterFlyingSub AlienSubConstruction --> jointNewFighterFlyingSub jointNewFighterFlyingSub --> NewFighterFlyingSub NewFighterFlyingSub --> jointDisplacerPWT NewFighterFlyingSub --> jointDisplacerSonic NewFighterFlyingSub --> jointCoelacanth NewFighterFlyingSub --> NewFighterTransporter NewFighterTransporter --> jointTheLatestFlyingSub LobsterManCommander ---> jointTheLatestFlyingSub jointTheLatestFlyingSub --> TheLatestFlyingSub TheLatestFlyingSub --> BombardmentShield DeepOneCorpse --> AquaPlastics AquaPlastics --> PlasticAquaArmour IonBeamAccelerators --> jointIonArmour PlasticAquaArmour --> jointIonArmour DeepOneTerrorist --> jointIonArmour jointIonArmour --> IonArmour IonArmour --> jointMagneticIonArmour MagneticNavigation --> jointMagneticIonArmour jointMagneticIonArmour --> MagneticIonArmour CalciniteCorpse --> VibroBlade VibroBlade --> jointThermicLance GillManCorpse --> jointThermicLance jointThermicLance --> ThermicLance ThermicLance --> HeavyThermicLance AliveAlienTerrorist --> MCLab MCLab --> MCReader MCReader --> jointMCDisruptor AliveTasoth --> jointMCDisruptor jointMCDisruptor --> MCDisruptor MCDisruptor --> MCGenerator AliveAlien --> AlienOrigins AlienOrigins --> jointUltimateThreat HighRankAliveAline --> jointUltimateThreat jointUltimateThreat --> UltimateThreat UltimateThreat --> jointTleth LobsterManCommander ---> jointTleth jointTleth --> Tleth hide empty members hide stereotypes 'show AlienCorpse fields 'show GaussCannon fields 'show PWTCannon fields 'center footer My super footer legend left <back:#fbb>#fbb colored boxes</back> = firing/throwin/melee HAND WEAPONS <back:#fbb/ccc>#fbb/ccc gradient colored boxes</back> = ARMOUR <back:#f99>#f99 colored boxes</back> = Submersible Weapon Systems (aka SWS) <back:#f9d>#f9d colored boxes</back> = X-COM SUBS and their ARMAMENTS <back:#ccf>#ccf colored boxes</back> = base FACILITIES <back:lightgrey>lightgrey colored boxes</back> = miscellaneous <back:lightgreen>lightgreen colored boxes</back> = ALIVE aliens <back:#6b6>#6b6 colored boxes</back> = DEAD aliens Mellarius, 2023 endlegend @enduml

Это дерево технологий для "UFO: Aftermath", здесь особенность в работе с внешним JSON и с использованием возможностей preprocessing:

@startuml skinparam groupInheritance 5 !$myjson = %load_json("somefolder/listof_tech_eng_obj_with_realnames.json") left to right direction skinparam BackgroundColor #eee skinparam titleFontSize 26 skinparam titleFontName Verdana skinparam titleBorderThickness 0 skinparam titleBorderRoundCorner 12 skinparam titleBackgroundColor Aqua-CadetBlue skinparam class { BorderColor grey BackgroundColor #ddd FontSize 12 FontName Verdana 'BorderColor<<blueprint>> transparent 'handwritten<<blueprint>> true } skinparam package { BorderThickness 1 BorderColor grey RoundCorner 20 Style default } <style> legend { FontSize 16 Padding 14 Margin 16 } </style> hide empty members hide stereotypes hide circle scale max 4000 height title "UFO: Aftermath" research tree !$colour = "white" !foreach $i in $myjson.research !if ($i.kind == "SCI") !$colour="white" !else !$colour="yellow" !endif class "$i.realname" as $i.name #$colour { time: $i.time h } !endfor !foreach $i in $myjson.objects !if ($i.type == "EVENT") !$colour="cyan" !else !$colour="lightgrey" !endif class "$i.realname" as $i.name #$colour !endfor !foreach $i in $myjson.research !foreach $j in $i.subtechnos !if ($j.required == true) $j.elements --> $i.name !else $j.elements -[dotted]-> $i.name !endif !endfor !endfor legend left <back:lightgrey>lightgrey colored boxes</back> = looted OBJECTS or captured live ALIENS <back:cyan>cyan colored boxes</back> = EVENTS <back:white>white colored boxes</back> = SCIENTIFIC research <back:yellow>yellow colored boxes</back> = ENGINEERING technology Mellarius, 2023. Visually generated by PlantUML. endlegend @enduml
JSON-данные для диаграммы

Методы анализа и нотации
В зависимости от того, какую проблему мы решаем и что конкретно анализируем, определяемся с точкой зрения на систему (Point of View): Для каждой из выбранной точки зрения существуют свои методы анализа и графические нотации для визуализации его результатов. Например:
Потоки работ
(Функциональность)
Нотации моделирования бизнес-процессов:
Связи компонентов
(Архитектура)
Язык описания моделей предметной области:
Активности пользователей
(UX-design)
  • ...
Потоки данных
(Модель данных предметной области)

TBD

BPMN

BPMN (Business Process Model and Notation, нотация и модель бизнес-процессов) = система условных обозначений для моделирования бизнес-процессов.
В BPMN рассматривается функциональная последовательность работ.

Пример BPMN:

Нюансы

  • BPMN понимают и Бизнес и IT, при этом ни те ни другие не добавляет в схему того, что не нужно вторым
  • Избегайте "визуального программирования" — на схеме не должно быть блоков чисто технических.
  • Создание Бизнес-Процесса — от общего к частному
  • Изменение Бизнес-Процесса — от частного к общему
  • Когда кто-то кому-то что-то передаёт (н-р, документы), нет смысла обозначать саму передачу отдельной задачей, ибо сама стрелка между задачами как раз и обозначает передачу.
  • Если в текстовом описании БП (н-р, регламенте), которое вы переводите в BPMN, вы видите какие-то сроки
    И при этом с т.зр. БП эти сроки никак не влияют на последовательность действий (за несоблюдение сроков нет никаких санкций)
    , ТО мы сроки на схеме никак не рисуем.
    Т.е. если, например, в регламенте никак не указано, что конкретно должно происходить если мы не успеваем сделать какой-то документ к 20 мая (аннулируем? не аннулируем? исправляем и т.п.), то и отражать это на BPMN никак не нужно.
  • Если в текстовом описании БП, которое вы переводите в BPMN, в одном пункте указано 2+ действий, то очень внимательно отнеситесь к этому, возможно, что на схеме это имеем смысл отразить как отдельные последовательные задачи
  • После того как вы перевели какой-то текстовый регламент в BPMN, вы сделали только первый шаг. Для дальнейшей детализации диаграммы и превращения её в аналитическую, необходимо проводить опрос представителей ролей-участников БП.
    Типичные вопросы это уточняющие и проясняющие исключительные случаи:
    • как именно вы выполняете задачу?
    • что вы делаете, если не можете выполнить эту задачу?
    Потому что в процессе опроса может выяснится, что в выполнении задачи участвуют какие-то другие стороны, дополнительные информационные артефакты и прочее.
    И только после такого уточнения у вас появится возможность понимать где и как можно скорректировать БП.
  • TBD
С чем ознакомиться:
ПО для автоматизация бизнес-процессов в ИТ-системах на основе BPMN:
  • Camunda — BPMS-платформа. (Camunda Modeler, Community Platform — бесплатно. Enterprise Platform — платно).
    Полезные статьи, связанные с этим ПО:
UML

UML (Unified Modeling Language, унифицированный язык моделирования) = язык графического описания для объектного моделирования в области разработки ПО.

Часто встречаемыми (и наиболее полезными, IMHO) видами диаграмм являются:

  • диаграмма вариантов использования (use case diagram)
  • диаграмма последовательности (sequence diagram)

TBD

IDEF0
Эта нотация на практике толком не применима и бесполезна, ибо схема даже всего из 4-х блоков становится нечитабельной.
Даже с археологической точки зрения носит сомнительную ценность. Достаточно научиться их читать, бывают случаи когда других схем по системе просто нет.
Ресурсы:

IDEF0 (Icam DEFinition for Function Modeling) = методология функционального моделирования и графическая нотация, предназначенная для формализации и описания бизнес-процессов.
Традиционно применяется для описания процессов в укрупнённых блоках, с указанием связей между ними.
В IDEF0 рассматриваются логические отношения между работами, а не их временная последовательность.

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

Например, простая ежедневная операция — приготовление борща.

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

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

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