Por que eu devo ler este artigo:Neste artigo vamos apresentar os principais conceitos sobre testes automatizados, um assunto que cada vez mais tem atraído profissionais que buscam qualidade e agilidade. Através de fundamentos e exemplos práticos, forneceremos uma base sólida para leitores que desejam iniciar os estudos nessa área.

Uma das diretrizes do manifesto ágil diz que “passamos a valorizar responder a mudanças mais que seguir um plano”. Para que seja possível responder às mudanças de forma a agregar valor a nossos clientes, necessitamos de mecanismos que nos tragam segurança ao fazer alterações em nossa aplicação, evitando o surgimento de efeitos colaterais.

O mecanismo essencial para termos essa segurança no código é o teste de software. Esse teste, quando feito por uma pessoa, ou equipe, é sujeito a falhas e pode demorar um tempo considerável caso seja necessário analisar o software em sua totalidade.

É neste cenário que os testes automatizados vêm se tornando cada vez mais relevantes.

Um teste automatizado é um trecho de código que testa uma parte da aplicação que estamos desenvolvendo. Sendo o teste também um software, podemos executá-lo repetidas vezes, de forma automatizada.

Como, normalmente, cada teste se refere a uma parte restrita da aplicação, para abrangê-la completamente, necessitamos de um conjunto deles, ao qual damos o nome de suíte de testes.

Uma vez que esses testes são criados utilizando uma linguagem de programação, a responsabilidade de garantir a qualidade do software deixa de ser tarefa exclusiva de um grupo específico de pessoas, os testadores, para ser compartilhada com todos os desenvolvedores.

Uma analogia é pensarmos no processo de desenvolvimento de software como uma escalada, onde os testes automatizados são nossos equipamentos de segurança. Podemos fazer uma escalada sem os equipamentos, mas um bom profissional reconhece o perigo que isso representa.

A codificação de um teste automatizado se baseia em três etapas, que serão estudadas ao longo deste artigo: criação do cenário, invocação do método e a verificação do resultado esperado.

Essa codificação, em geral, é feita na linguagem de programação em que a aplicação está sendo desenvolvida, muitas vezes utilizando frameworks para auxiliar neste processo. Os exemplos desse artigo utilizarão o JUnit, um dos frameworks de testes mais consolidados na comunidade Java.

A criação de testes automatizados não tem como objetivo garantir que a aplicação funcione conforme solicitado pelo cliente, mas sim fornecer um feedback rápido que o software continua funcionado conforme o especificado pelos desenvolvedores do teste.

Uma vez que as especificações dos testes nos dizem o que deve acontecer em determinados cenários, testes bem escritos podem ser uma boa forma de documentação da aplicação, diminuindo a necessidade de uma documentação extensa.

Desta maneira, os testes automatizados corroboram também com a diretriz do manifesto ágil: “passamos a valorizar software em funcionamento mais que documentação abrangente”.

Escrever testes com boa qualidade é importante não só para criar uma fonte de documentação, mas também para facilitar a manutenção e evolução da aplicação e dos próprios testes. Eles são parte integrante do nosso software, necessitando da mesma atenção e zelo que as funcionalidades.

Embora medir a qualidade de um teste seja uma tarefa difícil e passível de diferentes interpretações, esse artigo tem como objetivo não somente guiar o leitor na criação de seus primeiros testes, mas também fornecer embasamento para uma análise crítica da qualidade dos mesmos.

O estudo da qualidade dos testes, assim como outros conceitos apresentados nesse artigo, será guiado através de exemplos extraídos do nosso dia-a-dia. A criação desses exemplos não requer a utilização de uma IDE específica, mas com o intuito de facilitar o entendimento, iremos adotar o Eclipse, cujo link para download pode ser encontrado na seção Links.

Nível de abrangência dos testes automatizados

Teste automatizado é a denominação dada a todo tipo de teste que é programado com o objetivo de garantir o correto funcionamento de uma parte do software, de modo que possa ser executado de forma automática. A parte testada pode variar desde um único método, como por exemplo, calcular o saldo de uma venda, até um fluxo inteiro, contendo todas as etapas de uma venda.

Quanto mais complexa a parte testada, maior o nível de abrangência do teste, que serve como base para classificação dos testes automatizados, como veremos a seguir.

Denominamos micro-testes os testes com o menor nível de abrangência. Seu objetivo é testar um comportamento de uma classe de forma isolada. Assim, necessitam de poucos recursos, sendo extremamente rápidos para completar sua execução. Como exemplo, podemos imaginar o teste de um método que valida CPF.

Nota: Os micro-testes também podem receber o nome de testes unitários. Entretanto, existem fontes que utilizam esse termo como referência para qualquer tipo de teste automatizado.

Quando o teste necessita de mais classes e/ou recursos para execução, dizemo ...

Quer ler esse conteúdo completo? Tenha acesso completo