Dans la continuité de mon précédent article, je vais vous parler d’une technique fort utile pour réduire drastiquement la combinatoire: Pairwise.
Pour vous remettre dans le contexte des techniques combinatoires, je vous invite à (re)lire mon précédent article : Techniques basées sur les spécifications (5/7) – classification arborescente.
Définition
Test combinatoire: un moyen d’identifier un sous ensemble adéquat de combinaisons de tests pour atteindre un niveau de couverture pré-déterminé dans le cadre des tests d’un objet ayant plusieurs paramètres, chacun de ces paramètres ayant plusieurs valeurs. Le test combinatoire crée un nombre de combinaisons que le temps alloué aux tests ne permet pas d’exécuter.
Test par paires (Pairwise): Une technique de conception de test boîte noire, par laquelle les cas de tests sont conçus pour exécuter toutes les combinaisons de paires possibles des paramètres d’entrée.
Tableau orthogonal: Un tableau à deux dimensions construit à partir de propriétés mathématiques particulières, tel que le choix de deux colonnes du tableau fournit toutes les paires de combinaisons de chaque nombre du tableau.
Test par tableaux orthogonaux: Une approche de test systématique pour tester toutes les combinaisons de paires de variables en utilisant des tableaux orthogonaux. Ceci réduit de manière significative le nombre de combinaisons de variables à tester par rapport à l’ensemble des combinaisons possibles.
Construction d’une table orthogonale
Prenons l’exemple d’une situation avec 3 paramètres de chacun 2 valeurs.
La table orthogonale se construit selon les étapes suivantes:
- Poser dans une première colonne les deux valeurs du premier paramètre
- Puis poser une seconde colonne pour le second paramètre; La première valeur de ce second paramètre est mise en face des deux valeurs du première paramètre
- Puis on duplique les deux lignes en mettant cette fois-ci les valeurs du second paramètre.
- On recommence pour la 3 ème colonne avec sa première valeur
- Puis avec sa seconde valeur.
Mathématiquement, cette table orthogonale s’écrit L8(23).
Plus généralement, une table orthogonale s’écrit mathématiquement: Lx(∏ny) avec:
-
- x le nombre de lignes totales de la table. Il est le résultat du produit ∏ny
- ∏ny : le produit du nombre de valeurs n pour chaque ensemble de colonnes y.
Pour une table construite à partir de 2 paramètres à 2 valeurs, 1 paramètre à 3 valeurs et 2 paramètres à 4 valeurs, elle se noterait L192(223142).
Mise en oeuvre de Pairwise
Prenons en exemple un magasin de jouets qui vend des petits trains.
Les clients peuvent personnaliser leur petit train via une application disponible sur une borne à l’entrée du magasin.
Le client pourra :
- choisir le matériau du train: fer, bois ou plastique
- choisir la couleur du train: Noir, Gris, Vert
- choisir d’ajouter un logo sur le dessus du train: logo de la SNCF, logo TGV ou aucun logo.
En analysant cette spécification, nous pouvons en déduire 3 paramètres avec chacun 3 valeurs:
- Matériau: fer, bois, plastique
- Couleur: Noir, Gris, Vert
- Logo: SNCF, TGV, Aucun
La combinatoire globale pour tester toutes les combinaisons est de 3*3*3 = 27 combinaisons et notre table se noterait L27(33).
Voyons comment Pairwise va nous aider à réduire cette combinatoire.
Tout d’abord, nous allons identifier les combinaisons deux à deux: matériau+couleur, matériau+Logo puis couleur+logo.
Cela nous donne 9 tableaux de combinaison. Nous pouvons dores-et-déjà en déduire qu’il y aura 9 lignes dans notre tableau final et par conséquence, 9 cas de test permettront de couvrir toutes les paires de valeurs.
Commençons par poser les premières paires, celles de matériau et couleur.
Puis nous complétons notre tableau avec les paires qui restent.
Le choix précédent permet d’éliminer 3 autres paires induites.
Puis nous poursuivons ainsi de suite jusqu’à avoir utiliser toutes les paires.
En sortie de cette méthode, nous avons 9 cas de test qui couvrent toutes les paires de valeurs d’entrée de notre logiciel.
Pairwise au quotidien
Pour vous convaincre de la puissance de cette technique, voici quelques exemples de réduction possible de combinatoire.
Valeurs et paramètres d’entrée | 100% couverture (combinatoire totale) | Réduction possible avec Pairwise |
---|---|---|
322211 | 36 | 9 |
10474836232524291 | 14.338.695.168.000.000 | 144 |
1015 | 1.000.000.000.000.000 | 199 |
105563525 | 2.430.000.000.000 | 142 |
33425262718210191 | 15.676.416.000 | 96 |
Vous avez parfois des paires impossibles car la valeur d’une paire ne peut pas être satisfaite à cause la seconde autre valeur: par exemple, un couple OS/navigateur.
De plus, nous voyons bien que plus la combinatoire augmente, plus il est irréaliste de se lancer dans la construction de la table sans s’aider d’un outil.
Le site Pairwise propose 45 outils permettant de mettre en oeuvre cette technique avec des comparaisons d’exactitude sur chacun d’entre eux.
Pour ma part, j’ai beaucoup utilisé celui de Microsoft, PICT, que je trouve facile à appréhender.
Conclusion
Pairwise est une très bonne méthode pour réduire la combinatoire en se focalisant sur la couverture des paires de valeur.
Comme pour toute technique de réduction de couverture, il convient d’analyser le risque produit résiduel.
Sources:
Le syllabus ISTQB niveau avancé Test Analyste traduit en français par le CFTL
Le site officiel de Pairwise.
Merci à Marc Hage Chahine pour sa relecture.
6 Responses
Excellent, merci pour cette technique et le partage d’outils ! Ca va me faire gagner du temps.
Pairwise can be restrictive some times. This is why I would prefer to consider a N-wise approach where instead of combining data 2 by 2, it can be combining them n by n. With n=6, you can reach 99,9999% of the exhaustive coverage but still reduce considerably the number of tests.
You absolutely right. Pairwise is a subset of N-Wise techniques. With a tool like PICT you can quickly enhance coverage. Risk based testing should be used to make a choice about the appropriated value of N
Boujour,
Je me demande s’il n’y a a pas une coquille dans le premier exemple donné:
« Mathématiquement, cette table orthogonale s’écrit L8(3^2). »
Est-ce que ce ne serais pas plutôt L8(2^3) ?
Le produit du nombre de valeurs n (2) pour chaque ensemble de colonnes y (3) ?
Mais n’ai peut-être pas compris ma méthode…
Bien à vous et merci pour ce site.
Bonsoir Stéphane
Merci beaucoup pour ce retour. En effet, il y avait bien une erreur. C’est corrigé.
Bonne soirée