Selection des tests en mode BB Soit le programme suivant: x=0; read(y); while (y > 100) { x=x+y; read(y); } if (y < 200) print(x) else print(y); Définir le graphe de flot de ce programme. Définir des CT pour couvrir l'ensemble des branches minimales du programme. Debuggage de programme (d'après Introduction to Software Testing by Paul Ammann and Jeff Offutt) Soit le code faux suivant: 1. Identifier l'erreur 2. Si possible, trouver un CT qui n'exécute pas l'erreur 3. Si possible, trouver un CT qui exécute l'erreur mais ne provoque pas problème. 4. Si possible, trouver un CT qui exécute l'erreur mais qui provoque un problème qui ne se voit pas. 5. Pour le CT donné en fin de code, trouver le premier etat erreur 6. Corriger l'erreur et verifier que le CT fournit maintenant le résultat attendu EXO 1: public static int lastZero (int[] x) { //Effects: if x==null throw NullPointerException //else return the index of the LAST 0 in x. //Return -1 if 0 does not occur in x for (int i = 0; i < x.length; i++) { if (x[i] == 0) { return i; } } return -1; } // test: x=[0, 1, 0] //Expected = 2 1. On parcourt le tableau dans le mauvais sens 2. Y en a pas (il execute toujours l'erreur car il execute la boucle for ); null tableau vide ou x = [0] 3. x = [1,2,0] 4. x = [0,1] 5. premier état d'erreur : ligne d'initialisation de i dans la boucle for (car i est initialisé à 0 plutôt que deux ). i=0; x=[0, 1, 0]; 6. public static int lastZero (int[] x) { //Effects: if x==null throw NullPointerException //else return the index of the LAST 0 in x. //Return -1 if 0 does not occur in x for (int i = 0; i < x.length; i++) { if (x[x.length-i-1] == 0) { return i; } } return -1; } EXO 2: public static int oddOrPos(int[] x) { //Effects: if x==null throw NullPointerException // else return the number of elements in x that //are either odd or positive (or both) int count = 0; for (int i = 0; i < x.length; i++) { if (x[i]%2 == 1 || x[i] > 0) { count++; } } return count; } // test: x=[-3, -2, 0, 1, 4] //Expected = 3 1. modulo d'un nombre négatif donne un nombre négatif en java 2. tableau vide pour ne pas executer la condition 3. tableau positif ou tableau sans nombres impairs ou négatifs 4. tableau avec que des positifs ou des négatifs pairs 5. premier état d'erreur : première partie de la condition. i=0; count = 0; 6. public static int oddOrPos(int[] x) { //Effects: if x==null throw NullPointerException // else return the number of elements in x that //are either odd or positive (or both) int count = 0; for (int i = 0; i < x.length; i++) { if (x[i]%2 == Math.abs(1) || x[i] > 0) { count++; } } return count; } EXO 3: public int findLast (int[] x, int y) { //Effects: If x==null throw NullPointerException //else return the index of the last element //in x that equals y. //If no such element exists, return -1 for (int i=x.length-1; i > 0; i--) { if (x[i] == y) { return i; } } return -1; } // test: x=[2, 3, 5]; y = 2 //Expected = 0 1. Il faudrait que ça soit i>=0. 2. tableau null 3. tableau vide, ou tab : le premier élément n'est pas y et un autre y est présent dans le tableau 4. 5. condition (i > 0). i=0; x=[2, 3, 5]; y = 2; 6. public int findLast (int[] x, int y) { //Effects: If x==null throw NullPointerException //else return the index of the last element //in x that equals y. //If no such element exists, return -1 for (int i=x.length-1; i >= 0; i--) { if (x[i] == y) { return i; } } return -1; } EXO 4: public int countPositive (int[] x) { //Effects: If x==null throw NullPointerException //else return the number of //positive elements in x. int count = 0; for (int i=0; i < x.length; i++) { if (x[i] >= 0) { count++; } } return count; } // test: x=[-4, 2, 0, 2] // Expected = 2 1. retourne 3, prend le 0 comme positif au lieu de nul. 2. un tableau sans 0 3. pas possible 4. 5. x=[-4, 2, 0, 2]; count = 2; i= 2 6. EXO Pblm du triangle Domaine d'entrée : toutes les longueurs doivent être strictement positives. Soit 3 longueurs A,B et C, on doit avoir A+B > C || A+C > B || B+C > A -> le programme affiche le type du triangle et son plus grand angle Classe d'équivalence : on prends une longueur négative parmi les trois. A=-1 B=3 C=5 CE : deux. A=-6 B=-2 C=7 CE : les trois négatives. A=-7 B=-2 C=-9 CE : aucune somme de deux longueurs strictement supérieur à une troisième. ** A=B=C=1 CE : trois néga + ** A=B=C=-1 CE : très petites grandeurs, très grandes grandeurs