====== Следуйте правилам структурного моделирования ======
{{tag>подпроцесс развилка цикл}}
Используйте структурные блоки и подпроцессы.
===== ✔ Как надо =====
Последовательность:
Flow_1d01kn5
Flow_1d01kn5
Ветвление (ветвей может быть больше двух) - исключающее, параллельное, условно-параллельное:
Flow_0z0uapg
Flow_1cgid63
Flow_0z0uapg
Flow_1h7bips
Flow_1cgid63
Flow_1eu1jw3
Flow_1h7bips
Flow_1eu1jw3
Flow_0xwiydr
Flow_0iceljk
Flow_1xqvf2b
Flow_1f4plnb
Flow_0xwiydr
Flow_1xqvf2b
Flow_0iceljk
Flow_1f4plnb
Flow_0zcscws
Flow_0857kyb
Flow_1l6e5gv
Flow_0wxidzt
Flow_0wxidzt
Flow_0857kyb
Flow_0zcscws
Flow_1l6e5gv
Циклы - явный, простой, по объектам:
Flow_16nc07i
Flow_1m7p7xj
Flow_1m7p7xj
Flow_0d5a1qk
Flow_0d5a1qk
Flow_16nc07i
Подпроцессы - встроенный, вызов повторно-используемого процесса:
===== ✘ Как НЕ надо =====
Процесс зависнет на сходящейся параллельной развилке:
Flow_0e02mrs
Flow_0mh672n
Flow_0e02mrs
Flow_05ddike
Flow_0mh672n
Flow_0ny7lm8
Flow_0ny7lm8
Flow_0s1uvcp
Flow_0j1b3ve
Flow_0s1uvcp
Flow_0fniklm
Flow_05ddike
Flow_0j1b3ve
Flow_0fniklm
===== Примечания =====
Фундаментом разработки программного обеспечения является [[wpru>Структурное программирование]] -
набор правил, благодаря которым облегчается понимание программного кода, сокращается число ошибок, упрощается отладка и последующая модификация.
Структурное программирование запрещает произвольную передачу управления (оператор goto),
требуя компоновать программный код из структурных блоков (последовательность, ветвление, цикл), которые могут вкладываться друг в друга.
Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции).
Модель бизнес-процесса тоже является своего рода "программой", но только не для компьютера, а для организации, и существующей в виде диаграммы, а не текста программного кода.
Но проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны,
поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам.
Поэтому принципы структурного программирования следует применять и к моделированию процессов, с учетом некоторых особенностей:
* набор структурных блоков здесь шире, см. [[#как надо]]
* аналогом goto здесь является поток управления, не являющийся элементом какого-либо структурного блока
* как и в структурном программировании, блоки могут вкладываться друг в друга
* как и в структурном программировании, моделировать процессы следует сверху вниз с использованием подпроцессов и вызовов повторно-используемых действий
В отличие от программирования, принципы структурного моделирования - это рекомендация, а не требования.
Бывают сценарии, когда от них можно отступить, если это позволяет адекватно отобразить сложную логику, сделать схему процесса более компактной и понятной, см. [[#исключения]].
Принципы структурного моделирования очерчивают для аналитика "безопасную зону": пока вы им следуете -
в частности, у каждой расходящейся развилки есть парная к ней сходящаяся, и развилки аккуратно вложены одна в другую - вы можете быть уверены, что схема корректна.
Если приходится от этих принципах отступать, то ответственность за корректность и читаемость диаграммы полностью ложиться на вас, как на автора.
Такая гибкость является сильной стороной BPMN.
Для сравнения, в нотации BPEL принципы структурного моделирования реализованы жестко - отступить от них невозможно технически.
Например, если у расходящейся развилки нет парной сходящейся, то такая модель в этой нотации будет синтаксически некорректной.
Из-за такой жесткости BPEL проиграл в популярности BPMN.
Оказалось, что авторы и пользователи графических схем процессов ценят возможность соединить потоком управления произвольные элементы на диаграмме, которую предоставляет BPMN.
Главное этой возможностью не злоупотреблять.
===== Исключения =====
Flow_0n8m9ix
Flow_0n8m9ix
Flow_1xhg72f
Flow_17pu7ob
Flow_17pu7ob
Flow_13c21vj
Flow_0tg8ddl
Flow_13c21vj
Flow_0ehog1r
Flow_0ehog1r
Flow_1gx84dc
Flow_106bg20
Flow_1gx84dc
Flow_0tg8ddl
Flow_106bg20
Flow_1xhg72f
Flow_0lj9dyc
Flow_00jrems
Flow_0lj9dyc
Flow_071haj2
Flow_071haj2
Flow_0f5trtv
Flow_0chqe1h
Flow_0f5trtv
Flow_0enxt25
Flow_0enxt25
Flow_0k7r1mv
Flow_00jrems
Flow_1g2lqx6
Flow_1g2lqx6
Flow_0chqe1h
Flow_05h70bw
Flow_05h70bw
Flow_0k7r1mv
Flow_0lj9dyc
Flow_00jrems
Flow_0lj9dyc
Flow_071haj2
Flow_00jrems
Flow_1g2lqx6
Flow_071haj2
Flow_1dzriz5
Flow_1xcw0k4
Flow_1g2lqx6
Flow_1w4p2q1
Flow_1ppaez3
Flow_1w4p2q1
Flow_1dzriz5
Flow_1ppaez3
Flow_1xcw0k4
===== Смотри также =====
* [[do_not_save_on_gateways]]
===== Автор(ы) =====
--- //[[user:bell|Anatoly Belaychuk]] 2024-08-25 19:54//