Симулятор бизнес-процессов

    Однажды, скучая на работе в ожидании решения далекого европейского руководства о выборе ПО для управления бизнес-процессами, мне пришла в голову мысль создать Скрипт. Скрипт должен был на основе модели бизнес-процесса анимировать его состояние в разные моменты времени и собрать результирующие данные, на основе которых можно принимать решения об эффективности планируемых изменений в деятельности организации. Так как под рукой на моей рабочей станции был IDE только в виде Блокнота, а корпоративной средой выполнения IE, пришлось писать Скрипт на вышедшем недавно jQuery. Так зарождался Сервис bpsimulator.com.

    Сервис имитационного моделирования бизнес-процессов


    БП Симулятор

    Сервис предназначен для поиска узких мест разрабатываемых бизнес-процессов или проверки эффективности вариантов внесения изменений в действующие процессы. Аналогичное по функционалу ПО входит в состав BPM-систем IBM, Oracle, AG Software и др., но не является доступным для обучения и коммерческого использования вне корпоративного сегмента. Основная миссия сервиса bpsimulator.com — доступность имитационного моделирования для потенциальных пользователей и далее я расскажу, каким образом достигается данная цель. Симулятор реализован как веб-сервис с возможностью автономной работы. Имитационное моделирование включают в себя следующие этапы:
    1. Моделирование бизнес-процесса
    2. Симуляция модели
    3. Анализ результатов симуляции


    Моделирование


    Моделирование — важный и сложный этап, от его качества существенно зависит корректность результатов. Поэтому вместо сложных нотаций описания бизнес-процессов был использован задаче-ориентированный подход. На моделях могут быть только два типа объектов: источники задач и функции, последовательно приводящие к выполнению этих задач. Есть ещё конечно связи между объектами «вход/выход», ресурсы и условные операторы переходов. Каждый объект имеет набор традиционных для симуляторов свойств, таких как название, частота поступления задач или длительность выполнения функции исполнителем, которые можно заполнять по мере необходимости. Хранятся модели либо локально у пользователя, либо в сервисах Яндекс.Диск, Dropbox или Google Drive.


    Симуляция


    Имитационное моделирование заключается в последовательном расчете состояния бизнес-процесса в различные моменты времени. Например с 9:00 до 9:10 секретарю придет конверт с договором на подписание, в 10:00 она допьет кофе и отнесет его юристам, которые по истечении трех часов вернут его на доработку и так далее, пока подписанная копия договора не будет отправлена клиенту. Управление симуляцией осуществляется посредством кнопок Пуск, Ускорить, Пауза, Следующий и Стоп — что позволяет пройти любой цикл выполнения процесса вдоль и попрек. В зависимости от состояния в расчетный момент, на графических объектах модели выводится их состояние для визуального контроля. Так же ведется подробный журнал переходов, где можно отследить детали возникновения заторов в процессе.


    Анализ


    По окончании симуляции можно посмотреть собранную статистику симуляции, которая распределена по следующим срезам:
    • Процесс — дает представление о эффективности процесса в целом, от начала и до конца периода симуляции
    • Функции — в разрезе исполняемых функций можно определить, где возникают узкие места
    • Ресурсы — отображаются все задействованные исполнители и степень их загрузки
    • Задачи — можно проследить, как зависит суммарная длительность одних и тех же задач в зависимости от времени их назначения



    А что под капотом?


    Я специализируюсь на создании центров компетенции процессного управления, а не на программировании, поэтому с техническими наворотами не густо. Серверных ресурсов задействовать не планировалось, но пришлось для интеграции с некоторыми облачными сервисами хранения создать пару проксирующих запросы скриптов на php.
    Интерфейс: jQuery, jQuery UI, globalize и modernizr. Из HTML5 используются localstorage, canvas и теги. Так как основные мои партнеры это «современные высокотехнологичные динамичные банки-лидеры», то приходится поддерживать старые версии IE. Для сборки и публикации сервиса, сайта и справочного руководства используется Apache Ant в Eclipse.

    Заключение


    В рамках ознакомительного топика сложно рассказать сразу все, что хочется рассказать о сервисе. Если будет проявлен интерес, будем разбирать конкретные кейсы, что и как было сделано при помощи этого инструмента. А пока можно ознакомиться с детальным справочным руководством симулятора по адресу bpsimulator.com/ru/help/.
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 39

      +2
      Довольно интересный скрипт. Думаю многие кто связан с созданием, анализом и внедрением БП, очень часто сталкиваются с анализом их адекватности построения и формирования.
      На первый взгляд, я уже заметил полезный функционал который поможет проводить анализ эффективности, в частности, те же затраты времени. Конечно я видел и декстопный софт под это дело, но там солидные системные требования + использование пакета Visio внутри себя. Довольно «тяжелая» штука. У онлайн сервиса в этом случае масса преимуществ.
      Более детальный список пожеланий и улучшений смогу предоставить когда попробую сервис в боевых условиях. Думаю сегодня этим и займусь. БП у меня много, с довольно сложными и запутанными связями, интересно будет посмотреть, получится ли их перенести в скрипт.
        +1
        Буду благодарен за обратную связь. Возникающие вопросы пишите в личку, в оперативном режиме постараюсь отвечать.
        +2
        К сожалению (причем только на страницу со справкой) Сижу из Москвы:

        Уважаемые пользователи!

        Мы приносим свои извинения, но доступ к запрашиваемому ресурсу ограничен.

        Возможные причины ограничения доступа:

        Доступ ограничен по решению суда или по иным основаниям, установленным законодательством Российской Федерации.

        Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в Единый Реестр доменных имен, указателей страниц сайтов сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено.

        Проверить наличие сетевого адреса в Едином реестре можно в разделе «Просмотр реестра» на сайте www.zapret-info.gov.ru.

        Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в Реестр доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространяемую с нарушением исключительных прав.

        Проверить наличие сетевого адреса в Реестре можно в разделе «Просмотр реестра» на сайте nap.rkn.gov.ru.
          +1
          А на английском работает.
            +1
            У меня только одна версия — cloudflare, который используется как CDN
              0
              Там порно ролик. Или телефон «дилера».
                +2
                Ага, и призывы к декомпозиции процессов
              +1
              По делу. Мне этот скрипт очень понравился. Так как сейчас в компании пытаемся автоматизировать рабочие процессы, то я буду пользоваться им для более наглядного представления и расчета.
              Спасибо.
                0
                CPU Limit Reached: screenshare.ru/2JdOkpKq
                  0
                  Сменил тариф, работоспособнлсть восстановлена
                    0
                    Гуд, буду пробовать.
                  0
                  А у меня сайт заблокирован. Провайдер proc.ru
                  Tor конечно никто не отменял, но все-же…
                    0
                    Разблокировали… чудеса!
                    0
                    Интересный скрипт. Сразу вопрос: в демке на «Закрытии заказа» у меня на каком-то этапе получилось 29 задач в работе, хотя этим занимаются только продавцы, которых 15, так и должно быть? Вот скрин screenshare.ru/pU4DonLa.
                      0
                      Спасибо за найденный баг. Это была рудиментная ошибка. Задачи из рабочей очереди переставали очищаться, если находилась хоть одна невыполненная задача. Из-за этого росла длинна очереди задач в работе. Сейчас ошибка исправлена, текущая актуальная версия сервиса 01.03.5, обновите пожалуйста кеш вашего броузера.
                      0
                      А можно ли выложить куда-то альтернативно страницу хэлпа?
                      Хоть на дропбокс архивом или страницей.
                      Морда открывается.

                      Запрет.инфо мешает зайти, пров. Ростелеком.
                        0
                        Положил копию хелпа на Дропбокс https://dl.dropboxusercontent.com/u/37793735/help.rar
                        Если не затруднит, пришлите пожалуйста скриншот запрета, попробую разобраться с провайдером.
                          0
                          на support at bpsimulator.com
                        0
                        Очень интересная штука получилась. А можете поподробней рассказать об алгоритмах работы со временем?
                          0
                          Со временем там как раз никаких хитростей нет. Есть следующие параметры:
                          1. Время такта — 1 сек, с такой частотой происходит обновление визуальной информации в реальном времени. Это время адаптивно может увеличиться, если расчет не успел выполниться за этот период.
                          2. Время старта процесса, процессное время, задается в настройках, по умолчанию 9:00
                          3. Скорость — период процессного времени, равный периоду реального времени, задается в настройках. По умолчанию на 1 сек. реального рассчитывается 1 минута процессного. При включенном ускорении этот параметр умножется от 2 до 60 раз
                          А далее с каждым тактом, к начальному времени прибавляем скорость, умноженную на количество тактов (например на 3 секунде расчета 9:00 + 01:00*3 = 9:03 — время процесса). Во всех расчетах, используем время процесса, что бы вовремя остановиться.
                            0
                            Получается, без тактов никак не обойтись?
                            Ведь по сути тогда у нас 2 времени, реальное и параллельное, которое такты реализуют?
                              0
                              Реальное время и тактовое равны 1 секунде, 1 секунда реального времени равна 1 минуте-часу и т.д. Такт — это как часто обновлять информацию, на сам процесс не влияет.
                          0
                          Знаком с симуляцией в ARIS (ныне Software AG)
                          Там еще в каждом шаге есть время на «переключение» — тоже из разряда ожидания, но другого рода — время, требуемое на переключение с одного вида деятельности на другой.

                          По поводу функционала — сделайте киллер фичу — приложение для смартфона для фиксирования времени выполнения, с несколькими большими кнопками типа «следующий шаг», «начало», «конец», «ожидание» и что-то типа «альтернатива» (которая бы добавляла новые ветки альтернатив выполнения процесса). Шаги сперва нумеровать, а потом можно переименовать уже на компе, после импорта.
                            0
                            Я работал на этом симуляторе и иногда поглядывал на него при написании своего. ИМХО — Арис лучшие свои годы уже пережил, сейчас там так все наворочено и столько сложных, запутанного функционала, что люди просто боятся в нем разбираться, даже консультанты. В симулятор я старался взять только достаточно понятные и прозрачные свойства процесса, которые сам использовал. Насчет конкретно «Переключения» — я им в банковской сфере никогда не пользовался, не представляю как операционист будет «тупить» и ничего не делать в специальное время. Пусть «тупит» во время работы над задачей, тогда мы его правильно посчитаем и включим в себестоимость выполнения функции.
                            А насчет фичи — сбор данных это все-таки этап моделирования, для этого сервис не предназначен, для моделирования полно доступного софта. Если будут предложения по симуляции — готов рассмотреть и оперативно внедрить, лишь бы на пользу было.
                              0
                              Да, для операциониста не подходит, у него однотипные задачи, даже, наверное, не надо другой софт запускать, но и тогда это можно посчитать как отдельную задачу.
                              Можно стоимость выполнения процесса считать, добавив стоимость ресурса, но это баловство. А вот если бы, например, писать результаты симуляции для разных процессов в ОДИН файл, это было бы удобно — сравнивать на одном экране разные варианты одного процесса
                            0
                            prolis, подскажите, как правильно сделать модель, если функции выполняются последовательно одним ресурсом в количестве 1 человек?
                            Я сделал просто последовательное выполнение, но генератор задач накидывает в первую функцию 540 задач, и пока первая функция не обработает все 540 процесс дальше не идет, а мне нужно чтобы после выполнения первой функции ресурс приступал к выполнению второй и т.д. до конца процесса, а потом бы только брал вторую задачу
                              0
                              в тестовой модели, если изменить количество поваров на 1 и количество продавцов на 1, то продавец формирует 540 заказов, но делает 0 выдач пиццы. Предполагаю, что это продолжение моего вопроса.
                                0
                                Хороший вопрос, действительно, из двух функций всегда будут выполнятся сначала задачи функции, самой близкой к генератору. Алгоритм обходит дерево процесса сверху вниз, видит наличие задач и назначает их в работу, т.к. до нижней функции он ещё не дошел и не знает, про её существование. Тут надо будет подумать.
                                  0
                                  А почему алгоритм не может последовательно все функции обходить, а в точках ветвления ходить по очереди то влево то вправо (ну, учитывая вероятности, конечно)
                                    0
                                    Так он ходит-то по веткам как положено, ну пойдет он направо, а про функцию слева ещё не знает. Пока мы до конца не дойдем, мы не знаем, что собрали всю информацию о среде выполнения. Можно встретив ресурс, посмотреть, где он ещё занят, и в тех функциях взять его задачи для приоритезации, НО: в этот момент ему задачи нижестоящие функции ещё не передали, мы про них тоже ничего не знаем.
                                0
                                Тут вопрос в уровне декомпозиции процесса. В зависимости от целей моделирования договариваются «на берегу» до какого уровня детализировать модели. Я рекомендую детализацию до уровня функций — целенаправленных действий одного сотрудника. Нам не надо дробить функцию «Подписание документа» на действия «Поиск документа в системе», «Печать документа» и «Подписание документа» — мы НЕ отвечаем на вопрос «Как он это делает?», а отвечаем на вопрос «Зачем он это делает?».
                                Бывают исключения, например когда в предыдущем примере подписать может не только исполнитель, а и его начальник, то это будет две функции «Подготовка документа» и «Подписание», у второй функции будет два альтернативных ресурса. Либо если исполнитель в течении дня только готовит документы, а подписывать он их должен пачкой вечером или на следующий день (ну мало-ли), то так же это будет 2 функции, т.к. после подготовки документов процесс останавливается и ждет наступления управляющего события «Каждый вечер в 19:00».
                                В вашем случае достаточно объединить действия одного исполнителя в одну функцию, тогда он не возьмет из очереди новую задачу, пока полностью не завершит начатое, что вам и надо. Для приоритезации выполнения задач есть приоритеты — глобальный и локальный, но они предназначены для немного других целей — например если сотрудник освободился и у него в очереди две задачи разных типов, например «Обслужить клиента» и «Позвонить подруге», то будет взята на исполнение задача с наибольшим приоритетом, т.е. звонок подруге.
                                  0
                                  У меня вот, например, задача: есть склад, там работает менеджер и упаковщик.
                                  Упаковщик, условно, берет заказ, ищет товар на складе, подготавливает товар (тестирует, сканирует серийники), подбирает подходящую коробку, упаковывает и складирует в зоне отправки.
                                  Я не хочу объединять работу упаковщика в функцию «упаковать товар». Я хочу сравнить, до какого количества заказов выгоднее (по стоимости или по количеству обработанных за день заказов) наращивать количество упаковщиков, а при каком количестве будет выгоднее нанять отдельного человека, который бы упаковщикам искал товары и коробки.
                                  Арисом я эту задачу решил, хотел попробовать решить Вашим сервисом.
                                    0
                                    С помощью атрибута Commit Resource? Нет, этого функционала в симуляторе нет по описанным причинам.
                                      0
                                      Нет, можно и просто подбором :)
                                      4 упаковщика упаковывают за день 125 товаров
                                      а 3 упаковщика и один складской помощник — 158
                                        0
                                        Попробуйте в Арисе этот атрибут — он как раз для этого.
                                          0
                                          Он в атрибутах какого объекта? В атрибутах роли (ресурса) не нашел
                                            0
                                            Атрибут связи Ресурс-Функция
                                              0
                                              Спасибо, попробую. Но мне и degree of utilization хватало, для оценки.
                                                0
                                                С этим поосторожнее для оценки. Как раз тут бпсимулятор лучше справляется, когда у ресурса много типов задач. Складской помощник может не только упаковывать и помогать, но например периодически выполнять инвертаризацию, пересортицу, или что там еще регламентом предусмотрено. В симуляторе достаточно накидать генераторов этих задач, а в Арисе например придется тянуть интерфейсы от тех процессов и моделировать их.

                              Only users with full accounts can post comments. Log in, please.