Esse artigo faz parte da revista Engenharia de Software 4 edição especial. Clique aqui para ler todos os artigos desta edição

Verificação, Validação e Testes

Introdução à Automação de Testes

 

Segundo Cem Kaner, autor do livro "Lessons Learned in Software Testing", o propósito da automação de testes pode ser resumidamente descrito como a aplicação de estratégias e ferramentas tendo em vista a redução do envolvimento humano em atividades manuais repetitivas.

A automação possibilita a execução de testes regressivos com maior amplitude e profundidade. Teste regressivo ou teste de regressão é o termo utilizado para o ciclo de re-teste de uma ou mais funcionalidades, a fim de identificar defeitos introduzidos por novas funcionalidades ou correção de defeitos.

A cada novo ciclo de teste, o time de testes normalmente executa os testes das novas funcionalidades e os testes regressivos das demais funcionalidades. Dessa forma, é possível encontrar algum efeito colateral ou instabilidade introduzida pela nova funcionalidade. O grande problema ocorre quando em um estágio avançado do desenvolvimento, gasta-se mais tempo executando testes regressivos do que testando as novas funcionalidades.

Uma abordagem de testes baseada puramente em testes manuais, normalmente não consegue acompanhar as demandas e o volume de testes ao longo do ciclo de vida de desenvolvimento de software. Freqüentemente o produto é liberado sem que tenha sido completamente testado em virtude de restrições de tempo.

A automação de testes quando utilizada corretamente permite a execução ininterrupta de testes regressivos a qualquer hora do dia ou da noite. A execução de testes automatizados é sempre mais rápida do que os testes manuais e menos suscetível a erros.

A decisão de usar uma abordagem de testes baseada em testes automatizados está em franca expansão na atualidade. Uma pesquisa realizada em 2006 pelo Forrester Research Inc, revela que 9% das empresas entrevistadas (empresas do Estados Unidos e Europa) utilizam testes automatizados em todos os esforços de testes e 39% das empresas responderam que utilizam testes automatizados em alguns esforços de testes (Figura 1).

 

Figura 1. Avaliando Soluções de Testes Funcionais - The Forrester Wave™ Q2 2006.

 

Nas seções a seguir serão apresentados os principais paradigmas e tipos de testes automatizados, assim como, a comparação das vantagens e desvantagens de cada um deles.

Paradigmas de automação de testes

Existem várias abordagens para a automação de testes. No entanto, neste artigo serão apresentados apenas os paradigmas mais importantes da atualidade. Além disso, o foco deste artigo é automação de testes funcionais, dessa forma, não serão apresentados ou discutidos os testes unitários (Unit Tests) e automação de testes de desempenho (Performance Testing).

Os tipos de automação são normalmente agrupados de acordo com a forma como os testes automatizados interagem com a aplicação. Em geral, os tipos de automação são agrupados em dois paradigmas (mas não são limitados a esses):

 

Baseados na Interface Gráfica

Nesta abordagem os testes automatizados interagem diretamente com a interface gráfica da aplicação simulando um usuário. Normalmente as ações dos usuários são gravadas (Capture) por meio da ferramenta de testes automatizados. A ferramenta transforma as ações dos usuários em um script que pode ser reproduzido (Playback) posteriormente.

Vantagens: Não requer modificações na aplicação para criar os testes automatizados. Também não é necessário tornar a aplicação mais fácil de testar (testabilidade) porque os testes se baseiam na mesma interface utilizada pelos usuários.

Desvantagens: Existe uma forte dependência da estabilidade da interface gráfica. Se a interface gráfica mudar, os testes falham. Baixo desempenho para testes automatizados que exigem centenas de milhares de repetições, testes de funcionalidades que realizam cálculos complexos, integração entre sistemas diferentes e assim por diante.

 

Baseados na Lógica de Negócio

Nesta abordagem os testes automatizados exercitam as funcionalidades da aplicação sem interagir com a interface gráfica. Normalmente é necessário realizar modificações na aplicação para torná-la mais fácil de testar (testabilidade). Essas modificações resultam em mecanismos para expor ao mundo exterior as funcionalidades da aplicação (APIs, Interfaces de Linha de Comando, Hooks, etc), como veremos mais adiante.

A interface gráfica é apenas uma casca (camada) que tem o objetivo de fornecer um meio para a entrada dos dados e apresentação dos resultados. A camada que abriga a funcionalidade e o comportamento da aplicação é a camada de lógica de negócio. Esta abordagem de testes é baseada no entendimento que 80% das falhas estão associados a erros na lógica de negócio (Figura 2).

 

 

Figura 2. Distribuição das falhas agrupadas por camadas.

 

Vantagens: Foco na camada onde existe maior probabilidade de existir erros. Independência das mudanças da interface gráfica. Alto desempenho para testes automatizados que exigem centenas de milhares de repetições, testes de funcionalidades que realizam cálculos complexos, integração entre sistemas diferentes e assim por diante.

Desvantagens: Requer grandes modificações na aplicação para expor as funcionalidades ao mundo exterior. Exige profissionais especializados em programação para criar os testes automatizados. Existem poucas ferramentas/frameworks que suportam essa abordagem (normalmente é necessário criar soluções caseiras).

Tipos de automação de testes

Conforme mencionado anteriormente, os tipos de automação são normalmente agrupados de acordo com a forma como os testes automatizados interagem com a aplicação. A Tabela 1 apresenta o sumário dos tipos de testes automatizados que serão apresentados neste artigo.

 

Paradigma

Tipo de Teste Automatizado

...
Quer ler esse conteúdo completo? Tenha acesso completo