Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:rule:structured_diagram [2024-08-25 18:19] – [Отредактирована диаграмма] Anatoly Belaychukru:rule:structured_diagram [2024-11-27 15:47] (текущий) – [✘ Как НЕ надо] Anatoly Belaychuk
Строка 1: Строка 1:
-====== 0-TBD Используйте структурные блоки ======+====== Следуйте правилам структурного моделирования ======
  
-{{tag>untagged}} +{{tag>подпроцесс развилка цикл}}
- +
-{{:ru:v_razrabotke.png?nolink&200|}} +
- +
-Тут описание правила+
  
 +Используйте структурные блоки и подпроцессы.
 ===== ✔ Как надо ===== ===== ✔ Как надо =====
  
Строка 278: Строка 275:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
 +
 +Подпроцессы - встроенный, вызов повторно-используемого процесса:
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
-<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1">+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1">
   <process id="Process_0l9y19e">   <process id="Process_0l9y19e">
-    <task id="Activity_0f3f86e"> +    <subProcess id="Activity_1l6q0zs" /> 
-      <outgoing>Flow_1d01kn5</outgoing>+    <callActivity id="Activity_17xsroo" /> 
 +  </process> 
 +  <bpmndi:BPMNDiagram id="BpmnDiagram_1"> 
 +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0l9y19e"> 
 +      <bpmndi:BPMNShape id="Activity_1vjyz0m_di" bpmnElement="Activity_17xsroo"> 
 +        <omgdc:Bounds x="380" y="50" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1kfbhje_di" bpmnElement="Activity_1l6q0zs"> 
 +        <omgdc:Bounds x="210" y="50" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +    </bpmndi:BPMNPlane> 
 +  </bpmndi:BPMNDiagram> 
 +  <bpmndi:BPMNDiagram id="BPMNDiagram_0y4p2pc"> 
 +    <bpmndi:BPMNPlane id="BPMNPlane_1oo2pm3" bpmnElement="Activity_1l6q0zs" /> 
 +  </bpmndi:BPMNDiagram> 
 +</definitions> 
 +</bpmnio> 
 +===== ✘ Как НЕ надо ===== 
 + 
 +Процесс зависнет на сходящейся параллельной развилке: 
 + 
 +<bpmnio type="bpmn"> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
 +  <process id="Process_02spwhn"> 
 +    <parallelGateway id="Gateway_078sx6b"> 
 +      <outgoing>Flow_0e02mrs</outgoing> 
 +      <outgoing>Flow_0mh672n</outgoing> 
 +    </parallelGateway> 
 +    <task id="Activity_0aai754"
 +      <incoming>Flow_0e02mrs</incoming
 +      <outgoing>Flow_05ddike</outgoing>
     </task>     </task>
-    <task id="Activity_1l6q0zs"> +    <sequenceFlow id="Flow_0e02mrs" sourceRef="Gateway_078sx6b" targetRef="Activity_0aai754" /> 
-      <incoming>Flow_1d01kn5</incoming>+    <task id="Activity_120ghig"> 
 +      <incoming>Flow_0mh672n</incoming
 +      <outgoing>Flow_0ny7lm8</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_1d01kn5" sourceRef="Activity_0f3f86e" targetRef="Activity_1l6q0zs" />+    <sequenceFlow id="Flow_0mh672n" sourceRef="Gateway_078sx6b" targetRef="Activity_120ghig" /
 +    <exclusiveGateway id="Gateway_1w2e8qr"> 
 +      <incoming>Flow_0ny7lm8</incoming> 
 +      <outgoing>Flow_0s1uvcp</outgoing> 
 +      <outgoing>Flow_0j1b3ve</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_0ny7lm8" sourceRef="Activity_120ghig" targetRef="Gateway_1w2e8qr" /> 
 +    <task id="Activity_0fkht20"> 
 +      <incoming>Flow_0s1uvcp</incoming> 
 +      <outgoing>Flow_0fniklm</outgoing> 
 +    </task> 
 +    <sequenceFlow id="Flow_0s1uvcp" sourceRef="Gateway_1w2e8qr" targetRef="Activity_0fkht20" /> 
 +    <sequenceFlow id="Flow_05ddike" sourceRef="Activity_0aai754" targetRef="Gateway_1ueoerv" /> 
 +    <sequenceFlow id="Flow_0j1b3ve" sourceRef="Gateway_1w2e8qr" targetRef="Gateway_1ueoerv" /> 
 +    <sequenceFlow id="Flow_0fniklm" sourceRef="Activity_0fkht20" targetRef="Gateway_1ueoerv" /> 
 +    <parallelGateway id="Gateway_1ueoerv"> 
 +      <incoming>Flow_05ddike</incoming> 
 +      <incoming>Flow_0j1b3ve</incoming> 
 +      <incoming>Flow_0fniklm</incoming> 
 +    </parallelGateway>
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
-    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0l9y19e"> +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn"> 
-      <bpmndi:BPMNShape id="Activity_0f3f86e_di" bpmnElement="Activity_0f3f86e"> +      <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> 
-        <omgdc:Bounds x="180" y="50" width="100" height="80" />+        <omgdc:Bounds x="245" y="135" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1l6q0zs_di" bpmnElement="Activity_1l6q0zs"> +      <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> 
-        <omgdc:Bounds x="330" y="50" width="100" height="80" />+        <omgdc:Bounds x="320" y="230" width="100" height="80" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="Flow_1d01kn5_di" bpmnElement="Flow_1d01kn5"> +      <bpmndi:BPMNShape id="Gateway_1w2e8qr_di" bpmnElement="Gateway_1w2e8qr" isMarkerVisible="true"> 
-        <omgdi:waypoint x="280" y="90" /> +        <omgdc:Bounds x="465" y="245" width="50" height="50" /> 
-        <omgdi:waypoint x="330" y="90" />+      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> 
 +        <omgdc:Bounds x="560" y="230" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> 
 +        <omgdc:Bounds x="585" y="135" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> 
 +        <omgdc:Bounds x="320" y="50" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> 
 +        <omgdi:waypoint x="270" y="135" /> 
 +        <omgdi:waypoint x="270" y="90" /> 
 +        <omgdi:waypoint x="320" y="90" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> 
 +        <omgdi:waypoint x="270" y="185" /> 
 +        <omgdi:waypoint x="270" y="270" /> 
 +        <omgdi:waypoint x="320" y="270" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0ny7lm8_di" bpmnElement="Flow_0ny7lm8"> 
 +        <omgdi:waypoint x="420" y="270" /> 
 +        <omgdi:waypoint x="465" y="270" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0s1uvcp_di" bpmnElement="Flow_0s1uvcp"> 
 +        <omgdi:waypoint x="515" y="270" /> 
 +        <omgdi:waypoint x="560" y="270" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> 
 +        <omgdi:waypoint x="420" y="90" /> 
 +        <omgdi:waypoint x="610" y="90" /> 
 +        <omgdi:waypoint x="610" y="135" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0j1b3ve_di" bpmnElement="Flow_0j1b3ve"> 
 +        <omgdi:waypoint x="490" y="245" /> 
 +        <omgdi:waypoint x="490" y="160" /> 
 +        <omgdi:waypoint x="585" y="160" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0fniklm_di" bpmnElement="Flow_0fniklm"> 
 +        <omgdi:waypoint x="610" y="230" /> 
 +        <omgdi:waypoint x="610" y="185" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>     </bpmndi:BPMNPlane>
Строка 307: Строка 398:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
 +
 +===== Примечания =====
 +
 +Фундаментом разработки программного обеспечения является [[wpru>Структурное программирование]] -
 +набор правил, благодаря которым облегчается понимание программного кода, сокращается число ошибок, упрощается отладка и последующая модификация.
 +Структурное программирование запрещает произвольную передачу управления (оператор goto), 
 +требуя компоновать программный код из структурных блоков (последовательность, ветвление, цикл), которые могут вкладываться друг в друга.
 +Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции).
 +
 +Модель бизнес-процесса тоже является своего рода "программой", но только не для компьютера, а для организации, и существующей в виде диаграммы, а не текста программного кода.
 +Но проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны, 
 +поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам.
 +
 +Поэтому принципы структурного программирования следует применять и к моделированию процессов, с учетом некоторых особенностей:
 +
 +  * набор структурных блоков здесь шире, см. [[#как надо]]
 +  * аналогом goto здесь является поток управления, не являющийся элементом какого-либо структурного блока
 +  * как и в структурном программировании, блоки могут вкладываться друг в друга
 +  * как и в структурном программировании, моделировать процессы следует сверху вниз с использованием подпроцессов и вызовов повторно-используемых действий
 +
 +В отличие от программирования, принципы структурного моделирования - это рекомендация, а не требования.
 +Бывают сценарии, когда от них можно отступить, если это позволяет адекватно отобразить сложную логику, сделать схему процесса более компактной и понятной, см. [[#исключения]].
 +Принципы структурного моделирования очерчивают для аналитика "безопасную зону": пока вы им следуете - 
 +в частности, у каждой расходящейся развилки есть парная к ней сходящаяся, и развилки аккуратно вложены одна в другую - вы можете быть уверены, что схема корректна.
 +Если приходится от этих принципах отступать, то ответственность за корректность и читаемость диаграммы полностью ложиться на вас, как на автора.
 +Такая гибкость является сильной стороной BPMN.
 +
 +Для сравнения, в нотации BPEL принципы структурного моделирования реализованы жестко - отступить от них невозможно технически.
 +Например, если у расходящейся развилки нет парной сходящейся, то такая модель в этой нотации будет синтаксически некорректной.
 +Из-за такой жесткости BPEL проиграл в популярности BPMN.
 +Оказалось, что авторы и пользователи графических схем процессов ценят возможность соединить потоком управления произвольные элементы на диаграмме, которую предоставляет BPMN.
 +Главное этой возможностью не злоупотреблять.
 +===== Исключения =====
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1">
-  <process id="Process_0l9y19e"> +  <process id="Process_1i233bj"
-    <task id="Activity_0f3f86e"> +    <startEvent id="Event_163b7zd"> 
-      <outgoing>Flow_1d01kn5</outgoing>+      <outgoing>Flow_0n8m9ix</outgoing> 
 +    </startEvent
 +    <task id="Activity_0hrif2x"
 +      <incoming>Flow_0n8m9ix</incoming> 
 +      <incoming>Flow_1xhg72f</incoming
 +      <outgoing>Flow_17pu7ob</outgoing>
     </task>     </task>
-    <task id="Activity_1l6q0zs"> +    <sequenceFlow id="Flow_0n8m9ix" sourceRef="Event_163b7zd" targetRef="Activity_0hrif2x" /> 
-      <incoming>Flow_1d01kn5</incoming>+    <exclusiveGateway id="Gateway_16o8o9p"> 
 +      <incoming>Flow_17pu7ob</incoming> 
 +      <outgoing>Flow_13c21vj</outgoing> 
 +      <outgoing>Flow_0tg8ddl</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_17pu7ob" sourceRef="Activity_0hrif2x" targetRef="Gateway_16o8o9p" /> 
 +    <task id="Activity_1clpbmc"> 
 +      <incoming>Flow_13c21vj</incoming
 +      <outgoing>Flow_0ehog1r</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_1d01kn5" sourceRef="Activity_0f3f86e" targetRef="Activity_1l6q0zs" />+    <sequenceFlow id="Flow_13c21vj" sourceRef="Gateway_16o8o9p" targetRef="Activity_1clpbmc" /> 
 +    <exclusiveGateway id="Gateway_14dqayh"> 
 +      <incoming>Flow_0ehog1r</incoming> 
 +      <outgoing>Flow_1gx84dc</outgoing> 
 +      <outgoing>Flow_106bg20</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_0ehog1r" sourceRef="Activity_1clpbmc" targetRef="Gateway_14dqayh" /> 
 +    <endEvent id="Event_06rmoif"> 
 +      <incoming>Flow_1gx84dc</incoming> 
 +    </endEvent> 
 +    <sequenceFlow id="Flow_1gx84dc" sourceRef="Gateway_14dqayh" targetRef="Event_06rmoif" /> 
 +    <exclusiveGateway id="Gateway_1bkljxx"> 
 +      <incoming>Flow_0tg8ddl</incoming> 
 +      <incoming>Flow_106bg20</incoming> 
 +      <outgoing>Flow_1xhg72f</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_0tg8ddl" sourceRef="Gateway_16o8o9p" targetRef="Gateway_1bkljxx" /> 
 +    <sequenceFlow id="Flow_106bg20" sourceRef="Gateway_14dqayh" targetRef="Gateway_1bkljxx" /> 
 +    <sequenceFlow id="Flow_1xhg72f" sourceRef="Gateway_1bkljxx" targetRef="Activity_0hrif2x" />
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
-    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0l9y19e"> +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
-      <bpmndi:BPMNShape id="Activity_0f3f86e_di" bpmnElement="Activity_0f3f86e"> +      <bpmndi:BPMNShape id="Activity_0hrif2x_di" bpmnElement="Activity_0hrif2x"> 
-        <omgdc:Bounds x="180" y="50" width="100" height="80" />+        <omgdc:Bounds x="320" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1l6q0zs_di" bpmnElement="Activity_1l6q0zs"> +      <bpmndi:BPMNShape id="Gateway_16o8o9p_di" bpmnElement="Gateway_16o8o9p" isMarkerVisible="true"> 
-        <omgdc:Bounds x="330" y="50" width="100" height="80" />+        <omgdc:Bounds x="465" y="95" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="Flow_1d01kn5_di" bpmnElement="Flow_1d01kn5"> +      <bpmndi:BPMNShape id="Activity_1clpbmc_di" bpmnElement="Activity_1clpbmc"> 
-        <omgdi:waypoint x="280" y="90" /> +        <omgdc:Bounds x="550" y="80" width="100" height="80" /> 
-        <omgdi:waypoint x="330" y="90" />+      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_14dqayh_di" bpmnElement="Gateway_14dqayh" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="685" y="95" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_06rmoif_di" bpmnElement="Event_06rmoif"> 
 +        <omgdc:Bounds x="772" y="102" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1bkljxx_di" bpmnElement="Gateway_1bkljxx" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="465" y="5" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_163b7zd_di" bpmnElement="Event_163b7zd"> 
 +        <omgdc:Bounds x="242" y="102" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_0n8m9ix_di" bpmnElement="Flow_0n8m9ix"> 
 +        <omgdi:waypoint x="278" y="120" /> 
 +        <omgdi:waypoint x="320" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_17pu7ob_di" bpmnElement="Flow_17pu7ob"> 
 +        <omgdi:waypoint x="420" y="120" /> 
 +        <omgdi:waypoint x="465" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_13c21vj_di" bpmnElement="Flow_13c21vj"> 
 +        <omgdi:waypoint x="515" y="120" /> 
 +        <omgdi:waypoint x="550" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0ehog1r_di" bpmnElement="Flow_0ehog1r"> 
 +        <omgdi:waypoint x="650" y="120" /> 
 +        <omgdi:waypoint x="685" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1gx84dc_di" bpmnElement="Flow_1gx84dc"> 
 +        <omgdi:waypoint x="735" y="120" /> 
 +        <omgdi:waypoint x="772" y="120" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0tg8ddl_di" bpmnElement="Flow_0tg8ddl"> 
 +        <omgdi:waypoint x="490" y="95" /> 
 +        <omgdi:waypoint x="490" y="55" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_106bg20_di" bpmnElement="Flow_106bg20"> 
 +        <omgdi:waypoint x="710" y="95" /> 
 +        <omgdi:waypoint x="710" y="30" /> 
 +        <omgdi:waypoint x="515" y="30" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1xhg72f_di" bpmnElement="Flow_1xhg72f"> 
 +        <omgdi:waypoint x="465" y="30" /> 
 +        <omgdi:waypoint x="370" y="30" /> 
 +        <omgdi:waypoint x="370" y="80" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>     </bpmndi:BPMNPlane>
Строка 340: Строка 540:
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1">
-  <process id="Process_0l9y19e"> +  <process id="Process_1i233bj"
-    <task id="Activity_0f3f86e"> +    <parallelGateway id="Gateway_0oi9i0o"> 
-      <outgoing>Flow_1d01kn5</outgoing>+      <outgoing>Flow_0lj9dyc</outgoing> 
 +      <outgoing>Flow_00jrems</outgoing> 
 +    </parallelGateway
 +    <task id="Activity_1hal76q"
 +      <incoming>Flow_0lj9dyc</incoming
 +      <outgoing>Flow_071haj2</outgoing>
     </task>     </task>
-    <task id="Activity_1l6q0zs"> +    <sequenceFlow id="Flow_0lj9dyc" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" /> 
-      <incoming>Flow_1d01kn5</incoming>+    <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" /> 
 +    <parallelGateway id="Gateway_1l1jd6x"> 
 +      <incoming>Flow_071haj2</incoming> 
 +      <outgoing>Flow_0f5trtv</outgoing> 
 +      <outgoing>Flow_0chqe1h</outgoing> 
 +    </parallelGateway> 
 +    <task id="Activity_0bj6qfa"> 
 +      <incoming>Flow_0f5trtv</incoming
 +      <outgoing>Flow_0enxt25</outgoing>
     </task>     </task>
-    <sequenceFlow id="Flow_1d01kn5" sourceRef="Activity_0f3f86e" targetRef="Activity_1l6q0zs" />+    <sequenceFlow id="Flow_0f5trtv" sourceRef="Gateway_1l1jd6x" targetRef="Activity_0bj6qfa" /> 
 +    <sequenceFlow id="Flow_0enxt25" sourceRef="Activity_0bj6qfa" targetRef="Gateway_00n1v4l" /> 
 +    <parallelGateway id="Gateway_00n1v4l"> 
 +      <incoming>Flow_0enxt25</incoming> 
 +      <incoming>Flow_0k7r1mv</incoming> 
 +    </parallelGateway> 
 +    <task id="Activity_1lpdz6f"> 
 +      <incoming>Flow_00jrems</incoming> 
 +      <outgoing>Flow_1g2lqx6</outgoing> 
 +    </task> 
 +    <sequenceFlow id="Flow_00jrems" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1lpdz6f" /> 
 +    <sequenceFlow id="Flow_1g2lqx6" sourceRef="Activity_1lpdz6f" targetRef="Gateway_0t27naq" /> 
 +    <parallelGateway id="Gateway_0t27naq"> 
 +      <incoming>Flow_1g2lqx6</incoming> 
 +      <incoming>Flow_0chqe1h</incoming> 
 +      <outgoing>Flow_05h70bw</outgoing> 
 +    </parallelGateway> 
 +    <task id="Activity_1w0cvhy"> 
 +      <incoming>Flow_05h70bw</incoming> 
 +      <outgoing>Flow_0k7r1mv</outgoing> 
 +    </task> 
 +    <sequenceFlow id="Flow_05h70bw" sourceRef="Gateway_0t27naq" targetRef="Activity_1w0cvhy" /> 
 +    <sequenceFlow id="Flow_0k7r1mv" sourceRef="Activity_1w0cvhy" targetRef="Gateway_00n1v4l" /> 
 +    <sequenceFlow id="Flow_0chqe1h" sourceRef="Gateway_1l1jd6x" targetRef="Gateway_0t27naq" />
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
-    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0l9y19e"> +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
-      <bpmndi:BPMNShape id="Activity_0f3f86e_di" bpmnElement="Activity_0f3f86e"> +      <bpmndi:BPMNShape id="Gateway_0dswxnz_di" bpmnElement="Gateway_0oi9i0o"> 
-        <omgdc:Bounds x="180" y="50" width="100" height="80" />+        <omgdc:Bounds x="255" y="125" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1l6q0zs_di" bpmnElement="Activity_1l6q0zs"> +      <bpmndi:BPMNShape id="Gateway_0qpi0u3_di" bpmnElement="Gateway_00n1v4l"> 
-        <omgdc:Bounds x="330" y="50" width="100" height="80" />+        <omgdc:Bounds x="685" y="125" width="50" height="50" />
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="Flow_1d01kn5_di" bpmnElement="Flow_1d01kn5"> +      <bpmndi:BPMNShape id="Activity_1lpdz6f_di" bpmnElement="Activity_1lpdz6f"> 
-        <omgdi:waypoint x="280" y="90" /> +        <omgdc:Bounds x="330" y="40" width="100" height="80" /> 
-        <omgdi:waypoint x="330" y="90" />+      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1i2ei57_di" bpmnElement="Gateway_0t27naq"> 
 +        <omgdc:Bounds x="475" y="55" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1w0cvhy_di" bpmnElement="Activity_1w0cvhy"> 
 +        <omgdc:Bounds x="560" y="40" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1hal76q_di" bpmnElement="Activity_1hal76q"> 
 +        <omgdc:Bounds x="330" y="180" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_0hggxgh_di" bpmnElement="Gateway_1l1jd6x"> 
 +        <omgdc:Bounds x="475" y="195" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_0bj6qfa_di" bpmnElement="Activity_0bj6qfa"> 
 +        <omgdc:Bounds x="560" y="180" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_00jrems_di" bpmnElement="Flow_00jrems"> 
 +        <omgdi:waypoint x="280" y="125" /> 
 +        <omgdi:waypoint x="280" y="80" /> 
 +        <omgdi:waypoint x="330" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0k7r1mv_di" bpmnElement="Flow_0k7r1mv"> 
 +        <omgdi:waypoint x="660" y="80" /> 
 +        <omgdi:waypoint x="710" y="80" /> 
 +        <omgdi:waypoint x="710" y="125" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0chqe1h_di" bpmnElement="Flow_0chqe1h"> 
 +        <omgdi:waypoint x="500" y="195" /> 
 +        <omgdi:waypoint x="500" y="105" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0lj9dyc_di" bpmnElement="Flow_0lj9dyc"> 
 +        <omgdi:waypoint x="280" y="175" /> 
 +        <omgdi:waypoint x="280" y="220" /> 
 +        <omgdi:waypoint x="330" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0enxt25_di" bpmnElement="Flow_0enxt25"> 
 +        <omgdi:waypoint x="660" y="220" /> 
 +        <omgdi:waypoint x="710" y="220" /> 
 +        <omgdi:waypoint x="710" y="175" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1g2lqx6_di" bpmnElement="Flow_1g2lqx6"> 
 +        <omgdi:waypoint x="430" y="80" /> 
 +        <omgdi:waypoint x="475" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_05h70bw_di" bpmnElement="Flow_05h70bw"> 
 +        <omgdi:waypoint x="525" y="80" /> 
 +        <omgdi:waypoint x="560" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_071haj2_di" bpmnElement="Flow_071haj2"> 
 +        <omgdi:waypoint x="430" y="220" /> 
 +        <omgdi:waypoint x="475" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_0f5trtv_di" bpmnElement="Flow_0f5trtv"> 
 +        <omgdi:waypoint x="525" y="220" /> 
 +        <omgdi:waypoint x="560" y="220" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>     </bpmndi:BPMNPlane>
Строка 365: Строка 655:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
-===== ✘ Как НЕ надо ===== 
  
-Тут антипаттерны (диаграммы) +<bpmnio type="bpmn"> 
- +<?xml version="1.0" encoding="UTF-8"?> 
-===== Примечания ===== +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> 
- +  <process id="Process_1i233bj"> 
-Фундаментом разработки программного обеспечения является [[https://ru.wikipedia.org/wiki/Структурное_программирование|структурное программирование]] - +    <parallelGateway id="Gateway_0oi9i0o"> 
-набор правил, позволивший значительно облегчить понимание программного кода, сократить число ошибок, упростить отладку и последующую модификацию. +      <outgoing>Flow_0lj9dyc</outgoing> 
-Структурное программирование запрещает произвольную передачу управления (оператор goto),  +      <outgoing>Flow_00jrems</outgoing> 
-требуя компоновать программный код из структурных блоков - последовательность, ветвление, цикл, которые могут вкладываться друг в друга. +    </parallelGateway> 
-Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции). +    <task id="Activity_1hal76q"> 
- +      <incoming>Flow_0lj9dyc</incoming> 
-Модель бизнес-процесса является своего рода "программой", только не для компьютера, а для организации, и исходно существующей в виде диаграммы, а не сплошного кода. +      <outgoing>Flow_071haj2</outgoing> 
-Проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны,  +    </task> 
-поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам. +    <sequenceFlow id="Flow_0lj9dycsourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" /> 
- +    <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" /> 
-Принципы структурного программирования, доказавшие свою эффективность, можно и нужно применять и к моделированию процессов: +    <task id="Activity_1lpdz6f"> 
- +      <incoming>Flow_00jrems</incoming> 
-  * аналогом goto здесь является поток управления, не следующий +      <outgoing>Flow_1g2lqx6</outgoing> 
-   +    </task> 
- +    <sequenceFlow id="Flow_00jrems" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1lpdz6f" /> 
-===== Исключения ===== +    <sequenceFlow id="Flow_1g2lqx6" sourceRef="Activity_1lpdz6f" targetRef="Gateway_0t27naq" /> 
- +    <exclusiveGateway id="Gateway_1l1jd6x"> 
-Исключения из указанного выше правила (если есть)+      <incoming>Flow_071haj2</incoming> 
 +      <outgoing>Flow_1dzriz5</outgoing> 
 +      <outgoing>Flow_1xcw0k4</outgoing> 
 +    </exclusiveGateway> 
 +    <exclusiveGateway id="Gateway_0t27naq"> 
 +      <incoming>Flow_1g2lqx6</incoming> 
 +      <outgoing>Flow_1w4p2q1</outgoing> 
 +      <outgoing>Flow_1ppaez3</outgoing> 
 +    </exclusiveGateway> 
 +    <sequenceFlow id="Flow_1w4p2q1" sourceRef="Gateway_0t27naq" targetRef="Event_1w42t7g" /> 
 +    <endEvent id="Event_1w42t7g"> 
 +      <incoming>Flow_1w4p2q1</incoming> 
 +      <incoming>Flow_1dzriz5</incoming> 
 +      <terminateEventDefinition id="TerminateEventDefinition_1unxigt" /> 
 +    </endEvent> 
 +    <sequenceFlow id="Flow_1dzriz5" sourceRef="Gateway_1l1jd6x" targetRef="Event_1w42t7g" /> 
 +    <sequenceFlow id="Flow_1ppaez3" sourceRef="Gateway_0t27naq" targetRef="Gateway_0k1m3o9" /> 
 +    <parallelGateway id="Gateway_0k1m3o9"> 
 +      <incoming>Flow_1ppaez3</incoming> 
 +      <incoming>Flow_1xcw0k4</incoming> 
 +    </parallelGateway> 
 +    <sequenceFlow id="Flow_1xcw0k4" sourceRef="Gateway_1l1jd6x" targetRef="Gateway_0k1m3o9" /> 
 +  </process> 
 +  <bpmndi:BPMNDiagram id="BpmnDiagram_1"> 
 +    <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> 
 +      <bpmndi:BPMNShape id="Gateway_0dswxnz_di" bpmnElement="Gateway_0oi9i0o"> 
 +        <omgdc:Bounds x="255" y="125" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1hal76q_di" bpmnElement="Activity_1hal76q"> 
 +        <omgdc:Bounds x="330" y="180" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Activity_1lpdz6f_di" bpmnElement="Activity_1lpdz6f"> 
 +        <omgdc:Bounds x="330" y="40" width="100" height="80" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1yo9xyz_di" bpmnElement="Gateway_1l1jd6x" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="475" y="195" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_0k3jdwc_di" bpmnElement="Gateway_0t27naq" isMarkerVisible="true"> 
 +        <omgdc:Bounds x="475" y="55" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Event_1syedrw_di" bpmnElement="Event_1w42t7g"> 
 +        <omgdc:Bounds x="482" y="132" width="36" height="36" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNShape id="Gateway_1fuwhec_di" bpmnElement="Gateway_0k1m3o9"> 
 +        <omgdc:Bounds x="565" y="125" width="50" height="50" /> 
 +      </bpmndi:BPMNShape> 
 +      <bpmndi:BPMNEdge id="Flow_0lj9dyc_di" bpmnElement="Flow_0lj9dyc"> 
 +        <omgdi:waypoint x="280" y="175" /> 
 +        <omgdi:waypoint x="280" y="220" /> 
 +        <omgdi:waypoint x="330" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_071haj2_di" bpmnElement="Flow_071haj2"> 
 +        <omgdi:waypoint x="430" y="220" /> 
 +        <omgdi:waypoint x="475" y="220" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_00jrems_di" bpmnElement="Flow_00jrems"> 
 +        <omgdi:waypoint x="280" y="125" /> 
 +        <omgdi:waypoint x="280" y="80" /> 
 +        <omgdi:waypoint x="330" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1g2lqx6_di" bpmnElement="Flow_1g2lqx6"> 
 +        <omgdi:waypoint x="430" y="80" /> 
 +        <omgdi:waypoint x="475" y="80" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1w4p2q1_di" bpmnElement="Flow_1w4p2q1"> 
 +        <omgdi:waypoint x="500" y="105" /> 
 +        <omgdi:waypoint x="500" y="132" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1dzriz5_di" bpmnElement="Flow_1dzriz5"> 
 +        <omgdi:waypoint x="500" y="195" /> 
 +        <omgdi:waypoint x="500" y="168" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1ppaez3_di" bpmnElement="Flow_1ppaez3"> 
 +        <omgdi:waypoint x="525" y="80" /> 
 +        <omgdi:waypoint x="590" y="80" /> 
 +        <omgdi:waypoint x="590" y="125" /> 
 +      </bpmndi:BPMNEdge> 
 +      <bpmndi:BPMNEdge id="Flow_1xcw0k4_di" bpmnElement="Flow_1xcw0k4"> 
 +        <omgdi:waypoint x="525" y="220" /> 
 +        <omgdi:waypoint x="590" y="220" /> 
 +        <omgdi:waypoint x="590" y="175" /> 
 +      </bpmndi:BPMNEdge> 
 +    </bpmndi:BPMNPlane> 
 +  </bpmndi:BPMNDiagram> 
 +</definitions> 
 +</bpmnio>
  
 ===== Смотри также ===== ===== Смотри также =====
  
-Тут ссылки на страницы со схожим контентом (этот раздел опционален)+  * [[do_not_save_on_gateways]]
  
 ===== Автор(ы) ===== ===== Автор(ы) =====
  
-Тут подпись + --- //[[user:bell|Anatoly Belaychuk]] 2024-08-25 19:54//