Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
ru:rule:structured_diagram [2024-08-25 18:36] – [✘ Как НЕ надо] Anatoly Belaychuk | ru:rule:structured_diagram [2024-11-27 15:47] (текущий) – [✘ Как НЕ надо] Anatoly Belaychuk |
---|
====== 0-TBD Используйте структурные блоки ====== | ====== Следуйте правилам структурного моделирования ====== |
| |
{{tag>untagged}} | {{tag>подпроцесс развилка цикл}} |
| |
{{:ru:v_razrabotke.png?nolink&200|}} | |
| |
Тут описание правила | |
| |
| Используйте структурные блоки и подпроцессы. |
===== ✔ Как надо ===== | ===== ✔ Как надо ===== |
| |
<bpmndi:BPMNDiagram id="BpmnDiagram_1"> | <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
<bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn"> | <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_02spwhn"> |
| <bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> |
| <omgdc:Bounds x="245" y="135" width="50" height="50" /> |
| </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> | <bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> |
<omgdc:Bounds x="320" y="230" width="100" height="80" /> | <omgdc:Bounds x="320" y="230" width="100" height="80" /> |
<bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> | <bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> |
<omgdc:Bounds x="560" y="230" width="100" height="80" /> | <omgdc:Bounds x="560" y="230" width="100" height="80" /> |
</bpmndi:BPMNShape> | |
<bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> | |
<omgdc:Bounds x="245" y="135" width="50" height="50" /> | |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> | <bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> | <bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> |
<omgdc:Bounds x="320" y="20" width="100" height="80" /> | <omgdc:Bounds x="320" y="50" width="100" height="80" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> | <bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> |
<omgdi:waypoint x="270" y="135" /> | <omgdi:waypoint x="270" y="135" /> |
<omgdi:waypoint x="270" y="60" /> | <omgdi:waypoint x="270" y="90" /> |
<omgdi:waypoint x="320" y="60" /> | <omgdi:waypoint x="320" y="90" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> | <bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> | <bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> |
<omgdi:waypoint x="420" y="60" /> | <omgdi:waypoint x="420" y="90" /> |
<omgdi:waypoint x="610" y="60" /> | <omgdi:waypoint x="610" y="90" /> |
<omgdi:waypoint x="610" y="135" /> | <omgdi:waypoint x="610" y="135" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
</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_02spwhn"> | <process id="Process_1i233bj"> |
<parallelGateway id="Gateway_078sx6b"> | <startEvent id="Event_163b7zd"> |
<outgoing>Flow_0e02mrs</outgoing> | <outgoing>Flow_0n8m9ix</outgoing> |
<outgoing>Flow_0mh672n</outgoing> | </startEvent> |
</parallelGateway> | <task id="Activity_0hrif2x"> |
<task id="Activity_0aai754"> | <incoming>Flow_0n8m9ix</incoming> |
<incoming>Flow_0e02mrs</incoming> | <incoming>Flow_1xhg72f</incoming> |
<outgoing>Flow_05ddike</outgoing> | <outgoing>Flow_17pu7ob</outgoing> |
</task> | </task> |
<sequenceFlow id="Flow_0e02mrs" sourceRef="Gateway_078sx6b" targetRef="Activity_0aai754" /> | <sequenceFlow id="Flow_0n8m9ix" sourceRef="Event_163b7zd" targetRef="Activity_0hrif2x" /> |
<task id="Activity_120ghig"> | <exclusiveGateway id="Gateway_16o8o9p"> |
<incoming>Flow_0mh672n</incoming> | <incoming>Flow_17pu7ob</incoming> |
<outgoing>Flow_0ny7lm8</outgoing> | <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_0mh672n" sourceRef="Gateway_078sx6b" targetRef="Activity_120ghig" /> | <sequenceFlow id="Flow_13c21vj" sourceRef="Gateway_16o8o9p" targetRef="Activity_1clpbmc" /> |
<exclusiveGateway id="Gateway_1w2e8qr"> | <exclusiveGateway id="Gateway_14dqayh"> |
<incoming>Flow_0ny7lm8</incoming> | <incoming>Flow_0ehog1r</incoming> |
<outgoing>Flow_0s1uvcp</outgoing> | <outgoing>Flow_1gx84dc</outgoing> |
<outgoing>Flow_0j1b3ve</outgoing> | <outgoing>Flow_106bg20</outgoing> |
</exclusiveGateway> | </exclusiveGateway> |
<sequenceFlow id="Flow_0ny7lm8" sourceRef="Activity_120ghig" targetRef="Gateway_1w2e8qr" /> | <sequenceFlow id="Flow_0ehog1r" sourceRef="Activity_1clpbmc" targetRef="Gateway_14dqayh" /> |
<task id="Activity_0fkht20"> | <endEvent id="Event_06rmoif"> |
<incoming>Flow_0s1uvcp</incoming> | <incoming>Flow_1gx84dc</incoming> |
<outgoing>Flow_0fniklm</outgoing> | </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> |
| <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
| <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> |
| <bpmndi:BPMNShape id="Activity_0hrif2x_di" bpmnElement="Activity_0hrif2x"> |
| <omgdc:Bounds x="320" y="80" width="100" height="80" /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Gateway_16o8o9p_di" bpmnElement="Gateway_16o8o9p" isMarkerVisible="true"> |
| <omgdc:Bounds x="465" y="95" width="50" height="50" /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Activity_1clpbmc_di" bpmnElement="Activity_1clpbmc"> |
| <omgdc:Bounds x="550" y="80" width="100" height="80" /> |
| </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:BPMNPlane> |
| </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_1i233bj"> |
| <parallelGateway id="Gateway_0oi9i0o"> |
| <outgoing>Flow_0lj9dyc</outgoing> |
| <outgoing>Flow_00jrems</outgoing> |
| </parallelGateway> |
| <task id="Activity_1hal76q"> |
| <incoming>Flow_0lj9dyc</incoming> |
| <outgoing>Flow_071haj2</outgoing> |
</task> | </task> |
<sequenceFlow id="Flow_0s1uvcp" sourceRef="Gateway_1w2e8qr" targetRef="Activity_0fkht20" /> | <sequenceFlow id="Flow_0lj9dyc" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" /> |
<sequenceFlow id="Flow_05ddike" sourceRef="Activity_0aai754" targetRef="Gateway_1ueoerv" /> | <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" /> |
<sequenceFlow id="Flow_0j1b3ve" sourceRef="Gateway_1w2e8qr" targetRef="Gateway_1ueoerv" /> | <parallelGateway id="Gateway_1l1jd6x"> |
<sequenceFlow id="Flow_0fniklm" sourceRef="Activity_0fkht20" targetRef="Gateway_1ueoerv" /> | <incoming>Flow_071haj2</incoming> |
<parallelGateway id="Gateway_1ueoerv"> | <outgoing>Flow_0f5trtv</outgoing> |
<incoming>Flow_05ddike</incoming> | <outgoing>Flow_0chqe1h</outgoing> |
<incoming>Flow_0j1b3ve</incoming> | |
<incoming>Flow_0fniklm</incoming> | |
</parallelGateway> | </parallelGateway> |
| <task id="Activity_0bj6qfa"> |
| <incoming>Flow_0f5trtv</incoming> |
| <outgoing>Flow_0enxt25</outgoing> |
| </task> |
| <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_02spwhn"> | <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1i233bj"> |
<bpmndi:BPMNShape id="Activity_120ghig_di" bpmnElement="Activity_120ghig"> | <bpmndi:BPMNShape id="Gateway_0dswxnz_di" bpmnElement="Gateway_0oi9i0o"> |
<omgdc:Bounds x="320" y="230" width="100" height="80" /> | <omgdc:Bounds x="255" y="125" width="50" height="50" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_1w2e8qr_di" bpmnElement="Gateway_1w2e8qr" isMarkerVisible="true"> | <bpmndi:BPMNShape id="Gateway_0qpi0u3_di" bpmnElement="Gateway_00n1v4l"> |
<omgdc:Bounds x="465" y="245" width="50" height="50" /> | <omgdc:Bounds x="685" y="125" width="50" height="50" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Activity_0fkht20_di" bpmnElement="Activity_0fkht20"> | <bpmndi:BPMNShape id="Activity_1lpdz6f_di" bpmnElement="Activity_1lpdz6f"> |
<omgdc:Bounds x="560" y="230" width="100" height="80" /> | <omgdc:Bounds x="330" y="40" width="100" height="80" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_15k0q64_di" bpmnElement="Gateway_078sx6b"> | <bpmndi:BPMNShape id="Gateway_1i2ei57_di" bpmnElement="Gateway_0t27naq"> |
<omgdc:Bounds x="245" y="135" width="50" height="50" /> | <omgdc:Bounds x="475" y="55" width="50" height="50" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_17pm0bl_di" bpmnElement="Gateway_1ueoerv"> | <bpmndi:BPMNShape id="Activity_1w0cvhy_di" bpmnElement="Activity_1w0cvhy"> |
<omgdc:Bounds x="585" y="135" width="50" height="50" /> | <omgdc:Bounds x="560" y="40" width="100" height="80" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Activity_0aai754_di" bpmnElement="Activity_0aai754"> | <bpmndi:BPMNShape id="Activity_1hal76q_di" bpmnElement="Activity_1hal76q"> |
<omgdc:Bounds x="320" y="20" width="100" height="80" /> | <omgdc:Bounds x="330" y="180" width="100" height="80" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNEdge id="Flow_0e02mrs_di" bpmnElement="Flow_0e02mrs"> | <bpmndi:BPMNShape id="Gateway_0hggxgh_di" bpmnElement="Gateway_1l1jd6x"> |
<omgdi:waypoint x="270" y="135" /> | <omgdc:Bounds x="475" y="195" width="50" height="50" /> |
<omgdi:waypoint x="270" y="60" /> | </bpmndi:BPMNShape> |
<omgdi:waypoint x="320" y="60" /> | <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> |
<bpmndi:BPMNEdge id="Flow_0mh672n_di" bpmnElement="Flow_0mh672n"> | <bpmndi:BPMNEdge id="Flow_0k7r1mv_di" bpmnElement="Flow_0k7r1mv"> |
<omgdi:waypoint x="270" y="185" /> | <omgdi:waypoint x="660" y="80" /> |
<omgdi:waypoint x="270" y="270" /> | <omgdi:waypoint x="710" y="80" /> |
<omgdi:waypoint x="320" y="270" /> | <omgdi:waypoint x="710" y="125" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0ny7lm8_di" bpmnElement="Flow_0ny7lm8"> | <bpmndi:BPMNEdge id="Flow_0chqe1h_di" bpmnElement="Flow_0chqe1h"> |
<omgdi:waypoint x="420" y="270" /> | <omgdi:waypoint x="500" y="195" /> |
<omgdi:waypoint x="465" y="270" /> | <omgdi:waypoint x="500" y="105" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0s1uvcp_di" bpmnElement="Flow_0s1uvcp"> | <bpmndi:BPMNEdge id="Flow_0lj9dyc_di" bpmnElement="Flow_0lj9dyc"> |
<omgdi:waypoint x="515" y="270" /> | <omgdi:waypoint x="280" y="175" /> |
<omgdi:waypoint x="560" y="270" /> | <omgdi:waypoint x="280" y="220" /> |
| <omgdi:waypoint x="330" y="220" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_05ddike_di" bpmnElement="Flow_05ddike"> | <bpmndi:BPMNEdge id="Flow_0enxt25_di" bpmnElement="Flow_0enxt25"> |
<omgdi:waypoint x="420" y="60" /> | <omgdi:waypoint x="660" y="220" /> |
<omgdi:waypoint x="610" y="60" /> | <omgdi:waypoint x="710" y="220" /> |
<omgdi:waypoint x="610" y="135" /> | <omgdi:waypoint x="710" y="175" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0j1b3ve_di" bpmnElement="Flow_0j1b3ve"> | <bpmndi:BPMNEdge id="Flow_1g2lqx6_di" bpmnElement="Flow_1g2lqx6"> |
<omgdi:waypoint x="490" y="245" /> | <omgdi:waypoint x="430" y="80" /> |
<omgdi:waypoint x="490" y="160" /> | <omgdi:waypoint x="475" y="80" /> |
<omgdi:waypoint x="585" y="160" /> | |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0fniklm_di" bpmnElement="Flow_0fniklm"> | <bpmndi:BPMNEdge id="Flow_05h70bw_di" bpmnElement="Flow_05h70bw"> |
<omgdi:waypoint x="610" y="230" /> | <omgdi:waypoint x="525" y="80" /> |
<omgdi:waypoint x="610" y="185" /> | <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> |
</definitions> | </definitions> |
</bpmnio> | </bpmnio> |
===== Примечания ===== | |
| |
Фундаментом разработки программного обеспечения является [[wpru>Структурное_программирование]] - | <bpmnio type="bpmn"> |
набор правил, благодаря которым облегчается понимание программного кода, сокращается число ошибок, упрощается отладка и последующая модификация. | <?xml version="1.0" encoding="UTF-8"?> |
Структурное программирование запрещает произвольную передачу управления (оператор goto), | <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"> |
Кроме того, к принципам структурного программирования относится разработка сверху вниз и выделение повторяющихся фрагментов в подпрограммы (процедуры, функции). | <parallelGateway id="Gateway_0oi9i0o"> |
| <outgoing>Flow_0lj9dyc</outgoing> |
Модель бизнес-процесса является своего рода "программой", только не для компьютера, а для организации, и исходно существующей в виде диаграммы, а не сплошного кода. | <outgoing>Flow_00jrems</outgoing> |
Проблемы читаемости, легкости тестирования и последующей модификации для моделей процессов даже более актуальны, | </parallelGateway> |
поскольку они должны быть понятны не только профессионалам (как в случае программного кода), но и людям бизнеса - владельцам, участникам и другим заинтересованным сторонам. | <task id="Activity_1hal76q"> |
| <incoming>Flow_0lj9dyc</incoming> |
Принципы структурного программирования, доказавшие свою эффективность, можно и нужно применять и к моделированию процессов: | <outgoing>Flow_071haj2</outgoing> |
| </task> |
* аналогом goto здесь является поток управления, не следующий | <sequenceFlow id="Flow_0lj9dyc" sourceRef="Gateway_0oi9i0o" targetRef="Activity_1hal76q" /> |
* | <sequenceFlow id="Flow_071haj2" sourceRef="Activity_1hal76q" targetRef="Gateway_1l1jd6x" /> |
| <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" /> |
| <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// |