Image for post
Image for post
Rui Rodrigues | Automatization Head | everis Americas

5 dicas para um processo de qualidade utilizando testes contínuos

Temos ouvido falar cada vez mais de testes contínuos. Integração continua, testes contínuos e entrega contínua são atividades cada vez mais comentadas, mas nem sempre bem compreendidas. Neste artigo, procuraremos trazer um pouco de luz sobre o processo de testes contínuos. Afinal, o que de novo deve haver em meu processo de qualidade de software para que os testes recebam esta qualificação de “contínuos”?

Alguns pontos são pacíficos. É de consenso que testes contínuos tratam de um forte investimento em testes automatizados, que são executados para garantir a qualidade da entrega. Mas é somente isto? A automação de testes não é assunto novo, nem tão incomum assim fazer um forte investimento nela. O que há de novidade, então?

Falando de maneira sintética, fazer testes contínuos trata principalmente de tornar a execução dos testes automatizados parte fundamental do ciclo de vida de entrega do software. Mais do que ter testes automatizados que são executados ao final do ciclo de delivery, em cada pequena entrega fazemos uso do feedback oferecido pelos testes de regressão automatizados e pelos testes automatizados das novas funcionalidades. Sim, também das novas funcionalidades! Este é o principal desafio desta abordagem de testes; para que isto se concretize, algumas técnicas são necessárias para tornar mais eficiente o processo de automação de testes. Algumas delas, diretamente na automação; outras delas, na habilitação da gestão de pequenas entregas funcionais e da qualidade do código. Não vamos descer no detalhe destas técnicas neste artigo porque não é seu objetivo, mas gostaria de citar as principais delas para sua pesquisa:

· Automação do ciclo de vida do software

· Agile

· BDD

· TDD

· Testes Unitários

· Test Doubles (mocks)

· Virtualização de Serviços

· TDM

Destes que comentei, todos podem ser muito úteis em vários cenários diferentes, mas a automação do ciclo de vida do software é 100% necessária para que possamos trabalhar com testes contínuos, porque são inerentemente ligados. Um servidor de automação é fundamental para a execução automática dos testes automatizados.

Normalmente se inicia a automação do ciclo de vida do software com a integração contínua das alterações. Utilizando um servidor de automação (como por exemplo o Jenkins), se automatiza o processo de trazer as novas versões de código fonte e gerar uma nova versão do pacote executável de software, normalmente já entregue no ambiente de execução em que isto fizer sentido neste momento (por exemplo desenvolvimento, integração, homologação ou mesmo produção).

O início dos testes contínuos é o próximo passo a buscar na maturidade do processo de entrega de funcionalidades de software; se já gero a minha nova versão de software de maneira automática, faz todo sentido que execute meus testes de forma automática e valide sem interação humana os comportamentos esperados do software. Para isto, adicionamos um passo de automação de delivery após o build e deploy da nova versão do software para que sejam executados de forma automática os testes de software.

É só isto, então? Sim e não. Se executamos um grande volume de testes automatizados e estes testes são parte integrante do processo de entrega do software desde os primeiros builds de uma funcionalidade, podemos sim dizer que já temos um processo de teste contínuo em andamento. O fato de existir, entretanto, não garante a sua eficiência. Vou deixar para vocês cinco dicas que considero fundamentais para o bom funcionamento de um processo de qualidade utilizando testes contínuos:

1) Uma única equipe multidisciplinar.

Não temos uma equipe de desenvolvimento, outra de testes e uma de operações. Temos uma única equipe 100% comprometida com a qualidade da entrega que será feita. Sim, temos especialistas em arquitetura, desenvolvimento, testes e infraestrutura, mas todos eles atuam de maneira colaborativa para obter o resultado esperado. A estratégia de desenvolvimento, testes e deploy é discutida desde o princípio do ciclo atual de desenvolvimento pela equipe como um todo, e os testes começam a ser desenvolvidos paralelamente ao código da funcionalidade, para que possamos ter o ciclo de feedback de desenvolvimento o mais curto possível.

2) Infraestrutura necessária disponível

O ideal é que os testes reflitam as necessidades de infraestrutura de uma arquitetura bem estruturada, sem exigências que não façam sentido. Por exemplo, se temos uma camada de negócio que é partilhada por um aplicativo Web e um aplicativo móvel, os testes desta camada de negócios devem ser feitos uma única vez, porque não há replicação de funcionalidades. Por outro lado, devem ser garantidos os comportamentos específicos de cada plataforma cliente, avaliados de acordo com o risco de negócio envolvido. O que define se um teste deve ou não fazer parte do conjunto utilizado para garantia de qualidade é o seu risco de negócio, e não a disponibilidade de ambiente para execução. Qual é o custo de não ter a infraestrutura necessária?

3) Teste no ciclo de vida de desenvolvimento do software.

A automação de testes deve ser disparada o mais cedo possível no processo automatizado de delivery do software. Desta forma, não há uma “passagem de mãos” da equipe de desenvolvimento para a equipe de teste. O teste ocorre em tempo de cada entrega, na menor escala possível.

Os testes ocorrem desde o ambiente de desenvolvimento, passando pelos ambientes intermediários e chegando mesmo à produção. Claro, há testes que não poderão ser executados indiscriminadamente em produção; de acordo com a possibilidade e necessidade, entretanto, os testes devem ocorrer em todos ambientes de execução.

4) Alto nível de automação

O grande benefício do processo como um todo é poder executar os testes sem interação humana e obter um feedback seguro sobre a qualidade das entregas. Quanto menor o nível de intervenções manuais no processo, maiores os benefícios e mais curto o seu ROI. Se há atividades sendo feitas manualmente, não há como vencer os bloqueios que impedem sua automatização? Isto quebra o fluxo de automação. Os líderes de mercado estão chegando a 80% de automação; este é o nível necessário de automação de funcionalidades para ter um ciclo de feedback suficientemente rápido.

5) Visão clara de todas plataformas

O ideal é que tenhamos um dashboard com todas informações: os testes que executamos, o que passou, o que falhou, as funcionalidades que entregamos, os testes envolvidos nesta entrega. É importante integrar em uma visão clara os resultados de todas plataformas envolvidas (por exemplo mobile, web browsers e backend) identificando novas entregas e seus resultados.

Conclusão: apesar de o que diferencia um processo de testes automatizados para que possa ser chamado de “contínuo”, considerando apenas os testes automatizados, é mais quantitativo do que qualitativo, a combinação dos testes automatizados com as técnicas de automação de ciclo de vida do software e com as técnicas de gestão ágil possibilita um grande aumento na velocidade do feedback relativo à qualidade, e este incremento gera uma melhora significativa no ROI do processo de desenvolvimento como um todo. Há histórico no mercado de reduções estimadas em 20% no tempo total de desenvolvimento com a aplicação destas técnicas; sem dúvida é uma melhoria que compensa o investimento.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store