Introdução à Cobertura

Introdução à Cobertura

1. Visão geral

Neste artigo, demonstraremos vários aspectos degenerating code coverage reports using Cobertura.

Simplificando, o Cobertura é uma ferramenta de relatório que calcula a cobertura de teste para uma base de código - a porcentagem de ramificações / linhas acessadas por testes de unidade em um projeto Java.

2. Maven Plugin

2.1. Configuração do Maven

Para começar a calcular a cobertura de código em seu projeto Java, você precisadeclare the Cobertura Maven plugin in your pom.xml file na seção de relatórios:


    
        
            org.codehaus.mojo
            cobertura-maven-plugin
            2.7
        
    

Você sempre pode verificar a versão mais recente do plugin noMaven central repository.

Uma vez feito isso, vá em frente e execute o Maven especificandocobertura:cobertura como meta.

Isso criará um relatório detalhado de estilo HTML, mostrando as estatísticas de cobertura de código coletadas por meio de instrumentação de código:

image

The line coverage metric shows how many statements are executed na execução dos testes de unidade, enquantothe branch coverage metric focuses on how many branches are covered by those tests.

Para cada condicional, você tem duas ramificações, então basicamente, você acabará tendo o dobro de ramificações das condicionais.

The complexity factor reflects the complexity of the code - aumenta quando o número de ramificações no código aumenta.

Em teoria, quanto mais ramificações você tiver, mais testes precisará implementar para aumentar a pontuação da cobertura da ramificação.

2.2. Configurando Cálculo de Cobertura de Código e Verificações

Você pode ignorar / excluir um conjunto específico de classes da instrumentação de código usando as tagsignoreeexclude:


    org.codehaus.mojo
    cobertura-maven-plugin
    2.7
    
        
            
                com/example/algorithms/dijkstra/*
            
            
                com/example/algorithms/dijkstra/*
            
        
    

Depois de calcular a cobertura do código, chega-se à fasecheck. The check phase ensures that a certain level of code coverage is reached.

Aqui está um exemplo básico de como configurar a fasecheck:


    
        true
        75
        85
        75
        85
        75
        85
        
            
                com.example.algorithms.dijkstra.*
                60
                50
             
        
    

Ao usar o sinalizadorhaltOnFailure, Cobertura fará com que a compilação falhe se uma das verificações especificadas falhar.

As tagsbranchRate/lineRate especificam a pontuação mínima aceitável de cobertura de ramal / linha necessária após a instrumentação do código. Essas verificações podem ser expandidas para o nível do pacote usando as tagspackageLineRate/packageBranchRate.

Também é possível declarar verificações de regra específicas para classes com nomes seguindo um padrão específico usando a tagregex. No exemplo acima, garantimos que uma pontuação de cobertura de linha / ramal específica seja alcançada para classes no pacotecom.example.algorithms.dijkstra e abaixo.

3. Eclipse Plugin

3.1. Instalação

Cobertura também está disponível como um plugin do Eclipse chamadoeCobertura. Para instalareCobertura para Eclipse, você precisa seguir as etapas abaixo e ter o Eclipse versão 3.5 ou superior instalado:

Step 1: No menu Eclipse, selecioneHelpInstall New Software. Então, no campowork with, digitehttp://ecobertura.johoop.de/update/:

image

Step 2: SelecioneeCobertura Code Coverage, clique em “Avançar” e siga as etapas do assistente de instalação.

Agora queeCobertura está instalado, reinicie o Eclipse e mostre a visualização da sessão de cobertura emWindows → Show View → Other → Cobertura.

image

3.2. Usando Eclipse Kepler ou posterior

Para a versão mais recente do Eclipse (Kepler, Luna, etc.), a instalação deeCobertura pode causar alguns problemas relacionados ao JUnit -the newer version of JUnit packaged with Eclipse is not fully compatible with eCobertura‘s dependencies checker:

Cannot complete the install because one or more required items could not be found.
  Software being installed: eCobertura 0.9.8.201007202152 (ecobertura.feature.group
     0.9.8.201007202152)
  Missing requirement: eCobertura UI 0.9.8.201007202152 (ecobertura.ui
     0.9.8.201007202152) requires 'bundle org.junit4 0.0.0' but it could not be found
  Cannot satisfy dependency:
    From: eCobertura 0.9.8.201007202152
    (ecobertura.feature.group 0.9.8.201007202152)
    To: ecobertura.ui [0.9.8.201007202152]

Como solução alternativa, você pode baixar uma versão mais antiga do JUnit e colocá-la na pasta de plug-ins do Eclipse.

Isso pode ser feito excluindo a pastaorg.junit.*** de%ECLIPSE_HOME%/plugins e, em seguida, copiando a mesma pasta de uma instalação mais antiga do Eclipse compatível comeCobertura.

Feito isso,restart your Eclipse IDE and re-install the plugin usando o site de atualização correspondente.

3.3. Relatórios de cobertura de código no Eclipse

Para calcular a cobertura de código por um Teste de Unidade, clique com o botão direito do mouse em seu projeto / teste para abrir o menu de contexto e escolha a opçãoCover As → JUnit Test.

Na visualizaçãoCoverage Session, você pode verificar o relatório de cobertura de linha / ramal por classe:

image

Os usuários do Java 8 podem encontrar um erro comum ao calcular a cobertura do código:

java.lang.VerifyError: Expecting a stackmap frame at branch target ...

Nesse caso, o Java está reclamando de alguns métodos que não possuem um mapa de pilha adequado, devido ao verificador de bytecode mais rigoroso introduzido nas versões mais recentes do Java.

Este problema pode ser resolvido desabilitando a verificação na Java Virtual Machine.

Para fazer isso, clique com o botão direito em seu projeto para abrir o menu de contexto, selecioneCover As e, em seguida, abra a visualizaçãoCoverage Configurations. Na guia de argumentos, adicione o sinalizador-noverify como um argumento VM. Por fim, clique no botãocoverage para iniciar o cálculo de cobertura.

Você também pode usar o sinalizador-XX:-UseSplitVerifier, mas isso só funciona com Java 6 e 7, pois o verificador de divisão não é mais compatível com Java 8.

4. Conclusão

Neste artigo, mostramos brevemente como usar o Cobertura para calcular a cobertura de código em um projeto Java. Também descrevemos as etapas necessárias para instalareCobertura em seu ambiente Eclipse.

Cobertura é uma excelente ferramenta de cobertura de código simples, mas não mantida ativamente, uma vez que atualmente é superada por ferramentas mais novas e poderosas comoJaCoCo.

Finalmente, você pode verificar o exemplo fornecido neste artigo emGitHub project.