Até onde vão os benefícios da automatização de processos “zero-code”?

Quando buscamos soluções de BPMS (Business Process Management System), um dos argumentos mais sedutores lançados pelas equipes de vendas dos produtos é o de “zero-code”, ou “código zero”. Zero-code é a promessa de que o produto permite que um usuário de negócio possa modelar seu processo e disponibilizá-lo para execução automatizada sem a necessidade de desenvolver código de programação.

Esta proposta vem de encontro a uma percepção geral do negócio em relação à TI. Num cenário em que as organizações possuem inúmeros sistemas, nas mais diferentes plataformas e tecnologias, e em que o suporte tecnológico encontra dificuldades em atender com agilidade as necessidades do negócio para acompanhar às mudanças estratégicas do mercado, as empresas já não querem mais TI. Querem resultados.

Assim, a expectativa de poder modelar seus processos e executá-los sem requerer o envolvimento de analistas de sistemas e desenvolvedores soa extremamente atraente.

Mas o que significa de fato “zero code” e até onde um processo pode ser implementado com esta visão?

Parte desta impressão é alimentada pela adoção de uma “linguagem” de modelagem de processos em comum: a notação BPMN (Business Process Model and Notation). BPMN permite que a documentação de um processo em nível de negócio possa ser complementado para adquirir profundidade técnica à medida que é preparado para a implementação. Assim, o processo de negócio modelado pela área de negócio pode ser o mesmo a ser implementado no BPMS adotado pela organização.

O fato de BPMN permitir que usuários de negócio possam mapear e detalhar seus processos, leva muitas ferramentas vislumbrar a participação destes usuários de forma mais ampla do que a simples definição e detalhamento para o desenvolvimento de aplicações tradicionais. O usuário de negócio capacitado pode: definir a cadeia de atividades e suas dependências, definir regras de negócio para manejar fluxos alternativos, detalhar o que deve ser solicitado a cada participante nas atividades para que as mesmas sejam consideradas como concluídas, definir quem são os responsáveis por realizar o trabalho de cada tarefa.

Para tanto, existem algumas premissas básicas na realização de um projeto como este:

I. O(s) usuário(s) de negócio precisa(m) ter alto domínio sobre tecnologia e sobre a ferramenta para compreender e aplicar corretamente cada um de seus recursos;

II. O(s) usuário(s) de negócio deve(m) ter noções de construção de telas/formulários através do qual os participantes irão interagir com o processo em suas atividades;

III. O processo deverá ser essencialmente humano e restrito às informações coletadas em sua execução.

O resultado do processo sem envolvimento da TI está de certa forma limitado às funcionalidades mais básicas da solução de BPM, produzindo um workflow de atividades humanas com baixo nível de (ou sem) inteligência. Sem programação não é possível utilizar-se da inteligência que a organização já possui e que está distribuída nos seus sistemas sob a forma de informação.

Um dos aspectos mais importantes do processo é a informação. Naturalmente, durante o desenho do processo de negócio são identificadas necessidades de informações que precisam ser reunidas de fontes diferentes e eventualmente transformadas para sustentar a execução do processo.

Assim, inevitavelmente a participação de profissionais de TI acaba sendo necessária. Não apenas para o resgate e armazenamento de informações no decorrer do processo, mas a própria questão da interface do usuário nas atividades do processo – que muitas vezes requer mais do que oferece o formulário básico que pode ser construído com os recursos disponibilizados pela ferramenta.

O que ocorre então é a necessidade da própria TI rever seu papel, sobretudo do Analista de Sistemas. O novo analista deve ajudar a construir o processo, identificando juntamente com o negócio os componentes de software que precisam ser desenvolvidos para:

  • coletar informações do processo para alimentar os sistemas legados;
  • buscar informações de sistemas legados para disponibilizar aos participantes do processo, minimizando  a necessidade de acessar a diferentes sistemas para isso;
  • identificar melhorias de interface que reduzam o esforço de interação do usuário com o processo (como busca de valores existentes, cálculos, etc);
  • identificar validações que possam ser feitas pelo sistema para garantir a integridade do processo;
  • identificar formas mais eficazes de realizar o balanceamento de atividades em grupos.

Automatizar atividades humanas sem fazer uso inteligente dos recursos computacionais da empresa no que se refere à obtenção de informações agregará pouco ou nenhum valor ao processo e como consequência apresentará retorno do investimento muito abaixo das expectativas.

Timeout de atividades humanas no Oracle BPM

A necessidade de estipular prazos para que as tarefas humanas sejam realizadas é uma  característica constante nos processos automatizados.

Leia nesse artigo técnico um passo-a-passo de como implementar o uso de timeout no produto Oracle BPM 11g.

1. Timeout com expiração da tarefa

Se o objetivo é expirar a tarefa, retirando-a da lista de trabalho do usuário, o timeout pode ser setado diretamente nas configurações da tarefa humana, conforme segue:

A configuração deste tipo de timeout é semelhante no caso de tarefas humanas no Oracle BPEL 11g.

 

1.1. Definindo o timeout

Edite o arquivo .task de definição da tarefa. Conforme exibido na Figura 1 abaixo, na definição da tarefa, na aba “Deadlines” configure para expirar conforme um número fixo de dias, horas ou minutos a partir do início da tarefa; ou relativo a algum parâmetro definido no processo.

Note que a duração de tempo relativo em XML é expressa no formato P0Y0M0DT0H0M0S (http://www.w3schools.com/Schema/schema_dtypes_date.asp). Por exemplo, P2D equivale a 2 dias, e PT60S equivale a 60 segundos.

Se for preciso fazer cálculos com datas para calcular o timeout, existem no produto funções XPath para fazer adição ou subtração de durações de tempo com datas.

configuração do timeout na tarefa humana

Figura 1: configuração do timeout na tarefa humana

1.2. Avaliando no processo como a tarefa foi encerrada

Quando a tarefa é encerrada por timeout, seu status é alterado para expirada e o processo segue adiante. Então, se for preciso tomar alguma ação ou rota específica quando ocorrer o timeout, é preciso verificar nos dados de retorno como a tarefa foi encerrada.

Primeiro, é preciso salvar os dados de execução da tarefa em um dataobject, como exibido na Figura 2 abaixo:

mapeando o retorno dos dados da tarefa

Figura 2: mapeando o retorno dos dados da tarefa

Depois, numa tarefa de script extraia o valor do estado da tarefa com a expressão XPath:
string(bpmn:getDataObject(‘taskExec’)/ns:systemAttributes/ns:state)

Se o valor do estado for igual a EXPIRED, a tarefa foi encerrada por timeout ;-)

2. Timeout sem expiração da tarefa

É comum também que seja preciso implementar controle de timeout em uma tarefa, sem no entanto encerrá-la. Por exemplo, para enviar um email de aviso de atraso.

Nesse caso, não configure o timeout na aba ”Deadlines” da definição da tarefa. Ao invés disso, adicione um evento de timer de borda na tarefa humana, como mostra a Figura 3 a seguir:

timer de borda

Figura 3: timer de borda

Se o prazo de expiração for único, o timer pode por exemplo ser implementado como a adição de uma determinada duração a data atual no momento de criação da atividade:

xp20:add-dayTimeDuration-to-dateTime(string(xp20:current-dateTime()),concat(‘PT’,string(bpmn:getDataObject(‘timeout’)),’S'))

Se o timeout deve ser com base em uma data fixa, configure o timer como sendo do tipo Time Date, como mostra a figura abaixo.

timer de data fixa

Figura 4: timer de data fixa

Deixe desmarcada a opção “Interrupting Event” se a tarefa NÃO deve ser encerrada ao estourar o timeout. Se marcar essa opção a tarefa será interrompida quando ocorrer o timeout!

Se o timeout deve ser executado diversas vezes, ciclicamente, então é só marcar o timer como “Cycle” e lembrar que ele não deve ser do tipo “interrupting”:

timeout cíclico

Figura 5: timeout cíclico

Lembre-se que sendo do tipo cíclico, o valor da expressão que tem de ser setado é novamente uma duração. Por exemplo:
concat(‘PT’,string(bpmn:getDataObject(‘timeout’)),’S')

 

* Observação: as cópias de tela apresentadas são baseadas no produto Oracle BPM 11g – versão 11.1.1.4, porém as configurações citadas são igualmente válidas nas versões posteriores do produto, apenas variando um pouco o estilo das caixas de diálogo.

 

BPA (Business Process Analysis) – Indo além dos Desenhadores de Processos

Utilizados principalmente pelos usuários de negócio, o BPA (Business Process Analysis) é a principal ferramenta utilizada pelo analista de processos para mapear, documentar, analisar e redesenhar os seus processos organizacionais.

Diferentemente dos desenhadores de processos, que são utilizados quase que exclusivamente para o mapeamento e documentação de atributos do processo, os BPAs possuem funcionalidades que extrapolam as funções de desenho do processo e apoiam grande parte das iniciativas de gestão por processo da organização.

Apesar das funcionalidades disponíveis numa ferramenta de BPA dependerem da implementação de cada fornecedor, iremos citar abaixo algumas das principais características presentes na maioria destas plataformas.

  • Gestão do Repositório de Processos Organizacional. Os processos são armazenados em uma base de dados, centralizada, de forma controlada e estruturada. Todos os processos da organização são mantidos nesta base, com controle de acesso e segurança. Somente usuários autorizados podem acessar a esta base, e é possível configurar quem pode acessar cada processo e quais são estes direitos de acesso (leitura, alteração, exclusão, …)
  • Definição de Metadados dos processos. São definidos atributos que permitem a classificação e catalogação dos processos organizacionais. Estes atributos podem ser utilizados para auxiliar a navegação no repositório de processos ou a realização de pesquisas avançadas.
  • Visão top-down dos Processos da Organização. Podemos modelar num BPA o processograma da organização, que abrange desde a identificação da cadeia de valor até o detalhamento dos seus macro-processos e processos operacionais.
  • Definição dos Campos de Documentação. Os campos que documentam os processos e suas atividades podem ser definidos pela organização, bem como seus tipo e obrigatoriedade.
  • Customização de Templates de Documentação. As informações dos processos armazenados no BPA podem ser exportadas para documentos cuja estrutura pode ser definida pelo escritório de processos. A empresa pode definir templates de diferentes tipos de documentos e gerar estes documentos automaticamente para um determinado processo. A figura abaixo mostra uma tela de customização de relatórios do Aris.

  • Publicação dos Processos de Negócio. Os processos armazenados podem ser consultados por diferentes usuários da organização através da sua publicação em um portal de processos. Mais do que uma exportação em formato Web, disponível em muitos desenhadores de processo, esta publicação mantém as regras de segurança e controle de acesso, exigindo login e senha dos seus usuários e garantindo que eles só poderão acessar os processos em que estão autorizados.

  • Soluções de Colaboração. Ao longo do mapeamento e redesenho de processos, é muito comum a equipe de análise precisar de um feedback de pessoas da organização sobre o processo que está sendo analisado. Através das soluções de colaboração, é possível que usuários selecionados façam anotações no processo e proponham sugestões sem que o processo seja efetivamente alterado. Estas sugestões são então analisadas pela equipe de analistas que avalia a viabilidade da sua adoção.
  • Simulação de Processos. Complementar a modelagem de processos, a simulação permite que o analista verifique qual será o comportamento do processo numa nova configuração. Como resultado, são gerados relatórios que demonstram como foi o seu desempenho, quais os pontos de gargalo, quais as necessidades de recursos, entre outras informações. Além disso, diferentes simulações podem ser comparadas com o objetivo de avaliar o ganho obtido com cada configuração.

 Podemos citar como exemplos de soluções de BPA os softwares Aris da Software AG, Oracle BPA da Oracle, iGrafix da Corel e Websphere Modeler da IBM; e são exemplos de desenhadores de processo o Oryx, o BizAgi Modeler e o Microsoft Visio.

Configurando um ambiente de desenvolvimento mais produtivo

Quando planejamos a implantação de uma nova tecnologia, de um novo sistema, é comum nos preocuparmos diretamente com os recursos de hardware e software que serão requeridos nos computadores servidores envolvidos. Porém, um ponto que poucos lembram-se de planejar previamente diz respeito aos recursos que as equipes de desenvolvimento e manutenção irão demandar.

Para além dos produtos diretamente relacionados ao sistema implantado, que outros aplicativos podem ajudar um técnico a ser mais produtivo em suas tarefas? Nesta hora, nada melhor do que trocar experiências, conversar com quem vive essa realidade no dia-a-dia.

Este é o motivador deste post: trocar experiências!

Não temos porém a pretenção de determinar quais são os melhores softwares, tampouco, ao citarmos um aplicativo específico, não queremos dizer que seus concorrentes são menos qualificados. O que estamos nos propondo a fazer é, na verdade, apresentar uma coleção que acreditamos atender adequadamente a maioria das necessidades de trabalho dos técnicos envolvidos com automação de processos e com desenvolvimento de sistemas de um modo geral.

Nota: é importante atentar para as políticas de licenciamento de cada software! Nem todo programa que pode ser instalado gratuitamente permite o seu uso para fins comerciais. Não nos responsabilizamos e tampouco estimulamos usos indevidos. Tampouco temos qualquer relação comercial com os fabricantes e distribuidores dos aplicativos citados.

 

Bom, vamos ao que interessa!

Confira a lista de aplicativos que sugerimos, considerando as plataformas Windows e Linux. Aguardamos contribuições e outras sugestões nos comentários.

Para facilitar, vamos agrupar as sugestões em aplicativos básicos, técnicos, segurança e desenvolvimento.

Aplicativos básicos:

  • Primeiramente é importante definir o sistema operacional a ser utilizado. O Windows 7 Professional é uma ótima opção nessa plataforma e, em Linux, as distribuições Fedora e Ubuntu são recomendadas (mas muitas outras também são adequadas).

** Adicionalmente, o Firefox mostra-se como uma opção bastante interessante para desenvolvedores pela grande quantidade de plugins disponíveis para estender suas funcionalidades. Dentre esses, podemos destacar o Webdeveloper e o Firebug, especialmente úteis para depurar os componentes Javascript das suas páginas.

  • Compactador de arquivos 7-zip, para Windows.
  • PDF XChange é um bom leitor deste tipo de arquivo, pois é leve e permite a inclusão de comentários e marcações. No Linux, ele pode ser instalado utilizando o Wine, citado mais adiante (Okular e Evince são bons leitores também para Linux). Claro, há também a opção de utilizar o Adobe Reader (para Windows e Linux), mas este é bastante “pesado”. Já para geração de PDFs, o pdfCreator é uma ótima opção para Windows, e o Cups-PDF para Linux atende a necessidade.
  • Para edições simples de imagens, recomendamos o Paint.net para Windows ou o Gimp (Windows e Linux), e o Gadwin Printscreen (Windows) para produzir cópias de telas (a maioria dos ambientes Linux possui opção nativa para tal).
  • Para comunicação, Skype para videoconferências e para chat o Pidgin (Windows e Linux), que suporta em um só aplicativo contas do MSN, GTalk e de outros serviços.
  • Instale o cliente do Dropbox para compartilhar facilmente arquivos entre diferentes computadores, ou mesmo entre toda a equipe de desenvolvimento.

Aplicativos técnicos:

  • Para Linux, há muitos pequenos programas de linha de comando úteis para diversas tarefas. Em ambiente Windows, podemos utilizar boa partes desses comandos utilizando o Cygwin! Por exemplo, nada como poder utilizar o comando tail para acompanhar um arquivo de log e, com o Cygwin, isso é possível mesmo em Windows.
  • No Windows, podemos conectar em um ambiente Linux remoto utilizando o Putty ou XShell, e podemos até mesmo executar localmente programas gráficos que estão instalados em um ambiente Linux remoto se utilizarmos o XMing. E o contrário também é verdadeiro: podemos instalar e executar alguns aplicativos Windows em ambiente Linux, instalando o Wine. Se o aplicativo não for dependente de bibliotecas muito específicas, tem uma boa chance de funcionar muito bem! E, para conectar remotamente em uma máquina Windows a partir do Linux, utilize o Vinagre, um cliente Remote Desktop e VNC leve e adequado.
  • Para controle de versões SVN, instale no Windows o Tortoise SVN, que integra-se muito bem ao Windows Explorer. Existe também o projeto Tortoise GIT para este outro controle de versões. Bem menos explorado e conhecido, o sistema de controle de versões Bazaar é uma opção bastante interessante para manter versionados arquivos locais sem depender de um servidor específico para tal. Pode ser utilizado, por exemplo, para manter versões locais mais frequentes, sem, no entanto, submeter versões para o sistema centralizado da empresa, onde espera-se que sejam entregues apenas versões estáveis dos códigos-fonte.
  • Para comparação de arquivos, recomendamos WinMerge para Windows e Meld para Linux.
  • Para editar arquivos texto no Windows, esqueça o Notepad! Instale o Notepad++, que possui diversos recursos e plugins disponíveis.
  • Instale o Wireshark (Windows e Linux) para interceptar e monitorar o tráfego de rede.

Segurança:

  • Utilize o TrueCrypt principalmente para proteger pendrives e HDs externos, mas o mesmo pode ser utilizado também para criptografar discos rígidos dos seus computadores. ** Adicionalmente, em Linux, é possível criptografar o disco rígido facilmente utilizando LVM.
  • Especialmente em ambiente Windows, tenha um bom antivirus instalado! O McAfee é bastante eficiente, mas tem custo de licença e consome bastante recursos do computador. Já o Comodo tem a vantagem de ser uma suite com antivirus, antimalware e firewall, e gratuita. Para Linux, o Avast é uma boa opção de antivirus para uso pessoal, enquanto que o Clamav é o mais famoso e de uso gratuito. Já o ipTables é o firewall padrão (boa parte das distribuições geralmente contam com um aplicativo gráfico de firewall baseado em iptables). Ainda para Windows, pode-se também fazer uso das próprias ferramentas da Microsoft: Windows Firewall e o Security Essentials como antivirus.
  • Também não esqueça de ter uma opção de software para backup, especialmente se trabalhar em home-office ou se viaja muito com notebook. A maioria desses serviços é pago, mas seu custo caiu muito nos últimos anos. Algumas opções de empresas que disponibilizam serviço de backup remoto são: CrashPlan, Carbonite e Mozzy – estes dois últimos somente para Windows, o primeiro para múltiplas plataformas.

Desenvolvimento:

  • Para acesso e programação em banco de dados Oracle, utilize o Oracle Sqldeveloper. Para banco de dados SQL Server, utilize as próprias ferramentas  Microsoft.
  • Para desenvolvimento, depende muito do gosto do programador, mas Eclipse e Netbeans são ótimas IDEs.
  • Para teste e simulação de webservices, o SoapUI é uma excelente ferramenta.
  • Para automação de build e deploy, principalmente em Java mas também em outras linguagens e plataformas, utilize Ant e Maven.
  • Para virtualização de servidores, o VirtualBox é uma ótima opção, pois permite inclusive criar snapshots. Mais limitado, o VMware Player também serve para executar máquinas virtuais facilmente.

Bom, ficamos por aqui. Compartilhando esta lista de aplicativos, esperamos ajudar a facilitar o processo de escolha de ferramentas para as diversas necessidades e demandas de software que surgem em um ambiente de desenvolvimento.

Aguardamos comentários e sugestões de outros aplicativos que podem ajudar a tornar o nosso dia-a-dia mais produtivo ;-)

Orquestrar é uma arte

Recentemente perdi o sono com um pensamento que me intrigou positivamente. Fiquei impressionado por ter constatado algo tão simples e, ao mesmo tempo, tão interessante.

Trabalho com orquestração de webservices há mais de 2 anos. Também sou músico amador há pelo menos 25 e talvez, até o momento, eu nunca tivesse feito uma relação entre as duas coisas.

Ora, a coisa é simples! Imaginemos uma orquestra musical. Nela, o maestro é responsável por determinar o tempo da música, o seu pulso. Os gestos que ele faz determinam a textura da música, ou seja, se as notas vão ser mais suaves ou mais duras; e a amplitude da regência determina o volume (forte ou piano), quando a música deve crescer e quando deve diminuir; em suma, a interpretação dinâmica.

Além disso o maestro é quem dá as entradas para os músicos (já que nem todas as músicas começam e terminam com todos os instrumentos tocando ao mesmo tempo) e também determina o fechamento da música de forma que todos os músicos possam parar de tocar na hora certa.

A maioria dos maestros faz uma regência bem parecida, mas as diferenças são adaptáveis, dependendo do seu costume e dos ensaios.

O maestro, porém, não pode fazer tudo sozinho. Ele é o ‘regente’ e é quem deve ter a capacidade de contagiar sua orquestra. Mas não é ele que, no fim, irá gerar o som… É aí que entra o papel dos músicos e dos seus instrumentos. Se os músicos são bons o resultado é fabuloso!! Igualmente, se os músicos são limitados, não há maestro que faça milagres… E, por mais fantástico que seja um instrumento, se o musicista não é tão competente assim, o resultado pode ser desastroso. E vice-versa.

Se não bastasse, ainda devemos pensar em utilizar o instrumento certo para a tarefa certa, e este deve estar devidamente afinado. Não posso utilizar uma flauta no lugar de um baixo, por exemplo.

Algo semelhante ocorre na orquestração de sistemas. A orquestração é capaz de integrar sistemas de forma melodiosa e harmônica. Ela dita o ritmo da integração, invocando o serviço certo no momento certo, informando as entradas de cada serviço. Mas esse ‘maestro’ é totalmente dependente do serviço, o nosso músico, ao ponto de limitar-se à tarefa de realizar uma requisição e obter ou não uma resposta.

Esse exemplo também nos ajuda a visualizar os papéis envolvidos num processo de orquestração. Se pensarmos que a orquestração é como o maestro e os serviços são como os músicos, fica muito claro entender a separação entre a lógica da orquestração e a lógica de negócio: assim como o maestro não toca nenhum instrumento, a lógica de negócio não deve ser implementada junto com a lógica de orquestração e sim em serviços separados para serem orquestrados.

É fundamental, também, escolher o instrumento certo para tocar o trecho correto. O instrumento errado ou desafinado pode comprometer toda a orquestração, toda a peça. Da mesma forma que o serviço chamado na hora errada poderá comprometer os resultados da orquestração.


Chego à conclusão que orquestrar é uma arte!! E é por isso eu tenho tanto prazer em desenvolver esse tipo de trabalho!