ОБЗОРЫ

Паттерны - попытка навести порядок в мире workflow

Андрей Михеев, Михаил Орлов

Продолжение. Начало см. PC Week/RE, N 23/ 2004, с. 26; /2004, с. 21.

В предыдущих публикациях мы рассказали, что такое WF-системы, охарактеризовали области их применения, а также дали представление о войне стандартов в мире WorkFlow. Напомним некоторые сформулированные тогда положения.

Деятельность большинства современных предприятий можно представить в виде набора бизнес-процессов.

Бизнес-процесс - это хронологически упорядоченный и направленный на достижение известной бизнес-цели за известное время набор заданий, которые выполняются как людьми, так и информационными системами предприятия.

Цель применения WF-системы - автоматизация существующих бизнес-процессов.

WF-система предприятия должна решать две основные задачи.

Задача А: "эсперанто менеджмента" - формирование единого языка описания бизнес-процессов для всех работающих на предприятии, а также создание библиотеки бизнес-процессов.

Задача Б: "универсальный клей" - быстрая интеграция ("склеивание") в рамках единого процесса работы сотрудников и компьютерных систем предприятия; быстрая сборка из разнородных "кирпичиков" связного процесса.

Данная публикация посвящена WorkFlow-паттернам (далее - WF-паттерны, или просто паттерны), которые, по нашему мнению, могут стать лакмусовой бумажкой для оценки существующих WF-систем и WF-стандартов.

Зачем нужны WF-паттерны

В настоящее время нет универсальной общепризнанной теории, описывающей бизнес-процессы. Различными компаниями и сообществами разработано немало несовместимых друг с другом стандартов, таких, как BPEL4WS, XPDL, BPML, WSCI, BPSS, YAWL и т. д.

Ситуация с программными продуктами тоже весьма запутанна. Современные WF-системы в большинстве случаев соответствуют какому-либо известному стандарту, но есть немало и таких WF-систем, которые никаким стандартам не следуют.

В этих условиях Ван дер Альст, Хофстеде, Кипужевский и Баррос (http://tmitwww.tm.tue.nl/research/patterns/download/wfs-pat-2002.pdf) попытались разработать единую методологию систематизации и классификации WF-систем и WF-стандартов. Они проанализировали распространенные WF-системы и стандарты, выделили в них типичные элементы, выявили наиболее часто повторяющиеся структуры и назвали их WorkFlow-паттернами (WorkFlow patterns).

Согласно определению, WF-паттерны - это характерные структуры внутри бизнес-процесса, рассматриваемые в его контексте.

Видно, что определение содержит в себе субъективный элемент. Это не удивительно, поскольку для выявления WF-паттернов был применен феноменологический подход, подразумевающий, что набор WF-паттернов явно зависит как от исследователя, так и от набора изучаемых WF-систем. Тем не менее в результате этой работы удалось выявить набор из 20 WF-паттернов, на основе которых, как нам кажется, можно построить 99,99% всех реальных бизнес-процессов (см. www.workflowpatterns.com).

Паттерны помогают решить две задачи:

- сравнить предлагаемые WF-стандарты и WF-системы. Составив таблицу, показывающую, какие паттерны в каких системах и стандартах поддерживаются, можно провести их сравнение;

- выбрать WF-систему для предприятия - определить множество паттернов, характерных для бизнес-процессов данного предприятия, после чего сузить круг рассматриваемых систем, исключив те, в которых эти паттерны не поддерживаются.

Эволюция WF-паттернов

К изначально предложенным 20 паттернам, относящимся в основном к управлению потоком (control-flow perspective), Ру, Маджинис и Браун (Ruh W. A., Maginnis F. X., Brown W. J. Enterprise Application Integration. - A Wiley Tekh Brief, John Wiley and Sons, Inc., 2001) добавили шесть дополнительных паттернов коммуникации, относящихся к взаимодействию WF-процессов и потоков управления.

Далее количество WorkFlow-паттернов стало стремительно увеличиваться: появились паттерны, характеризующие взаимоотношения продавцов и покупателей, паттерны данных, паттерны, связанные с транзакциями, и т. д.

С какого-то момента эти новые WF-паттерны фактически переходят в разряд design-паттернов объектно-ориентированных языков программирования.

И это закономерно. Мы считаем, что WF-языки - частный случай высокоуровневых языков программирования, а следовательно, к ним должны быть применимы многие общепрограммистские подходы.

Наиболее распространенные WF-паттерны

Ниже мы приведем описание наиболее распространенных WF-паттернов вместе с их графическими образами. Вообще выбор графической нотации WF-процессов представляет собой сложную задачу и мог бы стать темой отдельной статьи. Мы остановились на нотации UML (www.uml.org) как наиболее распространенной и изученной.

"Последовательность" (англоязычный термин - Sequence).

Простейший "элемент" бизнес-процесса: два узла соединены переходом. После того как исполнитель выполняет действие первого узла, управление переходит ко второму (рис. 1).

Рис. 1. Паттерн "Последовательность"

"Параллельное расщепление" (англоязычные термины - AND-split, Fork).

Представляет собой узел, в который приходит только один переход и из которого исходит два перехода или более. Причем после того как управление передано узлу, поток управления бизнес-процессом распадается на несколько потоков, которые выполняются параллельно. Для каждого исходящего перехода должен существовать "свой" поток управления.

Данный паттерн (рис. 2) часто используется в связке с паттерном "синхронизация".

Рис. 2. Пример паттерна "Параллельное расщепление"

"Синхронизация" (англоязычные термины - AND-join, Join).

Узел, в котором соединяются два или более перехода, а выходит только один (рис. 3). Управление не будет передано дальше, пока все потоки управления бизнес-процессом (по количеству входящих переходов) не достигнут данного узла. После того как в узел придут все потоки управления, будет инициирован только один поток, соответствующий исходящему переходу.

Рис. 3. Пример паттерна "Синхронизация"

"Исключающий выбор" (англоязычные термины - XOR-split, Decision).

Узел в графе WF-процесса, в который приходит только один переход, но из которого исходит два или несколько переходов (рис. 4). Причем после того как управление перешло к данному узлу, он автоматически выбирает, по какому исходящему переходу передать его далее.

Рис. 4. Пример паттерна "Исключающий выбор"

Паттерн часто используется в "связке" с паттерном "простое соединение".

"Простое соединение" (англоязычные термины - XOR-join, Merge).

Узел в графе WF-процесса, в котором соединяются два или несколько переходов, а выходит только один (рис. 5). После того как в узел пришло управление от любого входящего потока, поток управления передается на единственный исходящий переход.

Рис. 5. Пример паттерна "Простое соединение"

Предполагается, что управление может прийти в узел только по одному из входящих переходов.

Пять вышеописанных паттернов поддерживаются всеми известными нам WF-стандартами и WF-системами и являются основой описания абсолютного большинства существующих WF-процессов. Однако в некоторых достаточно редких бизнес-процессах используются и паттерны, включенные в группу дополнительных. Эти паттерны либо нельзя свести к комбинации и суперпозиции основных, либо при таком сведении получаются крайне громоздкие, неудобные для восприятия схемы. Для реализации подобных паттернов нужны дополнительные элементы WF-языков и, соответственно, дополнительная функциональность WF-систем. Приведем несколько дополнительных паттернов.

"Дискриминатор" (англоязычный термин - Descriminator)

Рис. 6. Пример паттерна "Дискриминатор"

Узел в графе WF-процесса, в котором соединяются два перехода или более, а выходит только один. Как только узлу передается управление (по любому входящему переходу), сразу активизируется исходящий переход, т. е. начинает выполняться следующее действие бизнес-процесса. Выполнение других активных потоков не прерывается, однако передача управления каждого из этих потоков в узел дискриминатора игнорируется и пришедший поток завершает свое существование.

Данный паттерн часто используется в связке с паттерном "Параллельное расщепление".

Пример. Бизнес-процесс "Подбор ключа криптозащиты". Для проверки стойкости криптозащиты часто применяются параллельные вычисления, построенные по следующему принципу: каждому участнику выдается пакет исходных данных, причем (при большом количестве участников) эти пакеты невелики и обсчитываются за несколько дней. Как только один из участников находит ключ, он должен его сразу прислать в исследовательский центр. Результат работы остальных участников может быть проигнорирован.

"Произвольный цикл" (англоязычный термин - Arbitrary cycle).

Рис. 7. Пример произвольного цикла

Набор узлов в графе WF-процесса, в котором один или несколько узлов могут проходиться многократно, т. е. в эти узлы много раз может приходить (и соответственно уходить) управление. Причем, в отличие от регулярных циклов, точки "входов" в набор повторяющихся узлов (или "выходов" из них) могут быть различными.

"Отложенный выбор" (англоязычный термин - Deferred choice).

Узел в графе WorkFlow-процесса, в который приходит только один и из которого исходит два или более переходов. После прохождения узла поток управления бизнес-процессом распадается на несколько потоков, число которых равно количеству исходящих переходов. Далее все потоки, соответствующие исходящим переходам, становятся активными. Однако после того как первый узел для исполнения выбран, активным остается только поток этого узла, а все остальные принудительно завершаются.

Паттерн часто используется в связке с паттерном "Простое соединение".

Пример. По электронной почте приходит письмо от клиента с запросом на поставку товара. Это письмо отправляется всем менеджерам отдела продаж. Тот менеджер, который первым подтвердит желание работать с данным заказом, и будет его исполнять, у остальных менеджеров запрос будет отозван.

Применение паттернов для сравнения различных WF-языков

Авторы данной концепции классифицировали наиболее известные WF-языки по признаку возможности "прямой" (в оригинале - direct) поддержки WF-паттернов. По нашему мнению, эта классификация весьма субъективна и сильно зависит от определения понятия "прямая поддержка". Во многих случаях, когда они считают, что тот или иной стандарт не обеспечивает "прямой" поддержки данного паттерна, на самом деле существует синтаксически допустимая конструкция языка, реализующая паттерн, но кажущаяся им слишком громоздкой (что нередко является спорным). В таблице приведены опубликованные авторами концепции результаты сравнения трех WF-стандартов (но включены только те из них, которые имеют отношение к паттернам, описанным в настоящей статье.) Из таблицы следует, что ни один из рассматриваемых WF-языков не поддерживает всех паттернов и из них нельзя выбрать "наилучший" в этом смысле язык. Всегда существует паттерн, который данным языком не поддерживается, но поддерживается по крайней мере одним из оставшихся языков.

Поддержка описанных в статье паттернов в трех WF-стандартах

Заключение

В условиях войны стандартов WF-паттерны, несмотря на некоторые отмеченные в настоящей статье недостатки, являются хорошим компасом в море WF-систем и стандартов, а также неплохим "пробным камнем" при выборе предприятием конкретного решения.

С авторами статьи, сотрудниками консалтинговой группы "Руна", можно связаться по адресу: wf@runa.ru.