Introdução

No artigo anterior, foram apresentados os principais conceitos de Arquitetura Orientada a Serviços (Service-Oriented Architecture – SOA), Arquitetura de Microsserviços (Microservice Architecture – MSA), a relação entre SOA e MSA e porque faz sentido desenvolver serviços tendo como ponto de partida os modelos de processos de negócio da organização. Este artigo, apresenta um método sistemático com esta finalidade.

Método para desenvolvimento de serviços a partir de modelos de processos de negócio

O método apresentado neste artigo contempla a seguintes fases apresentadas a seguir: 

  • Identificação de serviços (AZEVEDO et al., 2009a, 2009b);
  • Análise de serviços (AZEVEDO et al., 2009a, 2009b, 2011, 2013); 
  • Projeto (DIIRR et al., 2012);
  • Implementação de serviços (DIIRR et al., 2012). 

Fase de Identificação de Serviços

A fase de identificação (AZEVEDO et al., 2009a e 2009b) tem o objetivo de encontrar serviços candidatos a partir de elementos do modelo de processo. Serviços candidatos são funcionalidades descritas no processo que podem ser implementadas como serviços físicos (MARKS e BELL, 2006) como, por exemplo, serviços web ou web services (ALONSO et al., 2014).

Em linhas gerais, a fase de identificação inclui um conjunto de heurísticas que analisam os elementos do modelo de processo, tais como, entrada e saída de dados, regras de negócio, requisitos de negócio, atividades de múltiplas instâncias, fluxos executados em paralelo (and), fluxos exclusivos (xor) etc. para identificar serviços básicos ou compostos. 

Esta fase tem como entrada modelos ou partes de modelos de processos e tem como saída uma lista de serviços candidatos juntamente com diagramas e gráficos apresentando uma caracterização em alto nível dos mesmos.

Ela é dividida em três passos:

  • O primeiro passo consiste na seleção dos modelos de processos e as atividades que farão parte da iniciativa para se ter processos apoiados por serviços. 
  • O segundo passo corresponde à identificação e classificação de serviços candidatos. Neste passo, um conjunto de heurísticas são aplicadas a fim de se criar uma lista de serviços candidatos a partir dos processos de negócio. As heurísticas são descritas por AZEVEDO et al. (2009) e são baseadas em padrões de workflow (VAN DER AALST et al., 2013) (por exemplo, padrão OR e padrão XOR) e nos elementos existentes nos modelos de atividades (por exemplo, regras de negócio e requisitos de negócio). Os serviços candidatos podem ser classificados em lógica ou dados. Serviços de lógica representam regras de negócio descritas nestes elementos dos processos que podem vir a ser disponibilizadas como serviços. Serviços de dados representam especificamente serviços de acesso a dados (JOSUTTIS, 2007) como, por exemplo, consultas, inserções, atualizações e remoções de dados. A Figura 1 ilustra serviços identificados a partir do elemento cluster de informações ligados à entrada e saída de atividades. Por exemplo, o Cluster 3 ligado à Atividade 2 está associado a um conjunto de elementos que representa um serviço que lê e escreve dados desta atividade. Em outro exemplo, a partir do padrão XOR, ressaltado em vermelho, temos um serviço candidato que inclui as atividades 3, 4 e 5. 
  • O terceiro passo é a consolidação de informações obtidas do processo gerando tabelas (por exemplo, com informações sobre reuso, coesão), grafos de dependência entre serviços candidatos e gráficos (por exemplo, indicando o percentual dos serviços em relação às heurísticas que os identificaram).
Rastreabilidade entre elementos dos modelos de processos e artefatos dos serviços
Figura 1 – Rastreabilidade entre elementos dos modelos de processos e artefatos dos serviços

Fase de Análise de Serviços

Esta fase (AZEVEDO et al., 2009a, 2009b, 2011, 2013) também tem três passos e o objetivo é aprofundar no entendimento das características do serviço, sua prioridade de disponibilização e suas dependências. 

  • O primeiro passo consiste em priorizar serviços, o que pode ser feito pela criação de uma tabela listando os candidatos e as informações coletadas na fase de identificação como, por exemplo: o grau de reuso dos serviços; se ele foi identificando a partir de atividades de múltiplas instâncias; quais sistemas estão envolvidos (possíveis consumidores ou fornecedores da funcionalidade do serviço); papéis organizacionais envolvidos na atividade do serviço. Para cada uma destas informações atribui-se um peso e a prioridade do serviço é calculada como a soma destes pesos. Um exemplo é apresentado na Tabela 1.  
Tabela de priorização de serviços candidatos
Tabela 1 – Tabela de priorização de serviços candidatos
  • No segundo passo, define-se a granularidade de serviços candidatos. Cria-se um mapa de dependência entre os serviços candidatos indicando o consumo dos serviços.
  • No terceiro passo, analisa-se o mapa de dependências criado a fim de agrupar serviços candidatos. Este agrupamento pode ser feito considerando aspectos técnicos ou do negócio, tais como as entidades que os serviços manipulam ou o uso dos serviços pela organização. A Figura 2 ilustra o mapa de dependências e o agrupamento dos serviços candidatos S38 e S37 que foram agrupados em SI após a análise de suas dependências.
Agrupamento de serviços candidatos
Figura 2 – Agrupamento de serviços candidatos

Fase de Projeto de Serviços

A fase de projeto (DIIRR et al., 2012) tem o objetivo de criar modelos de projeto que serão utilizados na implementação dos serviços. Ela utiliza as informações adquiridas nas fases anteriores para criar modelos que representam: (i) os esquemas dos dados consumidos e gerados ; (ii) operações disponibilizadas ; (iii) fluxos de execução; (iv) dependências entre os dados e os próprios serviços.

Esta fase é dividida em 4 passos: 

  • O primeiro passo consiste na confirmação do tipo (dados ou lógica). 
  • No segundo passo, é construído um modelo dos dados do domínio. Este modelo pode ser construído utilizando o modelo de classes UML (Unified Modeling Language) ou diagramas entidade-relacionamento. Ele corresponde aos esquemas dos dados consumidos e gerados pelos serviços candidatos. 
  • No terceiro passo, as operações realizadas pelos serviços são descritas de forma resumida. 

No quarto passo, os serviços são modelados. Neste momento, um nome técnico é dado para cada serviço e são listadas as operações de cada um deles. Também são indicadas quais entidades do domínio são manipuladas pelo serviço. Diagramas da UML podem ser utilizados também neste passo. O serviço pode ser modelado como uma classe UML com o estereótipo <<interface>> ou <<service>>. Suas operações podem ser modeladas como funções públicas da classe. Os relacionamentos com as entidades manipuladas pelo serviço podem ser modelados como dependências entre as classes. A Figura 3 apresenta um exemplo de serviço de manipulação de dados de clientes. O serviço tem o estereótipo <<interface>> e tem métodos para criar, atualizar, remover e recuperar cliente. Ele tem uma dependência com a classe do domínio Cliente. Os métodos dos serviços são públicos e os atributos de clientes são privados. Este tipo de modelo indica que dados de clientes só podem ser manipulados pelo serviço HandleClient. Desta forma, os serviços encapsulam o acesso aos dados de domínio. Este conceito está relacionado ao padrão de projeto da Camada de Dados (Data Service Layer ou DSL) que encapsula o acesso aos dados (YIN e YE, 2010). Para o caso de serviços que executam várias operações, pode-se elaborar um diagrama dos passos executados internamente pelo serviço. Diagramas de sequência ou de atividades da UML podem ser utilizados para criar este modelo.

Exemplo de serviço de manipulação de dados de clientes
Figura 3 – Exemplo de serviço de manipulação de dados de clientes. 

Fase de Implementação de Serviços

A última fase é a de implementação (DIIRR et al., 2012), a qual consiste em criar os códigos referente às implementações dos serviços e às classes que representam os dados a partir do que foi projetado. 

As implementações podem ser feitas em qualquer linguagem de programação que apoie o desenvolvimento de serviços como, por exemplo, Web RESTful (RICHARDSON et al., 2013), Web SOAP (CHUMBLEY et al., 2010) e GraphQL (BUNA, 2021). 

Este artigo não tem o objetivo de detalhar linguagens de programação. Entretanto, como exemplo de implementação, caso se deseje desenvolver serviços Web com protocolo SOAP em Java, as entidades de negócio podem ser implementadas como classes Java simples (ou Plain-Old Java Object (POJO)) com métodos get e set para acesso aos atributos privados da classe e os serviços podem ser implementados como classes Java empregando JAX-WS. No caso de serviços RESTful, por exemplo usando a linguagem de programação Python, pode-se empregar a biblioteca flask para expor métodos para serem acessados pelos consumidores do serviço. Já GraphQL é uma linguagem criada e disponibilizada como código-fonte aberto pelo Facebook com o objetivo de prover maior flexibilidade e eficiência do que serviços Web SOAP e REST. Todos os serviços são expostos em um único endpoint que responde a consultas escritas em GraphQL.

Exemplos de uso do método e automatizações dos passo-a-passos

Um exemplo fim-a-fim de uso do método é apresentado por Lima et al. (2014). Eles apresentam a execução das heurísticas do método aplicadas em um cenário fictício com tamanho suficiente para permitir o uso efetivo dos métodos e produzir ideias e experiências práticas úteis para Analistas e Desenvolvedores SOA.

Azevedo et al. (2009c) apresentam a automação de passos da fase de identificação considerando modelos de processos de negócio elaborados com a notação EPC (KELLER et al., 1992). O produto final da automatização da consolidação é um relatório que pode ser gerado no formato .XLS (planilha do MS Excel) ou .DOC (documento do MS Word). A formatação foi definida juntamente com os desenvolvedores e arquitetos SOA a fim de dar a maior flexibilidade possível para manipulação do seu conteúdo.

Brandão et al. (2014) apresentam a automação da fase de identificação para processos modelados com a notação BPMN (DECKER et al., 2010), considerando inclusive as heurísticas para tratar controle de fluxo AND, XOR e OR que não haviam sido implementadas por Azevedo et al. (2009c). 

Conclusão

Este artigo apresentou um método para construção de serviços alinhados ao negócio tendo como ponto de partida o uso dos elementos dos modelos de processos da organização. O método segue uma abordagem top-down, ou seja, ele tem como entrada modelos de processos de negócio, os quais apresentam uma descrição do negócio em alto nível, e segue até a geração de um conjunto de artefatos que auxiliam na implementação de serviços web executando em determinada plataforma. 

O método contempla as fases de identificação, análise, projeto e implementação do ciclo de vida de desenvolvimento de serviços. Ele propõe um conjunto de heurísticas para analisar elementos dos modelos de processos e gerar artefatos de implementação. A Figura 4 apresenta um exemplo resumido de aplicação do método, onde em: (a) são ressaltados elementos do modelo utilizados para identificar o serviço candidato; (b) apresenta informações obtidas do modelo que descrevem o serviço candidato; (c) apresenta a priorização do serviço em relação a características de reuso, se o serviço faz parte de uma atividade de múltiplas instâncias, quantos sistemas o consomem e os papéis envolvidos no seu uso; (d) apresenta o projeto das operações do serviço e a entidade do negócio que ele consome; a partir destas informações, gera-se o código (por exemplo, em Java) para implementação do serviço.

Ilustração de elementos resultantes da aplicação do método para construção de serviços
Figura 4 – Ilustração de elementos resultantes da aplicação do método para construção de serviços

Referências Bibliográficas

ALONSO, G., et al. Web Services: Concepts, Architectures, Applications. Springer, 2004. https://doi.org/10.1007/978-3-662-10876-5_5

AZEVEDO, L. G., et al. A Business Aware Service Identification and Analysis Approach. In: IADIS International Conference Information Systems, pp. 196-203, 2011. http://www.iadisportal.org/digital-library/a-business-aware-service-identification-and-analysis-approach

AZEVEDO, L. G., et al. A Method for Bridging the Gap between Business Process Models and Services. iSys: Revista Brasileira de Sistemas de Informação, v. 6, p. 62-98, 2013. https://sol.sbc.org.br/journals/index.php/isys/article/view/223

AZEVEDO, L. G., et al. A Method for Service Identification from Business Process Models in a SOA Approach.  In: 10th Enterprise, Business-Process and Information Systems Modeling (BPMDS 2009). Springer, 2009a, pp. 99–112. https://doi.org/10.1007/978-3-642-01862-6_9

AZEVEDO, L. G., et al. Identificação de Serviços a partir da Modelagem de Processos de Negócio. In: V Simpósio Brasileiro de Sistemas de Informação, 2009, Brasília. 2009b. https://doi.org/10.5753/sbsi.2009.6172

AZEVEDO, L. G., et al. Identificação Automática de Serviços Candidatos a partir de Modelos de Processos de Negócio. In: Conferência IADIS Ibero-Americana WWW/Internet 2009, v. 1. p. 139-146, 2009c. http://www.iadisportal.org/digital-library/identifica%C3%A7%C3%A3o-autom%C3%A1tica-de-servi%C3%A7os-candidatos-a-partir-de-modelos-de-processos-de-neg%C3%B3cio

BRANDÃO, B. C. P., et al. Identificação Automática de Serviços a Partir de Processos de Negócio em BPMN. In: I Escola Regional de Sistemas de Informação – RJ (ERSI-RJ 2014), Niterói, RJ, Brasil, 2014. https://sol.sbc.org.br/index.php/ersi-rj/article/view/5788

BUNA, S. GraphQL in action. Manning Publications Co., 2021. https://www.manning.com/books/graphql-in-action

CHUMBLEY, et al. Web Services Basic Profile Version 2.0. Web Service Interoperability Organization (WS-I), 2010. http://ws-i.org/Profiles/BasicProfile-2.0-2010-11-09.html

DECKER, G., et al. The Business Process Modeling Notation. Modern Business Process Automation, pp. 347-368, 2010. https://link.springer.com/chapter/10.1007/978-3-642-03121-2_13

DIIRR, T., et al. Practical Approach for Service Design and Implementation. In: IADIS Information Systems, v. 1. p. 197-204, Berlim, 2012. http://www.iadisportal.org/digital-library/practical-approach-for-service-design-and-implementation

JOSUTTIS, N. M. SOA in Practice: The Art of Distributed System Design. O’Reilly, Sebastopol, 2007. http://www.soa-in-practice.com ou https://www.amazon.com.br/SOA-Na-Pratica-Nicolai-Josuttis/dp/8576081849 (em português)

KELLER,  G., et al.,   Semantische Prozeßmodellierung  auf  der  Grundlage  “Ereignisgesteuerter  Prozeßketten (EPK)”.  Institute für Wirtschaftsinformatik, 1992.

LIMA, L., et al. Aplicação de Métodos baseado em Processos de Negócio para Desenvolvimento de Serviços. In: I Escola Regional de Sistemas de Informação – RJ (ERSI-RJ 2014), Niterói, RJ, Brasil, 2014. https://sol.sbc.org.br/index.php/ersi-rj/article/view/5783

MARKS, E.A., BELL, M.: Service-Oriented Architecture: A Planning and Implementation Guide for Business and Technology. John Wiley & Sons Inc., Chichester, 2006.

RICHARDSON, L., et al. RESTful Web APIs: Services for a Changing World. O’Reilly Media, Inc., 2013. https://www.oreilly.com/library/view/restful-web-apis/9781449359713/

VAN DER AALST, W.M.P., Workflow patterns. Distributed and Parallel Databases. 14, 5–51, 2003. https://doi.org/10.1023/A:1022883727209

YIN, R., YE, X., An Efficient Data Service Layer. Proceedings of the 2010 International Conference on Parallel and Distributed Computing, Applications and Technologies, pp. 249-254, 2010. doi: 10.1109/PDCAT.2010.44. https://ieeexplore.ieee.org/document/5704426