Affichage des messages blog dont le libellé est cobertura. Afficher tous les messages blog
Affichage des messages blog dont le libellé est cobertura. Afficher tous les messages blog

29 janvier 2008

Quel outils pour la couverture de tests ? round 2

Continuons notre études des outils de mesure de couverture de tests.

Je devais entre autre chose comparer nos 3 outils sur plus de code. Après avoir cherché quel code source analyser (hibernate / Spring / Tomcat ... pas sous Maven 2, Geronimo ... trop énorme pour le moment sur ma machine, ...), je me suis arrêté sur sur le code de Apache Struts 1.3.9.

Ce projet contient (selon Clover 1 & 2) :

  • 114 621 LOC (Clover 1) / 119 525 LOC (Clover 2)
  • 50 080NCLOC (Clover 1) / 52 999 NCLOC (Clover 2)
  • 323 tests (selon le rapport maven surfire) qui passent à 100 %
Première constatation, Clover 1 et Clover 2 ne sont pas d'accord sur le nombre de LOC et NCLOC !

A la lecture des rapports Maven, grosse déception, Cobertura et EMMA ne font pas d'aggrégation des résultats de couverture de tests pour les projets multi-modules (Struts 1.3.9 en contient 9) ! il a donc fallu que j'aggrège ça moi même ...

Voici les résultats :
  • Cobertura : 12,8 % (Branche) - 15,4 % (Line)
  • EMMA : 27,9 % (Class) - 21,1 % (Method) - 23,0 % (Block) - 22,9 % (Line)
  • Clover 1 : 16,3 % (TOTAL)
  • Clover 2 : 15,4 % (TOTAL)
Le résultat de l'analyse est cette fois plus mitigé. Tout d'abord, Clover 1 et Clover 2 ne sont plus complètement alignés. Cobertura semble cohérent avec Clover (surtout Clover 2). Quand à EMMA, ses résultats (aggrégés par mes soins) sont complètements différents. Il y a une explication à cette différence : EMMA ne sort aucun rapport sur les modules qui ne contiennent pas de tests unitaires et donc on n'a pas pu prendre en compte une partie du code source pour la couverture Globale.

Classement à l'issu de ce 2ème round :
  1. Clover 2 + Cobertura (1er car les 2 outils sortent le même taux)
  2. Clover 1 (d'une courte tête)
  3. EMMA (loin derrière)

27 janvier 2008

Quel outils pour la couverture de tests ?

Connaître son taux de couverture de tests est important mais quel outils choisir ? sont-ils tous égaux ? mesurent-ils tous la même chose, de la même manière ? c'est ce que j'ai essayé de voir en testant 3 outils bien connus des développeurs java :

Pour faire simple dans un premier temps, je n'ai pas essayé de mesurer mon propre code mais j'ai utilisé le projet jakarta commons-configuration 1.5.

Ce projet contient (selon Clover 1 & 2) :
  • 33 023 LOC
  • 15 628 NCLOC
  • 1229 tests (selon le rapport maven surfire) qu ipassent à 100 %
Voici les résultats :
  • Cobertura : 81 % (Branche) - 88 % (Line)
  • EMMA : 96 % (Class) - 93 % (Method) - 86 % (Block) - 88 % (Line)
  • Clover 1 : 87,6 % (TOTAL)
  • Clover 2 : 87,6 % (TOTAL)
Première constatation, les 3 outils ne fournissent pas les mêmes indicateurs. EMMA fournit 4 niveaux différents de taux de couverture, Cobertura 2 et Clover uniquement 1. Pour moi, le taux de couverture le plus important est celui qui porte sur le taux de couverture des lignes de code.

Il semblerait donc que ces 3 outils soient cohérents et indique tous le même taux de couverture : 88 % (en arrondissant pour Clover).

Cette première étude est donc concluante mais ne permet pas de choisir pour le moment quel outils utiliser en me basant uniquement sur les résultats sur ce projet relativement simple. Il faut donc effectuer la même mesure sur :
  • une plus grosse quantité de code (Tomcat ? JBoss ?Hibernate ? ...)
  • du code qui a des tests qui échouent (afin de voir si ces tests sont pris en compte dans le taux de couverture)
  • ... ?
Il faut aussi prendre en compte la richesse des rapports fournis par ces 3 outils, les fonctionnalités complémentaires comme la possibilité de générer un historique, la disponibilité d'un plugin maven, d'un plugin pour Eclipse (mon IDE favoris), ...