Os 3 principais desafios dos testes contínuos

Times ágeis reconhecem a importância da prática dos testes contínuos, mas a grande maioria não o praticam. Neste artigo, listamos os 3 principais motivos.

Não existe software atemporal, a cada semana surgem novas tecnologias no mercado. Por conta destas mudanças e novidades, é preciso perceber o desenvolvimento de softwares como algo mutável.

Para conseguir um desenvolvimento de software que sobreviva às inovações, é preciso feedback rápido, isso evita que um erro fatal possa ser publicado e afete funcionalidades centrais para as operações de uma empresa. São em cenários assim que os testes contínuos se destacam, gerando respostas rápidas e auxiliando no ciclo de desenvolvimento.

A automação de testes é essencial para os testes contínuos, mas isso por si só não é suficiente. No caso dos testes contínuos, o objetivo é de providenciar informações se o software pode ser lançado ou não. Outras práticas envolvidas nos testes contínuos são as de alinhar os testes com os riscos do negócio, virtualização, gerenciamento dos dados de testes para a integração contínua e rodar testes exploratórios para expor os principais problemas no início de cada etapa. Esta metodologia contínua não se trata apenas de ferramentas e mão de obra, ela é um processo mais profundo que requer uma mudança de dinâmica nos processos e membros da equipe.

A prática de testes contínuos é imperativa hoje, ainda mais com 97% das empresas tendo adotado metodologias ágeis e 71% praticando ou implantando DevOps. Uma pesquisa afirma que a utilização de testes contínuos é um dos fatores principais presentes em equipes com melhores desempenho. Apesar disso, muitas empresas não possuem ainda um processo contínuo de testes amadurecido.

A automação de testes já vem sendo utilizada por uma parcela maior de empresas, automatizando geralmente alguns testes de UI que acabam sendo integrados aos testes contínuos. Porém, no geral, o processo de testes contínuos fica apenas nisso. Os desafios para a expansão deste processo pode ser resumido em três categorias:

Tempo e recursos

As equipes geralmente subestimam o tempo e os recursos necessários para implementar testes automatizados sustentáveis. Programar alguns testes básicos de UI para rodar automaticamente é um excelente começo, porém, é preciso também:

  • Privilegiar os testes unitários e na camada de serviços (APIs e Web Services).
  • Evitar que testes famosos por serem frágeis forneçam falsos positivos para a equipe.
  • Criar teste para cada requerimento novo ou modificado (ou determinar onde focar os esforços e o que pode ser ignorado).
  • Estabelecer um framework de testes que suporta reuso e testes com base em dados, ambos são essenciais para fazer a automação de testes sustentável no longo prazo.

Saiba o que é um framework de automação de testes e as dicas de como configurá-lo.

  • Manter os testes individuais e o framework de testes mais amplos em sincronia com a constante evolução da aplicação.
  • Determinar como automatizar casos de testes mais avançados e como mantê-los rodando de forma constante em um ambiente de testes contínuos.

Com ágil e DevOps, o tempo para criar, fazer manutenção, executar e analisar um teste é extremamente limitado. É preciso encontrar formas de se certificar de que um feedback rápido esteja acontecendo.

Complexidade

A quantidade de tempo e habilidade necessárias para automatizar casos de testes básicos é diferente da necessária para automatizar áreas críticas de uma operação. Casos críticos muitas vezes envolvem múltiplas tecnologias, web services, interfaces mobile, entre outra. Portanto, exigem uma implementação e orquestração mais sofisticadas.

É preciso garantir que:

  • Os engenheiros de testes entendam como automatizar os testes em uma gama de tecnologias diferentes e juntar os dados e resultados de uma tecnologia para outra.
  • Possua dados de testes compilados e seguros necessários para montar um teste realístico, assim como rodar o teste por várias etapas complexas.
  • Acesso confiável, contínuo e econômico a todos os sistemas dependentes necessários para seus testes, incluindo APIs e aplicativos de terceiros que podem ser instáveis, em evolução ou acessíveis apenas em horários limitados.

Além disso, será preciso criar uma forma sistemática para detectar e reportar erros críticos que somente podem ser percebidos da perspectiva de um usuário. A automação de testes é excelente e pode ser usada repetidas vezes, mas ainda existem certas verificações complexas que são melhores avaliadas pela experiência do usuário.

Sem um feedback rápido e confiável de como as mudanças implementadas afetam a experiência do usuário, como saber que esta implementação será benéfica para a empresa?

Resultados

A reclamação mais comum quanto aos resultados dos testes é a quantidade exorbitante de falsos positivos gerados. No início da automação de testes é preciso lidar logo com os falsos positivos. À medida que as suítes de testes crescem e a frequência de execução aumenta, os falsos positivos se tornam um problema imensurável. Se não forem tratados, os falsos positivos tornarão sua camada de testes automatizados praticamente sem utilidade para a tomada de decisões.

Na era de equipes ágeis e DevOps, as decisões de entrega precisam ser feitas rapidamente, quase automáticas. Você precisa saber quais casos de testes falharam e sua criticidade. Os reports precisam ser suficientemente detalhados e confiáveis para sua análise. Se seus relatórios não indicam a criticidade dos casos de testes, se há falsos positivos em excesso, então você não será capaz de tomar uma decisão racional. Os resultados dos testes podem gerar pontos cegos, o que pode levar a sérios problemas devido a velocidade das metodologias ágeis.