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

/ АНАЛИЗ: + АНАЛИЗ + Стейкхолдеры - Нотации | Приобщиться к мудрости | Инструменты | PlantUML, личные примеры. | Методы анализа и нотации | BPMN | UML | IDEF0 + Сервисы АРХИТЕКТУРА ДАННЫЕ DevOps Gaming Библиотека ПРОЦЕССЫ ТЕСТИРОВАНИЕ
Графические нотации
latest update of the page: 27-01-2024, 09:53 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)

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

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

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

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

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

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

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