Separar a lógica do processo de negócio

July 15, 2008 – 2:17 pm by Gustavo S. Sinis

Promover uma cultura de processo é um dos fundamentos da adoção de SOA.

Em geral, os processos de negócio concentram-se nas tarefas repetitivas executadas em uma seqüência lógica (fluxos), fornecendo resultados definidos para apoiar os objetivos da organização. As tarefas buscam atingir alguma meta atômica, freqüentemente utilizando como entrada ou saída produtos de trabalho. Os processos podem ser classificados como: a) principal, para os processos de negócio que fornecem valor para atores externos da empresa como, por exemplo, clientes; b) administrativo, para os processos de negócio que fornecem a valor para atores internos da empresa; c) apoio, para os processos de negócio que apóiam os processos principais.

Freqüentemente, os processos são utilizados sem considerar explicitamente os fluxos de trabalho do negócio (seqüência lógica das tarefas do processo), utilizando apenas os conceitos principais extraídos do negócio. A isto dá-se o nome de modelagem de domínio de negócio, que são conceitos obtidos a partir da análise dos produtos de trabalho e do vocabulário utilizado no processo relevante ao software que está sendo desenvolvido. Tais conceitos são utilizados como um vocabulário comum para OOAD.

Para ilustrar uma abordagem tradicional, focando em práticas, podemos relacionar de forma sintética algumas atividades.

Na iteração temos:

  • processo de negócio é modelado ou entendido e, em muitos casos, já está modelado previamente (BPMN);
  • em função das necessidades de automação ou alteração do processo (ou seja, os requisitos), soluções funcionais são detalhadas (UC essencial [1], historias, TDD);
  • na realização dos UCs, os POJOS, representando o modelo de domínio da aplicação (MDD), recebem responsabilidades e trocam mensagens para atender as necessidades dos UCs (Cartões CRC [1], diagrama de robustez [1], GRASP, DDD);

Nesta abordagem, como mais de um UC pode ser realizado em paralelo, equipes colaborativas são indispensáveis. É comum existir uma pessoa responsável pelo merge dos objetos/conceitos que estão sendo trabalhados em paralelo, pois UCs podem compartilhar esses conceitos (Domínio). Em corporações mais complexas, existem sistemas que também compartilham conceitos; com isso, em muitos casos, as regras de negócio são duplicadas ou integrações spaghetti são usadas. Para controlar a complexidade, uma estratégia de decomposição de domínio pode ajudar, pois a abordagem facilita o reaproveitamento do domínio criando módulos coesos e pouco acoplados.

O processo é considerado, mas o fluxo do processo fica dentro da aplicação misturado com: lógica do domínio, pré-condições dos componentes de negócio ou, ainda, fica por conta da disciplina dos usuários ou de gerentes de áreas. O problema reside em considerar apenas o domínio, sem separar o fluxo do negócio, pois o processo de negócio é uma forma natural de entender como uma corporação funciona. Práticas de BPM como, por exemplo, monitoração de instâncias de processos, análise de tendência e simulação, podem provocar mudanças em processos de negócio. Separar a lógica do processo proporciona flexibilidade, que é um diferencial estratégico.

Serviços de processo - uma abstração que representa uma atividade do processo - auxiliam na separação da lógica do processo de negócio da lógica do domínio, fornecendo uma interface bem definida e independente, que organiza a aplicação para apoiar processos. Serviços são orquestrados (lógica de processo de negócio) para executar o processo, e o padrão de mercado atual utilizado é o BPEL.

Existem também abordagens em que serviços representam partes de um processo ou subprocessos, não apenas uma tarefa. Neste caso, o serviço possui o estado do processo, representa um conjunto de tarefas e a seqüência de execução. Atualmente, implementações BPMS e BEPL substituem com vantagens essa abordagem.

Mesmo que a aplicação não tenha uma abordagem BPM (BPMS +BPEL), serviços de processo são úteis, pois orientam a arquitetura, fornecem um vocabulário comum entre o processo de negócio e a aplicação, facilitando também a comunicação da TI com as áreas de negócio. Técnicas de decomposição de processos ajudam a identificar os serviços candidatos, uma vez que a existência desse serviço de processo só faz sentido se o mesmo estiver associado a uma atividade no processo de negócio.

Para auxiliar na separação da lógica do processo, algumas atividades devem ser incluídas no desenvolvimento como, por exemplo, a identificação de serviços. Na identificação de serviços candidatos, podemos relacionar as seguintes técnicas: a decomposição de processos, ou seja, a identificação de serviços de processo de negócio; e a decomposição de domínio, isto é, a identificação de serviços básicos.

Taxonomia instanciada

Serviços de processos são executados em uma seqüência lógica, e essa seqüência pode ser criada em BPEL ou em uma camada específica para a lógica de processo. Esses serviços, a fim de cumprir uma tarefa do processo de negócio, orquestram um ou mais serviços básicos.

Serviços básicos de negócio encapsulam a lógica de domínio e a expõem através de interfaces bem definidas. No mesmo sistema, podemos ter mais de um serviço básico; neste caso, eles são identificados a partir da aplicação de técnicas de decomposição de domínio. Um serviço básico pode, ainda, representar um sistema legado inteiro. Serviços básicos são criados para atender as necessidades dos UC, mas sua interface deve ser projetada para ser reutilizável corporativamente.

Eventualmente, para atender um UC, temos códigos que não pertencem exclusivamente a um serviço básico (seqüência de execução), e também não estão coesos/associados diretamente a um serviço de processo. Neste caso, se o código for reutilizável, podemos usar o conceito de serviço composto, que é um serviço básico que orquestra outros serviços básicos, funcionando como um camada de indireção, ou seja, evitando que serviços básicos troquem mensagens diretamente (baixo acoplamento).

Clientes dos serviços de processo são responsáveis pela lógica de processo (BPMS ou aplicações); clientes dos serviços básicos são responsáveis por garantir a pré-condição e a seqüencia de execução (Serviços compostos ou aplicações); serviços básicos encapsulam regras de negócio.

———————————————————————-
[1] Scott W. Ambler

Anatomia do Serviço (Taxonomia básica)

June 3, 2008 – 11:52 pm by Gustavo S. Sinis

SOA, na prática, exige uma taxonomia de serviços consistente. Serviços servem a propósitos diferentes e desempenham papéis muito distintos. A classificação dos serviços em uma corporação é essencial para o sucesso da abordagem.

Existem várias formas de categorização de serviços, considerando, por exemplo: granularidade [1]; consumidor; origem; segurança; com ou sem backend. Cabe a você encontrar a melhor forma de categorizar seus serviços de acordo com as políticas e retornos esperados em sua corporação. Temos vários autores com abordagens diferentes: Dirk Krafzig, Karl Banke, Dirk Slama; Thomas Erl; Jason Bloomberg, Ronald Schmelzer; James McGovern, Oliver Sims, Ashish Jain, Mark Little

Um ponto de partida interessante seria:

Serviço de Processo

Principal abstração de SOA, pois está relacionado intimamente com o processo de negócio, e possibilita que ele seja um vocabulário comum entre TI e as áreas de negócio, facilitando a comunicação. O negócio é a base para a identificação desse serviço (decomposição de processos), e, para a identificação ser efetiva, cada processo precisa ser modelado.

A existência desse serviço só faz sentido se o mesmo estiver associado a uma atividade no processo de negócio. Esse serviço, a fim de cumprir uma tarefa do processo de negócio, orquestra um ou mais serviços básicos (serviço básico é um conceito abstrato). Além disso, o Serviço de Processo é responsável por garantir a pré-condição dos serviços básicos.

Serviço de Negócio

Conhecido em CBD como Componente de Negócio, é utilizado para realizar o Serviço de Processo. Alguns autores não o classificam como serviço, mantendo o nome original “componente de negócio”.

Encapsula as regras de negócio e as expõe através de interfaces bem definidas. Os Serviços de Negócio são independentes, ajudam a gerenciar a complexidade e encorajam a reutilização.

O Serviço de Negócio pode ser identificado a partir da decomposição conceitual (domínio do processo), observando os objetos principais (conceitos mais fortes) e o tipo de associação (agregação, herança, etc.) entre os objetos relacionados, focando em coesão; têm-se na interface dos Serviços, todas as operações necessárias para “realizar” os passos dos UCs (Casos de uso). Serviços de Negócio são criados para atender as necessidades dos UC, mas sua interface deve ser projetada para ser reutilizável.

Além disso, visa proteger as regras de negócio, evitando, sobretudo, a duplicidade - ou seja, primando para que, quando da modificação de alguma regra, seja possível obter um único ponto de alteração.

Na prática, a implementação de tal ponto singular não é simples e, em muitos casos, inviável (problemas com redundância de dados e conceitos homônimos em diferentes sistemas legados).

Mesmo com esses possíveis problemas, a abordagem de componentes de negócio deveria ser uma meta ou um norte para criação dos Serviços de Negócios. Quando não for possível utilizar esse conceito, temos outras abstrações como, por exemplo, os Serviços Compostos com Serviços Wrapper, que ajudam a controlar redundância de dados.

A figura representa Serviços de Processo (representados como serviços corporativos) realizados por Serviços de Negócio

Serviços compostos

Operam em um nível mais alto que os serviços de negócios; são compostos de múltiplos serviços básicos; são responsáveis pela pré-condição e pela seqüência de execução dos Serviços Básicos. Um exemplo típico: serviços que controlam a redundância de conceitos em serviços Wrapper ou harmonizam conceitos homônimos na corporação, expondo uma interface mais limpa para o processo de negócio.

Ocasionalmente, temos códigos que orquestram serviços de negócio (códigos que não pertencem exclusivamente a um serviço de negócio) que precisam ser disponibilizados corporativamente. Essa lógica só ficará em Serviços de Processo se estiver associada/coesa a uma atividade do processo de negócio, caso contrário, é mais indicado para os Serviços Compostos.

Trabalhei em uma empresa que comprava ferrovias, herdando, assim, vários sistemas. Em um determinado sistema, o conceito “Trem” poderia ser uma composição de vagões, em outro, uma combinação de rota com hora de saída e hora de chegada. O Serviços Compostos podem harmonizar esses conceitos, fornecendo um interface limpa.

Serviços Wrapper ou de integração

São serviços de integração que “encapsulam e expõem” a lógica em um sistema legado.

————————————————
[1] Uma arquitetura não precisa estar exclusivamente ligada à granularidade baixa ou alta. Pelo contrário, a combinação das duas abordagens é recomendada. (Marcílio Oliveira, consultor da DigitalAssets)

Níveis de encapsulamento

June 3, 2008 – 11:51 pm by Gustavo S. Sinis

Soluções como CBD e SOA se destinam, na maioria das vezes, a superar limitações humanas, como lidar com grande quantidade de informações complexas.

Para lidar com tal complexidade, a abstração é uma ferramenta chave, e está intimamente relacionada com o conceito de encapsulamento. Focando nesse aspecto essencial, Page Jones descreve em seu livro “Fundamentals of Object-Oriented Design in UML” os níveis de encapsulamento. Baseando-se nesses níveis, é possível partir de simples linhas de código e chegar ao SOA, passando por CBD, mesmo considerando que essas abordagens foram concebidas em contextos diferentes. Veja a figura.

 

SOA, CBD e processos

June 3, 2008 – 11:50 pm by Gustavo S. Sinis

SOA tem uma base sólida em Design by Contract (DbC) e Component Based Development (CBD). A literatura de CBD, por exemplo, possui vários conceitos recorrentes que são essenciais para SOA, quais sejam: alta coesão; baixo acoplamento; sistemas distribuídos; composição; reuso; interfaces bem definidas. Tal como acontece com qualquer tema complexo, é difícil fazer progressos significativos em sua compreensão, sem referenciar pontos comuns, isso é verdade com SOA e CBD.

A adoção da SOA não revogou nada de CBD, pelo contrário, representou uma evolução deste. Isto porque, o CBD trouxe a base essencial para que fosse possível suportar SOA, ou seja, a infra-estrutura fundamental para a implementação de serviços orientados ao processo. A evolução não é tecnológica, mas de práticas/métodos como, por exemplo, a necessidade de se considerar processos de negócio (Decomposição do Processo de Negócio), de assimilar a heterogeneidade e de ter governança. SOA, hoje, representa uma coleção de abordagens úteis no desenvolvimento corporativo.

Considerando que as empresas são grandes coleções de processos de negócio [1] [2] e que SOA promove flexibilidade ao negócio, concluímos que o serviço representando diretamente uma tarefa do processo de negócio é uma abstração chave da abordagem. Funciona como um vocabulário comum entre TI e as áreas de negócio e orienta a separação da lógica do processo de negócio da lógica da aplicação (temos vários ganhos com essa abordagem, mesmo sem BPM). É a aderência dos serviços aos processos de negócio que possibilita a flexibilidade na assimilação de mudanças no processo.

“But there is a more sensible way to SOA, which maintains loose coupling and drives high cohesion and the secret is this: build your services to implement business processes. Don’t let the data guys scream at you that you need an enterprise data model (you don’t) and don’t let the application portfolio guys demand that you buy everything and stitch it together later (you can’t, this only gets you Frankenstein systems).” Anemic Service Model , Jim Webber, Ph.D. Global Architecture Lead, ThoughtWorks.

—————————————————————–
[1] Durante muito tempo, as empresas foram dirigidas por meio de metas estabelecidas para as áreas funcionais, mas hoje as metas são definidas para os processos essenciais, que constituem um nível fundamental de avaliação de desempenho da organização. (Rummler e Brache, 1990)

[2] A idéia de processo tem estado presente nos textos e nas discussões sobre Administração de Empresas nos últimos anos. É praticamente impossível evitar temas como redesenho de processos, organização por processos e gestão por processos. (José Ernesto Lima Gonçalve, Revista de Administração de Empresas, 2000)

Revista Engenharia de Software, artigo CBD x SOA

May 27, 2008 – 12:26 am by Gustavo S. Sinis

Foi publicado na revista Engenharia de SoftwareSoft, numero dois, um artigo meu, em que relaciono CBD com SOA. (A revista está nascendo agora e formando sua personalidade)

SOA tem recebido significativa atenção do mercado. O resultado desta atenção é a proliferação de muitas definições conflitantes sobre SOA (com grande contribuição dos vendedores de ferramentas). Apenas na classificação de serviços, por exemplo, existem vários autores com abordagens diferentes. Neste cenário, é interessante relacionar serviços (no contexto de SOA), com conceitos mais estáveis, no caso do artigo, componentes de negócio (no contexto de CBD), consolidando, assim, os conceitos.

SOA enfatiza a importância de separar verdadeiramente a lógica do processo de negócio da lógica da aplicação, e considerar serviços orientados a processo - obtidos com metodologias de decomposição de processo - como um vocabulário comum na comunicação e automatização dos processos de negócio. Assim, possibilita a agilidade na assimilação de mudanças no negócio.

Na prática, não é fácil que uma equipe comprometida com os resultados imediatos do projeto tenha tempo ou interesse em usar uma estratégia SOA, uma vez que a mesma não traz muitos benefícios imediatos para o projeto (talvez reuso), salvo se pensarmos corporativamente e no efeito acumulativo da abordagem. Por isso, governança é importante para SOA.

Vocabulário auxiliar utilizado:

Foram usados, no artigo, alguns termos genéricos (abstraindo os detalhes, a fim de evitar longas definições de conceitos), para focar nas principais idéias.

Subsistema: possui a semântica de um pacote, de modo que possa conter outros elementos e que tenha comportamento. O comportamento do subsistema é definido por classes ou outros subsistemas contidos nele. Um subsistema compreende uma ou mais interfaces, que definem o comportamento que ele pode apresentar.

Componentes de negócio: um subsistema que contém regras de negócio e seus dados. Poderiam ser classificados, dependendo do autor, como um serviço básico (ou algo parecido com serviços corporativos, na definição de Erl).

Países Baixos: sexo, drogas e… SOA?! (Google trends)

May 13, 2008 – 8:38 pm by Gustavo S. Sinis

Google trends não é um método científico, mas uma abordagem útil para avaliar interesse em SOA. Basta inserir um ou mais termos, no caso SOA e BPM, e ver como foram pesquisados no Google ao longo do tempo, considerando regiões geográficas. Para entender como funciona.

Nesta primeira pesquisa, temos uma análise de SOA e BPM em todas as regiões. Podemos observar (no gráfico “Search volume”) o crescimento da procura do termo SOA e uma tendênciada de queda da procura do termo BPM. Publicações para os dois termos (no gráfico “News reference volume”) estão aumentando nos últimos anos, principalmente para SOA.

A tendência de queda de BPM talvez seja apenas um reflexo do nível de maturidade da abordagem e também do aumento de temas relacionados. Como já foi mencionado, contrariando a tendência de queda (no gráfico “Search volume”), publicações para BPM estão aumentando (no gráfico “News reference volume”), embora esse aumento seja mais fácil de ser percebido em uma pesquisa individual para o termo BPM.

Ainda considerando todas as regiões, Holanda aparece em primeiro lugar, na frente da índia - que tem a segunda maior população do mundo - e mostra um interesse mais equilibrado entre SOA e BPM. Esse equilíbrio é interessante, pois a associação dessas abordagens é frequentemente considerada a melhor estratégia.

Já a índia apresenta um desequilibro considerável, talvez em função do modelo de negócio: exportação de software… A índia tem fama de ser uma boa fornecedora de código para o mundo, mas com soluções já definidas. Quando falamos de BPM, é necessária uma visão de negócio mais abrangente, entender as necessidades dos clientes e criar soluções. Por isso, talvez, fornecer serviços BPM com SOA seja uma boa oportunidade para o Brasil, em função do perfil já conhecido do profissional de TI brasileiro.

Nesta segunda pesquisa, temos uma análise de SOA e BPM no Brasil. É provável que a consulta “todas as regiões” seja mais confiável, pois o efeito dos homônimos regionais é diluído em vários paises com línguas diferentes. Mesmo com a provável existência de homônimos, acredito que em função da natureza dos termos, SOA e BPM, o resultado não seja comprometido significativamente.

Podemos notar uma significativa defasagem do interesse nacional pelos termos SOA e BPM comparando com o gráfico anterior. As pesquisas ficaram consideráveis apenas em 2007.

Ainda considerando apenas o Brasil, podemos obsevar o Rio de Janeiro em quarto lugar em SOA, mas muito na frente em BPM. Esperamos que depois de descontados os homônimos de BPM como, por exemplo, Batalhão de Policia Militar, o Rio continue na liderança em consultas do termo BPM.

Também foram utilizadas várias combinações com o recurso “exclusão de termos” como, por exemplo, BPM - (policia militar), BPM, mas não foi obtido alterações significativas, confirmando os resultados. Na verdade, em geral, os resultados estão em conformidade com o mercado.