A notação BPMN (Business Process Model and Notation), atualmente na versão 2.0, reúne um conjunto de elementos intuitivos e robustos, que auxiliam usuários técnicos e de negócio na documentação de seus processos em diferentes níveis de detalhes, de maneira que possam mapear, de maneira padrão, todos os processos de negócios de sua organização.
A lista de elementos gráficos de BPMN apresenta desde elementos essenciais para a modelagem dos processos, utilizados em uma documentação simples, até elementos avançados, requeridos para desenhar modelos de processos complexos.
Dedicaremos os artigos semanais de janeiro para contribuir com o estudo dos elementos avançados, requeridos para a compreensão de uma modelagem complexa.
Marcadores de Atividades
Abordaremos neste primeiro artigo os marcadores de atividades, conhecidos também como atributos especiais.
Os marcadores de atividades ou atributos especiais tem o objetivo de indicar o comportamento específico de uma atividade durante sua execução.
No artigo “Um guia para iniciar estudos em BPMN”, vimos que atividades (activities) representam um trabalho realizado em uma etapa do processo de negócio e podem ser do tipo “Tarefa” (task) ou “Subprocesso” (subprocess).
Subprocesso
Um subprocesso representa um conjunto de atividades realizadas dentro de um processo de negócio. São representados graficamente de duas formas, contraído ou expandido.
Subprocesso contraído
Subprocesso Expandido
O mesmo subprocesso pode ser representado de forma expandida (expanded), apresentando o seu conjunto de detalhes no próprio processo “pai”.
Atenção: O fluxo do processo “pai” não pode atravessar de forma alguma a fronteira do subprocesso.
Loop – Atividade cíclica
Representado por uma linha circular com seta (conforme imagem abaixo), atributo em atividades que simula a operação “do-while”, uma atividade pode ser executada várias vezes em ciclo.
Utilizada quando o número de repetições não é conhecido;
A atividade de repetição será repetida enquanto a condição do loop for atendida.
Uma atividade de loop terá uma expressão booleana que é avaliada para cada ciclo. Se a expressão for verdadeira, então irá continuar. O loop irá avaliar a expressão após a realização da atividade, isto significa que atividade será realizada pelo menos uma vez.
Em nosso próximo artigo:
Continuaremos o estudo sobre os Marcadores de Atividades, iniciado neste primeiro artigo.
Confira todos os artigos deste guia de BPMN: Modelando processos de negócio com elementos avançados:
- BPMN: Modelando processos de negócio com elementos avançados (Parte I): Marcadores de Atividades (você está aqui)
- BPMN: Modelando processos de negócio com elementos avançados (Parte II): Continuação Marcadores de Atividades
- BPMN: Modelando processos de negócio com elementos avançados (Parte III): Gateways
- BPMN: Modelando processos de negócio com elementos avançados (Parte IV): Subprocesso de eventos
32 Responses
Senhores,
Tenho achado o material de vocês muito interessante, mas gostaria que me tirassem uma dúvida se possível, geralmente temos conectores de fluxo de uma pagina para outra, mas eu queria saber qual seria o conector para demonstrar que em fluxo de atividade de um processo “Y” que a partir de uma determinada atividade deste processo iremos para o fluxo do Processo “X” e depois virá do Fluxo do processo “X” e continuará e finalizaremos o processo “Y”.
Olá Kaleb! Para este tipo de situação, os eventos mais apropriados seriam o de sinal (signal) ou mensagem (message). A opção por um ou outro depende basicamente se existem informações que devem ir de um processo para o outro, ou se simplesmente ao chegar em um ponto, o outro processo passaria a dar andamento (como uma flag). Confira neste artigo como são usados esses eventos:
https://blog.iprocess.com.br/2012/08/bpmn-diferencas-entre-eventos-de-link-message-e-signal/.
Usando o processo “Contratação de Colaborador” do exemplo acima, vemos um subprocesso expandido “Seleção de Candidato” com o atributo “Repetição em loop” para tratar cada candidato de uma lista de candidatos que enviaram currículo e teste de raciocínio e lógica, ou seja que as tarefas do subprocesso expandido “Seleção de Candidato” serão aplicadas para cada candidato.
Da forma como está a atividade “Entrevistar candidatos” parece que todos os candidatos selecionados para entrevista participarão juntos numa única entrevista.
Caso fôssemos ter uma entrevista com cada candidato individualmente, a atividade “Entrevistar candidatos” seria renomeada “Entrevistar candidato” (singular)
e ela teria o atributo “Repetição em loop” para realizá-la para cada candidato da lista de candidatos selecionados para entrevista, e ao final, no gateway “Resultado da entrevista” seria escolhido um único candidato para ser contratado.
Meu raciocínio está correto?
Olá Alexandre, sim, seu raciocínio está correto.
No caso modelado, a tarefa de entrevistar é única mas não está detalhado no diagrama como ela é realizada. Se tivéssemos o detalhamento, poderia estar previsto diferentes formas de executá-la, como a) que ele agendaria uma entrevista única com todos os candidatos ou b) que ele agendaria e faria as entrevistas separadamente mas só daria terminada a tarefa quando após realizar todas as entrevistas saísse com algum contratado (ou não, quem roteia isso é o gateway seguinte).
No caso sugerido por você, teríamos esse cenário de entrevistas separadas com cada candidato mais explícita (oque eu diria que é uma boa prática).
Boa tarde senhores,
Obrigado mais uma vez por disponibilizar este rico material.
Gostaria de saber como representar o loop do último exemplo, na qual aparentemente temos uma caixa e dentro dela a um processo.
Isto está disponível no Bizagi?
Abs
Olá Henrique,
Sim, para incluir este marcador em qualquer atividade (seja tarefa ou subprocesso) no Bizagi, você deve acionar o menu do elemento (clique sobre ele com o botão direito do mouse) e escolher a opção “Tipo de loop / Padrão”.
Bom dia, Kelly. Parabéns pelos artigos. Tenho uma dúvida sobre comunicação de subprocessos. Se o fragmento do fluxo que eu desejo condensar em um subprocesso possuir uma comunicação com uma outra pool, como fica a representação na forma expandida. Imagino que as setas pontilhadas devem ser apontadas na borda do subprocesso. Mas como represento o ponto do processo que gera esta comunicação? Na falta de um modelo para ter como base, tenho utilizado os eventos de mensagem.
Watabe, a especificação oficial não traz muitos exemplos sobre isso, mas entendemos que se você tem o subprocesso expandido, pode sim mapear as mensagens entrando e saindo diretamente nos elementos em que estas mensagens são emitidas ou recebidas. No documento BPMN 2.0 By Examples (documento não normativo criado pelo grupo de trabalho responsável pela notação BPMN 2.0, disponível em https://www.omg.org/cgi-bin/doc?dtc/10-06-02.pdf) há um exemplo na página 36 que exemplifica isto: 12 – Email Voting Example. Veja que as mensagens provenientes das pools black box com a qual ocorre a comunicação no processo são conectadas aos eventos de envio/recebimento de mensagens.
Se você está fazendo assim, então está fazendo certo =)
PS – algumas ferramentas (como o Bizagi, por exemplo) não implementam este recurso e a conexão vai so até a borda do subprocesso, independente dele estar contraído ou expandido. Isto também é correto na especificação, mas neste caso não ficam claros os pontos que enviam/recebem cada mensagem dentro do processo subprocesso.
Primeiramente parabéns pelo material, surgiu uma duvida quando estou em um processo e insiro a ferramenta de ‘subprocesso’ e peço para editá-la não aparece os swimlanes no local, isso é normal no Bizagi?
Sim, este é o comportamento do BPMN também porque o elemento que você adicionou é um subprocesso incorporado (embedded). Para criar pool e lanes dentro do subprocesso, você precisa transformá-lo em um subprocesso reusável (reusable).
Para isso: inclua um elemento de subprocesso no diagrama, clique com o botão direito nele para abrir o menu de contexto, e selecione “tipo de subprocesso > Reusable Sub-Process”. Você deve notar que a borda do subprocesso vai mudar e se tornar um pouco mais espessa. Se editá-lo agora, poderá incluir pool e lanes.
A principal diferença entre estes dois subprocessos é esta: o subprocesso incorporado presume que todas as tarefas dentro dele são de responsabilidade da lane em que o subprocesso está inserido no processo principal. Jà o subprocesso reusável permite definir uma estrutura mais complexa, como um processo inteiro que pode ser chamado por diferentes processos.
Bom dia, Kelly… excelente material. Este e outros aqui postados.
Tenho uma dúvida. Existe um limite de subprocessos que podemos criar, o visual fica mais clean desta forma, por isto a dúvida.
Oi Michele, não há nenhuma regra de limitação. Neste caso vai mais do bom senso de não quebrar demais o processo em múltiplos níveis, o que poderia dificultar a sua leitura ponta a ponta.
Gostaria de saber como diferenciar um subprocesso de loop e um de múltiplas instâncias. Vocês podem ajudar? Não estou conseguindo discernir a diferença entre eles.
Olá Camila, segue a dica:
Esses marcadores servem tanto para subprocessos quanto para tarefas, então vou chamar aqui de “atividade”:
Atividade com loop (aquele com um símbolo redondo que parece voltar para o mesmo ponto) implica um conceito de “do-while”, ou seja, a atividade (subprocesso ou tarefa) se repete até que uma condição se torne verdadeira. Por exemplo: se repete para uma aprovação, subindo numa escala de aprovadores até que o valor da compra a ser aprovada seja igual ou menor à alçada do aprovador. Neste momento, o ciclo se interrompe e o processo segue o fluxo.
Atividade com múltiplas instâncias (aquele com símbolo de três tracinhos): a lista que determina quantas instâncias serão executadas já é conhecida quando o subprocesso começa. Por exemplo, em um processo de requisição de materiais que tem compras de diferentes tipos, gerando “N” ordens de compra que precisam, cada uma, ser orçada e aprovada separadamente. É possível criar um subprocesso de ordem de compra do tipo múltiplo, cujo fator de quantas instâncias serão executadas é o número de OCs geradas a partir da requisição. Assim, podemos ter uma requisição que gere apenas 1 Ordem de Compra, enquanto outras requisições podem gerar múltiplas OCs, cada uma executando seu fluxo com o subprocesso de múltipla instância. É importante observar que o marcador de atividade com múltipla instância pode ser três tracinhos verticais ou horizontais. Os traços verticais indicam que as atividades múltiplas serão executadas paralelamente, enquanto os horizontais indicam que serão em sequência (o segundo só começa depois do primeiro terminar e assim por diante).
Olá, tenho duas dúvidas referentes ao subprocesso do tipo loop…
1ª – Quando inicio um subprocesso desse tipo geralmente utilizo um gateway para decidir se entro ou não no subprocesso, porém vi que este tipo de subprocesso apresenta em suas propriedades uma condição de uso, esta condição pode substituir o gateway de decisão? Se sim, poderia exemplificar?
2ª – Se eu tenho uma atividade que segue logo após a conclusão de um subprocesso do tipo loop, mas, dependendo do caminho seguido no loop, eu posso seguir para outra atividade… Nesse caso eu deveria utilizar um gateway de decisão após o subprocesso ou eu tenho alguma outra opção utilizada nas propriedades do subprocesso loop.
Oi Wandrieli,
para sua 1a questão: o loop em atividades (pode ser um subprocesso ou uma subtarefa) tem a semântica “repita enquanto uma condição for verdadeira”. Isso quer dizer que ele vai executar aquela atividade uma vez, e ao concluir, antes de ir adiante, vai verificar se a condição de loop é verdadeira e se aquela atividade precisa ser repetida novamente. Portanto, se existe a possibilidade deste seu subprocesso não ser executado nenhuma vez, o melhor é ter um gateway antes.
para a sua 2a questão: a regra para o loop serve apenas para definir a condição de quantas vezes a tarefa em loop vai se repetir. Se você precisa executar atividades diferentes de acordo com o resultado da atividade, então precisará sim de um gateway para dividir esses fluxos.
Espero ter ajudado!
Olá Fabiano, primeiramente gostaria de dizer que acompanho o blog e seus posts, parabéns estão me ajudando muito, estou começando na modelagem mas já me ajudaram bastante. Bom, minha dúvida é sobre o uso dos marcadores, se posso utilizar em um mesma representação (atividade) mais de um marcador… tenho necessidade de representar um processo de atendimento ao público onde realizo várias atividades sem sequência definida e que ocorrem diversas vezes ao dia. Pensei em representar com loop e ad hoc, pode? procurei na especificação da OMG mas não entendi nada. Obrigado e se possível gostaria de saber sobre seus cursos de BPMN que foram muito bem recomendados em SP. Valeu fera.
Olá Rafael,
Sim, você pode marcar essa atividade como ad hoc (em que suas tarefas não possuem uma ordem predefinida) e também com loop (repetição do conjunto).
Estes dois tipos de marcadores não concorrem entre si pois definem atributos diferentes da atividade.
Em nome de todo o time da iProcess agradeço sua visita e participação!
Gostaria de saber se um subprocesso pode ter dentro dele uma piscina e raias. Estou fazendo um fluxo que preciso definir papeis de participação em tarefas e eventos dentro de um subprocesso. Se houve outra forma de representar isso também estou disposta a saber. Grata desde já.
Olá Cíntia,
Sim, um subprocesso pode ter dentro dele uma piscina e raias, mas para isso você precisará transformar o subprocesso em um subprocesso do tipo Reusável (reusable). Na prática é a mesma coisa que um subprocesso incorporado (embedded), que é o que as ferramentas costumam criar como padrão, com algumas vantagens como a possibilidade de incluir swimlanes e também fazer referência a ele em mais de um ponto do diagrama (repetir a execução desse subprocesso).
Se você está usando o bizagi, isso é muito simples: coloque um elemento de subprocesso no seu diagrama, clique com o botão direito sobre ele e escolha a opção “
Tipo de Subprocesso > Reusable Sub-Process
“. Você notará que a borda dele ficará um pouco mais larga. Para editá-lo, você pode fazer como já costuma fazer com seus subprocessos.Se estiver utilizando outro editor de BPMN, é preciso verificar como transformar um subprocesso incorporado em reusável.
Boa tarde!
Tenho um subprocesso que está em loop. Esse loop termina depois de um tempo. Eu posso colocar uma seta saindo do subprocesso direcionando para um evento de tempo?
Octavio, embora numa primeira analise pareça uma boa forma de representar, na prática você estará dizendo que, após o subprocesso concluir, espera o evento de tempo. Talvez um evento de tempo na borda seja uma forma melhor de representar isso.
Boa tarde,
De acordo com a notação BPMN eu consigo ter um processo pai que contenha apenas subprocessos?
Ex: Um processo de Contratação que tenha apenas três atividades Criação de Vagas, Processo Seletivo e Admissão.
Cada uma dessas atividades seria um subprocesso. Esse padrão de construção está correto de acordo com a notação BPMN?
Olá Erick,
Sim, é uma modelagem válida.
Se utiliza para mapear processos em nível de abstração mais alto (processos de negócio), demonstrando o negócio de ponta a ponta a partir da orquestração dos seus subprocessos (processos de trabalho).
O que você está modelando possivelmente é a mesma proposta do item II. Orquestração de Processos deste artigo: BPMN: demonstrando a continuidade de processos.
Confira também este artigo sobre arquitetura de processos para entender os diferentes níveis de abstração da visão do processo na modelagem: Modelando a Arquitetura de Processos da Organização.
Boa tarde,
Tenho uma dúvida a respeito de boas práticas do uso de subprocessos. No caso, supondo que temos um processo que contenha, dentre outros elementos, um subprocesso A. Esse subprocesso possui dois eventos de fim, que direcionam para dois caminhos diferentes no processo. No processo, como sinalizo isso? Posso usar um gateway logo após o subprocesso A para isso?
Olá Rodrigues,
Sim, o uso do gateway é a melhor forma de resolver esta situação.
Neste caso, o gateway deve rotear o processo de acordo com o resultado da atividade anterior (que é um subprocesso). Os eventos de fim dele nada mais são do que os resultados previstos para a atividade. Como boa prática, recomendo que você atribua aos fluxos de sequência do gateway exatamente os mesmos nomes usados nos eventos de fim. Isso garante que a ideia do resultado do subprocesso está diretamente conectada à sequência do fluxo do processo.
Boa tarde.
Estou com uma dúvida na representação da execução de um caderno de testes que caso o teste esteja em conformidade com a especificação ele é baixado e caso contrário retorna para o desenvolvedor aplicar o bug fix. Nesse caso, ainda que sejam testes individuais, de diferentes processos, eu devo colocar um processo cíclico com a condicionante de realizar 100% dos testes com resultado correto para poder avançar o processo?
OLá Luis, parece sim uma boa alternativa para representar o seu cenário: utilizar uma atividade de execução do caderno de testes que se repete várias vezes, uma para cada teste, e cuja condição é ter todos os testes 100% bem sucedidos para prosseguir. Nesse caso eu acho que um marcador de múltiplo paralelo seja mais interessante para você pois você pode realizar os testes paralelamente e enquanto um é corrigido os outros podem ser executados, geralmente sem dependência, certo? Quanto à condição de encerramento de uma atividade múltipla (no caso, os 100% testes bem sucedidos) isto não não costuma ficar explícita no processo, você terá que documentá-la nos parâmetros de propriedades da atividade. Se for importante colocar isso visualmente, recomendo associar uma annotation a essa atividade deixando visível o comentário.
Olá!
Tenho uma dúvida em relação ao uso de subprocesso.
Em determinado ponto do processo, há uma decisão para a execução entre dois (sub)processos, que não retornam para este primeiro processo.
Após a representação dos subprocessos, utilizasse o ‘Fim’ neste primeiro processo?
Olá Mayara! Sim, se não há necessidade de sincronizar o processo após a execução dos subprocessos, você deve encerrar cada um dos fluxos criados pelo gateway com um evento final.
Olá!
Primeiramente, gostaria de dizer que o blog da iProcess é maravilhoso! Parabéns pelo trabalho!
Bom, fiquei com uma dúvida sobre o Reusable Sub-Process. Eu criei um com 5 raias e preciso chamá-lo em outro processo. Porém, no outro processo este Reusable Sub-Process aparecerá em apenas uma raia, podendo induzir o leitor a acreditar que aquele Reusable Sub-Process é efetuado por apenas um papel, quando na verdade ao expandi-lo há 5 participantes. Existe alguma regra quanto a clareza de papéis e responsabilidades para Reusable Sub-Process?
Obrigada!
Olá Maize! Uau, sensacional saber que o blog está sendo assim tão interessante para você! Juntamente com todo o time de autores do Blog da iProcess, agradeço muito a sua mensagem!
Quanto à sua dúvida, uma sugestão é dar à raia um nome que implique no entendimento que é um grupo de pessoas. Por exemplo “Comitê avaliador”, “Equipe de execução” algo assim :) O que acha?