Мой приятель занимается процессами в телекоме. Там есть своя специфика, о которой я уже писал раньше: много координации между системами и относительно небольшое участие человека.
Его заинтересовал BPMN, и чтобы оценить на что он способен, он предложил мне модельную задачу. Привожу постановку задачи в том виде, в каком от него получил; если вам она покажется неполной или противоречивой, то это нормально - в реальной жизни только такие постановки задач и бывают.
Задача по мотивам Звездных войн. Два космических крейсера находятся на боевом дежурстве по отражению возможной атаки пришельцев.
a) Траекторное управление обоих крейсеров рассчитывается централизованно и синхронизируется на основании данных, получаемых в реальном времени - отрабатываются задачи максимального покрытия опасных зон атаки и безопасности.
b) Появление на радаре обьекта пришельца регистрируется и реплицируется в систему слежения напарника - на основании этого каждая цель получает свой индивидуальный id. Потерянная обоими цель получает статус потеряна - средств идентификации старая потерянная или новая нет.
с) Система назначения целей каждому крейсеру централизована и строится на основании приоритетов (абсолютно не важно каких). Система может переадресовать цель другому крейсеру, если приоритеты изменились - то есть в любой момент все цели помечены цифрой 1 или 2 - кому она предназначена.
d) Выдачи команды на поражение подается на тачскрин-дисплей и оператор принимает решение, тыкая кнопку. Даже в этом промежутке система назначения целей может переназначить цель другому крейсеру.
e) Если цель поражена, workflow для нее заканчивается, если нет - сохраняется статус, что была неудачная попытка поразить цель, и все продолжается. Для упрощения считаем, что поражение ведется лазерным лучом и интервал выяснения результата достаточно короткий.
Считается, что весь процесс постоянный и непрерывный.
Не совсем обычное применение для BPMN, не правда ли? В связи с этим вопросы залу:
- можно ли решить эту задачу средствами BPMN?
- стоит ли?
- ну и само решение, если есть.
По-моему, задача достаточно интересная; во всяком случае, меня самого она заинтриговала.
Мой вариант BPMN-диаграммы (кликните, чтобы открыть в отдельном окне):
Комментарии:
- Система слежения получает информацию о цели дискретно - в виде засечки на радаре. Каждая засечка сравнивается с информацией в базе данных целей. Если координаты и характеристика засечки достаточно близки к одной из известных целей, то предполагается, что это она и есть, и в этом случае в процесс сопровождения цели шлется сообщение с новыми координатами. В противном случае по сообщению создается новый экземпляр процесса сопровождения цели.
- Процесс сопровождения цели находится в ожидании одного из трех событий: прихода сообщения о местоположении цели, прихода сообщения об уничтожении цели или таймаута - если в течении заданного интервала цель не наблюдалась и не была уничтожена, то она считается потерянной и процесс на этом завершается.
- Система управления огнем в бесконечном цикле производит информации обо всех целях. Цели назначаются первому или второму крейсеру, а для некоторых целей принимается решение об уничтожении. Возможны также ситуации отмены решения об уничтожения и переназначения задачи уничтожения другому крейсеру - в последнем случае подаются две команды: “отмена огня” одному и “огонь” второму.
- По команде “огонь” создается новый экземпляр процесса “Выстрел”. Оператор должен подтвердить открытие огня - если он это делает, то выстрел производится, если происходит попадание, то шлется сообщение в процесс сопровождения цели, который на этом завершается. Пока оператор думает, система может решить, что цель больше не представляет угрозы или что ее следует перенаправить другому крейсеру. И в том, и в другом случае сообщение “отмена огня” прерывает задачу подтверждения огня и завершает процесс “Выстрел”.
Вначале у меня не было уверенности, что задача решаема. Но в итоге спектр задач, решаемых при помощи BPMN, в моем представлении существенно расширился.
Ключевой вопрос в дизайне был - сколько в задаче систем и сколько разных процессов. Как только с этим определился, дальше как-то все само собой нарисовалось.
Как видите, в схеме нет предположения о числе крейсеров. Фигурирующие в задаче “два крейсера” оказались подставой: проектировать для случая N на самом деле проще. Систем слежения и систем оружия тоже может быть сколько угодно - схема будет работать, если у крейсера есть несколько радаров и несколько пушек, причем некоторые из них повреждены или израсходовали боеприпасы. Система управления огнем одна, и обобщить на случай нескольких будет нетривиальной задачей.
Вместо космических крейсеров можно представить себе авианосцы и запускаемые ими самолеты-разведчики в качестве датчиков системы обнаружения.
My version — http://improving-bpm-systems.blogspot.com/2010/12/re-bpmn-in-outer-space.html
Thanks,
AS
Alexander
Sorry I can’t see the requirement d) implemented in your diagram.
Another difference is the absence of target lifecycle in your diagram: one can’t directly analyze e.g. the average time targets have been tracked.
Anatoly,
Yes, some exception handling is missing.
Concerning “target lifecycle” - I considered it at the beginning (as the specs insisted) but later I preferred to handle targets ONLY by “CENTER-tracking” process (actually by only ONE instance) for better encapsulation (and elimination of doubles). As the result, a separate target-lifecycle process was not necessary as we can obtain all events.
Thanks and a Happy New Year.
AS
Kudos for working Star Wars and BPMN into the same post
Anatoly:
Like the approach, but if I was the cruiser’s commander I would like guidance and control algorithms working when the shot misses the target providing feedback target tracking pool.
This kind of process presentation, and this particular one, provides very clear idea how a process is structured. It was considered that there is few human interaction. But but if there were more, would be possible to draw real time collaboration on a crisis situation? I remembered some utilities processes when there is a supply disruption started by system alarm, or by epidemic phone calls from the customer and these ones are quite difficult to do because there are only a sequence of big steps it can be mapped.
Nowadays I see BPMN more suited to present the big picture rather that going deeply to the tasks detail.
Alberto
Of course it’s no more than excercise that leaves plenty of room for improvements/variants/refinements.
Totally agree with your last point.
Kind regards
Anatoly
The interpreted vs. coeiplmd debate has been going on for a long time now. I think at any given point in time, the compilers have a very good argument because they can find situations where a higher degree of performance is required. Even in the BPM world, if I can imagine a process that executes 10,000 times an hour, you can just imagine that same process at Wal-mart to picture that process running 10,000,000 times an hour! However, the right design decisions for software are not judged by a single point in time, these decisions are judged over time and over time, the interpreters have a lot working in their favor I think having a good representation is actually more important than having the most performant one at any given point in time
Good point, Wahyu
The key question - is a thing that executes 100000 times per hour a business process? It’s a matter of definition of course, one may get very different answers from a system integrator and a business analyst. The latter would probably say that business is essentially a human thing. Therefore there are good reasons to treat straight-through processes and long-lasting business processes differently and to use different tools tools in particular just like you said.
As for the article, it was just a fun and pure theoretical challenge, not a solution for realmtask indeed.