Introduction à Cobertura

Introduction à Cobertura

1. Vue d'ensemble

Dans cet article, nous allons démontrer plusieurs aspects degenerating code coverage reports using Cobertura.

En termes simples, Cobertura est un outil de génération de rapports qui calcule la couverture de test pour une base de code, c'est-à-dire le pourcentage de branches / lignes auxquelles accèdent les tests unitaires dans un projet Java.

2. Plugin Maven

2.1. Configuration Maven

Pour commencer à calculer la couverture de code dans votre projet Java, vous devezdeclare the Cobertura Maven plugin in your pom.xml file dans la section de création de rapports:


    
        
            org.codehaus.mojo
            cobertura-maven-plugin
            2.7
        
    

Vous pouvez toujours vérifier la dernière version du plugin dans leMaven central repository.

Une fois terminé, lancez Maven en spécifiantcobertura:cobertura comme objectif.

Cela créera un rapport de style HTML détaillé montrant les statistiques de couverture de code recueillies via l'instrumentation de code:

image

The line coverage metric shows how many statements are executed lors de l'exécution des tests unitaires, tandis quethe branch coverage metric focuses on how many branches are covered by those tests.

Pour chaque conditionnel, vous avez deux branches, donc en gros, vous finirez par avoir deux fois plus de branches que les conditionnelles.

The complexity factor reflects the complexity of the code - il augmente lorsque le nombre de branches dans le code augmente.

En théorie, plus vous avez de branches, plus vous avez besoin de tests pour augmenter le score de couverture des branches.

2.2. Configuration du calcul et des vérifications de la couverture de code

Vous pouvez ignorer / exclure un ensemble spécifique de classes de l'instrumentation de code à l'aide des balisesignore etexclude:


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

Après le calcul de la couverture de code vient la phasecheck. The check phase ensures that a certain level of code coverage is reached.

Voici un exemple de base sur la configuration de la phasecheck:


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

Lors de l'utilisation de l'indicateurhaltOnFailure, Cobertura provoquera l'échec de la construction si l'une des vérifications spécifiées échoue.

Les balisesbranchRate/lineRate spécifient le score de couverture de branche / ligne minimum acceptable requis après l'instrumentation du code. Ces vérifications peuvent être étendues au niveau du package en utilisant les balisespackageLineRate/packageBranchRate.

Il est également possible de déclarer des contrôles de règles spécifiques pour les classes dont les noms suivent un modèle spécifique en utilisant la baliseregex. Dans l'exemple ci-dessus, nous nous assurons qu'un score de couverture de ligne / branche spécifique doit être atteint pour les classes du packagecom.example.algorithms.dijkstra et ci-dessous.

3. Plugin Eclipse

3.1. Installation

Cobertura est également disponible sous forme de plugin Eclipse appeléeCobertura. Pour installereCobertura pour Eclipse, vous devez suivre les étapes ci-dessous et installer Eclipse version 3.5 ou supérieure:

Step 1: Dans le menu Eclipse, sélectionnezHelpInstall New Software. Ensuite, au champwork with, entrezhttp://ecobertura.johoop.de/update/:

image

Step 2: SélectionnezeCobertura Code Coverage, cliquez sur «suivant», puis suivez les étapes de l'assistant d'installation.

Maintenant queeCobertura est installé, redémarrez Eclipse et affichez la vue de session de couverture sousWindows → Show View → Other → Cobertura.

image

3.2. Utilisation d'Eclipse Kepler ou version ultérieure

Pour la version plus récente d'Eclipse (Kepler, Luna, etc.), l'installation deeCobertura peut causer des problèmes liés à 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]

Pour contourner ce problème, vous pouvez télécharger une version antérieure de JUnit et la placer dans le dossier des plugins Eclipse.

Cela peut être fait en supprimant le dossierorg.junit.*** de%ECLIPSE_HOME%/plugins, puis en copiant le même dossier à partir d'une ancienne installation Eclipse compatible aveceCobertura.

Une fois terminé,restart your Eclipse IDE and re-install the pluginutilise le site de mise à jour correspondant.

3.3. Rapports de couverture du code dans Eclipse

Afin de calculer la couverture de code par un test unitaire, cliquez avec le bouton droit sur votre projet / test pour ouvrir le menu contextuel, puis choisissez l'optionCover As → JUnit Test.

Sous la vueCoverage Session, vous pouvez consulter le rapport de couverture ligne / succursale par classe:

image

Les utilisateurs de Java 8 peuvent rencontrer une erreur courante lors du calcul de la couverture de code:

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

Dans ce cas, Java se plaint de certaines méthodes ne disposant pas d'une mappe de pile appropriée, en raison du vérificateur de bytecode plus strict introduit dans les versions plus récentes de Java.

Ce problème peut être résolu en désactivant la vérification dans la machine virtuelle Java.

Pour ce faire, cliquez avec le bouton droit sur votre projet pour ouvrir le menu contextuel, sélectionnezCover As, puis ouvrez la vueCoverage Configurations. Dans l'onglet arguments, ajoutez l'indicateur-noverify en tant qu'argument VM. Enfin, cliquez sur le boutoncoverage pour lancer le calcul de la couverture.

Vous pouvez également utiliser l'indicateur-XX:-UseSplitVerifier, mais cela ne fonctionne qu'avec Java 6 et 7, car le vérificateur fractionné n'est plus pris en charge dans Java 8.

4. Conclusion

Dans cet article, nous avons brièvement montré comment utiliser Cobertura pour calculer la couverture de code dans un projet Java. Nous avons également décrit les étapes requises pour installereCobertura dans votre environnement Eclipse.

Cobertura est un outil de couverture de code génial mais simple, mais pas activement maintenu, car il est actuellement surclassé par des outils plus récents et plus puissants commeJaCoCo.

Enfin, vous pouvez consulter l'exemple fourni dans cet article dans leGitHub project.