OVH Cloud OVH Cloud

JUnit : Oracles de test ?

3 réponses
Avatar
Zouplaz
Bonjour, en mettant au point certains tests unitaires avec JUnit je me
rends compte que pour certains d'entre eux le nombre de paramètres et donc
de combinaisons à tester est trop important pour pouvoir être effectués à
la main...

Dans un bouquin j'ai entendu parler du concept des "oracles de tests" mais
sans plus de précisions. J'ai tenté quelques recherche sur Google mais avec
le terme "oracle" je ne tombe que sur des articles en rapport avec la bd du
même nom.

Est-ce que quelqu'un pourrait me donner quelques pistes ?


Merci

3 réponses

Avatar
Laurent Bossavit
J'ai tenté quelques recherche sur Google mais avec le terme "oracle" je ne
tombe que sur des articles en rapport avec la bd du même nom.


Google "test oracle" (la traduction de "oracle de test") pointe par
exemple sur l'article suivant:

http://ase.informatik.uni-essen.de/olbib/memon.pdf

Dans un bouquin j'ai entendu parler du concept des "oracles de tests" mais
sans plus de précisions.


Ce n'est ni plus ni moins que la notion de comparer ce qu'on obtient en
sortie d'un cas de test avec un résultat attendu. Un assertEquals()
c'est un oracle de test. Il doit y en avoir pas mal, des développeurs
qui comme Monsieur Jourdain font des oracles de test sans le savoir. :)

Bonjour, en mettant au point certains tests unitaires avec JUnit je me
rends compte que pour certains d'entre eux le nombre de paramètres et donc
de combinaisons à tester est trop important pour pouvoir être effectués à
la main...


Tu peux en dire plus ? Peut-être que la technique "all pairs" peut
t'aider, mais c'est difficile à dire avec la description ci-dessus...

Pour "all pairs" voir l'article de mon ami Michael Bolton:
http://www.developsense.com/testing/PairwiseTesting.html

Laurent

Avatar
Zouplaz
Laurent Bossavit - :

Tu peux en dire plus ? Peut-être que la technique "all pairs" peut
t'aider, mais c'est difficile à dire avec la description ci-dessus...



Voila ce qui se passe : à temps perdu (!) je me suis amusé à reprendre un
ancien projet qui consiste à émuler un cpu 8 bits. Le problème, pour ce qui
est des tests unitaires, c'est qu'il doivent être exhaustifs : je dois
pouvoir tester chaque opcode pour chaque mode d'adressage et vérifier après
chaque exécution l'état attendu du registre d'état. En bref, ça signifie
écrire des centaines de lignes de tests (et encore, c'est un cpu plutôt
simple) avec le risque d'en oublier quelques uns au passage...

Dans un cas comme celui là, je sens que l'automatisation des tests à partir
d'une matrice serait plus simple (état initial, paramètres à modifier,
résultat attendu) conçu avec une autre appli (question lisibilité) et
exportée à un format quelconque (xml ?)

Et la question est (ta ta tan !) : où trouver de la théorie sur ce genre de
test, comment on les formalise ? le problème c'est pas tant imaginer la
mise en oeuvre au niveau de JUnit mais plutôt la logique qui se cache dans
la conception et la formalisation de cette matrice de tests...

Bon, il est plutôt tard suis pas sûr d'être très clair ;-)

Avatar
Laurent Bossavit
Je copie et redirige vers fr.comp.developpement, tout ça va au-delà de
Java...

Voila ce qui se passe : à temps perdu (!) je me suis amusé à reprendre un
ancien projet qui consiste à émuler un cpu 8 bits. Le problème, pour ce qui
est des tests unitaires, c'est qu'il doivent être exhaustifs : je dois
pouvoir tester chaque opcode pour chaque mode d'adressage et vérifier après
chaque exécution l'état attendu du registre d'état.


Projet sympa! Ah, mes débuts sur Apple II (enfin, pas tout à fait mes
débuts, il y a eu l'époque ZX81...) que des projets de ce genre m'ont
permis de redécouvrir avec nostalgie...

Le problème, pour ce qui est des tests unitaires, c'est qu'il doivent
être exhaustifs


Pourquoi ?

Dans le test comme dans le code, la voie pour maîtriser la complexité
c'est de factoriser ce qui peut l'être. Dans "ce qui peut l'être" il y a
évidemment une certaine science, mais on peut procéder empiriquement
aussi.

Concrètement, "all pairs" devrait être indiqué pour croiser opcodes et
modes d'adressage. Si tes méthodes de calcul des adresses effectives
sont bonnes pour un opcode, il n'y a pas de raison qu'elles soient
fausses pour les autres.

Quel est l'objectif de tes tests unitaires ?

Dans un cas comme celui là, je sens que l'automatisation des tests à partir
d'une matrice serait plus simple (état initial, paramètres à modifier,
résultat attendu) conçu avec une autre appli (question lisibilité) et
exportée à un format quelconque (xml ?)


Pour paraphraser une citation célebre:

Parfois, confronté à un problème, tu penses "Ah oui, je vais utiliser
XML". Maintenant tu as deux problèmes.

;-)

Et la question est (ta ta tan !) : où trouver de la théorie sur ce genre de
test, comment on les formalise ? le problème c'est pas tant imaginer la


Un peu de lecture préliminaire:
http://www.pnsqc.org/files/FourSchoolsofSoftwareTesting.pdf
http://www.kohl.ca/blog/archives/000087.html
http://testingeducation.org/conference/wtst_pettichord_UTST.pdf

Pour aller plus loin:
http://www.amazon.fr/exec/obidos/ASIN/0471081124/
(je l'ai lu et le recommande)
http://www.amazon.fr/exec/obidos/ASIN/0201809389/
(je ne l'ai pas lu, mais c'est une référence)

Laurent