Esse artigo faz parte da revista Java Magazine edição 36. Clique aqui para ler todos os artigos desta edição

ht=34 alt=imagem_pdf.jpg src="/imagens/imagem_pdf.jpg" width=34 border=0>

Cobertura de Testes na Prática

Usando o Emma para determinar a cobertura de testes de aplicações Java

Vinícius Manhães Teles

Quando desenvolvemos testes automatizados para uma aplicação é importante avaliar se eles estão alcançando todas as partes do sistema. O Emma é uma ferramenta open source que ajuda nesta tarefa, fazendo a análise da cobertura de testes de um projeto Java e gerando um relatório em formato texto ou HTML. Esse relatório representa um feedback importante para os desenvolvedores, pois indica quais áreas do projeto ainda não estão sendo cobertas por testes automatizados e portanto devem ser tratadas prioritariamente.

Neste artigo veremos os conceitos fundamentais do Emma e como funciona a ferramenta. Também mostraremos como instalar e usar o Emma e como analisar a cobertura de testes em suas aplicações.

Exemplo de uso

Antes de descrever em detalhes o funcionamento do Emma, vamos ver através de um exemplo o tipo de resultado que ele pode nos prover. Para isso, iremos implementar uma pequena classe, contendo um único método. Esse método recebe um inteiro positivo e retorna o número correspondente na seqüência de Fibonacci. O exemplo pode ser acompanhado mesmo sem saber detalhes de como calcular os números de Fibonacci. Em todo o caso, a regra de geração desses números é simples:

 

fibonacci(0) = 0

fibonacci(1) = 1

fibonacci(n) = fibonacci(n-2) + fibonacci(n-1)

 

Se o método recebe um número maior que 1, o retorno é a soma de cada um dos números de fibonacci de seus dois antecessores. Por exemplo, fibonacci(10) == fibonacci(8) + fibonacci(9).

O código da classe que contém o método fibonacci() encontra-se na Listagem 1 e a classe de teste correspondente está na Listagem 2. Depois veremos como gerar o relatório do Emma indicando a cobertura de teste da classe, mas por enquanto você já pode ver o resultado da análise do Emma na Figura 1.

 

image002.gif
Figura 1.
Resumo da cobertura de testes do projeto inteiro.

No topo desse relatório, o Emma indica o percentual de cobertura das classes, métodos e blocos (explicados mais adiante). Por exemplo, a análise da cobertura de linhas indica 100% (6/6), significando que todas as linhas executáveis existentes foram exercitadas pelos testes.

Abaixo dessa informação, o Emma apresenta um resumo da quantidade de pacotes no projeto, bem como arquivos executáveis, classes, métodos e linhas executáveis. Por último, o Emma mostra a análise dos pacotes do sistema, informando o percentual de cobertura das classes de cada um, bem como de seus respectivos métodos, blocos e linhas.

No relatório de cobertura do Emma, é possível obter mais detalhes sobre a cobertura de cada pacote, clicando em seu nome. Nesse exemplo, ao clicar no pacote jm o Emma nos apresenta mais informações sobre ele, como ilustrado na Figura 2. No topo aparece um resumo do percentual de cobertura das classes, métodos, blocos e linhas do pacote. Mais abaixo, esses mesmos percentuais são apresentados novamente, agrupados por classe. Nesse caso em particular, só há uma classe, para a qual o Emma indica 100% de cobertura.

 

image004.jpg
Figura 2.
Resumo da cobertura de testes do pacote jm.

O Emma permite que você se aprofunde ainda mais na análise de cada classe da aplicação. Por exemplo, no relatório de um pacote, você pode clicar sobre o nome de cada classe para ver seu código, e assim visualizar que linhas estão sendo cobertas. No exemplo, se clicarmos em Matematica.java, o Emma nos apresentará a tela ilustrada na Figura 3.

 

image006.jpg
Figura 3.
Análise de cobertura da classe Matematica.

No topo, vemos um resumo da cobertura do arquivo Matematica.java como um todo. Logo abaixo, o Emma apresenta a cobertura por classes contidas no arquivo. Para cada classe são apresentados os percentuais de cobertura agrupados por métodos. Por fim, o Emma mostra o código fonte do arquivo e colore com verde todas as linhas que são plenamente exercitadas quando os testes são executados. Quando uma linha não é executada, o Emma a realça em vermelho; já quando a linha foi parcialmente executada a cor amarela é usada. A idéia de uma linha parcialmente executada é explorada com mais detalhes adiante.

Exemplo de projeto com deficiências de cobertura

Para compreender o que aconteceria se o projeto não estivesse 100% coberto pelos testes, iremos apagar o método de teste testeFibonacciParaNumeroInvalido() apresentado em destaque na Listagem 2. Fazendo isso, o Emma nos mostraria o relatório ilustrado na Figura 4.

 

image008.gif
Figura 4.
Resumo da cobertura de testes inferior a 100%.

Nessa nova análise, o Emma indica que todas as classes e métodos continuam sendo executados pelos testes, entretanto verifica-se que o percentual de cobertura de blocos e linhas foi reduzido para 87% e 83% respectivamente. Clicando-se sobre o pacote jm, e depois sobre o nome da classe, somos levados mais uma vez ao código fonte, como ilustrado na Figura 5.

 

image010.jpg
Figura 5.
Cobertura parcial da classe Matematica.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo