====== Следуйте правилам структурного моделирования ====== {{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//