Le test ''boîte noire'' LOG4500 Validation et tests de logiciels Professeur: John MULLINS Introduction asé sur la spécification ou l'interface du programme P On peut appliquer le critère de couverture complète du domaine P vu comme une fonction des données D dans les résultats R: P: D R On partitionne D en classes D i 1. D D 0 D 2 D n 2. i i, j n j D i D j 3. On sélectionne un seul cas de test par classe Hypothèse de test: P(d) est correct si et seulement si P(d`) est correct i d, d ' D i Introduction (suite) pproche empirique: Exemple lire: 1. [Ghezzi and al.], sections 6.3.2-6.3.3 2. [Jorgensen], chap. 6 3. [Roper], sections 3.2.12-3.2.13-3.2.14 4. [eizer], chap. 7 Si la valeur n de l'entrée est <0, alors un message d'erreur est imprimé. Si 0=<n<20, alors la valeur exacte de n! est imprimée. Si 20=<n=<200, alors une approximation de n! est imprimée en virgule flottante avec une précision de 0.1%. Si n>200, un message d'erreur est imprimé.
Les classes D 2 D 4 Solution n:n 0 n:0 n 20 n:20 n 200 n:n 200 forment une partition des entiers et le jeu T 10, 5,75 satisfait le critère de couverture totale Le problème du triangle Entrée: 3 entiers > 0 (longueurs de cotés) Sortie:Type de triangle déterminé par les 3 entiers (équilatéral, isocèle, scalène, autre) (a, b, c) Type de triangle Triangle? Type Solution Hypothèse : On peut identifier la classe de d par sa valeur P(d) D 2 D 4 H 0 = {(a, b, c): abc est équilatéral} = {(a, b, c): abc est isocèle} = {(a, b, c): abc est scalène} = {(a, b, c): abc n'est pas un triangle} D 22 D 23 D 41 D 42 D 43 Solution raffinée = {(a, b, c): est equilatéral} = {(a, b, c): est isocèle et a=b, a<>c} = {(a, b, c): est isocèle et a=c, b<>c} = {(a, b, c): est isocèle et b=c, a<>b} = {(a, b, c): est scalène et a<>b<>c}} = {(a, b, c): pas un triangle et a >= b+c} = {(a, b, c): pas un triangle et b >= a+c} = {(a, b, c): pas un triangle et c >= a+b}
Génération de tests pproches structurées 1. (3, 3, 3) 2. (2, 2, 3) 3. (2, 3, 2) 4. (3, 2, 2) 5. (3, 4, 5) 6. (6, 3, 3) asée sur une grammaire NF asée sur la table de décision asée sur le graphe de cause-effet 7. (3, 6, 3) 8. (3, 3, 6) Grammaire NF Déf.: Une grammaire est un ensemble de règles qui définit toutes les constructions valides d'un langage. Une grammaire est formée: 1. Un ensemble de symboles terminaux 2. Un ensemble de symboles non-terminaux 3. Un ensemble de productions de la forme x:=y où x est un symbole non-terminal et y, une chaîne quelconque de symboles (terminaux ou non). 4. Un symbole initial (non-terminal distingué) Langage d'une calculatrice Terminaux: 0, 1, 2,..., 9, +, -, *, /, =,. Non-terminaux: calculation, expression, value, number, unsigned, digit, sign, operator Productions: 1. <calculation> := <expression> = 2. <expression> := <value> <value><operator><expression 3. <value> := <number> <sign><number> 4. <number> := <unsigned> <unsigned>. <unsigned> 5. <unsigned> := <digit> <digit><unsigned> 6. <digit> := 0 1 2 3 4 5 6 7 8 9 7. <sign> := + - 8. <operator> := + - * /
Langage d'une calculatrice (suite) Critère de test: couverture complète des règles à partir du symbole initial Pour chaque règle, générer une entrée valide en partant du symbole initial, telle que la règle est appliquée Procédure: Dérivation descendante (top-down) S'assurer que tous les terminaux apparaissent dans au moins une règle. Utilisation typique: validation de données 1. [eizer], chap. 8 2. [Ghezzi and al.] section 6.3.4.2 Génération de tests: exemple 6 + 3 / 1 2 = Digit Operator Digit Operator Digit Digit Number Number Value Value Number Value Expresion Expresion Expresion Calculation Diagrammes de syntaxe On étend la notation NF: choix multiple: (ou exclusif) option: [ ] (0 ou 1 fois le symbole entre crochets) répétition: { } (0 ou plusieurs fois le symbole) noeuds du diagramme: symboles 1. terminaux: ovales 2. non-terminaux: rectangles Diagramme syntaxique: exemple <but> := [a] b {c} génère: a, ab, bc, abc, bcc, abcc, bccc, abccc,... 1. <calculation> := <expression> + 2. <expression> := <value> [<operator><expression>] 3. <value> := [<sign>] <number> 4. <number> := <unsigned> [. <unsigned>] 5. <unsigned> := <digit> {<digit>} 6. <digit> := 0 1 2 3 4 5 6 7 8 9 7. <sign> := + - 8. <operator> := + - * /
Table de décision Utile dans le cas des applications complexes de traitement de données Permet de vérifier la complétude Critère de couverture est assurée par 11 cas de test a<b+c F - - V V V V V V V V b<a+c - F V V V V V V V V V c<a+b - - F V V V V V V V V a=b - - - V V V V F F F F a=c - - - V V F F V V F F b=c - - - V F V F V F V F Niet Scal Iso Équi Imposs. Table de décision (suite) Inconvénient: croissance exponentielle du nombre de cas de tests relativement au nombre de conditions. lire: 1. [Jorgensen], chap. 7 2. [Ghezzi and al.] section 6.3.4.2 Graphes cause-effet Graphes C-E: syntaxe Les graphes cause-effet fournissent une représentation concise des combinaisons logiques des conditions et des actions correspondantes 1. Les causes: conditions d'entrée 2. Les effets: actions lire: 1. [Ghezzi and al.] section 6.3.4.2 2. [Roper] section 3.2.16 Op 1.nd () 2.Or (\/) 3.Nand () 4.Nor (\/) Identité Not I: u moins 1 E: u plus 1 O: Exactement 1 R: Exiges M: Masques I E C O R M
Graphes C-E: sémantique I \/ M \/ O C4 E5 \/ C5 R C6 I O C4 C5 C6 Table de décision associée R \/ \/ \/ E5 M V V V V V V V V V F F F V V V V F V F V V F V F C4 F F V V F V V F C5 F V V V F F F V C6 F V V V F F F V E5 Exemple Exemple (suite) Le programme prends en entrée un entier entre 1 et 20 à l'usager, une chaîne de caractères de cette longueur et un caractère et retourne sa position dans la chaîne ou un message d'erreur. L'usager a la posibilité de chercher d'autres caractères. Les causes: 1. Entier entre 1 et 20 2. Caractère à chercher est dans la chaîne 3. Cherche un autre caractère? Les effets: 1. Entier hors portée 2. Position du caractère demandé est retourné 3. Caractère pas trouvé 4. Fin du programme Table de décision associée F V V - - V F - - V V F Conception du jeu de test <entier><chaîne><car>{<booléen><car>} 23 3, abc, c, oui, k, non
nalyse des conditions de bord Description: Utilisée en conjonction avec la technique de partitionnement. Consiste à analyser le comportement des valeurs de bord des classes de la partition Permet de contrôler l'explosion combinatoire des cas de test e.g. Évite de scinder la classe [1..20] en 3 classes {1}, [2..19], {20} (8 fois plus de cas de test) Moins efficace que l'analyse de partition pure nalyse de bord: Exemple Table de décision associée F V V - - V F - - V V F Jeu de test complémentaire <entier><chaîne><car>{<booléen><car>} 21 0 1, a, a, oui,, non) 20, abcdefghijklmnopqrst, a, oui, u, non