39
INT/LOR/GLCP/JLR Introduction • Un test sur les tests • Ce que n’est pas le test • Définitions • Les limites du test

INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

Embed Size (px)

Citation preview

Page 1: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Introduction

• Un test sur les tests

• Ce que n’est pas le test

• Définitions

• Les limites du test

Page 2: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Un test sur les tests

• Lire 3 valeurs entières. Ces trois valeurs sont interprétées comme représentant les longueurs des côtés d’un triangle. Le programme imprime un message qui établit que le triangle est isocèle, équilatéral ou scalène.

Page 3: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Un test sur les tests

• Programmation procédurale– 33 cas de tests

• Programmation objet– 58 cas de tests (26 sont les mêmes que ci-

dessus, 32 sont dûs à la programmation objet)

Page 4: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

FIGURE

OUVERTE FERMEE

SEGMENT MULTI-SEG ELLIPSE

CIRCLE

POLYGONE

TRIANGLE QUADRILATERE …..…..

Page 5: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

TRIANGLE

SEGMENT

POINT

Page 6: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Ce que n’est pas le test

• Préciser l’expression des besoins au moyen d’un prototype

• Vérifier une analyse ou un modèle de conception à l’aide d’un analyseur syntaxique ou par simulation

• Peaufiner une interface utilisateur

• Faire des inspections, des revues de code ou de documentation

Page 7: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Ce que n’est pas le test

• Effectuer une analyse statique du code (avec lint par exemple)

• Avoir une compilation sans erreurs ni warnings

• Utiliser des analyseurs dynamiques pour identifier des problèmes de mémoire

• Debugguer

Page 8: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Définitions

• Le test

• Les niveaux de tests

• Les types de tests

• Les cas de tests

Page 9: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test (IEEE)

IEEE-STD 610.12-1990• "Le test est l'exécution ou l'évaluation d'un

système ou d'un composant par des moyens automatiques ou manuels, pour vérifier qu'il répond à ses spécifications ou identifier les différences entre les résultats attendus et les résultats observés"

Page 10: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test (AFCIQ)

"Technique de contrôle consistant à s'assurer, au moyen de l'exécution d'un programme que son comportement est conforme à des données préétablies"

Page 11: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les niveaux de tests

• Tests unitaires

• Tests d’intégration

• Tests système

• Tests de non-regression

Page 12: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les types de tests

• Tests dirigés par les fautes

• Tests de conformité (fonctionnels)

• Tests structurels

• Tests de robustesse

• Tests de performance

Page 13: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Cas (jeu) de Test

• Un cas (jeu) de test spécifie– L’état de l’implantation sous test (IUT) et de

son environnement avant le test– Le vecteur des entrées et/ou les conditions– Le résultat attendu

• messages, exceptions

• valeurs retournées

• état résultant de l’IUT et de son environnement

Page 14: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les limites du test

• L’espace des entrées

• Les séquences d’exécution

• Sensibilité aux fautes

Page 15: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les séquences d’exécution

for (int i=0; i<n; ++i) {if (a.get(i) ==b.get(i))

x[i] = x[i] + 100;

else

x[i] = x[i] /2;

}

Page 16: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les séquences d’exécution

for (int i=0; i<n; ++i) {if (a.get(i) ==b.get(i))

x[i] = x[i] + 100;

else

x[i] = x[i] /2;

}

Page 17: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les séquences d’exécution

for (int i=0; i<n; ++i) {if (a.get(i) ==b.get(i))

x[i] = x[i] + 100;

else

x[i] = x[i] /2;

}

Page 18: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les séquences d’exécution

for (int i=0; i<n; ++i) {if (a.get(i) ==b.get(i))

x[i] = x[i] + 100;

else

x[i] = x[i] /2;

}

Page 19: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Les séquences d’exécution

Nbre d’itérations Nbre de chemins1 32 53 910 102520 1 048 57760 > 1,15 1018

Page 20: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Sensibilité aux fautes

int scale(short j) {

j = j -1; // devrait être j = j+1

j = j/30000;

return j;

}

Page 21: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Sensibilité aux fautes

public class Compte extends Object {

protected Date lastTxDate, today;

//…..

int quarterSinceLastTx() {

return (90 / daysSinceLastTx() );

}

int daysSinceLastTx(){

return (today.day() - lastTxDate.day() +1)

}

}

public class DateValeurCompte extends Compte {

//…. int daysSinceLastTx(){ return (today.day() - lastTxDate.day())

}}

Page 22: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Autres limitations

• Tester un programme permet de montrer la présence de fautes mais en aucun cas leur absence

• Les tests basés sur une implémentation ne peut révéler des omisions car le code manquant ne peut pas être testé

• On ne peut jamais être sûr qu’un système de test est correct

Page 23: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Tester, pourquoi?

• Fonctionnalités manquantes

• Fonctionnalités incorrectes

• Effets de bord, interactions indésirables

• Mauvaises performances, pbs temps réel, deadlock…

• Sorties incorrectes

Page 24: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Techniques de test

• Classes d’équivalence (éviter l’explosion combinatoire)

• Graphe de cause à effet (identifier et analyser les relations devant être modélisées dans une table de décision)

• Tables de décision (concevoir des cas de test)

Page 25: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Classes d’équivalence

• 8 Classes valides– triangle scalèle

– triangle isocèle (4)

– équilatéral (2)

• 25 Classes invalides– 1 valeur = 0

– 3 valeurs = 0

– 1 valeur négative

– triangle isocèle plat

– 3 valeurs telles que la somme de 2 d’entre elles < à la 3ème (6)

– 1 valeur non numérique (3)

– 1 valeur manquante (3)

– triangle scalène plat

– 1 valeur max

Page 26: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Graphe de cause à effet

• Principe : représenter la spécification sous forme d’un graphe– On définit les états d’entrées et les états de sorties

– On construit le graphe à l’aide de “connecteurs” logiques (et, ou, négation)

• Exemple : soit la spécification suivante:– Tout identificateur de voiture doit commencer par les lettres A, B ou

C et avoir comme 2ème caractère la lettre X. Les messages M1 et M2 sont émis respectivement en cas d’erreur sur le premier ou le second caractère. Si l’identificateur est correct, il est inséré dans la base de données.

Page 27: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Au niveau de la classe– test des méthodes

• “concevoir pour tester”• graphe de contrôle• graphe de flot de données

– test des séquences d’activation des méthodes• diagramme de transition d’états

– test des méthodes héritées• diagramme de classes

Page 28: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Concevoir pour Tester

lire I,J;

débutCas

cas I = 5 et J < 4

alors M = 23;

cas I = 5 et J >= 4

alors M = J + 16;

cas (J + 1) < I et I<0

alors M = 4I +J;

cas (J + 1) < I et I >= 0 et I /= 5

alors M = 5I + 2

cas (J + 1) >= I et J < 2

alors M = 2I + 3J - 4;

cas (J + 1) >= I et J>= 2 et I /= 5

alors M = 3I +2J –2;

finCas

écrire M;

lire I,J;

si I <= J + 1

alors K = I + J -1

sinon K = 2I + 1

finsi

si K >= I+1

alors L = I + 1

sinon L = J - 1

finsi

si I = 5

alors M = 2L + K

sinon M = L + 2K - 1

finsi

écrire M;

Page 29: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Figure: Diagramme de transition d'états de la classe Client

Page 30: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Au niveau sous-système– test des associations, des aggrégations (diagramme

de classes)• multiplicité

• création, destruction

– test de séquences (diagramme de séquence)• construction d’un graphe de flot

– test des exceptions controlées

Page 31: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Diagramme de séquenceleLecteurDeCarte uneSession l_Ecran leClavier uneBanque

debuteSession

[pasCarteCrédit]ejectafficheDemandeCode

recupèreLeCode

contrôleCarte[estVolée]garde

Page 32: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Graphe de flot

debuteSession

garde

[pasCarteCrédit] éjecte

afficheDemandeCoderecupèreLeCodecontrôleCarte

[estVolée]

Page 33: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Tests d’intégration (diagramme de classes => arbre des dépendances)

• Techniques– big-bang– bottom-up– top-down

Page 34: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Niveau application (Uses cases)

Page 35: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• L’interaction de méthodes (individuellement correctes) de classes et sous-classes peuvent générer des erreurs.

=> Ces interactions doivent être systématiquement exercées.

Page 36: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Omettre la surcharge d’une méthode d’une superclasse située très loin (haut) dans la hierarchie est facile.

=> Les suites de tests conçus pour les superclasses doivent être réexécutées sur les sous-classes et conçues de façon à pouvoir être réutilisés pour tester n’importe quelle sous-classe

Page 37: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• La difficulté et la complexité d’implémentation des contraintes de multiplicité peut facilement conduire à des erreurs quand un élément est ajouté, mis à jour, supprimé.

=> L’implémentation de la multiplicité doit être systématiquement exercée.

Page 38: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Le test en orienté objet

• Des classes avec des contraintes séquencielles sur l’activation des méthodes et leurs clients peuvent avoir des erreurs de séquencement.

=> Le comportement requis doit être testé en utilisant un modèle de machine à états.

Page 39: INT/LOR/GLCP/JLR Introduction •Un test sur les tests •Ce que n’est pas le test •Définitions •Les limites du test

INT/LOR/GLCP/JLR

Framework pour du test incrémental (diagramme de classes)

TestRunner

TestResult TestSuite TestCase

AppTestCase

ClassUnderTest

1

1

1

1..*

1

0..*

1

Une sous-classe est définie pour chaque jeu de test.Un jeu de test peut participer à 01 ou plusisieurs suites de tests

“utilise”