CarmaBlog

Agilité, Développement Java, Nouvelles technologies et plus…
  • rss
  • Accueil
  • Management
  • Programmation agile
  • Technologie
  • Linux
  • Evénement
  • Contact
  • A propos de l'auteur
  • English
  • Francais

EclEmma – Une bonne couverture pour l’hiver

Fabian Piau | mercredi 11 novembre 2009 - 22:23
558 vues
  • Twitter
  • Facebook
  • Google +1
  • LinkedIn

Améliorer la couverture du code avec Emma

Dans ce nouvel article, je vous présente le plug-in EclEmma (contraction d’Eclipse et d’Emma), Emma est un analyseur de code Java open-source qui détermine la couverture du code. EclEmma est bien évidemment son portage sous Eclipse.

Après l’avoir utilisé pendant quelques semaines, j’avoue que je me demande comment j’ai bien pu faire sans jusqu’à présent.


Installation du plug-in

Tout d’abord, l’installation. Sous Eclipse, Help -> Install New Software… -> Add site. L’adresse est http://update.eclemma.org/. Après installation, Eclipse doit être redémarré.


Utilisation

Habituellement, pour lancer vos tests unitaires, j’imagine que vous sélectionnez soit un package, soit une classe de tests ou soit un test seul, puis vous faites un clic droit, Run As -> JUnit Test

Pour lancer le(s) test(s) avec EclEmma afin de vérifier la couverture correspondante, il vous suffit de faire quasiment la même chose. Vous utilisez le nouveau menu “Coverage As” au lieu du “Run As”. Notez qu’il est possible d’utiliser un bouton dans l’IHM, mais je préfère le menu.

Nouveau bouton dans l'IHM

Nouveau bouton dans l'IHM


Présentation détaillée

Voici un exemple en images pour bien voir comment cela fonctionne. En même temps, nous allons parler du Test-driven Development.

Nous souhaitons implémenter la fonctionnalité suivante: la conversion d’un texte au format HTML. Rien de bien évolué donc, mais parfait pour une présentation d’EclEmma.

Nous allons créer un premier test pour tester la gestion des accents.

Un premier test

Un premier test

Le test ne compile même pas, nous allons implémenter juste le code qu’il faut pour qu’il compile.


Après création de la classe “ConvertToHtml” et de sa méthode “convert”, le test est lançable.

Le code pour que le test compile

Le code pour que le test compile


Sans surprise, le test ne passe pas.

Le test est en échec

Le test est en échec


Implémentons la méthode “convert”.

Le code suffisant pour passer le test

Le code suffisant pour passer le test


Maintenant, le test réussit.

Le test passe

Le test passe


Le code n’est pas parfait, nous allons faire un peu de refactoring pour l’alléger et l’améliorer.

Refactoring du code

Refactoring du code

On vérifie que le test passe toujours.

A cet instant précis, vous pouvez vous poser la question suivante: bon d’accord, je sais que le code que j’ai écrit passe le test. Mais comment être sûr que je n’ai pas écrit trop de code, c’est-à-dire que j’ai écrit un code qui fait plus que ce que mon test lui demande…

La solution est dans EclEmma. On relance le test avec ce dernier.

Le code est couvert

Le code est couvert


Le code testé est surligné en vert. Dans mon cas, tout est complètement testé.

Le test est couvert

Le test est couvert


En plus, un tableau résumé s’affiche en bas. Le taux de couverture indiqué est de 100%.

Tableau résumé EclEmma

Tableau résumé EclEmma


Bon, il faut avouer que ce n’était pas trop dur avec un exemple aussi simple, mais gardez en tête l’utilité d’un tel logiciel sur une application contenant plusieurs centaines de milliers de lignes de code avec quelques milliers de tests unitaires.

Pour le tutoriel, je vais aller à l’encontre du principe TDD et modifier le code métier sans avoir préalablement écrit mon test.

Modification du code

Modification du code


Relançons le test avec EclEmma.

Le code n'est plus entièrement couvert

Le code n'est plus entièrement couvert

Le taux de couverture est “tombé” (si j’ose dire) à 95%. Ce que nous avons ajouté n’est clairement pas couvert par un test unitaire. La ligne est surlignée en rouge. EclEmma nous donne tout de suite le feedback qu’il nous faut.


Un coup d’oeil au tableau résumé et je sais exactement quel est le fichier concerné. Bon là, c’est moins drôle, je n’en ai que deux, ce n’était pas trop difficile à trouver.

Tableau résumé EclEmma

Tableau résumé EclEmma


Sans plus attendre, nous allons ajouter le test pour tester la non-conversion d’un texte qui ne doit effectivement pas être converti.

Ajout d'un second test

Ajout d'un second test

J’ai profité de la phase de réflexion sur l’écriture de mon test unitaire pour améliorer mon code métier en supprimant le préfixe en sortie, et en le mettant en constante.


Je relance EclEmma… Je retrouve un taux de couverture à 100%, tout est bien testé, et mon code fait exactement ce que je veux qu’il fasse (pas plus, pas moins).

Retour à une couverture optimale

Retour à une couverture optimale


Encore une fois, à des fins pédagogiques (bien sûr), nous allons modifier le code métier sans avoir modifié les tests. Supposons que maintenant on utilise un suffixe de non-conversion. On relance EclEmma. Oh, les belles couleurs !

Une ligne à moitié couverte

Une ligne à moitié couverte


Une ligne est surlignée en jaune, elle est partiellement testée. Arrangeons le code en 2 lignes pour y voir plus clair.

Explications sur une ligne à moitié couverte

Explications sur une ligne à moitié couverte

Tout s’explique maintenant, on est passé dans la première partie du ET mais pas dans la seconde, car la première partie n’a pas été vérifiée.


Vous l’aurez compris, EclEmma colorise les lignes de la façon suivante:

  • Vert: la ligne est testée, un test (au moins) la vérifie;
  • Rouge: la ligne n’est pas testée, aucun test ne la vérifie, il faut donc écrire un test;
  • Jaune: la ligne est partiellement testée, elle contient du code testé et du code non testé. Pour voir exactement ce qui est testé, “cassez” la ligne en plusieurs morceaux comme j’ai fait précédemment.


EclEmma fournit deux pourcentages de couverture, celui sur le code de l’application par les tests (c’est celui-ci qu’il faudra le plus surveiller, c’est le plus important), mais aussi le taux de couverture sur les tests eux-mêmes. Ce dernier peut-être utile, car il permet de faire un bon nettoyage dans les tests en montrant les lignes qui ne sont jamais utilisées.


Enfin, si vous regardez les propriétés du projet, vous pouvez avoir un résumé de la couverture par type d’élément Java. Ces chiffres sont utiles pour le développeur, le chef de projet, et peuvent faire partie d’un livrable client.

Second tableau résumé

Second tableau résumé


La configuration par défaut d’EclEmma est très suffisante. Vous pouvez paramétrer quelques options comme la personnalisation des 3 couleurs ou bien ajouter le taux de couverture dans le package explorer (comme ci-dessous).

Ajout des décorateurs de pourcentage

Ajout des décorateurs de pourcentage


Conclusion

Selon moi, EclEmma (Emma plus généralement pour ceux qui ne travaillent pas sous Eclipse) fait partie de la boite à outil indispensable à tout développeur JAVA travaillant quotidiennement avec des tests unitaires.

Il vous aidera facilement à améliorer votre taux de couverture. Autrement dit, et pour être plus réaliste, il vous montrera efficacement que vous développez plus qu’il n’en faut pour passer vos tests. Ainsi, peut-être qu’un jour, vous réussirez à atteindre un taux de couverture proche du mythique 100% (mais là… rien n’est moins sûr, car tout n’est pas testable comme on le voudrait… c’est une autre histoire… et surtout un sujet différent).

Je vous souhaite un bon test de ce logiciel sur vos tests !

Articles similaires

Firefox addonsMa liste d’indispensables pour Firefox WatiNWatiN, un outil pour tester les applications web
Commentaires
Pas de Commentaires »
Catégories
Programmation agile
Tags
couverture de code, eclemma, eclipse, emma, extension, java, plugin, test unitaire
Flux rss des commentaires Flux rss des commentaires
Page 1 sur 11

Langue

  • Français
  • English

Articles les plus consultés

  • Changer la langue de Firefox - 20 521 vues
  • Java EE & CDI vs. Spring - 10 210 vues
  • Personnaliser Gnome 3 (Shell) - 8 782 vues
  • Firefox Nightly, Aurora, Beta, Desktop, Mobile, ESR & Co. - 6 815 vues
  • Extensions WordPress de CarmaBlog - 5 666 vues
  • Open Street Map, une meilleure carte que Google Maps? - 3 284 vues
  • Ce fichier est actuellement utilisé, vous ne pouvez rien y faire… Merci Windows ! - 2 966 vues
  • Belbin – Théorie des rôles dans une équipe - 2 503 vues
  • Réaliser un sondage en ligne avec Google Docs - 2 398 vues
  • Changer le splash screen d’Eclipse en quelques secondes - 2 131 vues

Twitter

My Tweets

Tags

wave watin build java wordpress outil éjecter ubuntu c# agile formation extreme programming hiberner windows 7 blog démonter script jquery automatisation eclipse nantes plugin itil moteur de recherche de documents cloud windows seven disque dur chrome google bash test unitaire extension nosql intégration continue jug fosdem ic mongodb gestion des configurations bonnes pratiques agilité tdd partage test social docjax firefox mobilité informatique .net ebook

Articles récents

  • Mesurez votre influence sur le web avec Klout vendredi 31 mai 2013
  • Saisissez l’opportunité de suivre un cours sur la Gamification mardi 2 avril 2013
  • Comparaison NoSQL: Couchbase et MongoDB vendredi 8 mars 2013
  • IconFinder, la recherche d’icônes efficace vendredi 1 mars 2013
  • Retour sur Fosdem 2013 mercredi 20 février 2013
  • Fosdem, une conférence vraiment libre lundi 28 janvier 2013
  • Formation en ligne gratuite sur MongoDB mardi 1 janvier 2013
  • Découvrez Maxthon mardi 11 décembre 2012
  • Eteindre, mettre en veille ou hiberner son ordinateur? dimanche 9 décembre 2012
  • Une version mobile de votre Blog WordPress dimanche 28 octobre 2012
  • Réaliser un sondage en ligne avec Google Docs lundi 24 septembre 2012
  • Open Street Map, une meilleure carte que Google Maps? mercredi 25 juillet 2012
  • Une première approche du Camel d’Apache vendredi 11 mai 2012
  • Ce fichier est actuellement utilisé, vous ne pouvez rien y faire… Merci Windows ! dimanche 22 avril 2012
  • Personnaliser Gnome 3 (Shell) jeudi 15 mars 2012

Flux RSS

RSS Feed RSS - Articles

RSS Feed RSS - Commentaires

Abonnement via Email

Saisissez votre adresse email pour être informé des nouveaux articles.

Liens

  • Agile Nantes
  • Blog Ippon Technologies
  • Blog Netapsys
  • Blog Xebia France
  • Blog Zenika
  • Coursera
  • Developpef
  • Le Touilleur Express
  • Les Cast Codeurs Podcast
  • new Blog( perso );
  • OCTO talks !
  • The Coder's Breakfast

Suivez-moi!

Suivez-moi sur TwitterSuivez-moi sur LinkedInSuivez-moi sur Google+Suivez-moi sur About.meSuivez-moi sur SlideShare

Catégories

  • Evénement (9)
  • Linux (3)
  • Management (4)
  • Programmation agile (11)
  • Technologie (27)

Archives

  • Mai 2013 (1)
  • Avril 2013 (1)
  • Mars 2013 (2)
  • Février 2013 (1)
  • Janvier 2013 (2)
  • Décembre 2012 (2)
  • Octobre 2012 (1)
  • Septembre 2012 (1)
  • Juillet 2012 (1)
  • Mai 2012 (1)
  • Avril 2012 (1)
  • Mars 2012 (1)
  • Février 2012 (1)
  • Janvier 2012 (2)
  • Décembre 2011 (1)
  • Novembre 2011 (2)
  • Octobre 2011 (2)
  • Septembre 2011 (1)
  • Juillet 2011 (1)
  • Juin 2011 (2)
  • Avril 2011 (1)
  • Mars 2011 (1)
  • Février 2011 (1)
  • Janvier 2011 (2)
  • Novembre 2010 (2)
  • Septembre 2010 (1)
  • Août 2010 (1)
  • Juillet 2010 (1)
  • Juin 2010 (1)
  • Mai 2010 (1)
  • Avril 2010 (1)
  • Mars 2010 (1)
  • Février 2010 (1)
  • Décembre 2009 (1)
  • Novembre 2009 (1)
  • Octobre 2009 (2)
  • Septembre 2009 (2)
  • Août 2009 (3)
  • Juillet 2009 (1)
  • Juin 2009 (2)
rss Flux rss des commentaires get firefox
Fabian Piau | Copyright © 2009 - 2013
Tous droits réservés | Haut ↑