A solução definitiva para monitorar seus 100% de cobertura



Okay, esse título foi clickbait, confesso! Mas o objetivo era chamar a atenção e, aparentemente, consegui.



Após anos de experiência nessa industria vital aprendi, e posso dizer, 100% de cobertura de testes não quer dizer nada.

Testes automatizados existem para comparar resultados esperados, levantados previamente, com os resultados obtidos durante a execução atual, sendo assim somente escrever um teste não garante que ele é realmente útil, que aquele código a que ele se refere esta livres de bugs.

Acompanhe comigo este exemplo:

 | describe Calculadora do
 |   context 'Soma' do
 |     let!(:calculadora) { create(:calculadora) }
 |     subject { calculadora.soma(1,2) }
 |     it 'retorna um número ímpar' do
 |       expect(subject).to be_odd
 |     end
 |   end
 | end

Pensando no código de uma calculadora que contém apenas uma função ‘soma’, o que é necessário testar?
- A operação matemática adição, certo!?
Espera-se que o retorno seja o somatório dos parâmetros, no exemplo, três. Diferente disso o teste verifica se o resultado dessa soma é ímpar (be_odd), neste contexto esse teste garante alguma coisa? Dificilmente.

Segundo as de métricas de cobertura de teste se o seu projeto resumisse a esse contexto, você poderia encher o peito e falar aos quatro cantos que:
“- Meu sistema é infalível, pois tem 100% de cobertura de testes.” Certo?

Wrogn!


Existem diferentes cenários para diferentes projetos, mas só porque todas funções do seu sistema estão cobertas por teste não quer dizer que você está livre de problemas, que você é especial (talvez seja, mas não por esse motivo).

Descobrir a porcentagem de cobertura (ou descobertura) de testes do seu código, fazendo uma analogia a uma consulta médica, é um exame, uma análise fria, para que você consiga ver de forma mais clara o que deve receber mais ou menos atenção, esses pontos de atenção talvez necessitem de outros exames para então chegar em um diagnóstico correto.

Estamos entendidos até aqui? Assumo que sim!

...

Para que você que usa o framework rails e quer fazer esse exame do seu código existem diferentes formas, nesse post ensinarei como utilizando a gema Simplecov. Através da biblioteca embutida de cobertura de testes do Ruby esta biblioteca faz o levantamento dos dados, e fornece uma API para exibição desses resultados.

A partir de um projeto novo ou já existente a instalação e configuração dela é muito simples, sério, mamão com açúcar.

Adicione ao seu Gemfile a linha abaixo, depois execute o bundle install:

 | gem 'simplecov', require: false, group: :test

No topo do seu arquivo de configuração de teste (Default: test/test_helper.rb, Rspec: spec_helper.rb, Cucubmber: env.rb) insira:

\
require 'simplecov'
| SimpleCov.start

Rode seus testes e veja a mágica acontecer!



Após a execução dos testes será criado um novo diretório chamado “covarege” na raiz do seu projeto, nesta pasta você encontrará o arquivo index.html abra ele com seu navegador.

O resultado será parecido com esse:



Logo no início você pode ver a porcentagem de cobertura do seu projeto, no caso da imagem 95.92% de cobertura. Abaixo você tem em cada linha um dos seus arquivos de código com seus valores específicos, com a possibilidade de você ver linha a linha o que esta ou não coberto, como visto abaixo.




Enfim, seria impossível, sem conhecer seu projeto, dizer quando e onde você deve testar mais ou menos, mas agora você tem mais uma ferramenta, que gera um exame detalhado da situação e cabe a você decidir o que fazer.

Como diria o Tio Ben: “- Com grandes poderes, vêm grandes responsabilidades”.

Boa sorte!

Quer tirar alguma dúvida ou fazer sugestões? Entre em contato com a gente!