No desenvolvimento de um software, muitas vezes nos deparamos com a dependência da entrada de dados oriundos de outros sistemas ou de funcionalidades ainda não desenvolvidas. Nesse caso é comum acreditar que não é possível testar estas funcionalidades antes de concluir a construção.
Hoje, com metodologias cada vez mais voltadas a entregas menores que gerem valor, conseguir testar partes menores do software sem todas as dependências é algo importante. Existem algumas formas bem eficazes de ter uma avaliação do produto nas etapas iniciais e até mesmo evitar erros futuros sem que o software esteja completamente construído.
Algumas abordagens usam stubs ou mocks para fazer esse trabalho, são alternativas que funcionam bem, mas não são alternativas muito realistas. De forma bem simplificada é como desenvolver um código temporário para substituir partes do sistema que não estão disponíveis, ou simular de forma controlada comportamento de classes e objetos, isso possibilita realizar testes ou ter a execução do sistema sem que aquela parte indisponível inviabilize a execução, sendo mais utilizada pelos desenvolvedores.
Uma alternativa que pode se mostrar mais completa nesse processo é a virtualização de serviço, que permite realizar a simulação de banco de dados, APIs, sistemas de terceiros e microsserviços. Esta abordagem tenta simular componentes de forma mais real, onde o software os consome da mesma forma que consumiria o componente final.
Mas quais são as vantagens de fazer a virtualização dos serviços?
- Testes iniciando mais cedo: As atividades de testes do sistema podem iniciar bem antes no ciclo de vida do software, já que não temos dependência de todo software estar funcional para realizar os testes.
- Simulação mais próxima da realidade: Os testes realizados conseguem simular algo muito mais parecido com a que teremos no produto final, por exemplo:
O sistema consome uma api, já tenho a parte do frontend construída, mas ainda não tenho a api, como o front consome a api não consigo fazer o sistema funcionar sem essa ligação, mas isso não é um problema com a virtualização, criamos uma api que retorne o que o sistema espera, e o front consome essa api como se fosse uma api real. - Ganho de tempo: Imagine que com as especificações entregues ao desenvolvedor do frontend ele conseguiu desenvolver muita coisa e gostaria de validar o que já está pronto, mas ainda não tem a api ou banco de dados disponíveis. Neste cenário para que ele valide essas interações, podem ser criados serviços virtuais para simular a api com o retorno esperado, assim como serviços virtuais JDBC que simulam operações de banco de dados.
- Ganho de custo: Temos ganho de custo por conseguir detectar possíveis problemas no início do processo.
- Reduzimos dependências de terceiros: com frequência nos deparamos com situações de impedimento para executar determinado teste porque o ambiente de homologação do terceiro não estava disponível, ou mesmo nunca conseguiu terminar todo um fluxo de teste porque o terceiro não disponibiliza um ambiente de testes. Com a virtualização de serviços podemos simular estes ambientes e ter menor dependência. Isso também minimiza atrasos causados por entrega de terceiros.
- Permite que equipes trabalhem em paralelo, promovendo interação e reaproveitamento de trabalho.
Desvantagens da virtualização de serviços.
- Custo das ferramentas: As ferramentas mais fáceis de trabalhar e com maiores funcionalidades não são open source, temos o custo para utilização desse serviço.
- Limitações: Podemos ter algum componente candidato a virtualização que não é compatível com o processo, por isso precisamos fazer antes testes para validar a aderência.
Estão disponíveis algumas ferramentas que nos ajudam na tarefa de criar as virtualizações, algumas mais abrangentes que disponibilizam virtualização de vários componentes, outras apenas de apis e microsserviços. É recomendado que seja feita uma avaliação das ferramentas junto aos cenários da organização para entender qual será mais efetiva e atenderá melhor às necessidades do processo.
Abaixo estão listadas algumas das ferramentas disponíveis:
ServiceV Pro é uma ferramenta de virtualização da SmartBear que permite virtualizar serviços HTTP, REST, SOAP, JMS e JDBC.
Parasoft Virtualize é um produto de virtualização de serviço que pode criar, implantar e gerenciar ambientes de teste, replica o comportamento de recursos dependentes, como bancos de dados, apis, sistemas de informações de terceiros que esteja fora do alcance direto.
Citrus é uma ferramenta de código aberto de virtualização de serviço. Oferece ferramentas para testes de integração complexos com imensos recursos de validação para XML, JSON e texto sem formatação. É capaz de se comportar como um cliente e/ou servidor emulando as mensagens de solicitação/resposta.
Hoverfly da SpectoLabs é uma ferramenta de virtualização/simulação de API de serviço de código aberto. É adequado para o desenvolvimento de microsserviços.
Traffic Parrot auxilia na virtualização fornecendo simuladores e simulações de APIs.
WireMock é uma ferramenta de simulador para API baseada em HTTP, permite realizar testes de API mesmo que a mesma ainda não exista.
Mountebank é uma ferramenta de código aberto que pode executar testes multiprotocolo. A base de código é Node JS.
O software de simulação de dados MicroFocus permite virtualização do comportamento do microsserviço.
CA Service Virtualization simula sistemas indisponíveis como mainframes e provedores de serviços externos.
IBM Rational Test Virtualization ajuda a reduzir dependências simulando parte ou um aplicativo inteiro.
Tricentis service virtualization permite simular o comportamento de componentes necessários para executar testes.
Será que a virtualização de serviços pode ajudar no seu dia a dia? Busque entender qual ferramenta terá maior retorno, teste, analise, proponha. A equipe pode e deve definir juntos quais as melhores alternativas para o processo.
Para saber mais sobre o assunto, abaixo estão os links de referência.
https://dzone.com/articles/dont-just-be-a-player-be-a-playmaker
https://smartbear.com/resources/ebooks/introduction-to-service-virtualization/
https://smartbear.com/blog/test-and-monitor/advantages-of-using-service-virtualization-over-mo/
https://www.infostretch.com/service-virtualization/
https://www.guru99.com/service-virtualization-tools.html
Autora:Tatiane Moreira Santos
Arquiteta de Testes