Tests unitaires
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
Lundi 2 novembre 2015
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
1/22
Validation vs v rication
Validation :
(cid:73) sassurer quon a r alis le bon logiciel
(cid:73) respect du cahier des charges
(cid:73) tests de recette
(cid:73) d veloppeurs + utilisateurs
V rication :
(cid:73) sassurer quon a bien r alis le logiciel
(cid:73) absence de d fauts, de bugs
(cid:73) d veloppeurs
(cid:73) v rier une librairie crite par un tiers (p.ex. r cup r e sur le Web)
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
2/22
Port e des tests
Tests unitaires :
(cid:73) portions de code ind pendamment des autres
(cid:73) fonctions, m thodes, classes. . .
Tests dint gration :
(cid:73) bonne int gration des composants entre eux
(cid:73) int gration avec le syst me, les librairies ext rieures. . .
(cid:73) respect des interfaces, protocoles. . .
Tests sp ciques :
(cid:73) mont e en charge
(cid:73) temps de r ponse. . .
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
3/22
Types de tests unitaires
Tests black box :
(cid:73) v rier le respect des sp cications
(cid:73) p.ex. : JavaDoc dune m thode
(cid:73) v rier absence de bugs
(cid:73) utiliser la m thode sur di rentes entr es
(cid:73) v rier sortie conforme aux sp cications
(cid:73) entr es choisies selon sp cications
Tests white box :
(cid:73) toujours v rier respect des sp cications et absence de bugs
(cid:73) concevoir entr es en fonction du code
(cid:73) p.ex. : entr es stimulant if et else
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
4/22
Publicité
R alisation de tests unitaires
Conception de tests unitaires
Tests al atoires
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
5/22
Que teste-t-on ?
(cid:73) Valeurs de retour correctes
(cid:73) Pas dexceptions ou derreurs sur des donn es attendues
(cid:73) Exceptions eectivement lev es dans les situations annonc es
(cid:73) Eets de bords attendus
(cid:73) Pas deets de bord inattendus
(cid:73) . . .
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
6/22
Quest-ce quun test unitaire ?
Composants :
(cid:73) stimulus : donn es sur lesquelles on teste
(cid:73) arguments (m thodes), v nements ( couteurs), etc.
(cid:73) comportement attendu : comportement selon sp cications, doc.
(cid:73) valeur de retour correcte (m thodes), eets de bord, etc.
(cid:73) programme qui eectue le test
R alisation :
(cid:73) lancement du code tester avec le stimulus
(cid:73) r cup ration du comportement (retour, eets de bord, erreurs. . .)
(cid:73) comparaison avec le comportement attendu
(cid:73) automatique et reproductible
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
7/22
Exemples
Tests unitaires sur un impl mentation de x 7 1/x :
(cid:73) stimulus 2, 5, valeur de retour attendue : 0, 4
(cid:73) stimulus 106, valeur de retour attendue : 106
(cid:73) stimulus 0, ArithmeticException attendue (selon sp c.)
Tests unitaires sur une m thode de tri de liste sur place :
(cid:73) stimulus = (4, 1, 5, 12, 31, 7), attendu : = (7, 1, 4, 5, 12, 31)
(cid:73) stimulus = (), attendu : = ()
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
8/22
Impl mentation avec assertions
print "Test de la fonction inverse... "
stimuli=(2.5, 106, . . . )
attendu=(0, 4, 106, . . . )
for i=0,1,. . .
stimulus=stimuli
resultat=appel(stimulus)
Publicité
assert(resultat==attendu )
x=0, exception=false
try appel(x)
catch (ArithmeticException e) exception=true
assert(exception)
print "OK"
Attention : En Java, passer loption -ea la JVM pour que les assertions
soient v ri es.
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
9/22
Jeu de tests
(cid:73) Ensemble de tests couvrant les sp cications
(cid:73) Programme mettant ces tests en Suvre
(cid:73) R sultat des tests v riable instantan ment
(cid:73) Tests reproductibles (graines pour al a)
(cid:73) R cup ration des erreurs : nombre, localisation. . .
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
10/22
Exemple
Tri de cha nes de caract res
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
11/22
R alisation de tests unitaires
Conception de tests unitaires
Tests al atoires
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
12/22
Tester dans toutes les situations possibles ?
Parfois possible :
(cid:73) alors, le faire
(cid:73) exemple : tester une fonction qui met une lettre en majuscule
G n ralement impossible :
(cid:73) fonction qui multiplie deux entiers : INT_MAX INT_MAX tests
(cid:73) tri dune liste : nombre potentiellement inni de tests
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
13/22
Comportement nominal
Stimuli standards
Exemples :
(cid:73) noms de famille :
Martin, Dupont, Smith, votre nom, LHermite, du Ch teau. . .
(cid:73) entiers : 1, 12, -27, 5 470, -712 456 054. . .
(cid:73) chiers PDF : chier dune page, image scann e, livre, manuel. . .
Gr gory Bonnet, Bruno Zanuttini
Publicité
G nie logiciel
14/22
Tests avec de grandes donn es
Un composant peut fonctionner
(cid:73) avec des donn es raisonnables
(cid:73) mais pas avec de trop grandes donn es
(cid:73) trop peu de m moire allou e, types inadapt s. . .
Exemples de grandes donn es :
(cid:73) entiers : INT_MAX, 100 . . . 00 (binaire). . .
(cid:73) listes : plusieurs dizaines de milliers d l ments
(cid:73) chiers PDF : plusieurs milliers de pages
(cid:73) adapter au contexte, au syst me, au langage. . .
(cid:73) cf. g n ration al atoire
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
15/22
Tests aux limites
Les bugs se cachent dans les coins :
(cid:73) conditions darr t mal g r es
(cid:73) confusions < et <=
(cid:73) mauvaises initialisations (1 au lieu de 0)
(cid:73) liste vide non pr vue. . .
Exemples de stimuli aux limites :
(cid:73) de fa on g n rale : bornes des domaines de d nition
(cid:73) entiers :
INT_MAX, INT_MIN, 0 + INT_MAX-1,INT_MIN+1,-1,1. . .
(cid:73) listes : vide, 1 l ment, 2 l ments, tr s grande. . .
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
16/22
Test des cas derreur
Exceptions :
(cid:73) lancement des exceptions annonc es
(cid:73) absence deets de bords ind sirables
(cid:73) chiers ferm s, donn es non modi es. . .
Cas sp ciques :
(cid:73) coupure communication pour composant lisant des donn es
(cid:73) chier inexistant
(cid:73) pas de droit de lecture. . .
(cid:73) v rier que les cons quences sont raisonnables (selon contexte)
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
17/22
R alisation de tests unitaires
Conception de tests unitaires
Tests al atoires
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
18/22
Publicité
Principes g n raux
Avantages :
(cid:73) utilisation de tr s nombreux stimuli
(cid:73) variabilit des stimuli
(cid:73) liminent certains biais (nom de famille Xiln Mbret dr K)
Attention :
(cid:73) doivent tre reproductibles (graines)
(cid:73) ne touchent pas les limites en g n ral
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
19/22
Tests avec oracles
Oracle = moyen de v rier le r sultat
Oracle de v rication :
(cid:73) v rier 1/x : v rier resultat x == 1
(cid:73) v rier tri : m mes l ments et dans lordre
Oracle de comparaison :
(cid:73) autre composant, s r et donnant le r sultat attendu
(cid:73) oracle = impl mentation moins ecace
(cid:73) oracle = programme commercial
(cid:73) oracle = impl mentation dans un autre langage. . .
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
20/22
G n ration al atoire biais e
d faut doracle :
(cid:73) particuli rement adapt aux pr dicats, mais pas seulement
(cid:73) g n rer donn es positives et v rier r sultat = true
(cid:73) g n rer donn es n gatives et v rier r sultat = false
Exemple pour une fonction testant quun entier est premier :
(cid:73) g n rer x , y al atoirement, poser z = xy
(cid:73) v rier fonction(z)==false
Exemple pour une fonction testant si un l ment est dans une liste :
(cid:73) poser = (x )
(cid:73) ajouter des l ments al atoirement
(cid:73) v rier fonction(, x )==true
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
21/22
Exemples
Tri de cha nes de caract res
Gr gory Bonnet, Bruno Zanuttini
G nie logiciel
22/22