• Nenhum resultado encontrado

Verificação formal de workflows com spin

N/A
N/A
Protected

Academic year: 2021

Share "Verificação formal de workflows com spin"

Copied!
52
0
0

Texto

(1)
(2)

FICHA CATALOGRÁFICA ELABORADA PELA BIBLIOTECA DO IMECC DA UNICAMP Bibliotecária: Maria Fabiana Bezerra Müller – CRB8 / 6162

André, Amaury Bosso

An25v Verificação formal de workflows com spin/Amaury Bosso André-- Campinas, [S.P. : s.n.], 2010.

Orientador : Jacques Wainer.

Dissertação (mestrado) - Universidade Estadual de Campinas, Instituto de Computação.

1.Fluxo de trabalho. 2. Métodos formais (Ciência da computação). 3.Modelos spin. 4.PROMELA . I. Wainer, Jacques. II. Universidade Estadual de Campinas. Instituto de Computação. III. Título.

Título em inglês: Formal workflow verification with spin

Palavras-chave em inglês (Keywords): 1.Workflow. 2. Formal methods (Computer science). 3. Spin models. 4. PROMELA.

Área de concentração: Inteligência artificial, Verificação e Validação Titulação: Mestre em Ciência da Computação

Banca examinadora: Prof. Dr. Jacques Wainer (IC – UNICAMP) Profa. Dra. Lucinéia Heloisa Thom (Inf – UFRGS) Prof. Dr. Arnaldo Vieira Moura (IC - UNICAMP)

Data da defesa: 21/06/2010

(3)
(4)

Instituto de Computa¸c˜ao Universidade Estadual de Campinas

Verifica¸

ao formal de Workflows com Spin

Amaury Bosso Andr´

e

1

Maio de 2010

Banca Examinadora:

• Jacques Wainer (Orientador) • Lucin´eia H. Thom

• Arnaldo Moura • Maria Beatriz Toledo • Duncan D. Ruiz

1

Suporte financeiro de: Bolsa da FAPESP (processo 07/57995-3) 2008–2010

(5)

Resumo

O gerenciamento de workflows ´e uma realidade atualmente, mas os sistemas atuais care-cem de suporte `a verifica¸c˜ao de corre¸c˜ao em modelos de workflow. Este trabalho visa a realiza¸c˜ao de verifica¸c˜oes em processos, objetivando a detec¸c˜ao de erros sint´aticos, como a existˆencia de atividades mal modeladas, ou seja, sem condi¸c˜oes de entrada ou de sa´ıda. ´

E objetivo deste trabalho tamb´em a defini¸c˜ao de verifica¸c˜oes de ordem estrutural, como detectar se o processo de workflow n˜ao possui deadlocks (estado em que o processo trava sem possibilidade de progredir), ou verificar se existem atividades mortas no processo (atividades imposs´ıveis de serem executadas), ou se h´a termina¸c˜oes incompletas, ou seja, transi¸c˜oes pendentes ap´os o processo ter atingido seus objetivos.

Al´em de verifica¸c˜oes sint´aticas e estruturais, ´e necess´ario tamb´em a realiza¸c˜ao de veri-fica¸c˜oes semˆanticas do modelo, ou seja, ´e importante que os processos possam ser validados quanto a caracter´ısticas que dizem respeito `a sua organiza¸c˜ao l´ogica, a um n´ıvel um pouco mais alto de informa¸c˜ao do que simplesmente estrutural. Por exemplo, ´e diretamente im-pactante na qualidade do modelo de um processo, definir se este possui conflitos ao acesso de recursos. Dessa forma, um processo estruturalmente correto, pode ficar travado em um deadlock, devido `a concorrˆencia quanto ao acesso de um recurso comum entre atividades distintas. Al´em disso, verifica¸c˜oes de restri¸c˜oes de custo, por exemplo, tamb´em podem inviabilizar um processo. Todas essas verifica¸c˜oes s˜ao importantes para decidir se um processo de workflow ´e correto.

A maior contribui¸c˜ao deste trabalho, ´e ent˜ao a defini¸c˜ao de uma modelagem de pro-cessos de workflow que possibilite a verifica¸c˜ao de problemas sint´aticos, estruturais e semˆanticos, todos em uma ´unica ferramenta, que se mostra escal´avel para processos reais, al´em de possibilitar a verifica¸c˜ao de quest˜oes ad-hoc, espec´ıficas de cada instˆancia, como verificar ordena¸c˜oes entre atividades espec´ıficas, etc.

(6)

Abstract

Workflow management is a reality nowadays, but today’s systems give very little support to verify correctness in workflow models. This work aims to perform formal verification, with the goal of detecting syntactic errors, like the existence of activities poorly modeled, in other words, activities with no precondition or effect. It is a goal too, the definition of workflows structural verification, as to detect if the process does not have deadlocks (state in which the process is stuck with no possibility of getting any further), or verifying if there are dead activities in the process (activities impossible to be reached), or if exist incomplete terminations, ie, pending transitions after the process reached its objectives.

Besides syntactic and structural verifications, it is necessary too, to perform semantic verifications in the process, in other words, it is important to validate the processes in respect to characteristics of its logical organization, in a higher level of information than simply structural verification. For example, it is directly impacting in the quality of the process model the definition if it has resource access conflicts. In this way, a process that is structurally correct, can be stuck in a deadlock, due to the concurrency in the access of a common resource of distinct activities. Besides that, verifications of costs restrictions, for example, can spoil a process. All these verifications are important to decide if a workflow model is correct.

The main contribution of this work is the definition of workflow processes modeling that makes it possible to perform syntactic, structural and semantic verifications, all in a unique tool, that is showed to be scalable for real process, and even possible to verify ad-hoc questions, specific to the model, as checking activities ordering, for example.

(7)

Agradecimentos

Gostaria de agradecer o apoio de meus familiares e amigos, com quem sempre pude contar, e agradecer meu orientador, pelos caminhos abertos em minha vida acadˆemica e profissional.

(8)

Sum´

ario

Resumo vii Abstract ix Agradecimentos xi 1 Introdu¸c˜ao 1 1.1 Objetivos . . . 2 1.1.1 Verifica¸c˜ao Estrutural . . . 2 1.1.2 Verifca¸c˜ao de Recursos . . . 2

1.1.3 Verifca¸c˜ao de Restri¸c˜oes de Custo . . . 3

1.2 Proposta . . . 3 1.3 Trabalhos relacionados . . . 4 1.4 Estrutura da disserta¸c˜ao . . . 5 2 Principais Fundamentos 7 2.1 Workflow . . . 7 2.1.1 Estado . . . 7 2.1.2 Atividade . . . 7 2.1.3 Transi¸c˜ao . . . 8 2.1.4 Recurso . . . 9

2.1.5 Estado inicial e Objetivo . . . 9

2.2 Promela . . . 10 2.3 L´ogica LTL . . . 12 2.3.1 Operadores b´asicos . . . 12 2.3.2 Operadores temporais . . . 13 2.4 Spin . . . 14 2.4.1 Caminhada aleat´oria . . . 14 2.4.2 Caminhada Iterativa . . . 14 2.4.3 Explora¸c˜ao exaustiva . . . 14 xiii

(9)

2.4.4 Utiliza¸c˜ao . . . 15 3 Verifica¸c˜ao de Workflows 17 3.1 Modelagem . . . 17 3.1.1 Transi¸c˜ao sequencial . . . 18 3.1.2 Transi¸c˜ao paralela . . . 19 3.1.3 Transi¸c˜ao Condicional . . . 19 3.1.4 Transi¸c˜ao Iterativa . . . 21 3.2 Verifica¸c˜ao Estrutural . . . 22

3.2.1 Atividades sem condi¸c˜oes de entrada ou sa´ıda . . . 22

3.2.2 Deadlock . . . 23

3.2.3 Termina¸c˜ao Completa . . . 25

3.3 Quest˜oes Ad-hoc . . . 26

3.4 Verifica¸c˜ao de Recursos . . . 29

3.5 Verifica¸c˜ao de Restri¸c˜oes de Custo . . . 30

3.6 Relaxa¸c˜ao do crit´erio de Termina¸c˜ao Completa . . . 32

3.7 Compara¸c˜ao de Desempenho . . . 33

4 Conclus˜oes 39

A Descri¸c˜ao de Processos 41

Bibliografia 44

(10)

Cap´ıtulo 1

Introdu¸

ao

A necessidade de se manterem competitivas no mercado trouxe `a tona para as empresas a carˆencia de documenta¸c˜ao, comunica¸c˜ao e transferˆencia de conhecimento, assim como a necessidade de uma profunda e objetiva modelagem de seus processos de neg´ocio mais importantes. Al´em disso, nos ´ultimos anos, a automa¸c˜ao de processos tem se tornado uma constante, objetivando a redu¸c˜ao de custos, de tempo de execu¸c˜ao e aumento na confiabilidade de processos. Segundo a WfMC [21], a automa¸c˜ao do processo de neg´ocio, na sua totalidade ou em partes, onde documentos, informa¸c˜oes ou tarefas s˜ao passadas de um participante para o outro para execu¸c˜ao de uma a¸c˜ao, de acordo com um conjunto de regras de procedimentos, define um workflow. A WfMC define tamb´em os WFMS (Workflow Management Systems), sistemas que definem, gerenciam e executam work-flows, fornecendo maior automa¸c˜ao para os processos de neg´ocios. Consequentemente, as empresas passaram a ter maior aten¸c˜ao na modelagem e coordena¸c˜ao de seus processos, com maior ˆenfase a verifica¸c˜ao e corre¸c˜ao de suas rotinas mais impactantes.

Processos de neg´ocio tem tomado grandes propor¸c˜oes dentro das empresas, crescendo em tamanho e complexidade. Com isso a probabilidade de ocorrˆencia de erros aumenta, e um processo mal projetado pode causar grandes perdas financeiras, retrabalho, problemas legais, problemas gerenciais, etc. Para evitar esses problemas, ´e necess´ario fazer uma verifica¸c˜ao da corre¸c˜ao de processos de workflow antes deles se tornarem operacionais. A maioria dos sistemas comerciais checam erros sint´aticos em workflows, como a n˜ao existˆencia de transi¸c˜oes de entrada ou sa´ıda em atividades. No entanto, verifica¸c˜oes mais complexas devem ser realizadas, e os sistemas de gerenciamento de workflows ainda n˜ao s˜ao capazes de tratar verifica¸c˜oes sofisticadas, por exemplo: checar se um processo eventualmente termina, ou seja, se n˜ao h´a deadlocks, se um trace de execu¸c˜ao ´e poss´ıvel, se n˜ao h´a atividades inating´ıveis em qualquer instˆancia do processo, entre outros, s˜ao valida¸c˜oes importantes n˜ao tratadas nos sistemas atuais de gerenciamente de workflows [8].

(11)

2 Cap´ıtulo 1. Introdu¸c˜ao

Apesar de um grande passo, verificar a ausˆencia da possibilidade de deadlock e de tarefas mortas, s˜ao verifica¸c˜oes que dizem respeito somente a parte sint´atica do processo. Verifica¸c˜oes ainda mais sofisticadas, que dizem respeito a semˆantica do processo deve-riam ser tratadas. Semˆantica envolve ordena¸c˜ao de atividades, concorrˆencia por recursos, verifica¸c˜ao de restri¸c˜oes tang´ıveis, como limites de custo por exemplo. Todos esses aspec-tos comprometem a corre¸c˜ao e viabilidade de processos, por´em s˜ao pouco abordados nas ferramentas de verifica¸c˜ao existentes. O objetivo principal deste trabalho ´e oferecer o fer-ramental necess´ario para a verifica¸c˜ao de crit´erios sint´aticos em workflows, mas tamb´em de crit´erios semˆanticos, que permitam uma an´alise muito mais completa de corre¸c˜ao do processo, mas tamb´em de adequa¸c˜ao a limites previamente estabelecidos como de custo, de acesso a recursos, ou seja, restri¸c˜oes sempre presentes num processo real.

1.1

Objetivos

A seguir, ´e apresentada uma descri¸c˜ao breve dos objetivos, organizados em t´opicos, abor-dados no decorrer do texto.

1.1.1

Verifica¸

ao Estrutural

A verifica¸c˜ao de estrutura aborda as principais inconsistˆencias de Workfows, como dead-locks, falta de sincronismo, uso incorreto de estruturas, objetivos pendentes (ou ter-mina¸c˜ao incompleta) e atividades mortas. As principais referˆencias na proposta de solu¸c˜oes para essa classe de problemas s˜ao os trabalhos de Van der Aalst [16, 15, 19, 18, 20].

1.1.2

Verifca¸

ao de Recursos

Outro assunto importante na verifca¸c˜ao de Workfows ´e o que diz respeito a conflitos de recursos entre atividades distintas. Ou seja, entre atividades de um mesmo workflow ou de workflows diferentes, deve-se evitar que haja competi¸c˜ao pelo mesmo recurso, que pode ser um documento, dados, m´aquinas ou at´e mesmo pessoas.

Assim, uma distin¸c˜ao ´e levada em considera¸c˜ao: a presen¸ca de recursos que sejam compartilh´aveis, e recursos exclusivos. Por exemplo, a informa¸c˜ao de um documento pode ser compartilhada entre atividades concorrentes, no entanto, a altera¸c˜ao dessa in-forma¸c˜ao n˜ao pode ser permitida a m´ultiplas atividades ao mesmo tempo, possibilitando a ocorrˆencia de “race conditions”.

(12)

1.2. Proposta 3

1.1.3

Verifca¸

ao de Restri¸

oes de Custo

Em processos de workflow reais, h´a normalmente uma restri¸c˜ao de or¸camento, seja para o processo como um todo, ou para etapas do processo. Dessa forma, ´e necess´aria a verifica¸c˜ao de restri¸c˜oes de custo a fim de checar se os processos podem cumprir as limita¸c˜oes de or¸camento previamente definidas. Alguns processo podem ter v´arias re-stri¸c˜oes expl´ıcitas, inclusive rere-stri¸c˜oes de custo atividade a atividade, enquanto outros processos apenas uma restri¸c˜ao global.

Na literatura n˜ao s˜ao muitos trabalhos que lidam com a verifica¸c˜ao de custo, por´em h´a alguns avan¸cos importantes como em [25, 24, 26].

1.2

Proposta

Uma proposta de verifica¸c˜ao formal de workflows foi desenvolvida neste trabalho, usando um model checker (verificador de modelos) chamado Spin. Para isso, a modelagem do pro-cesso de workflow ´e traduzida para o PROMELA (Process Meta Language), a linguagem utilizada no verificador. Para isso, um processo modelado em XPDL por exemplo, tem de passar por uma ferramenta de tradu¸c˜ao, para ser convertido para o Promela. Os principais elementos dessa linguagem ser˜ao descritos nas se¸c˜oes que se seguem, assim a convers˜ao entre as linguagens ´e meramente um trabalho de tradu¸c˜ao direta. Para este trabalho foi desenvolvida uma ferramenta de convers˜ao entre o XPDL e o Promela. Como desen-volvimento futuro, pretende-se extender essa ferramenta para converter tamb´em processos modelados em BPMN. A estrutura do sistema proposto pode ser visto na figura 1.1.

Figura 1.1: Estrutura de modelagem de processos.

A proposta visa a realiza¸c˜ao de verifica¸c˜oes sint´aticas, como checar a corre¸c˜ao de ativi-dades quanto as suas precondi¸c˜oes e efeitos (transi¸c˜oes de entrada e sa´ıda), realizar veri-fica¸c˜oes estruturais, como a ausˆencia de deadlocks e tarefas mortas, al´em de veriveri-fica¸c˜oes

(13)

4 Cap´ıtulo 1. Introdu¸c˜ao

de quest˜oes semˆanticas, como a checagem de quest˜oes ad-hoc de natureza espec´ıfica do problema, verifica¸c˜ao de conflitos ao acesso de recursos, verifica¸c˜ao de restri¸c˜oes de custo, al´em da relaxa¸c˜ao do crit´erio de termina¸c˜ao completa.

O foco do trabalho est´a na pluralidade e complexidade de verifica¸c˜oes poss´ıveis em modelos de workflow, ao inv´es de grandes ganhos em eficiˆencia. Por´em, o Spin ´e notoria-mente uma ferramenta de model checking que possui um bom desempenho, mesmo para modelos grandes, como mostram alguns trabalho da literatura [23]. Uma compara¸c˜ao tamb´em ´e realizada neste trabalho, levando em conta as mesmas funcionalidades (veri-fica¸c˜oes estruturais apenas) entre a modelagem desenvolvida e o Woflan [17], principal verificador de workflows utilizado, e mais citado da literatura.

1.3

Trabalhos relacionados

Como descrito anteriormente, este trabalho visa a aplica¸c˜ao de um model checker na verifica¸c˜ao de workflows, por´em, na literatura, outras linhas relevantes de pesquisas que atacam o mesmo problema de verifica¸c˜ao, s˜ao propostas. Assim, algumas das linhas mais relevantes nesta ´area de verifica¸c˜ao de workflows s˜ao apresentados nesta se¸c˜ao.

A primeira linha de pesquisa busca relacionar a verifica¸c˜ao de workflows com a veri-fica¸c˜ao de corre¸c˜ao em transa¸c˜oes de banco de dados, aplicando o crit´erio ACID (atomici-dade, consistˆencia, isola¸c˜ao e durabilidade) de forma relaxada para modelos de workflow. Do ponto de vista de banco de dados, workflows s˜ao tratados como transa¸c˜oes de longa dura¸c˜ao, dessa forma, o crit´erio ACID pode ser aplicado tanto para falhas do sistema e falhas l´ogicas. Esse esquema ´e utilizado em [7], e diz respeito a workflows transacionais somente, e pesquisas adicionais devem ser feitas para incorporar objetos e execu¸c˜oes n˜ao transacionais.

Uma abordagem diferente ´e usada por Van der Aalst em seus trabalhos [16, 15, 19, 18, 20]. Neles essencialmente uma verifica¸c˜ao de trˆes propriedades ´e feita: ausˆencia de deadlocks, de livelocks e de termina¸c˜ao completa. Para isso, o modelo de workflow ´e traduzido para um tipo particular de redes de Petri, a WorkFlow Net, ou simplesmente WF-net, utilizada para a verifica¸c˜ao atrav´es do Woflan [17]. A ausˆencia de deadlocks ´e a propriedade que nenhuma poss´ıvel execu¸c˜ao do workflow resulta na situa¸c˜ao onde nenhuma atividade pode ser executada, antes do workflow ter terminado. Termina¸c˜ao completa descreve a situa¸c˜ao quando um dos ramos de execu¸c˜ao do workflow atinge o fim do processo, e n˜ao sobram atividades em execu¸c˜ao [18].

Os outros artigos abordam mais quest˜oes sobre o sequenciamento das atividades no modelo do processo (usando v´arias defini¸c˜oes de como o processo ´e representado) e pro-priedades dessas sequˆencias. Por exemplo, [11] trata apenas de modelos de representa¸c˜ao de processos balanceados, onde os OR-split/join est˜ao no escopo de AND-split/join e vice

(14)

1.4. Estrutura da disserta¸c˜ao 5

versa, e verifica apenas algumas propriedades triviais nesses modelos. (Sendo justo com os autores, a enfase do artigo ´e na gera¸c˜ao autom´atica de workflows, e n˜ao na verifica¸c˜ao). [14] apresenta algumas defini¸c˜oes de corre¸c˜ao que podem ser verificadas sintaticamente nos modelos de workflows, como por exemplo, o uso de AND ou OR-joins com apenas um arco de chegada, ou splits com apenas um arco de sa´ıda, etc.

Em [1] ´e apresentado um framework te´orico para a aplica¸c˜ao de l´ogica proposicional na verifica¸c˜ao de workflows. Atrav´es disso, ´e poss´ıvel detectar anomalias nos modelos de workflow. Ele mapeia workflows ac´ıclicos em express˜oes l´ogicas e propriedades de corre¸c˜ao s˜ao verificadas por um provador autom´atico de teoremas.

Por fim, outra linha de verifica¸c˜ao ´e atrav´es de model checkers, ou verificadores de modelos, e um n´umero crescente de trabalhos vˆem relacionando este tipo de verifica¸c˜ao com workflows e web services, como em [12, 2, 23]. Neles o Spin ´e utilizado, mas somente para verifica¸c˜ao estrutural. Em [2] a verifica¸c˜ao ´e aplicada em web-services multi agentes, em [12] como um verificador da semˆantica comportamental da linguagem BPEL4WS, e em [23] uma compara¸c˜ao ´e realizada entre o Spin e o Woflan.

1.4

Estrutura da disserta¸

ao

No cap´ıtulo 2 s˜ao apresentados os fundamentos principais abordados neste trabalho, como a apresenta¸c˜ao dos conceitos relacionados a Workflow na se¸c˜ao 2.1, a linguagem utilizada o Spin, o PROMELA, na se¸c˜ao 2.2, e uma breve descri¸c˜ao de f´ormula¸c˜oes em LTL (L´ogica Temporal Linear) na se¸c˜ao 2.3, f´ormulas necess´arias para verifica¸c˜oes mais complexas. Ainda, ´e apresentado na se¸c˜ao 2.4 uma descri¸c˜ao do Spin, o verificador utilizado neste trabalho.

Feita a apresenta¸c˜ao dos fundamentos b´asicos deste trabalho, o cap´ıtulo 3 descreve as verifica¸c˜oes de workflow, de acordo com os objetivos tra¸cados na se¸c˜ao 1.1. Para tanto, primeiramente ´e descrita a modelagem de processos de workflows em PROMELA, na se¸c˜ao 3.1. Uma vez modelado o processo, ent˜ao s˜ao apresentados os m´etodos de verifica¸c˜ao propostos, dividos nas se¸c˜oes que se seguem. Al´em dos procedimentos de verifica¸c˜ao, ´e apresentada uma argumenta¸c˜ao quanto ao crit´erio de termina¸c˜ao completa e sua relaxa¸c˜ao neste trabalho, na se¸c˜ao 3.6.

Por fim, alguns teste s˜ao apresentados com o intuito de comparar o desempenho do verificador proposto com o Woflan, na se¸c˜ao 3.7, al´em das conclus˜oes do trabalho, no cap´ıtulo 4.

(15)

Cap´ıtulo 2

Principais Fundamentos

2.1

Workflow

A WfMC ´e uma organiza¸c˜ao global engajada no desenvolvimento de Workflow e na Mod-elagem de Processos de Neg´ocios (do inglˆes, Business Process Modeling - BPM). Segundo a WfMC (Workflow Management Coalition) [22], Workflow ´e a automa¸c˜ao de processos de neg´ocio, na sua totalidade ou em partes, onde documentos, informa¸c˜oes ou tarefas s˜ao passadas de um participante para o outro, de acordo com um conjunto de regras e procedimentos para atingir um objetivo de neg´ocio.

Um Workflow consiste em uma sequˆencia de passos conectados, ou seja, uma sequˆencia de opera¸c˜oes, que pode ser o trabalho de uma pessoa, de um grupo de pessoas, ou de uma organiza¸c˜ao. Dessa forma, um workflow pode ser tratado como a execu¸c˜ao de uma ordem parcial de tarefas de um processo de neg´ocio. A seguir, os principais elementos de um workflow s˜ao relatados e brevemente descritos.

2.1.1

Estado

Estado ´e a representa¸c˜ao das condi¸c˜oes internas que define o status do processo em um certo momento no tempo. Conforme a execu¸c˜ao do processo avan¸ca, ele segue uma s´erie de transi¸c˜oes entre estados, e o conjunto completo de estados e transi¸c˜oes define o com-portamento interno, assim como todas as possibilidades de execu¸c˜ao que um processo pode seguir.

2.1.2

Atividade

´

E a descri¸c˜ao de uma por¸c˜ao de trabalho que corresponde a um passo l´ogico e indivis´ıvel dentro de um processo. Uma atividade ´e definida pelos requisitos que s˜ao necess´arios para

(16)

8 Cap´ıtulo 2. Principais Fundamentos

que ela possa ser executada, ou seja, suas precondi¸c˜oes, e os resultados de sua execu¸c˜ao, ou seja, seus efeitos. Precondi¸c˜oes e efeitos definem as transi¸c˜oes de entrada e sa´ıda da atividade, atrav´es de controles de fluxo, como definidas no t´opico a seguir.

2.1.3

Transi¸

ao

Transi¸c˜oes definem o encadeamento de atividades em um processo, controlando assim o fluxo de execu¸c˜ao das atividades. Existem quatro tipos de transi¸c˜oes entre estados e atividades, como pode ser visto na figura 2.1 .

Figura 2.1: Transi¸c˜oes.

Sequencial

Uma transi¸c˜ao sequencial ´e caracterizada quando atividades s˜ao executadas uma direta-mente ap´os a outra. Na figura 2.1.a, a atividade B ´e executada sodireta-mente depois que a tarefa A ´e terminada.

Paralela

Transi¸c˜oes paralelas acontecem quando duas ou mais atividades s˜ao iniciadas concor-rentemente ap´os a execu¸c˜ao de uma atividade. Na figura 2.1.b, as atividades B e C s˜ao executadas em paralelo, ou seja, B e C s˜ao executadas ao mesmo tempo, ou em qualquer ordem. Para modelar uma transi¸c˜ao paralela, dois blocos s˜ao definidos: AND-split e AND-join. O AND-split habilita as atividades B e C a serem executadas ap´os o t´ermino da atividade A, enquanto o AND-join sincroniza o fluxo de execu¸c˜ao, esperando o t´ermino dos ramos de entrada para depois somente liberar a execu¸c˜ao da pr´oxima atividade. No exemplo da figura 2.1.b, a atividade A possui um AND-split e a atividade D possui um AND-join.

(17)

2.1. Workflow 9

Condicional

A trasi¸c˜ao condicional ´e utilizada quando h´a a necessidade de escolha entre dois ou mais fluxos a se seguir. Na figura 2.1.c, ap´os o t´ermino da atividade A, ou a atividade B ou a C ser´a executada. Da mesma forma que para transi¸c˜oes paralelas, para modelar as transi¸c˜oes condicionais s˜ao necess´arios dois blocos: OR-split e OR-join. O bloco OR-split define qual dos dois fluxos de execu¸c˜ao ser´a escolhido, na figura 2.1.c, entre as atividades B ou C, e o bloco OR-join libera a execu¸c˜ao do fluxo que se segue quando pelo menos um dos dois ou mais fluxos que o precedem for verdadeiro. No exemplo da figura 2.1.c, h´a um OR-split ap´os a atividade A e um OR-join antes da atividade D.

No contexto deste trabalho, o OR-split ´e modelado como um ou-exclusivo, ou seja, ap´os a atividade A, ou a atividade B ou a C ser´a executada, mas n˜ao ambas. Assim, consideraremos o bloco de controle split, como na verdade, um Xsplit. O OR-join, no entanto, n˜ao tem essa mesma restri¸c˜ao para esse trabalho, podendo ser ativado por um, ou mais fluxos de execu¸c˜ao.

Iterativa

Transi¸c˜oes iterativas s˜ao usadas quando ´e necess´ario executar a mesma tarefa, ou o mesmo grupo de tarefas, m´ultiplas vezes. Na figura 2.1.d, a tarefa B ´e executada uma ou mais vezes.

2.1.4

Recurso

Recursos s˜ao definidos como entidades associadas a workflows, e requeridas em tempo de execu¸c˜ao para auxiliar na execu¸c˜ao de uma ou mais atividades. Consideraremos recursos como dados, informa¸c˜oes, documentos, m´aquinas ou pessoas.

2.1.5

Estado inicial e Objetivo

Al´em dos elementos descritos anteriormente, ainda fazem parte da modelagem de workflow a defini¸c˜ao do Estado inicial e do Objetivo do processo que definem, respectivamente, as condi¸c˜oes de inicializa¸c˜ao do processo e o estado desejado ap´os o seu encerramento. Resumo

Um workflow, ent˜ao, define um processo atrav´es dos objetivos de neg´ocio que ele satisfaz, das condi¸c˜oes iniciais, ou seja, de um retrato do estado em que as vari´aveis utilizadas no processo se encontram antes do in´ıcio da execu¸c˜ao, e atrav´es das atividades, que transformam o estado inicial em estados transit´orios, at´e que, dada uma sequˆencia de

(18)

10 Cap´ıtulo 2. Principais Fundamentos

transi¸c˜oes, atinja o objetivo desejado, independente das circunstˆancias enfrentadas e das escolhas tomadas no decorrer da execu¸c˜ao. Isso ´e o que se espera de um processo de workflow correto e bem modelado.

2.2

Promela

PROMELA, abrevia¸c˜ao para Process Meta Language, ´e uma linguagem de modelagem de processos que permite definir a cria¸c˜ao dinˆamica de processos concorrentes, de forma que, dado um programa em PROMELA, ´e poss´ıvel usar um verificador simb´olico para determinar a sua corre¸c˜ao.

Programas em PROMELA s˜ao constitu´ıdos por processos, canais de mensagens e vari´aveis. Processos s˜ao objetos globais que podem ser executados concorrentemente. Canais de mensagens e vari´aveis podem ser globais ou declarados localmente, dentro de um processo.

O estado de uma vari´avel ou de um canal de mensagem s´o pode ser alterado por um processo. O processo ´e definido em PROMELA atrav´es da seguinte declara¸c˜ao:

proctype A() { estado = 3; }

No exemplo anterior, ´e declarado um processo A, que altera o valor de uma vari´avel

estado.

O processo ´e declarado atrav´es de um proctype, mas n˜ao executado. No in´ıcio, somente um processo ´e executado, o processo declarado como init. E a partir dele, os outros processos podem ser chamados. Para isso, ´e necess´ario utilizar o comando run, como no exemplo a seguir:

init { run A(); }

Como descrito anteriormente, os processos podem ser executados concorrentemente, e assim suas instru¸c˜oes internas podem ser intercaladas. Para evitar que isso aconte¸ca, ou seja, para indicar que uma sequˆencia de instru¸c˜oes seja executada sem intercala¸c˜oes, como uma unidade indivis´ıvel, deve-se usar o comando atomic, e entre chaves as instru¸c˜oes que devem ser atˆomicas, como por exemplo:

atomic { instru¸c~oes; }

(19)

2.2. Promela 11

Al´em das defini¸c˜oes anteriores, s˜ao parte da linguagem os controladores de fluxo, como condicionais, repeti¸c˜oes e implica¸c˜oes.

Uma implica¸c˜ao condiciona a continuidade do fluxo de execu¸c˜ao. Por exemplo, a instru¸c˜ao a seguir ser´a executada somente se o valor da vari´avel estado for igual a 1, e caso contr´ario, o processo fica travado.

proctype B() {

(estado==1) -> estado=2; }

O comando condicional apresentado a seguir seleciona qual fluxo a execu¸c˜ao do pro-cesso deve tomar. Os fluxos s˜ao definidos com dois pontos duplos antes da instru¸c˜ao ou conjunto de instru¸c˜oes. E a escolha ´e feita de forma n˜ao determin´ıstica. Por exemplo:

proctype C() { if :: estado = 1; :: estado = 2; fi }

Na defini¸c˜ao anterior, ap´os a execu¸c˜ao do processo C, o valor da vari´avel estado pode ser 1 ou 2, devido ao fato da escolha ser n˜ao-determin´ıstica.

O ´ultimo controlador de fluxo define repeti¸c˜oes, e ´e definido atrav´es do comando do, atrav´es da estrutura exemplificada a seguir:

proctype D() { byte estado = 0; do :: estado = estado + 1; :: (estado==3) -> break; od }

Assim como o comando condicional, a estrutura de repeti¸c˜ao do PROMELA seleciona uma op¸c˜ao de fluxo somente para execu¸c˜ao a cada itera¸c˜ao. Para terminar a repeti¸c˜ao o comando break ´e utilizado. Assim, no exemplo anterior, a cada repeti¸c˜ao um dos dois fluxos poss´ıveis ´e selecionado n˜ao-deterministicamente, at´e que a condi¸c˜ao de termina¸c˜ao seja satisfeita. Note que para o exemplo anterior, ´e poss´ıvel que essa condi¸c˜ao nunca seja satisfeita: suponha que por mais de trˆes vezes o fluxo escolhido seja o primeiro. Mesmo que o segundo fluxo seja escolhido posteriormente, jamais o valor da vari´avel estado ser´a trˆes novamente. Este ´e apenas um exemplo da complexidade que esta modelagem pode atingir.

(20)

12 Cap´ıtulo 2. Principais Fundamentos

Resumo

Os principais elementos de PROMELA foram apresentados nesta se¸c˜ao. No entanto de-scri¸c˜oes muito mais detalhadas podem ser obtidas em manuais online123. As estruturas

ap-resentadas nesta se¸c˜ao ser˜ao as utilizadas neste trabalho para a modelagem de atividades e processos de workflows, como pode ser visto nas se¸c˜oes que se seguem, principalmente na se¸c˜ao 3.1.

2.3

ogica LTL

A l´ogica temporal denominada LTL (Linear Temporal Logic) utiliza proposi¸c˜oes atˆomicas, operadores booleanos e operadores temporais para construir f´ormulas que fazem referˆencia a uma ordena¸c˜ao total de eventos. Com ela, ´e poss´ıvel verificar se propriedades ser˜ao verdadeiras eventualmente em algum momento do futuro, ou se uma condi¸c˜ao ´e verdadeira at´e que outro fato se torne verdadeiro, etc.

Formula¸c˜oes em LTL s˜ao utilizadas para diversas verifica¸c˜oes em processos de work-flows. Algumas delas estruturais, mas a maioria das formula¸c˜oes visam a verifica¸c˜ao de quest˜oes semˆanticas do processo, como ordena¸c˜oes impr´oprias, concorrˆencias indevidas, precedˆencia, entre v´arias outras possibilidades relatadas no cap´ıtulo de verifica¸c˜oes deste texto.

Para isso, s˜ao apresentados aqui os operadores e suas funcionalidades na defini¸c˜ao de f´ormulas LTL.

2.3.1

Operadores b´

asicos

Os operadores b´asicos, s˜ao os operadores de AND e OR l´ogicos, al´em de implica¸c˜ao l´ogica, equivalˆencia e nega¸c˜ao. Esses operadores s˜ao representados atrav´es dos seguintes s´ımbolos:

1. (x && y) AND 2. (x || y) OR

3. (x -> y) implica¸c~ao l´ogica 4. (x <-> y) equival^encia l´ogica 5. (!x) nega¸c~ao

A utiliza¸c˜ao desses operadores para verifica¸c˜ao segue o uso comum, por exemplo: a primeira f´ormula, com AND l´ogico, ´e verdadeira se todos os termos da express˜ao forem verdadeiros, ou seja se as vari´aveis x e y s˜ao ambas verdadeiras. Para a segunda f´ormula,

1 http://spinroot.com/spin/Man/promela.html 2 http://www.dai-arc.polito.it/dai-arc/manual/tools/jcat/main/node168.html 3 http://cnx.org/content/m12318/latest/

(21)

2.3. L´ogica LTL 13

com o OR l´ogico, basta um termo ser verdadeiro para a express˜ao tamb´em ser verdadeira (a vari´avel x ou a vari´avel y).

A terceira f´ormula ´e definida verdadeira, caso a vari´avel x seja verdadeira e a vari´avel y tamb´em seja verdadeira, ou seja: a veracidade da primeira vari´avel implica que a segunda tamb´em seja verdadeira, ou caso a vari´avel x seja falsa. Para uma equivalˆencia l´ogica, no entanto, al´em de uma implica¸c˜ao entre a vari´avel x e y, ´e necess´ario tamb´em que a rec´ıproca seja verdadeira, ou seja, que haja uma implica¸c˜ao entre y e x, ou seja, que as vari´aveis tenham os mesmo valor l´ogico.

O operador nega¸c˜ao inverte o valor l´ogico da vari´avel, assim a f´ormula 5 ´e verdadeira caso a vari´avel x seja falsa.

2.3.2

Operadores temporais

Al´em dos operadores b´asicos, s˜ao definidos operadores temporais na formula¸c˜ao LTL. Os s´ımbolos que definem esses operadores s˜ao apresentados a seguir.

1. ()x seguinte 2. <>x eventualmente

3. []x sempre

4. x U y verdade at´e 5. x R y falso ap´os

Uma f´ormula com o operador seguinte ´e verdadeira se uma condi¸c˜ao ´e verdadeira no estado seguinte, por exemplo, a f´ormula 1 ´e verdadeira, se no pr´oximo estado a vari´avel x for verdadeira. J´a a f´ormula 2, com o operador eventualmente, ´e verdadeira se a vari´avel x ´e verdadeira agora ou em algum momento posterior, n˜ao necessariamente o pr´oximo. Para a f´ormula 3, com o operador sempre, o princ´ıpio ´e o mesmo, no entanto a formula ´e verdadeira somente se a vari´avel x for verdadeira para o estado atual e todos os estados seguintes.

Os operadores verdade at´e e falso ap´os, ao contr´ario dos operadores anteriores, s˜ao bin´arios, ou seja, s˜ao definidos para dois termos. A f´ormula 4, com o operador verdade

at´e, ´e definida verdadeira se a vari´avel x for verdade pelo menos at´e o estado em que y se

torne verdadeira. No entanto, para a f´ormula 5 ser verdadeira, a vari´avel x deve deixar de ser verdadeira a partir do momento em que a vari´avel y se torne verdadeira.

Resumo

Com os operadores temporais em conjunto com os operadores b´asicos ´e poss´ıvel formular restri¸c˜oes com rela¸c˜ao ao tempo para atividades dentro de um processo de workflow. Dessa forma, a capacidade de verifica¸c˜ao pode ser estendida para al´em de verifica¸c˜oes sint´aticas ou estruturais. Para isso, f´ormulas LTL ser˜ao usadas como pode ser visto adiante no cap´ıtulo 3, onde as verifica¸c˜oes de processos de workflows s˜ao descritas.

(22)

14 Cap´ıtulo 2. Principais Fundamentos

2.4

Spin

Processos definidos em PROMELA podem ser analizados com o SPIN (Simple PROMELA Interpreter) [3], um verificador formal open-source bastante difundido, para verificar se o sistema modelado produz o comportamento desejado.

Dado um programa em PROMELA, o SPIN verifica a corre¸c˜ao do modelo atrav´es de trˆes tipos de abordagens: caminhada aleat´oria pelos traces de execu¸c˜ao, caminhada interativa, ou explora¸c˜ao exaustiva de todos os traces. A verifica¸c˜ao exaustiva ´e executada atrav´es da gera¸c˜ao de um programa em c´odigo C, gerado a partir do modelo descrito em PROMELA. As verifica¸c˜oes realizadas pelo Spin tˆem por finalidade checar e existˆencia de deadlocks no modelo e trechos de c´odigo n˜ao ating´ıveis.

A seguir cada uma das abordagens de verifica¸c˜ao poss´ıveis no Spin s˜ao explicadas com um pouco mais de detalhes.

2.4.1

Caminhada aleat´

oria

Um processo definido em PROMELA pode ser representado tamb´em por uma ´arvore com-putacional, de forma que diferentes traces de execu¸c˜ao representam diferentes caminhadas na ´arvore. Em uma caminhada aleat´oria, o Spin aleatoriamente toma um caminho em um ponto de escolha. Em cada bifurca¸c˜ao da ´arvore computacional, o Spin decide qual fluxo seguir, gerando um trace de execu¸c˜ao aleat´orio. Note que neste modo, algumas vezes o Spin pode encontrar um erro, mas na maioria das vezes n˜ao.

2.4.2

Caminhada Iterativa

A caminhada iterativa se assemelha a aleat´oria, com a diferen¸ca de que a responsabilidade de escolher qual fluxo seguir nos pontos de escolha ´e transferida ao usu´ario. Dessa forma, o Spin pode ser guiado em dire¸c˜ao ao erro, mas isso requer um conhecimento a priori da falha, ou pelo menos que o usu´ario reconhe¸ca onde ´e mais prov´avel que o erro ocorra.

2.4.3

Explora¸

ao exaustiva

O Spin realiza uma busca em profundidade na ´arvore computacional para a verifica¸c˜ao do processo. Por´em, ao contr´ario dos outros model-checkers, o Spin n˜ao realiza de fato uma verifica¸c˜ao de modelo, mas sim gera c´odigos em C para verifica¸c˜ao. Esta t´ecnica poupa mem´oria e aumenta a eficiˆencia. O Spin tamb´em oferece um grande n´umero de op¸c˜oes para acelerar a verifica¸c˜ao do processo como:

(23)

2.4. Spin 15

Redu¸c˜ao de ordem parcial ´

E sabido que a busca em profundidade exaustiva para verifica¸c˜ao de propriedades como ausˆencia de deadlock ´e redundante, devido as muitas possibilidades de intercala¸c˜ao entre atividades concorrentes independentes. Em [6], um algoritmo para redu¸c˜ao est´atica ´e apresentado, algoritmo este que preserva a capacidade do verificador em checar as pro-priedades desejadas.

Compress˜ao de estados

Em [13], um m´etodo que representa estados na forma de autˆomatos determin´ısticos ´e apresentado, em conjunto com um algoritmo que armazena ou remove uma string de um conjunto de estados, preservando a minimalidade do autˆomato. Esta t´ecnica diminui a utiliza¸c˜ao de mem´oria do processo de verifica¸c˜ao.

Bitstate hashing

Ao inv´es de armazenar todos os estados, somente o hash code ´e guardado. Assim como a t´ecnica de compress˜ao de estados, a utiliza¸c˜ao do bitstate hashing ajuda a diminuir a utiliza¸c˜ao de mem´oria durante a verifica¸c˜ao. Bitstate hashing, ao inv´es de armazenar todos os estados do processo, guarda somente o hash code de cada um. Em [5], uma aproxima¸c˜ao anal´ıtica da cobertura esperada do m´etodo de bitstate hashing e uma compara¸c˜ao com duas outras estrat´egias ´e apresentada.

2.4.4

Utiliza¸

ao

A utiliza¸c˜ao do Spin via explora¸c˜ao exaustiva se d´a a partir dos seguintes comandos:

spin -a model.promela gcc pan.c -o pan ./pan

Caso haja uma falha no processo, um arquivo do tipo model.promela.trail, com o exato trace de execu¸c˜ao que ocasionou a falha ´e criado, e assim ´e poss´ıvel executar o trace que gerou a falha atrav´es do comando a seguir, para uma visualiza¸c˜ao idˆentica a uma caminhada iterativa.

spin -t model.promela

No modo de explora¸c˜ao exaustiva ´e posspivel ainda checar restri¸c˜oes temporais, definidas a partir de f´ormulas LTL, como descrito na se¸c˜ao 2.3. Para isso, a f´ormula que se deseja verificar no processo deve ser passada como parˆametro, por exemplo:

(24)

16 Cap´ıtulo 2. Principais Fundamentos

spin -a -f "<>(x && y)" model.promela gcc pan.c -o pan

./pan

No exemplo anterior, ´e inserida uma restri¸c˜ao ao processo: caso a vari´avel x e a vari´avel y sejam verdadeiras ao mesmo tempo, em algum estado do processo, ent˜ao este possui uma falha. ´E importante ressaltar que a satisfa¸c˜ao da f´ormula, constitui em uma falha no processo.

Resumo

Nesta se¸c˜ao foi apresentado o Spin, verificador que ser´a utilizado como ferramenta b´asica para a verifica¸c˜ao de workflows. A modelagem de processos de workflows, para serem verificados no Spin, assim como as t´ecnicas de verifica¸c˜ao necess´arias para se atingir os objetivos propostos na se¸c˜ao 1.1 podem ser vistos no cap´ıtulo seguinte.

(25)

Cap´ıtulo 3

Verifica¸

ao de Workflows

Para a verifica¸c˜ao de workflows ´e proposto neste trabalho a utiliza¸c˜ao do Spin [4], um verificador formal. Para isso, a modelagem de processos de workflow em PROMELA se faz necess´aria. Nesta se¸c˜ao, ser´a apresentada como ´e feita a modelagem de processos de workflow em PROMELA, sem perda de representatividade do processo.

3.1

Modelagem

Os principais elementos na modelagem de workflow s˜ao as atividades. Atividades de work-flow s˜ao definidas em PROMELA atrav´es da declara¸c˜ao de um proctype. Um proctype define um processo que pode ser executado concorrentemente com outros processos.

Como as atividades de um workflow podem ser executadas mais de uma vez, a sua modelagem em PROMELA ´e feita com uma estrutura de repeti¸c˜ao, como pode ser visto a seguir:

1. proctype A() {

2. do

3. :: (final_reached==1) -> break;

4. :: (t0==1) -> atomic { /* transi¸c~ao de entrada */

5. t0=0; /* desfaz precondi¸c~oes */

6. t1=1;t2=1; /* transi¸c~ao de sa´ıda */ 7. exec_a=1; /* a¸c~ao executada */

8. cost+=20; /* atualiza¸c~ao do custo global */

9. };

10. od;

11. }

As vari´aveis t0, t1 e t2 modelam transi¸c˜oes, como descrito nas se¸c˜oes que se seguem. A vari´avel exec a ´e atualizado com o valor 1, indicando que a tarefa foi executada, e a vari´avel cost tem seu valor atualizado com o custo de execu¸c˜ao da atividade modelada. Todas essas vari´aveis ser˜ao mais detalhadas no decorrer do texto.

(26)

18 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

Da defini¸c˜ao da atividade anterior ´e poss´ıvel notar que somente duas condi¸c˜oes liberam a execu¸c˜ao da atividade: o fato de o processo ter sido terminado, quando a vari´avel

final reached for verdadeira; ou o fato da transi¸c˜ao que define a precondi¸c˜ao da atividade

ser verdadeira. Na primeira situa¸c˜ao, o loop ´e quebrado e a atividade termina. Na segunda, a transi¸c˜ao de precondi¸c˜ao ´e liberada, e as transi¸c˜oes subsequentes se tornam verdadeiras, liberando o fluxo de execu¸c˜ao.

A defini¸c˜ao de atomicidade na execu¸c˜ao da atividade vem da pr´opria defini¸c˜ao de atividades em workflow, como descrito na se¸c˜ao 2.1, onde atividade representa “uma por¸c˜ao de trabalho que corresponde a um passo l´ogico e indivis´ıvel dentro de um processo”. Assim, a declara¸c˜ao atomic antes do corpo de execu¸c˜ao garante a inviolabilidade nas trocas de transi¸c˜oes, garantindo que n˜ao aconte¸ca condi¸c˜oes de concorrˆencia na atualiza¸c˜ao das transi¸c˜oes.

Al´em do conceito de atividades, a modelagem de processos de workflow em PROMELA deve contemplar os quatro modos de transi¸c˜ao descritos na se¸c˜ao 2.1.

3.1.1

Transi¸

ao sequencial

Note que o controle do fluxo de execu¸c˜ao ´e feito na condi¸c˜ao de libera¸c˜ao do corpo de execu¸c˜ao da atividade, linha 3 do c´odigo descrito anteriormente (transi¸c˜ao de entrada), e dentro do corpo de execu¸c˜ao, na linha 6 (transi¸c˜ao de sa´ıda). S˜ao nesses pontos da modelagem que se definem o comportamento da transi¸c˜ao.

Para transi¸c˜oes sequenciais, somente uma transi¸c˜ao ´e liberada no corpo da atividade precedente, e uma transi¸c˜ao aguardada pela atividade seguinte. Por exemplo, as ativi-dades X e Y a seguir tˆem uma transi¸c˜ao sequˆencial entre elas (transi¸c˜ao t1 ), de forma que a atividade Y s´o ´e executada ap´os a atividade X.

Figura 3.1: Transi¸c˜ao sequencial.

proctype X() { proctype Y() {

do do

:: (final_reached==1) -> break; :: (final_reached==1) -> break; :: (t0==1) -> atomic { :: (t1==1) -> atomic { t0=0; t1=0; t1=1; t2=1; exec_x=1; exec_y=1; }; }; od; od; } }

(27)

3.1. Modelagem 19

3.1.2

Transi¸

ao paralela

Para transi¸c˜oes paralelas ´e necess´aria a defini¸c˜ao dos blocos descritos na se¸c˜ao 2.1 de AND-split e AND-join. Um AND-join ´e definido em PROMELA atrav´es de:

(t3==1 && t4==1)

Enquanto um AND-split ´e modelado por:

t1=1;t2=1;

Dessa forma, ´e poss´ıvel modelar atividades paralelas como mostra o exemplo a seguir:

Figura 3.2: Transi¸c˜ao paralela.

proctype X() { proctype W() {

do do

:: (final_reached==1) -> break; :: (final_reached==1) -> break; :: (t0==1) -> atomic { :: (t2==1) -> atomic { t0=0; t2=0; t1=1;t2=1 t4=1; exec_x=1; exec_w=1; }; }; od; od; } }

proctype Y() { proctype Z() {

do do

:: (final_reached==1) -> break; :: (final_reached==1) -> break; :: (t1==1) -> atomic { :: (t3==1 && t4==1) -> atomic {

t1=0; t3=0;t4=0; t3=1; t5=1; exec_y=1; exec_z=1; }; }; od; od; } }

3.1.3

Transi¸

ao Condicional

Assim como em transi¸c˜oes paralelas, para as transi¸c˜oes condicionais tamb´em ´e necess´ario definir os blocos OR-split e OR-join, como descritos na se¸c˜ao 2.1. Um OR-join ´e definido por:

(28)

20 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

(t3==1 || t4==1)

Enquanto um OR-split ´e definido por:

if :: t0==1; :: t1==1; fi

Assim, atividades condicionais como o processo de exemplo a seguir podem ser definidas como:

Figura 3.3: Transi¸c˜ao condicional.

proctype X() { proctype W() {

do do

:: (final_reached==1) -> break; :: (final_reached==1) -> break; :: (t0==1) -> atomic { :: (t2==1) -> atomic { t0=0; t2=0; if t4=1; :: t1=1; exec_w=1; :: t2=1; }; fi od; }; } od; }

proctype Y() { proctype Z() {

do do

:: (final_reached==1) -> break; :: (final_reached==1) -> break; :: (t1==1) -> atomic { :: (t3==1 || t4==1) -> atomic { t1=0; t3=0;t4=0; t3=1; t5=1; exec_y=1; exec_z=1; }; }; od; od; } }

(29)

3.1. Modelagem 21

3.1.4

Transi¸

ao Iterativa

Para transi¸c˜oes iterativas n˜ao ´e necess´ario definir nenhum bloco excepcional. Para a sua modelagem as estruturas anteriores podem ser utilizadas. Um exemplo de um processo com transi¸c˜oes iterativas pode ser observado a seguir:

Figura 3.4: Transi¸c˜ao iterativa.

proctype X() { do :: (final_reached==1) -> break; :: (t0==1 || t1==1) -> atomic { t0=0;t1=0; if :: t1=1; :: t2=1; fi exec_x=1; }; od; }

Uma vez definidas as atividades, transi¸c˜oes e fluxos de execu¸c˜ao do processo, ´e necess´ario modelar as condi¸c˜oes iniciais, os objetivos e a instancia¸c˜ao dos processo em PROMELA, para que o workflow seja completamente modelado. Como descrito na se¸c˜ao 2.2, os pro-cessos s˜ao definidos com o comando proctype por´em n˜ao executados. O ´unico processo executado no in´ıcio ´e processo inicial, declarado como init, em PROMELA.

Na modelagem proposta neste trabalho, o processo init deve ser definido como:

init { /*---*/ /* Inicializa¸c~ao do Workflow */ /*---*/ final_reached=0; t0=0;t1=0;t2=0; (...) exec_a=0;exec_b=0; (...) cost=0;

EI: /* Estado Inicial */ t0=1; printf("Start\n"); Corpo: /* Lan¸ca as atividades */

(30)

22 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

EF: /* Estado Final (Objetivo) */ (t9==1) -> printf("End\n"); /*---*/ /* Termina¸c~ao do Workflow */ /*---*/ final_reached=1; }

Note uma etapa de inicializa¸c˜ao das vari´aveis, desabilitando as transi¸c˜oes; uma etapa de ajuste do Estado inicial, habilitando a transi¸c˜ao inicial; a instancia¸c˜ao das atividades (processos); uma etapa em que o processo init espera que os processos alcancem o Estado final (objetivo - no exemplo modelado anteriormente, o objetivo ´e modelado atrav´es da transi¸c˜ao t9 ); e por fim, uma etapa em que a vari´avel final reached ´e habilitada, sinal-izando que o processo atingiu seus objetivos, e que as atividades podem ser liberadas do loop.

O estado ´e modelado em PROMELA atrav´es de vari´aveis. O valor de todas as vari´aveis do processo em um determinado momento no tempo representa o estado corrente do processo. As vari´aveis s˜ao declaradas de forma global na modelagem proposta, assim todos os processos ou atividades podem acess´a-las.

3.2

Verifica¸

ao Estrutural

Muitos trabalhos quando lidam com verifica¸c˜ao de workflows est˜ao na verdade realizando uma verifica¸c˜ao estrutural. Van der Aalst descreve em seu livro [18] os principais proble-mas estruturais encontrados em workflows, e eles s˜ao representados na figura 3.5.

A figura 3.5 apresenta exemplos cl´assicos de problemas estruturais, entre eles Ativi-dades sem condi¸c˜oes de entrada ou sa´ıda, deadlocks, ativiAtivi-dades mortas e termina¸c˜ao incompleta. A seguir, cada uma dessas falhas estruturais ser˜ao comentadas, assim como a estrat´egia de verifica¸c˜ao proposta usando a modelagem definida anteriormente na se¸c˜ao 3.1 e o Spin.

3.2.1

Atividades sem condi¸

oes de entrada ou sa´ıda

Quando uma atividade n˜ao tem precondi¸c˜oes, ou seja, nenhuma transi¸c˜ao de entrada, n˜ao fica claro se ela ser´a executada. Da mesma forma, se a atividade n˜ao tem transi¸c˜oes de sa´ıda, ela n˜ao contribui para se atingir os objetivos do processo. A figura 3.5.a cont´em uma atividade sem transi¸c˜oes de entrada (atividade B) e uma atividade sem transi¸c˜oes de sa´ıda (atividade D).

(31)

3.2. Verifica¸c˜ao Estrutural 23

Figura 3.5: Exemplos de processos com falhas estruturais.

A verifica¸c˜ao de existˆencia desse tipo de atividade ´e feita ainda na etapa de modelagem. Caso a transcri¸c˜ao do processo constate a existˆencia de uma atividade sem transi¸c˜oes de entrada ou sa´ıda, ent˜ao o processo ´e reprovado pelo verificador quanto `a sua corre¸c˜ao estrutural.

3.2.2

Deadlock

Um deadlock caracteriza uma situa¸c˜ao em que ocorre um impasse e duas ou mais ativi-dades ficam impedidas de continuar suas execu¸c˜oes, ou seja, ficam bloqueadas. Por ex-emplo, na figura 3.5.b, a atividade A ativa somente uma das suas transi¸c˜oes de sa´ıda, e em momento algum as duas transi¸c˜oes de entrada da atividade B estar˜ao ativadas para que ela seja executada, caracterizando assim um deadlock no processo. Somente caso a ´

ultima transi¸c˜ao seja ativada, direto para o estado final, que o deadlock seria evitado. O processo da figura 3.5.b pode ser modelado sem problemas em PROMELA, descar-tando a possibilidade de existˆencia de atividades sem transi¸c˜oes de entrada ou sa´ıda, como no processo da figura 3.5.a, por exemplo. Assim, a verifica¸c˜ao estrutural deve ser realizada pelo Spin, a fim de detectar a falha do processo.

(32)

24 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

O processo ´e submetido a uma explora¸c˜ao exaustiva do Spin, e ´e constatada a presen¸ca de um erro, como pode ser visto a seguir, do resultado da execu¸c˜ao do Spin.

State-vector 32 byte, depth reached 15, errors: 1 15 states, stored

0 states, matched

15 transitions (= stored+matched) 1 atomic steps

Assim como descrito na se¸c˜ao 2.4, o processo de explora¸c˜ao exaustiva do Spin faz uma busca em profundidade na ´arvore computacional do processo, em busca de falhas de execu¸c˜ao. Para o exemplo da figura 3.5.b, a profundidade atingida foi de 15 passos, at´e o verificador encontrar uma falha (no caso o deadlock evidenciado anteriormente). Nesse estado, o Spin constatou que n˜ao havia possibilidade de prosseguimento, e o processo n˜ao tinha atingido seu fim, caracterizando assim um deadlock, como sugerido.

Como apresentado tamb´em na se¸c˜ao 2.4, o erro na explora¸c˜ao exaustiva gera um arquivo .trail, que cont´em o trace de execu¸c˜ao que ocasionou a falha verificada. Com isso, ´e poss´ıvel executar o Spin simulando este trace de falha, e o resultado ´e apresentado a seguir:

Start A

spin: trail ends after 18 steps #processes: 4 t1 = 0 t2 = 1 t3 = 0 t4 = 0 t5 = 0 t6 = 0 final_reached = 0 exec_a = 1 exec_b = 0 exec_c = 0

18: proc 3 (C) line 40 "vda1" (state 10) 18: proc 2 (B) line 29 "vda1" (state 10) 18: proc 1 (A) line 15 "vda1" (state 13) 18: proc 0 (:init:) line 66 "vda1" (state 16) 4 processes created

Note que no trace de execu¸c˜ao ´e apresentado o estado em que o processo teria falhado. Na figura 3.5.b, o OR-split ap´os a atividade A teria selecionado a segunda transi¸c˜ao (t2 ), e assim, nem a atividade C pode ser executada, nem a atividade B. Resultando assim num deadlock.

O motor b´asico de verifica¸c˜ao do Spin ´e respons´avel pela detec¸c˜ao de falhas como dead-locks, assim, assume-se aqui que dada uma modelagem correta, o processo de verifica¸c˜ao de deadlocks ´e correto.

(33)

3.2. Verifica¸c˜ao Estrutural 25

3.2.3

Termina¸

ao Completa

Van der Aalst e a maioria da literatura definem o crit´erio de termina¸c˜ao completa como determinante na corre¸c˜ao de um processo. Esse crit´erio estabelece que, para um processo ser bem definido, ao atingir o seu estado final, ele n˜ao deve possuir atividades ou transi¸c˜oes pendentes. Por exemplo, na figura 3.5.c, as atividades B e C s˜ao executadas ap´os a condi¸c˜ao final ter sido satisfeita, violando o crit´erio de termina¸c˜ao completa.

Determinar se um processo tem ou n˜ao termina¸c˜ao completa ´e poss´ıvel atrav´es da for-mula¸c˜ao de uma restri¸c˜ao em LTL, verificada na explora¸c˜ao exaustiva do Spin. A f´ormula que define se o processo tem ou n˜ao termina¸c˜ao completa ´e estabelecida de maneira bas-tante intuitiva, como pode ser visto a seguir:

"<>(final_reached && (t0 || t1 || t2 || ... || tn)"

Ou seja, o crit´erio de termina¸c˜ao completa ´e violado caso a express˜ao anterior seja verdadeira, e para isso, ´e preciso que alguma transi¸c˜ao ainda esteja ativada ap´os o processo ter atingido seu fim (ou seja, ap´os a vari´avel final reached ter se tornado verdadeira). Para a verifica¸c˜ao ´e necess´ario saber a priori todas as transi¸c˜oes do processo, o que ´e poss´ıvel, dada a modelagem proposta em 3.1.

Para analisar o funcionamento da verifica¸c˜ao do crit´erio de termina¸c˜ao completa, ve-jamos os seguintes exemplos. Primeiro, um processo correto, que termina completamente, como pode ser visto na figura 3.6.

Figura 3.6: Exemplo de processo que termina completamente.

O resultado da verifica¸c˜ao no Spin, com a restri¸c˜ao em LTL proposta anteriormente pode ser visto a seguir. Note que nenhum erro ´e identificado, como o esperado.

State-vector 44 byte, depth reached 109, errors: 0 173 states, stored

134 states, matched

307 transitions (= stored+matched) 0 atomic steps

hash conflicts: 0 (resolved) 2.501 memory usage (Mbyte)

J´a o processo a presentado a seguir, na figura 3.7, o crit´erio de termina¸c˜ao completa ´e violado, pois h´a a possibilidade do processo terminar e ainda existirem transi¸c˜oes pen-dentes, como mostra o trace de execu¸c˜ao de contra-exemplo do Spin.

(34)

26 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

Figura 3.7: Exemplo de processo que n˜ao termina completamente.

State-vector 40 byte, depth reached 107, errors: 1 112 states, stored

51 states, matched

163 transitions (= stored+matched) 0 atomic steps

hash conflicts: 0 (resolved)

A seguir o trace de execu¸c˜ao da falha:

Start A C D B End D spin: trail ends after 90 steps #processes: 5

t0 = 0;t1 = 0;t2 = 0;t3 = 0;t4 = 0;t5 = 1; final_reached = 1

exec_a = 1;exec_b = 1;exec_c = 1;exec_d = 1

Note que, devido ao OR-join do processo, a atividade D foi executada mais de uma vez, e uma delas inclusive ap´os o processo ter atingido o seu fim, caracterizando assim em uma viola¸c˜ao do crit´erio de termina¸c˜ao completa.

3.3

Quest˜

oes Ad-hoc

A verifica¸c˜ao estrutural checa se o workflow tem defeitos sint´aticos. Verifica¸c˜oes sint´aticas s˜ao importantes para analisar o correto funcionamento do processo, mas verifica¸c˜oes mais completas do workflow s˜ao desej´aveis. Al´em de verifica¸c˜oes sint´aticas, ´e importante tamb´em realizar verifica¸c˜oes semˆanticas, que dizem respeito ao contexto do processo, do que somente sua estrutura. Verifica¸c˜oes semˆanticas podem ser modeladas atrav´es de quest˜oes gen´ericas, como “uma atividade de venda sempre ´e precedida por uma atividade de aprova¸c˜ao?”, ou ent˜ao “uma atividade A ´e sempre executada antes de uma atividade

(35)

3.3. Quest˜oes Ad-hoc 27

B?”. Estas quest˜oes ad hoc s˜ao verifica¸c˜oes semˆanticas simples, que podem ser descritas atrav´es de f´ormulas LTL.

Como descrito anteriormente, o Spin verifica se f´ormulas LTL s˜ao verdadeiras para um processo, e assim, para um workflow modelado em PROMELA. A seguir, um processo exemplo ´e descrito, assim como sua representa¸c˜ao gr´afica. A modelagem deste processo em PROMELA pode ser observado no apˆendice A.1.

Figura 3.8: Exemplo de processo de workflow.

O exemplo da figura A.1 representa um processo de venda de um produto. Primeiro ´e definida a compra atrav´es da escolha das caracter´ısticas do produto (atividade A), e ent˜ao, em paralelo, uma verifica¸c˜ao de cr´edito do consumidor ´e realizada (atividade B), em concorrˆencia com a retirada do produto do estoque (atividade C) e a sua prepara¸c˜ao pra ser entregue (atividade D). Se o consumidor tiver o cr´edito aprovado, o produto ´e entregue (atividade E) e o processo ´e terminado (atividade G). Caso contr´ario, do consumidor n˜ao ter o cr´edito aprovado, ent˜ao a compra ´e cancelada (atividade F) e o processo termina (atividade G).

Para este exemplo, uma quest˜ao semˆantica interessante seria: “a atividade de entrega do produto (atividade E) pode ser executada se o cr´edito do consumidor for rejeitado?”. Tendo o conhecimento do contexto do processo, e da modelagem de todas as atividades que o comp˜oe, a resposta a essa pergunta para este exemplo simples parece trivial. No entanto, para sistemas de verifica¸c˜ao autom´aticos, essas inferˆencias que dizem respeito a semˆantica do processo n˜ao s˜ao diretas, e representam complexidade consider´avel.

A quest˜ao anterior, pode ser traduzida em uma f´ormula LTL, e ent˜ao, verificada atrav´es do Spin. O Spin traduz cada f´ormula LTL em uma “never claim” de forma provar ou rejeitar a f´ormula para um determinado processo de forma eficiente. Assim, como o Spin gera “never claims” para as f´ormulas LTL, a sua formula¸c˜ao deve ser negada, para produzir o resultado desejado. Assim, para a quest˜ao anterior, a f´ormula LTL inserida no Spin ´e:

(36)

28 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

Note que rejected ´e um dos poss´ıveis efeitos da atividade B, e exec e ´e uma vari´avel que indica se a atividade E foi executada. Assim, traduzindo a f´ormula anterior para o portuguˆes seria: se rejected for verdadeiro ent˜ao nunca a tarefa E ´e executada. Se eventualmente essa afirma¸c˜ao for falsa, ent˜ao a f´ormula ´e rejeitada pelo Spin.

Note que, se invertermos a l´ogica da pergunta, ou seja “a atividade de entrega do produto (atividade E) pode ser executada se o cr´edito do consumidor for aceito?”, ter´ıamos que obter tamb´em uma resposta contr´aria do verificador, uma vez que evetualmente a vari´avel exec e ser´a verdade se o cr´edito for aprovado. O resultado do Spin, apresentado a seguir, comprova a corre¸c˜ao da f´ormula utilizada.

State-vector 60 byte, depth reached 122, errors: 1 305 states, stored

322 states, matched

627 transitions (= stored+matched) 1 atomic steps

hash conflicts: 0 (resolved) Trace de contra-exemplo: Start EscolhaProduto ProdutoEstoque EmbalaProduto VerificaCredito RealizaVenda spin: trail ends after 85 steps

#processes: 8

t0 = 0;t1 = 0;t2 = 0;t3 = 0;t4 = 0;t5 = 0;t6 = 0;t7 = 1;t8 = 0;t9 = 0 final_reached = 0

exec_a = 1;exec_b = 1;exec_c = 1;exec_d = 1;exec_e = 1;exec_f = 0;exec_g = 0 rejected = 0

accepted = 1

Outro tipo de questionamento comum para processos de workflow diz respeito a precedˆencia entre atividades, por exemplo: “a atividade de preparo do produto (ativi-dade D) ´e executada somente ap´os a ativi(ativi-dade de retirada do estoque (ativi(ativi-dade C)?”, ou “a atividade de preparo (atividade D) ´e executada somente ap´os a atividade de verifica¸c˜ao de cr´edito (atividade B)?”. Essas quest˜oes podem ser formuladas em LTL como a seguir:

never claim: <> !(!exec_d U exec_c) never claim: <> !(!exec_d U exec_b)

Para o processo anterior, a primeira f´ormula ´e verificada como verdadeira, por´em para a segunda, a verifica¸c˜ao atrav´es do Spin acusa uma viola¸c˜ao, pois existe uma ordena¸c˜ao parcial entre as atividades D e B, e assim, existe a possibilidade da atividade D ser executada antes da atividade B. O trace de execu¸c˜ao em que esta restri¸c˜ao ´e violada pode ser visto a seguir:

(37)

3.4. Verifica¸c˜ao de Recursos 29

State-vector 60 byte, depth reached 78, errors: 1 41 states, stored

0 states, matched

41 transitions (= stored+matched) 2 atomic steps

hash conflicts: 0 (resolved) Trace de contra-exemplo: Start EscolhaProduto ProdutoEstoque EmbalaProduto VerificaCredito spin: trail ends after 78 steps #processes: 8

t0 = 0;t1 = 0;t2 = 0;t3 = 1;t4 = 0;t5 = 0;t6 = 1;t7 = 0;t8 = 0;t9 = 0 final_reached = 0

exec_a = 1;exec_b = 1;exec_c = 1;exec_d = 1;exec_e = 0;exec_f = 0;exec_g = 0 rejected = 1

accepted = 0

Note que a formula¸c˜ao anterior permite a verifica¸c˜ao de ordena¸c˜ao entre quaisquer duas atividades do processo, podendo ser bastante ´util na verifica¸c˜ao ad-hoc de processos de workflow.

3.4

Verifica¸

ao de Recursos

Verifica¸c˜ao de recursos em workflow pode ser reduzida ao problema de exclus˜ao mutua em processos concorrentes. No entanto, para realizar esse tipo de verifica¸c˜ao, os recursos que cada atividade usa devem ser conhecidos a priori, e assim, modelados juntamente com o processo de workflow.

Sabendo os recursos utilizados pelas atividades, a verifica¸c˜ao por concorrˆencia ao uso desses recursos ´e feita no Spin seguindo o procedimento formal proposto a seguir:

VERIFICA_RECURSO(ATIVIDADES do processo) BEGIN FOR X in ATIVIDADES

FOR Y in ATIVIDADES

IF (X != Y) && (X e Y acessam o mesmo recurso)

spin -a -f ’<> (preconditions of X && preconditions of Y)’ processo END IF

END FOR END FOR END

Note que duas atividades s˜ao concorrentes quando existe a possibilidade de suas pre-condi¸c˜oes, ou seja, de suas transi¸c˜oes de entrada serem verdadeiras ao mesmo tempo. Assim, a verifica¸c˜ao de recursos ´e feita atrav´es da quest˜ao em LTL que verifica essa condi¸c˜ao, como apresentado anteriormente, para todas as atividades que compartilhem

(38)

30 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

de um mesmo recurso. Se nenhuma viola¸c˜ao ´e detectada no procedimento, o processo ´e livre de conflitos.

Argumenta¸c˜ao: vamos supor que um processo verificado como correto pelo procedi-mento anterior tenha um conflito de recurso. Se o conflito aconteceu, ent˜ao pelo menos duas atividades que utilizam do mesmo recurso estavam sendo executadas ao mesmo tempo. Como as atividades s˜ao declaradas como atˆomicas (ou seja, indivis´ıveis), para que as atividades conflitantes sejam executadas concorrentemente, as transi¸c˜oes de entrada de ambas, em algum trace de execu¸c˜ao foram verdadeiras ao mesmo tempo. Sendo assim, o procedimento de verifica¸c˜ao de conflitos de recurso proposto teria apontado uma viola¸c˜ao.

3.5

Verifica¸

ao de Restri¸

oes de Custo

Outro tipo de verifica¸c˜ao semˆantica poss´ıvel ´e checar restri¸c˜oes de execu¸c˜ao em workflows. A maioria dos processos possuem restri¸c˜oes que limitam seu escopo, seja com rela¸c˜ao a custos, a tempo de execu¸c˜ao, a quantidade de pessoas envolvidas, etc. Restri¸c˜oes essas que podem ser globais, ou seja, limitantes do processo como um todo, ou locais, que definem restri¸c˜oes para partes independentes do processo, ou at´e mesmo para atividades espec´ıficas de um processo.

Uma restri¸c˜ao comum em processos modelados em workflow, ´e a restri¸c˜ao de custo. Custo pode ser entendido como custo financeiro ou custo em m˜ao de obra, por exemplo, avaliado a partir do n´umero de horas de trabalho que cada atividade despende. Assim, checar se um processo n˜ao estoura um or¸camento pr´e estabelecido, ou se cada atividade ´e executada dentro de um limite de custo, ´e uma necessidade para viabilizar a modelagem do processo.

Para a verifica¸c˜ao de restri¸c˜oes de custo, ´e preciso ter definido a priori os custos de cada atividade. No exemplo da figura A.1, suponha que cada atividade tenha um custo de 20 unidades, exceto a atividade F, que custa 30 unidades. Podemos supor agora que a atividade G somente pode ser executada caso o custo total at´e ent˜ao n˜ao tenha excedido 120 unidades. Essa restri¸c˜ao pode ser verificada atrav´es de uma f´ormula LTL, como a seguir:

<> !(!burst U exec_g)

A vari´avel burst ´e uma regra definida juntamente com as vari´aveis globais do sistema, atrav´es da declara¸c˜ao a seguir:

#define burst (cost<120)

O valor do estouro de or¸camento (burst), ´e passado como parˆametro para o verificador. A vari´avel cost ´e global, inicializada com zero no in´ıcio do processo, e ´e acrescentado a ela o

(39)

3.5. Verifica¸c˜ao de Restri¸c˜oes de Custo 31

valor de custo assim que cada atividade ´e executada, como pode ser visto na modelagem de atividades em PROMELA, na se¸c˜ao 3.1. Sendo assim, a f´ormula LTL anterior ´e rejeitada se eventualmente acontecer um estouro do or¸camento antes da execu¸c˜ao da atividade G. No exemplo da figura A.1, com os valores de custos propostos anteriormente, este estouro n˜ao acontece, como pode ser visto do resultado da verifica¸c˜ao a seguir.

State-vector 60 byte, depth reached 122, errors: 0 1477 states, stored

1956 states, matched

3433 transitions (= stored+matched) 15 atomic steps

hash conflicts: 0 (resolved)

No entanto, se definirmos o limite para 100 unidades, existe um trace de execu¸c˜ao do processo que estouraria este or¸camento. O trace de execu¸c˜ao pode ser visto a seguir, e o valor total do custo para este trace atinge 110 unidades antes da execu¸c˜ao da atividade G e 130 ap´os a sua execu¸c˜ao, resultando na viola¸c˜ao da f´ormula LTL verificada, como mostra o resultado da verifica¸c˜ao a seguir.

State-vector 60 byte, depth reached 86, errors: 1 44 states, stored

0 states, matched

44 transitions (= stored+matched) 1 atomic steps

hash conflicts: 0 (resolved) Trace de contra-exemplo: Start EscolhaProduto ProdutoEstoque EmbalaProduto VerificaCredito CancelaCompra TerminaCompra spin: trail ends after 86 steps

#processes: 8

t0 = 0;t1 = 0;t2 = 0;t3 = 0;t4 = 0;t5 = 0;t6 = 1;t7 = 0;t8 = 0;t9 = 1 final_reached = 0

exec_a = 1;exec_b = 1;exec_c = 1;exec_d = 1;exec_e = 0;exec_f = 1;exec_g = 1 rejected = 1

accepted = 0 cost = 130

A verifica¸c˜ao de custos ´e relativamente direta, levando-se em considera¸c˜ao o fato de que o custo de cada atividade, seja ele medido em termos financeiros ou em horas de trabalho, por exemplo, ´e sempre acumulativo, independente do encadeamento das tarefas. Uma vez executada, a tarefa deve somar o seu custo individual ao custo global.

Para mostrar que a verifica¸c˜ao de restri¸c˜oes de custo ´e correta, temos que assumir que as seguintes condi¸c˜oes s˜ao verdadeiras:

(40)

32 Cap´ıtulo 3. Verifica¸c˜ao de Workflows

1. Sempre que uma tarefa ´e executada, seu custo ´e adicionado ao custo global do processo.

2. N˜ao h´a interferˆencia ao acesso a esta vari´avel entre atividades concorrentes. 3. N˜ao ´e feita altera¸c˜ao no valor do custo exceto pelas atividades do processo.

Garantindo que essas premissas s˜ao verdadeiras, podemos afirmar que o valor da vari´avel custo ´e sempre correto, entre a execu¸c˜ao de quaisquer atividades do processo, e em decorrˆencia disso, ap´os o t´ermino do processo tamb´em. As premissas 1 e 2 s˜ao garantidas pela modelagem das atividades, proposta na se¸c˜ao 3.1, atrav´es da linha 8 no c´odigo da defini¸c˜ao da atividade, onde ´e feita a atualiza¸c˜ao da vari´avel custo, e da linha 4, onde o comando atomic ´e utilizado, impedindo a concorrˆencia entre atividades para esta atualiza¸c˜ao.

Como visto em 3.1, um processo ´e composto pela modelagem das atividades, e pela modelagem do processo principal (init) , que inicializa as vari´aveis necess´arias, instancia as atividades, atribui o estado inicial do processo, para que este seja iniciado, e fica travado at´e que a execu¸c˜ao das atividades do processo atinja os objetivos. Dessa forma, pode-se observar que, ap´os a inicializa¸c˜ao da vari´avel cost para zero, ela n˜ao ´e mais alterada no

init, voltando a ser alterada somente no corpo das atividades, garantindo assim a premissa

de n´umero 3.

A argumenta¸c˜ao anterior mostra que o valor do custo ´e correto entre a execu¸c˜ao das atividades. Para garantir agora que a verifica¸c˜ao atrav´es da f´ormula LTL proposta seja verdadeira, devemos apenas garantir que, dentro da execu¸c˜ao da atividade, a atualiza¸c˜ao do custo seja feita antes da atualiza¸c˜ao da vari´avel que define que a atividade j´a foi executada. O que acontece, seguindo a modelagem proposta na se¸c˜ao 3.1. Com isso, a var´avel custo pode ser considerada correta entre a execu¸c˜ao das atividades, mas tamb´em durante a sua execu¸c˜ao. Garantindo a validade da verifica¸c˜ao proposta nesta se¸c˜ao para a restri¸c˜ao de custos de um processo de workflow.

3.6

Relaxa¸

ao do crit´

erio de Termina¸

ao Completa

O crit´erio de termina¸c˜ao completa, como visto na literatura, indica que, para um processo correto, nenhum ramo de execu¸c˜ao deve ficar pendente ap´os a termina¸c˜ao do processo, assim como descrito na se¸c˜ao 3.2.3.

Por´em, no exemplo da figura A.1, pode-se notar que esse crit´erio ´e muito forte, tanto para processos simples, quanto para processos mais complexos do mundo real. Normal-mente o processo da figura A.1 seria verificado como incorreto na maioria dos sistemas de verifica¸c˜ao de workflows, pois caso a atividade B libere a transi¸c˜ao para a atividade F, o

Referências

Documentos relacionados

Para saber como o amostrador Headspace 7697A da Agilent pode ajudar a alcançar os resultados esperados, visite www.agilent.com/chem/7697A Abund.. Nenhum outro software

a) Aplicação das provas objetivas. b) Divulgação dos gabaritos oficiais do Concurso Público. c) Listas de resultados do Concurso Público. Os recursos interpostos que não se

DATA: 17/out PERÍODO: MATUTINO ( ) VESPERTINO ( X ) NOTURNO ( ) LOCAL: Bloco XXIB - sala 11. Horário Nº Trabalho Título do trabalho

O pressuposto teórico à desconstrução da paisagem, no caso da cidade de Altinópolis, define que os exemplares para essa análise, quer sejam eles materiais e/ou imateriais,

publicação a que se refere o item anterior, reconsideração quanto ao indeferimento de sua inscrição, que será apreciada pela Congregação da Unidade

As pontas de contato retas e retificadas em paralelo ajustam o micrômetro mais rápida e precisamente do que as pontas de contato esféricas encontradas em micrômetros disponíveis

- os termos contratuais do ativo financeiro dão origem, em datas específicas, aos fluxos de caixa que são apenas pagamentos de principal e de juros sobre o valor principal em

1 Instituto de Física, Universidade Federal de Alagoas 57072-900 Maceió-AL, Brazil Caminhadas quânticas (CQs) apresentam-se como uma ferramenta avançada para a construção de