Escolar Documentos
Profissional Documentos
Cultura Documentos
ÍNDICE
1. Introdução
2. Objetivo
3. Empresas / Áreas envolvidas
4. Macro fluxo
5. Melhores Práticas no Desenvolvimento RPA
5.1. Reutilização de Códigos
5.2. Variáveis
5.2.1. Variáveis "Hard Coded"
5.2.2. Informações Confidenciais
5.3. Nomenclatura do Projeto
5.4. Logica de Retry
5.5. Logica de Timeout e Exceções
5.6. Utilizando APIs de Legados
5.7. Utilizando APIs do RPA (exposição de APIs)
5.8. Utilizando Aplicações
5.9. Utilizando Aplicação SAP
5.10. "Waits" ou "Sleeps" no código
5.11. Quantidade de ações por função/objeto
5.12. Divisão de responsabilidades – fluxos e funções
5.13. Validação de Eficiência
5.14. Alteração de Senha do Usuário Robótico
5.15. Utilização de Filas
5.16. Schedules e Execuções dos robôs
5.17. SendKey e mapeamento por região
6. Documentos Adicionais
Introdução
Este documento descreve os procedimentos e melhores práticas para o desenvolvimento de soluções e projetos que utilizam RPA (Robotic Process
Automation), independente da tecnologia ou da ferramenta de RPA utilizada para o desenvolvimento.
Objetivo
O objetivo deste documento é servir como guia para o desenvolvimento das soluções robóticas dentro da Telefônica. Desenvolvedores das fábricas vão
precisar olhar para este documento e tentar seguir ao máximo todas as boas práticas previstas, com o intuito de melhorar a qualidade, eficiência e
resiliência das automações.
Na validação feita pelo Pipeline DevOps, quando uma boa prática não é atendida, o COE deve questionar a fábrica do porquê as melhores práticas não
foram atendidas. Neste caso, o Squad precisa dar uma explicação dizendo qual o problema dentro do processo ou dentro das ferramentas robóticas que
o impediu de seguir as melhores práticas. Ex: Aplicação com comportamento aleatório, problemas de performance por conta das aplicações envolvidas
etc.
Macro fluxo
Para garantir que as melhores práticas no desenvolvimento descritas neste documento sejam realizadas de forma assertiva e assegure o alcance dos
resultados definidos, os papéis e responsabilidades dentro da organização para execução destas atividades devem estar claramente definidos e
divulgados.
Atividades DCoE (Thiago Batista)(Dandara Cembranel)(Carolina Canato) Desenvolvedores Squad Líder Squad Arquiteto Squad
Construir norma R I I I
Comunicar norma R I I I
Executar norma I R C I
Monitorar norma I C R R
Validar norma A I C R
Variáveis
Existem algumas boas práticas envolvendo o uso de variáveis e suas nomenclaturas. Dentro da Telefônica, vamos definir um padrão para qualquer
ferramenta de RPA que será implantada.
Informações Confidenciais
Quando estamos trabalhando com informações confidenciais, como usuário e senha de um sistema ou aplicação e informações pessoais de clientes,
essas informações, em nenhuma circunstância, devem ser salvas dentro de objetos ou variáveis. Neste caso, devem ser usadas apenas para execução
em memória (runtime).
Normalmente, os grandes softwares de automação contêm um repositório para armazenamento de informações confidenciais, e sendo uma
funcionalidade nativa da ferramenta essa é a melhor maneira de transitar tais informações para o "client" (runtime).
No processo robótico, sempre que é necessário usar as informações de uma credencial, devemos "capturar" essas informações usando a funcionalidade
nativa (realiza a descriptografia automática), ou caso não seja possível pela ferramenta, realizar a descriptografia manual das informações para uso no
processo robótico. Vale lembrar que as informações de credenciais não podem ser guardadas em NENHUM outro lugar, principalmente nas variáveis do
processo robótico.
Caso seja necessário usar uma senha para realizar alguma conexão, por exemplo uma string de conexão para um banco de dados, é necessário
encriptografar toda a informação (incluindo servidor, instancia etc.), salvando a string criptografa em banco e somente descriptografar quando for
necessário o uso no processo do robô.
Nomenclatura do Projeto
Devida a diferença da forma de desenvolvimento das ferramentas da BluePrism e NICE, criamos uma nomenclatura padrão para cada um dos softwares
em relação aos processos robóticos.
Para os projetos desenvolvidos em NICE, vamos utilizar <nome do projeto><fase>_<camada>. Alguns exemplos são: ContasOfflineRoteamento_BL
ContasOfflineFiltro_BE2ViadeFatura_PO2ViadeFatura_Main
Agora para os projetos desenvolvidos na plataforma da BluePrism, segue o documento de padrão de nomenclatura:
Nomenclaturas Globais RPA - Telefônica
Logica de Retry
No desenvolvimento de automações robóticas é necessário fazer uma validação se a ação que a automação deveria realizar foi realmente feita, e se o
robô pode seguir para o próximo passo. Por exemplo, sempre que a automação precisar clicar em um botão ou passar de uma tela para outra, verificar se
existe algum elemento pós ação que confirme a execução com sucesso do passo anterior.
Caso a ação não tenha sido executada de forma correta, também uma boa prática tentar executar pelo menos 2 vezes a ação novamente. Nem todos os
processos e ações vão conseguir implementar esta lógica**, por questões do próprio sistema que roda a automação, mas sempre que possível seguir
esta forma de tratativa.
Esse modelo também se aplica em itens da fila. Se for possível, colocar um retry em todos os itens da fila que deram erro sistêmico ou erro não
mapeado, para que o robô tente executar o item novamente.
**Obs: Para processo como o login em um sistema não é correto fazer uma lógica de retry, pois na maioria dos sistemas, executar o login
incorretamente diversas vezes seguidas causa o block no usuário utilizado.
Para ajudar o time de sustentação e produção, ainda é recomendado que o robô tira um PRINT da tela no momento da exceção. Isso pode ajudar a
realizar o troubleshoot mais rápido do problema, pois caso o erro seja um Popup ou um erro que fique claro na tela do sistema, é mais fácil de realizar o
ajuste ou a solução de contorno até que seja alterado código do robô.
Hoje na Telefônica existe uma pasta dentro do Lagoa (file server) que cada um dos projetos deve criar uma subpasta específica para o mesmo. Nesta
pasta específica do projeto deverão ser armazenados logs de erro e prints das exceções causadas no fluxo do robô.
Neste cenário, toda API que ainda não esteja no barramento deve ser virtualizada dentro do gateway:
API REST (com Swagger) – Quando é usado uma API REST e existe também o Swagger da API, é necessário envolver o time de integração da
Telefônica para que eles realizem a virtualização dessa API dentro do Gateway.
API REST (sem Swagger) ou API SOAP – Quando é usado uma API REST e não existe um Swagger da API ou é usado uma API SOAP, é necessário
abrir um JIRA para o time de integração para eles realizarem a estimativa da construção da abstração do serviço ou construção do Swagger, e depois
eles virtualizam isso dentro do API Gateway.
O serviço do robô exposto deve ter conectividade com a base de negócio do projeto, para que seja possível armazenar as informações que foram
enviadas na REQUEST dentro de tabelas de negócio. Assim, o robô consegue se conectar com a base e ler a tabela para popular a fila de execução,
garantindo que nenhuma REQUEST ficará perdida caso o robô esteja indisponível .O desenvolvimento pode ser feito em qualquer linguagem (.NET, C#,
etc), o importante é garantir que as informações da Request sejam armazenadas e que o processos robótico se conecte com a base para popular a fila de
execução.
Utilizando Aplicações
É muito comum em automações (principalmente em sites web) desenvolver a lógica de fechar e abrir a aplicação ou browser sempre que se começa um
novo item na fila de processamento. Isso acaba impactando a performance e a possibilidade de escalabilidade do robô, pois a automação deve realizar
um login ou um conjunto de ações novamente para começar o novo processo. Em alguns casos isso deve ser feito por políticas de timeout com tempo
bem reduzido, mas devemos olhar caso a caso e, se for possível, implementar uma lógica que ao final da execução de um item, o robô deixa a aplicação
em uma página "home", para que no próximo item o robô não precise realizar o login ou gastar tempo executando outras ações antes de executar
efetivamente o processo.
Deverá ser feita a lógica de fechar/abrir a aplicação somente quando for iniciado a execução do primeiro item, assim o robô não terá problemas de
timeout caso o tempo entre o fim e início do processamento seja muito grande.
Por exemplo quando vamos executar uma ação em uma aplicação web, seja essa ação por conectividade nativa da ferramenta ou por scripts, quando
vamos clicar em um botão para abrir uma nova página, devemos criar uma lógica para que o robô tente identificar a nova tela e, caso a tela não apareça
após X tentativas (geralmente 3), gerar uma exceção com a mensagem do erro.
Existem processos ou conjunto de ações que o "Wait" com um tempo fixo é necessário para que a automação funcione, mas só devemos usar este
recurso em últimos casos.
Validação de Eficiência
Antes da entrega do projeto, os desenvolvedores juntamente com o arquiteto do Squad têm a responsabilidade de validar a eficiência da automação, ou
seja, validar se existe alguma melhoria a ser feita para otimizar recursos como tempo, processamento, objetos etc. Muitas vezes o uso de scripts em
páginas web ou em aplicações .NET/JAVA (por exemplo) podem dar ao robô uma velocidade de processamento maior, evitando ainda o risco de erros
por mapeamento e exceções do sistema.
Essa parte da validação é vital para melhorar a escalabilidade da automação, além de gerar redução dos custos envolvidos no processo robótico.
Utilização de Filas
Pelas boas práticas, todo processo robótico deve ser otimizado para utilização das filas, onde cada transação (BD, chamado, protocolo) a ser executada
é um objeto dentro de uma fila. Pelo conceito da fila, cada item que existe em uma fila precisa ser único, ou seja, ter um ID ou uma "chave" única.
Por exemplo, ao automatizar um processo que a operação disponibilizará um Excel com 2 mil linhas, onde cada linha representa uma transação diferente.
Neste caso é preciso criar uma espécie de "Invoker" ou "Produtor", um robô ou processo separado para ler este Excel e enviar cada linha para uma fila de
automação para execução dos robôs.
Caso não exista alguma informação na linha que seja única, que torne aquela transação única, é possível concatenar com a data e a hora da execução,
assim mesmo que a informação se repetir a data e hora/minuto faz com que aquele item seja único.
Desta maneira, conseguimos assegurar maior eficiência na execução dos processos, aumentar nosso poder de escalabilidade e ainda conseguir
reprocessar somente os itens que apresentarem erros em suas execuções.
1. Pendente
Quando um item é inserido na fila e está pendente de execução pelo processo robótico
2. Em processamento
Quando um item começa a ser processado pelo robô, em algumas ocasiões é necessário trocar o status do item na fila conforme o robô está executando.
Dessa forma pode ser mais fácil realizar alguma logica de retry do item, para que o robô inicie a execução do item novamente, mas de um ponto futuro no
processo ou ainda para ficar mais fácil no troubleshoot em caso de uma falha repentina do robô.
3. Concluído
4. Exceção de sistema
Quando o item é finalizado com uma exceção causada pelo sistema legado que o robô está acessando (popup, erro ao carregar uma página etc)
5. Exceção de negócio
Quando o item é finalizado com uma exceção conhecido de negócio, mapeada durante o processo de desenvolvimento.
Quando o item é finalizado por uma condição não mapeada, onde a exceção não foi mapeada durante o desenvolvimento do robô por um comportamento
desconhecido do sistema legado.
Uma coisa importante sobre quando o robô deve iniciar sua execução é não deixar que o processo execute em um período onde, dentro do sistema
legado, rodem scripts ou Jobs de atualização/limpeza de base. Isso pode causar uma lentidão nos sistemas e que podem impactar a execução do
processo. Geralmente esses Jobs e scripts rodam na madrugada, mas é necessário validar isso com a área de negócio ou PCP do sistema legado.
Outro ponto a ser considerado é quanto tempo o robô fica rodando sem pausar. Nossas máquinas não são muito grandes (temos no máximo 2vCPUS,
8GB RAM), então é importante não deixar o robô executando por longos períodos. O COE recomenda que o robô fique rodando em média 5 horas, e que
depois dessas 5 horas o processo dê uma pausa na execução (coisa de 5 minutos) para liberar a memória para a próxima execução.
O Squad pode usar a funcionalidade do Blueprism para o robô parar a execução após X itens da fila, e fazer o controle do com base nesses itens. Por
exemplo, se um item da minha fila demora em média 10 minutos para ser executado, seguindo a recomendação do COE, conseguimos executar 30 itens
(300 minutos) antes de estourar o tempo limite. Dessa forma, posso colocar a lógica que após 30 itens o robô pare a execução e espere a próxima
schedule para rodar.
Com esse tipo de mapeamento, é preciso tomar alguns cuidados para deixar o robô resiliente e mais robusto, para que não dê erro caso apareça alguma
informação diferente na tela. No caso do SendKey, antes de executar qualquer ação e pedir para a automação inserir as palavras é necessário "ativar" a
tela do sistema ou do browser, ou seja, trazê-la para o primeiro plano. Dessa forma o robô não corre o risco de apertar as teclas na tela errada, parando o
processo.
No caso de mapeamento por OCR ou região, além de "ativar" a tela e trazê-la para o primeiro plano, é uma boa prática usar o conceito de Ancoragem. A
ancoragem é o princípio de, em automações por pixels, criar algumas referências na tela quando for necessário clicar nos campos, para que o robô
consiga clicar no botão mesmo se a disposição da tela mude. Por exemplo, temos 2 botões um do lado do outro e no processo é necessário clicar no
botão da esquerda. Com o conceito de ancoragem, é necessário criar uma "ancora" não somente no botão que queremos clicar (esquerda), mas também
mapear o botão da direita e criar uma referência entre os dois, assim o RPA vai entender que o botão da esquerda está a X pixels do botão da direita.
Então mesmo que os dois botões mudem de posição na tela, a automação continua funcionando por conta da ancora que foi referenciada entre eles.
Documentos Adicionais