EclEmma — Cobertura de testes para Java

Introdução

Todo bom desenvolvedor tem consciência de que os testes unitários são uma grande arma para evitar à introdução de novos bugs a aplicação e garantir que mesmo depois de fazer uma refatoração no código, incluir uma nova feature, ou qualquer outra atividade semelhante, tudo deve continuar funcionando como deveria.

É com este pensamento, que a técnica de desenvolvimento orientado a testes, o famoso TDD (Test Driven Development), tem ganhado força, apesar de que alguns críticos se oponham a técnica e dizem estar ultrapassada. Eu não sou um deles, muito pelo contrário, defendo abertamente o uso do TDD, ainda mais hoje que trabalhamos adotando metologias ágeis, como o SCRUM e XP, onde tudo tem um prazo e este prazo costuma ser bem curto.

Mas apesar de toda esta discussão (que pode durar bastante), não estou aqui para falar sobre TDD, mas unicamente sobre os testes unitários. Este tipo de teste é a menor unidade de teste que teremos no nosso sistema e está a cargo do desenvolvedor cria-los. Um teste unitário deve ser capaz de examinar o comportamento do seu código em várias condições diferentes, garantindo a sua funcionalidade. Entretanto, muitas vezes fica difícil saber se nossos testes unitários estão testando realmente todos os cenários possíveis para a funcionalidade que estamos implementando.“Testei todos os casos que eu lembrei… mas será que são todos os casos possíveis?” — Acredito que você já tenha tido um pensamento deste tipo, e este artigo está aqui para ajuda-lo.

Hoje vou apresenta-los uma ferramenta chamada EclEmma. Esta ferramenta é um plugin do Eclipse que verifica o quanto os seus testes cobrem do seu código.

EclEmma

O EclEmma é uma ferramenta de cobertura de código para Java. De forma resumida, ele te mostra qual a porcentagem do seu código seus testes estão cobrindo. Com esta ferramenta fica muito claro descobrir que aquele cenário X que pensamos na hora de codificar (o famoso if no meio do caminho), não está sendo coberto em nenhum dos seus testes unitários. Interessante, não?

O EclEmma é um plugin gratuito, disponível para o Eclipse sob a licença Eclipse Public License. A ferramenta foi inspirada na biblioteca EMMA desenvolvida por Vlad Roubtsov. A partir da versão 2.0, foi baseada na biblioteca JaCoCo de “cobertura de código”. O JaCoCo está disponível para qualquer desenvolvedor que tenha interesse em criar sua própria ferramenta e está disponível no site oficial do EclEmma. Até o momento deste artigo, a última versão disponível é a 0.7.1.

Dentre as principais características que posso citar da ferramenta, a principal delas é que o EclEmma funciona de forma independente do seu projeto e pode ser executado a qualquer momento. Além disso, ela também dá suporte a diversos frameworks de testes:

  • JUNit Test
  • TestNG Test
  • SWTbot Test
  • etc…

Para simplificar as coisas, vamos somente trabalhar com os testes JUnit.

Instalando no Eclipse

Estarei utilizando o Eclipse Kepler para fazer as demonstrações, mas já utilizei o EclEmma em versões mais antigas como o Juno, Índigo e Helios sem problemas. A instalação não tem nenhum segredo. É possível instalar a ferramenta de três maneiras diferentes:

  • Instalação pelo Eclipse Marketplace Client
  • Instalação pelo site de update
  • Instalação e download manuais

O site oficial mostra com detalhes cada uma das maneiras, vamos adotar a segunda.

  1. Inicie o seu Eclipse e então vá ao menu Help > Install New Software…

2 . No campo Work With digite http://update.eclemma.org/ e clique em Add…

3 — Selecione a última versão do EclEmma e clique em Next.

4 — Siga os próximos passos aceitando os temos de uso e reinicie o Eclipse.

Exemplo de uso

Agora vou utilizar um exemplo bem simples para mostrar como a ferramenta funciona. Primeiramente, vamos criar uma classe chamada Calculadora com o seguinte código:

Agora vamos criar uma segunda classe chamada CalculadoraTest para testar o método da classe acima:

Com as duas classes criadas, vá até a classe CalculadoraTest e clique com o botão direito em cima do primeiro teste. Perceba que agora você possui a opção Coverage as… . Selecione a opção JUnit Test e espere o resultado.

Seu código ficou colorido, não ficou? Vamos entender o que significa cada uma das cores:

  • Verde: Código Executado
  • Amarelo: Ponto de decisão
  • Vermelho: Código não executado

Agora também preste atenção na aba Coverage:

Podemos notar que somente 64,3% da nossa classe Calculadora foi testada com este teste. Se olharmos a classe Calculadora, veremos que há um trecho em vermelho:

O que aconteceu foi que somente o primeiro teste não foi capaz de testar o caso onde o dividendo tem o valor zero. Para isso, temos o segundo teste. Agora, execute os dois testes juntos, clicando em Coverage as… > JUnit Test (sem selecionar nenhum dos testes). Pronto? Agora vamos avaliar nossa aba Coverage de novo.

Olha só que maravilha, 100% dos casos da classe foram testados!

Conclusão

O objetivo deste artigo era mostrar, através de um exemplo realmente simples, como utilizar a ferramenta de cobertura de testes EclEmma. Perceba que, com esta ferramenta, como fica claro os casos que podem existir e que ainda não foram testadas. Neste exemplo obtivemos um percentual de 100%, mas em casos reais, isso é muito difícil alcançar. O nível recomendado é de pelo menos 80% de cobertura. Com o uso da técnica TDD, fica ainda mais fácil alcançar estes valores.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.