138
Erreur, défaut, anomalie onstate une anomalie à un défaut (on dit aussi une faute (!) )du logicie ut du à une erreur du programmeur (ex. : confusion 1) faut ne provoque pas nécessairement une anomalie.

Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Embed Size (px)

Citation preview

Page 1: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Erreur, défaut, anomalie

1) On constate une anomalie2) due à un défaut (on dit aussi une faute (!) )du logiciel3) défaut du à une erreur du programmeur (ex. : confusion d ’un I avec un 1)

Tout défaut ne provoque pas nécessairement une anomalie.

Page 2: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les tests

« Program testing can be used to show the presence of bugs, but never

to show their absence! »

Edsger Wybe Dijkstra

in Notes On Structured Programming, 1970, at the end of section 3, On The Reliability of Mechanisms.

Page 3: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Six classes de défauts (fautes)

- Calcul x := x + 2; au lieu de x := y + 2;

- Logique if (a>b) then au lieu de if (a < b) then

- Entrée/sortie mauvaise description, conversion, formatage

- Traitement des données mauvais accès ou manip (variable non définie, mauvaise utilisation d ’un pointeur, débordement d ’un tableau

- Interface on appelle p1 au lieu de p2, mauvais passage de paramètres

- Définition de données : mauvais type, simple précision au lieu dedouble

Page 4: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test vs débogage

- quand on teste on ne corrige pas- débogage : correction des défauts

Page 5: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test réussi ?

Un test réussi n ’est pas un test qui n ’a pas trouvé de défauts, mais un test qui a effectivement trouvé un défaut (ou une anomalie)

G.J. Myers

Page 6: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

50 % ou plus du coût

D ’un projet !

Page 7: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

K.Gödel avec …

Page 8: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur
Page 9: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur
Page 10: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Gödel !

1931Un système formel : un ensemble d ’axiomes et règles de déductionOn produit des théorèmes (par preuve)

Si on prend l ’ensemble des entiers muni des opérations classiques, ilexiste toujours des énoncés qu ’il est impossible de démontrer.

Pire ! Si on rajoute ces énoncés à l ’ensemble des axiomes initiaux,on obtient un système comportant de nouveaux énoncés nondémontrables

Page 11: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Idée de Gödel

Idée de base : l ’autoréférence, voir Hoffstadter :Gödel, Escher, Bach

Cette phrase est fausse.

- si elle est vraie, alors ce qu ’elle dit est vraie, i.e. elle est fausse- si elle est fausse, alors elle est vraie

Page 12: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Gödel (suite)

Deux niveaux de langage :- celui de la phrase- celui qui parle de la phrase

Gödel a construit un énoncé analogue à la première phrase à l ’intérieurd ’un système mathématique.

- numérote tous les signes utilisés dans un théorème concernant les entiers (comme un code ASCII des maths !)- à tout théorème, il fait correspondre un entier (son code)- construit un théor. T qui dit qu ’il n ’existe pas de théor.ayant un codeC, code qui est la codification de T.

Page 13: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

I.e. a pu construire un théorème niant sa propre existence.

Ce théorème avait été construit de manière formelle, mais il était impossible de décider sur sa valeur de vérité.

Page 14: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Puis Turing et Church...

Il existe des algorithmes qu ’on ne peut écrire

Exemple : un algo qui, sans utiliser des fichiers de recopie ou autresartifices, donne comme résultat d ’exécution l ’impression du textesource.

a := 1;b := 2;

Il faudrait ajouterwriteln (‘ a := 1; ’);writeln (‘ b := 2; ’);

Mais comme ces 2 instructionsappartiennent aussi au code source, ilfaut ajouter :writeln(‘ writeln (‘ ‘ a := 1;  ’’););writeln (‘ writeln (‘ ‘ b := 2;  ’’););

Page 15: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Limitations

Un programme T doit lire le code source de n ’importe quel programmeB et nous dire si ce dernier (pour un ens de données d ’E) va s ’arrêter.

(* prog B1 *)10 : goto 10; (*prog B2*)

a := 0;while (a <> 1) dobegina := a + 2;end;

(*prog B3*)read (a)while (a < 10) do

beginb := a + 2;end;

Page 16: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Limitations (suite)

T doit dire que : B1 et B2 ont une boucle infinieque B3 boucle infiniment si a prend une valeur < 10.Si T repère une boucle infinie, message d ’erreur et s ’arrêtesi non, T boucle

(* Prog T *)Lire le code source de B et ses entréesAnalyser B pour savoir si risque de boucler indéfiniment.Si (B boucle indéfiniment) alors

écrire (‘ Le prog B boucle indéfiniment. ’)sinon tant que vrai faire

début (* on se fait en bouclage infini *)fin;

Page 17: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Limitations (suite)

Si on fournit à T son propre code.Soit T boucle indéfinimentSoit s ’arrête.

Si T boucle indéfiniment, T doit s ’arrêter et le signaler.C ’est impossible, puisqu ’on a supposé que T boucle indéfiniment !

Cette hypothèse étant exclue, on en déduit que T s ’arrête.

Mais nous avons prévu que dans cette situation, B est mis en bouclageinfini… donc que T ne se termine pas.Contradiction

Page 18: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Jeu de test, scénario de test

DT = {x = 5, y = 5, b = 58}

Jeux de test : ensemble de données de test

Scénario de test : séquence d ’actions

Page 19: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Oracle de test

Exemple d ’oracle automatique :

Pour la calcul de la racine carrée, c ’est :résultat au carré = entrée ?

Page 20: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Critères de test

Fiable : si produit uniquement des jeux de tests réussis ou, uniquementdes jeux de tests non réussis.

Si on sait que le critère est fiable, il suffit de passer un seul jeu de testpour savoir que tous les autres seront réussis ou non.

Valide : si produit au moins un jeu de test non réussi dans le cas où leprogramme n ’est pas correct.

.

Page 21: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analogie : le crible

Crible valide : on est sûr qu ’il existe un trou assez petit pour nepas laisser passer la plus petite bille.

Mais le crible ne va pas arrêter toutes les billes !Car une bille petite pourra passer par un trou plus grand : le jeu de test a réussi: on n ’a pas capturé le défaut

Crible fiable : les tailles de tous les trous sont égales.Soit toutes les billes vont passer (on ne détecte aucun défaut, jeuxde test réussis)Soit toutes les billes sont arrêtées (tous les tests échouent)

Page 22: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Fiable et valide

Fiable et valide

Crible dont les trous sont tous assez petits pour arrêter les toutes lesbilles

Et si aucun trou…ce serait le test exhaustif !

Mais on veut un test léger.

Définir automatiquement un algo de découverte de critère fiable etvalide est indécidable

Page 23: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Critère adéquat

On fait une hypothèse sur la taille ou la forme des différentes billes pour construire des trous en mesure de les arrêter.

Page 24: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Types de test

1) Fonctionnels ou boîte noire2) Structurels ou boîte blanche

1) statiques (on observe le code)2) dynamiques (on exécute le code)

Grises

Page 25: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Stratégie de test

- ressources mises en œuvre (équipes, testeurs, outils, etc)

- mécanismes du processus de test (gestion des configurations, réunions pendant lesquelles on évaluera le processus de test etses résultats, etc.)

Page 26: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Catégories d ’anomalies

Mineures (ex. impression)

Bloquantes

Majeures et graves : ex. production d ’information de navigation erronées

Page 27: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Intégration

1) Intégration massive (big bang)2) au fil de l ’eau3) par incréments (agrégats)

Lanceurs : composants sollicitant le composant à tester

Bouchons : composants sollicités par le composant à tester

Page 28: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Intégration : Variantes

- descendante- ascendante- guidée par le risque- mixte

Page 29: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les outils

De préparation des tests

Générateurs de jeux d ’essais

Formateurs de données

Analyseurs statiques : produisent le graphe de contrôle

Instrumenteurs

Gestionnaires de test

Page 30: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les outils

Outils d ’exécution des tests

Procédures d ’exécution

Jeux de tests

Procédures de commande

Lanceurs et bouchons

Analyseurs, émulateurs, etc.

Page 31: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les outils

Outils de traitement de résultats

Comparateurs de résultats

Gestionnaires de résultats

Oracles de test

Page 32: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les outils

Outils d ’observation et de mesure

Analyseurs de performance

De couverture de tests

Page 33: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Avantages/inconvénients

function sum (x, y: integer) : integer; begin if (x = 600) and (y = 500) then sum := x - y else sum := x + y; end

Approche fonctionnelle

Doit calculer la somme de 2 entiers

Impossible de trouver le défaut

Approche structurelle : couverture de toutes les instructionsDT = {x = 600, y = 500} , résultat = 100 et non 1100

Page 34: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test fonctionnel/analyse partitionnelle

Choix d ’un représentant de chaque classe

Ex 1: Calcul de la fonction f(x) = racine carrée de 1/x avec x réel

3 classes d ’équivalence (2 invalides, 1 valide)

1ere classe : les réels négatifs2ème classe : x = 03ème classe ; les réels positifs (seule classe valide)

Page 35: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test fonctionnel/analyse partitionnelle

Ex. 2 Le prog lit 3 réels (longueur des côtés d ’un triangle). Sices 3 nombres ne sont pas ceux d ’un triangle, imprime message.Si triangle, isocèle, équilatéral ou scalaire et si son plus grand angle est aigu, droit ou obtus.

10 cas : 1 + 3 * 3

AngleTriangle aigu obtus droitscalaire 6, 5, 3 5, 6, 10 3, 4, 5isocèle 6, 1, 6 7, 4, 4 Rac 2, 2, rac 2équilatéral 4, 4, 4 impossible impossible

Page 36: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

L’ex. du triangle

Cas d ’un non triangle :1, 2, 8

Page 37: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test aux limites

Ex. Si a : 1..100, on définit 6 DT où a prend les valeurs :

0, 1, 299, 100, 101

Page 38: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test aux limites1, 1, 2 non triangle0, 0, 0 un seul point4, 0, 3 une longueur vide1, 2, 3.00001 presque triangle0.0001 0.0001 0.0001 très petit triangle88888, 88888, 88888 très grand triangle3.00001, 3, 3 presqu’équilatéral2.99999, 3, 4 presqu’isocèle3, 4 5.00001 presque droit3, 4, 5, 6 4 données3 1 seule donnée3, 4, , 5 2 virgules-3, -3, 5 valeurs négatives

Page 39: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Graphes cause-effet

« Le caractère dans la colonne 1 doit être un « A » ou un « B ».Dans la colonne 2, il doit y avoir un chiffre. Dans ce cas, nousconsidérons que le fichier est mis à jour. Si le premier caractèreest erroné, le message d ’erreur X12 doit être imprimé.Si dans la deuxième colonne nous n ’avons pas de chiffre, il faut alors que le message X13 soit imprimé. »

Page 40: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Graphes cause-effet

Causes :A1 caractère de la première colonne est « A »A2 caractère de la première colonne est « B » A3 caractère de la deuxième colonne est un chiffre

Effets :

M1 fichier mis à jourM2 message X12M3 message X13

Page 41: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Graphe cause- effet

A1

A2

E

M3

M1

M2

A3

\/

/\

Faire la tdd

Page 42: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Tests syntaxiques

Par exemple, grammaire de commandes

On construit l ’arbre de dérivation de la grammaire

Puis on construit - les commandes valides, - les commandes invalides

en suivant les nœuds et les niveaux dans le graphe

Page 43: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Tests aléatoires

- échantillonnage uniforme des domaines de définition

Page 44: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse transactionnelle

Page 45: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test structurel

a

d

b

c

u1

u2

u6

u4

u7

u3u5

Chemin c1 = [u3, u1, u4, u5, u6]ou = [b, c, a, c, d, d]

c2 = [a, b, c, d], c3 = [b, c] c2 couvre c3

Mais ne couvre ni [b, c, b] ni [a, c]

Page 46: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Circuits linéairt indépendants

a

d

b

c

u1

u2

u6

u4

u7

u3u5

c1 = [u3, u1, u4, u5, u6]

c6 = [u2, u3]

c4 = [u7, u3, u7, u3, u1]

c5 = [u3, u1, u4, u7]

u1 u2 u3 u4 u5 u6 u70 1 1 0 0 0 01 0 2 0 0 0 21 0 1 1 0 0 1

c6c4c5

Page 47: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Circuits linéairt- indépendants

Circuit 1 = [u1, u4] = (1, 0, 0, 1, 0, 0, 0)Circuit 2 = [u3, u7] = (0, 0, 1, 0, 0, 0, 1)

(1, 0, 1, 1, 0, 0, 1)

L ’addition donne le circuit circuit 5 qui se définit à l ’aidedes circuits circuit 1 et circuit 2circuit 5 = circuit 1 + circuit 2 oucircuit 2 = circuit 5 - circuit 1

Circuit 7 = [u2, u3, u1] (1, 1, 1, 0, 0, 0, 0)est indépendant de circuit 1 et 2 puisque n ’enconstitue pas une combinaison linéaire

Page 48: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Critique

N.B. : le fait qu ’un chemin M s ’exprime à l ’aide d ’un cheminB ne signifie pas que M couvre B

a b cu1 u2

u3

M= [u1, u2, u3] B =[u3, u1, u2]

(1, 1, 1)(1, 1, 1)

L ’expression vectoriellene tient pas comptede l ’ordre de visitedes nœuds !

Page 49: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Nb cyclomatique

Il existe un chemin connectant deux nœuds quelconquesdu graphe

Il existe un ensemble de circuits indépendants CI, de sorte que de n ’importe quel circuit du graphe puisse se traduire à l ’aidedes CI

Base : ensemble des circuits indépendants

Nbre max de circuits indépendants pour former la base, dans un graphe fortement connexe = nb d ’arcs - nb de nœuds + 1

Page 50: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Le nombre cyclomatique

c

a

b

d

u4

u5

u3u1

u2

B1 = [u1, u2, u3]

B2 = [u4, u5, u2]

B = [u5, u2, u3, u1, u2, u4]= B1 + b2

B1 1 1 1 0 0B2 0 1 0 1 1B 1 2 1 1 1

u1 u2 u3 u4 u5

5-4+1 = 2

Page 51: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Nbre cyclomatique

Pour vérifier l ’indépendance entre chemin :calculer leur vecteurvoir si chaque chemin comprend au moins un arc n ’existant pas chezles autres

Page 52: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Graphe de contrôle

i:= 1; while i <= Max do begin if a[i] = s then pos := i; i := i + 1; end;

i:=1

i<=Max

a[i] /= s

i := i + 1

pos := i;

Page 53: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Revues de code

Exemples :- commentaires utiles ?i := i + 1 (* incrémentation du compteur i *)- le code a-t-il des points et utilitaires de traçabilité- le nommage des identificateurs est-il compréhensible ?- code lisible (structuré) ?- grand nombre de littéraux dans le code ?if (choices = 2) then answer := ‘ a ’ ;

Le jour où on veut remplacer 2 par 3 il faut parcourir l ’ensemble ducode pour détecter les apparitions de 2, puis se demander si il est bien la valeur d ’une variable que l ’on veut modifier : nb de jours ?de mois ?

Page 54: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les constantes

Solution : utiliser une « constante », regrouper les constantes dansun fichier.

- taille des routines acceptables ?

Page 55: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Détection de défauts ou configurations douteuses :

- boucles utilisant <> (différent) comme condition terminale oucomparaison de 2 réels (erreur de précisions conduisant à mauvais choix)Eviter d ’écrire :

while i <> Max do … au lieu de while ( i < Max) do

ou encore :

while (r1 <> r2) do … au lieu de while (trunc(r1) < trunc(r2)) do ...

Page 56: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Revues de code (suite)

- Emploi d ’instruction de la forme :if ( x = F(a) + a ) then …ouif (F or P) then …

où F est une fonction booléenne ayant des effets de bord sur le paramètre a (i.e. que le par. est modifié à l ’intérieur de F)Il se peut que la valeur de a que le prog a voulu ajouter à F(a)ne soit pas la même que celle passée à la fonction

P va-t-il être effectivement calculé dans le cas où F a retourné vrai(selon la stratégie d ’évaluation de la sémantique) ?

Page 57: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Revues de code (suite)

- mauvais emploi d ’indices d ’un tableau

- tentative de division par zéro ou défauts dus à des arrondis

- mauvais emploi des instructions d ’E/S

- mauvaises manipulations des fichiers (fermés après ouverture ?)

Page 58: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Complexité : nb de croisements

L2:

GOTO L1

GOTO L2

L1:

Page 59: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Profondeur max d ’imbrication

If a > 0 thenwhile a < i do

beginwhile j > i do

if j = 2 * x then y := jelse j := j + 1 ;

a := a + 1 ;end;

= 4

Page 60: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Exécution symbolique

a := a * ax := a + b ; if x = 0 then x := 0 else x := 1;

a = A, b = B, x = X

a = A * A, b = B, x = X

A = A*A, b = B, x = A*A+B

A*A+B =0 A*A+B /= 0

a = A*Ab = Bx = 0

a = A*Ab = Bx = 1

Page 61: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Exécution symbolique

Page 62: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Exécution symbolique (suite)

Nécessité d ’évaluations intermédiaires

a = A*A + A*A + 5 + 2 simplifiée en a = 2*A*A + 7

Difficulté : tableaux

a[i] := 5;:a[j] := 3;:x := a[i];

La valeur de x peut tout aussi bien être 5(si i <>j) que 3 (si i = j)

Page 63: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

if x < 0 then a := - x else a := x; b := - aif -2*b < 0 then writeln (‘ Error1 ’) else writeln (‘ Error2 ’)

Page 64: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Interprétation abstraite

On attribue à chaque variable des Intervalles (réels ou entiers)

I(a) = 10.. 20I(b) = 10..15

if a = b then b := a + 3 else b := a - 3

Par union des 2 I de b, on peut prédire que la valeur finale de b : 7..18

Avant exécution : a : 10..15 & b : 10..15

Après exécution 1ere branche :a : 10..15 & b : 13..18 Après exécution 2e branche :

a :10..15 & b : 7..17

Page 65: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Interprétation abstraite

s := 0;i := 1;while (i<=n) do

begins := s + i ;i := i + 1;if s> c then n := iend;

But du programmeur :calculer la somme s de tous les entiersinférieurs à n

Il a imposé une autre condition :cette somme ne doit pas dépasser c

Il a cru « forcer » l ’arrêt de la boucle en affectantà n la valeur i

Page 66: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Interprétation abstraite

s := 0;i := 1;while (i<=n) do

begins := s + i ;i := i + 1;if s> c then n := iend;

En supposant I(n) = 0..20 et I(c) = 300..1000,l ’exécution semi-symbolique met enévidence que s n ’appartiendra jamais à 300..1000

Quelles que que soient les valeurs de n et c appartenant à I(n) et I(c) respectivement, l ’instruction d ’affectationn := i est non exécutable Code mort

Page 67: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Interprétation abstraiteAgrandissons I(c) pour satisfaire s > c I(c ) = 200..1000

n := i est symboliquement exécutée, mais peut provoquer bouclageinfini

Valeur initiale de i = 1n : 0..20

1e exécution du while, I(n) : 1..20

2e exécution du while, I(n) : 2..20, etc.

Au fur et à mesure où i augmente, l ’intervalle se réduit

s := 0;i := 1;while (i<=n) do

begins := s + i ;i := i + 1;if s> c then n := iend;

Page 68: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Interprétation abstraite

Rétrécissement des intervalles des variables intervenant dans la condition d ’itération caractérise la convergence de l ’algo

La méthode semi-symbolique permet de détecter le non rétrécissement

Lorsque n dépassera c, n prendra la valeur de iI(c) = I(n) et condition du while toujours vraie.

s := 0;i := 1;while (i<=n) do

begins := s + i ;i := i + 1;if s> c then n := iend;

Page 69: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse du flot des données

x := a + b ; x est définie et a et b référencées

read(x) x est définiewrite (x) x est référencéeif (x=1) then x := 7 x est référencée, puis définiea [i] := x a est définie, i et x référencéesx := x + 1 x est référencée, puis définie

dr-chaîne

Page 70: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

dr-chaînes

program p (input, output) ;var x, y, z, a, b, c : integer ;beginread (c);x := 7;y := x + a;b := x+y+a;c := y + 2*x + z;write (x, c)end.

Variable dr-chaîne

x drrrry drrz ra rrb dc ddr

z et a : référencées et non définiesc définies 2 fois de suitedéfinition de b inutile

Page 71: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

dr-chaînes

r.. Variable a une valeur indéfinie lors de sa 1e utilisation

…dd… 2 définitions consécutives, la 1e est inutile

…d dernière définition inutile

Page 72: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse des domaines finis

read (x, y) ;if (y >= x) then begin if (y > 5) then d := 1 else c := 2; endelse c := 3;if (x + y < 4) then c := c + 10else c := c + 20;writeln (c );

y >= xy > 5x + y < 4

D1 y=xD2 y=5D3 y=4 - x

y

x

D2

D1

D3

TTF

TTF: (x, y) qui satisfont la1e Condition, non la 2e, non la 3e

TFF

TFT

FT

FF

Page 73: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse des domaines finis

y

x

D2

D1

D3

TTF

TFF

TFT

FT

FF

Certaines régions n ’existent pas :FFT la non satisfaction de la 1e conditionne permet pas d ’atteindre la 2eou TTTcar D2 et D3 ne se croisent pas et nepermettent aucune intersection de leurdomaine

Page 74: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse des domaines finis

y

x

D2

D1

D3

TTF

TFF

TFT

FT

FF

Points les plus sensibles à toutetransformation (rotation outranslation) que les différentesdroites (conditions du programme)risquent d ’avoir subie à caused ’erreurs du programmeur

Page 75: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse des domaines finis

x

D2

D1

D3

TTF

TFF

TFT

FT

FF

Si DT (intersection)

DT1 = {x=0, y=0}DT2 = {x=0, y= 10}DT3 = {x=10, y=0}DT4 = {x=10, y=10}

DT5 ={x=0, y=4}DT6 = {x=4, y=0}

DT7 = {x=5, y=5}DT8 = {x=2, y=2}

Page 76: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse des domaines finis

- il est très difficile de représenter des conditions de plus de 2 variables (ex : x + y < z), des tableaux, variables liées par unefonction non linéaire (x * x <= y)

- dans les conditions on trouve non des entrées mais des variablesintermédiaires

Page 77: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Analyse dynamique (test structurel)

1 - Techniques de couverture du graphe de contrôle

2 - Techniques des tests mutationnels

Page 78: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Techniques de couverture

1 - Chemins dans un graphe de contrôle2 - Couvertures basées sur le flot de contrôle3 - Couvertures basées sur le flot des données

Page 79: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Structures élémentaires

repeat

while

case

if then else

séquence

Page 80: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Réduction de graphe de F de C

Page 81: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Graphe de contrôle

If x <= 0 then x := -xelse x := 1 - x;if x = -1 then x := 1else x := x + 1;writeln (x);

a

e

g

f

d

cb

x<=0 x >0

x = -1 x /= -1

x:= -x x:=1-x

x:=x+1

writeln(x)

Chemin de contrôle :[a, c, d, e, g]

Non chemin de contrôle :[b, d, f, g]

Page 82: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Expression de chemin

a

e

g

f

d

cb

x<=0 x >0

x = -1 x /= -1

x:= -x x:=1-x

x:=x+1

writeln(x)

Expression de chemin :a (b + c) d (e + f) g

Page 83: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Expression de chemin

a b c d

ab (cb)* d

Expression régulière

Page 84: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Sensibilisation de chemin

a

e

g

f

d

cb

x<=0 x >0

x = -1 x /= -1

x:=1-x

x:=x+1

writeln(x)

{x = 2} sensibilise le chemin[a, c, d, f, g]{x = 0} sensibilise le chemin[a, b, d, e, g]{x = 1} sensibilise le chemin[a, c, d, e, g]

Page 85: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Chemins exécutables/non exécutables

a

e

g

f

d

cb

x<=0 x >0

x = -1 x /= -1

x:=1-x

x:=x+1

writeln(x)

Aucune valeur de x n ’est capable de sensibiliser [a, b, d, f, g]si on passe b, on ne passerajamais f

Chemins exécutables : il existe desDT qui les sensibilisent

Chemins inexécutables : infaisable

Page 86: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Chemin non exécutable

1

2

3

5

4

6

read(choice);

choice=1

x:=x+1;

choice=2

x:=x-1;

read (choice);if choice = 1 then x := x + 1;if choice = 2 then x := x-1;

[1, 2, 3, 4, 5, 6] non exécutablecar choix ne peut avoir en mêmetemps la valeur 1 et la valeur 2

Restructuration en:read (choice);if (choice = 1) then x := x +1else if (choice = 2) then x := x - 1;

Page 87: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Chemin non exécutable

1

4

6

35

2

read(choice);

choice=1

X:= x+1; Choice=2

X:=x+1;

Restructuration en:read (choice);if (choice = 1) then x := x +1else if (choice = 2) then x := x - 1;

Page 88: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Sensible/révélateur d ’erreur

Read (x)if x > 7 then y := 0else y := x;writeln (1/y);

1

3 4

2

4

Read (x);

x <= 7

writeln(1/y);

y := 0;

x > 7

[1, 2, 4, 5 ] est sensible aux erreurs

[1, 2, 3, 5] est révélateur d ’erreur car erreur qqs la valeur init de x et y

Page 89: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Flot de ctrl vs flot de données

Read (x, y);if (x mod 2 = 0) then y := y + x/2;if (x <0) then

begin y := - x;writeln (y) ;end

else writeln (y);

1

2

3

54

read(x, y);

x impair

X >= 0

writeln (y);y :=- x;writeln(y);

X < 0

y:=y+x/2

x pair

Page 90: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Flot d ’exécution

1

2

3

54

read(x, y);

x impair

x >= 0

writeln (y);y :=- x;writeln(y);

X < 0

y:=y+x/2

x pair Couverture des arcs :DT1 = {x=-2, y= 0}DT2 = {x= 1, y = 0}

DT1 exécute [1, 2, 3, 4]DT2 [1, 3, 5]

Si 2 erroné, l ’erreur ne sera pasdétectée par les DT1, 2car la valeur de y est masquée parune nouvelle affectation y := - x

Page 91: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

2

3

54

read(x, y);

x impair

x >= 0

writeln (y);

X < 0

y:=y+x/2

x pairPour tester l ’affectation du nœud 2,il faut exécuter [1, 2, 3, 5]avec la DT3 = [{x=2, y=0} pour avoir x paire et positive

Page 92: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Flot d ’exécution/flot de donnée

Pour trouver la nécessité de DT3, 2 raisonnements possibles :

1) on suit le flot d ’exécution

Voir que flot d ’exécution [1, 2, 3, 5] n ’est pas pris en compteet créer une DT supplémentaire

2) on suit le flot de données

Voir que l ’affectation de y au nœud 2 n ’a pas été ‘ utilisée ’par les deux premières DT car elle a été « couverte » par celle dunœud 4et créer une DT supplémentaire pour la « rendre utile »

Page 93: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Couverture basée sur le flot de contrôle

Fonction censée calculer la somme de 2 entiers :function sum (x,y: integer) : integer; begin if (x=0) then sum := x else sum := x + y; end;

Si test boîte noire, on ne découvrira pas l ’erreur

Elle n ’est découverte que par DT = {x=0, y /=0}

a

b c

c

x=0

sum:=x+y;

x/=0

Page 94: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Taux de couverture

function sum (x,y: integer) : integer;beginif (x=0) then sum := xelse sum := x + y;end;

a

b c

c

x=0

sum:=x+y;

x/=0

sum:=x;

La plupart des DT ne couvrent que [a, b, d].Ce n ’est qu ’en essayant de passer par c que nous exécutons lechemin sensible à l ’erreur [a, c, d]

Page 95: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Taux de couverture

1e critère : sensibiliser les chemins de contrôle qui nous permettrontde visiter tous les nœuds.Critère « tous-les-nœuds »

A chaque critère de couverture est associé le taux de couverture oumesure de complétude (d° de satisfaction du critère)

Si on soumet uniquement DT1 = {x=2, y=5}, on exécute [a, b, d]i.e. 3 nœuds sur 4Test Effectiveness Ratio (TER) : nb de nœuds couverts/ nb total de nœuds = 3/4 = 0, 75 = 75 %

a

b c

c

x=0

sum:=x+y;

x/=0

Page 96: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Critère TER

TER = 1 <=> C1 = 1 <=> tous-les-nœuds est satisfait <=> tous les nœuds du graphe de contrôle ont été

couverts <=> toutes les instructions ont été exécutées (au

moins une fois)

a

b c

c

x=0

sum:=x+y;

x/=0

Page 97: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

couverture de tous les actes

2e critère : couverture de tous les actes

Tous-les-nœuds est insuffisant.

a

d

c

bX=0

y:=1/x;

read(x);

x:=1;

x/=0

read(x);:if x < > 0 then x := 1;:y:= 1/x;

DT = {x=2} sensibilise [a, b, c, d], couvre tous les nœuds sansfaire apparaître l ’anomalie qui se produira si b n ’est pas exécuté

Page 98: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Critère tous-les-arcs

Le pb vient que nous n ’avons pas couvert tous les arcs

Couvrir tous les chemins de contrôle composés uniquement d ’un arc.

B1 = [a, b]B2 = [b, c]B3 = [a, c]B4 = [c, d]

a

d

c

bX=0

y:=1/x;

read(x);

x:=1;

x/=0

Page 99: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

TER2 ou C2

a

d

c

bX=0

y:=1/x;

read(x);

x:=1;

x/=0 Pour la DT {x=2} qui couvre les chemins B1, B2 et B4 (3 sur 4)

TER2 = nb des arcs couverts /nb total d ’arcs = 3/4= 0,75 = 75%

B1 = [a, b]B2 = [b, c]B3 = [a, c]B4 = [c, d]

Alors que la même DT donne

TER1 = 4/4 = 1 = 100%

Page 100: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

TER2

La couverture de tous les arcs équivaut à la couverture de toutes lesvaleurs de vérité pour chaque nœud de décision.En satisfaisant ce critère, nous couvrons tous les chemins reliant un nœud de décision à un autre (appelé aussi dd-chemins ou branches)

TER2 = 1 <=> C2 = 1 <=> tous-les-arcs est satisfait <=> tous les arcs du graphe sont couverts <=> toutes les décisions ont été couvertes (V et F) <=> tous le dd-chemins ont été couverts <=> toutes les branches ont été couvertes <=> tous-les-nœuds est satisfait => C1 = 1

Page 101: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Décision composée

If (( a < 2) and (b = a)) then x := 2 - a else x := a - 2

1

32

4

(a<=2) or(b/=a)

(a<2) and (b=a)

x:=2-a;x=a-2

DT1 = {a=b=1}DT2 = {a=3}couvrent tous les arcsmais non les deux conditionscomposant la décision.

Page 102: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Mesure C3

1

32

4

(a<=2) or(b/=a)

(a<2) and (b=a)

x:=2-a;

1

4

3

2

5

6

a>=2a<2

b=a

x:=2-a

x:=a-2

b=ab/=a

b/=a

Pour couvrir tous les arcs il faut2 * 2 = 4 DT

DT1 = {a=b=1}DT2 = {a=1, b=0}

DT3 = {a=3, b=2}DT4 = {a=b=3}

Page 103: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

4

3

2

5

6

a>=2a<2

b=a

x:=2-a

x:=a-2

b=ab/=a

b/=a

1

3

2

4

5

a>=2a<2

b=a

x:=2-a

x:=a-2

b/=a

Page 104: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

3

2

4

5

a>=2a<2

b=a

x:=2-a

x:=a-2

b/=a

DT1 = {a=b=1}DT2 = {a=1, b=0}DT3 = {a=3, b=2}

Couvrent tous les arcs

Page 105: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Couverture de tous les chemins linéairement indépendants

read (inf, sup)i := inf;sum := 0;while (i <= sup) dobeginsum := sum + a[i];i := i + 1;end;

Évalue l ’inverse de la somme des éléments compris entre la placeinf et sup d ’un tableau a comprenant des entiers positifs.

b

c e

d

u1

u4

u2

u3 sum:= sum + a[i];i:=i+1;

writeln(1/sum);

read(inf,sup);i:=inf;sum:=0;

i<=sup

Page 106: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

b

c e

d

u1

u4

u2

u3 sum:= sum + a[i];i:=i+1;

read(inf,sup);i:=inf;sum:=0;

i<=sup

DT1= {a[1]=50, a[2] =60, a[3]=80, inf =1, sup=3}

B1=[b,c,d,c,d,c,d,c,e]=[u1,u2,u3,u2,u3,u2,u3,u4]couvre tous les arcs (et nœuds) sans détecter l ’erreur

Page 107: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Erreur qui se manifeste lorsque inf > sup.En effet, si la boucle n ’est pas exécutée, sum reste à 0 et l ’évaluation de son inverse est impossible.

Il faut ajouter le chemin B2 =[u1, u4]sensibilisé par ex. par DT2={inf=2, sup=1}

b

c e

d

u1

u4

u2

u3 sum:= sum + a[i];i:=i+1;

i<=sup

Page 108: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Nombre de McCabe

u1 u2 u3 u4B1 1 3 3 1B2 1 0 0 1B3 1 1 1 1

B3 = 1/3 (B1 + 2B2) B3 combinaison linéaire de B1 et B2

v(G) = 4 - 4 + 2 = 2v(G) = nb de nœuds de décision + 1= 1 + 1

B1 et B2 étant deux ch. Linéairement indépendants, ils constituent unebase. N ’importe quel chemin peut s ’exprimer à l ’aide de B1 et B2

Page 109: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Limites

Si le critère tous-les-chemins-indépendants est satisfait, alors les critères tous-les-arcs et tous-les-nœuds le sont aussi.

Mais la propriété d ’indépendance n ’est ni nécessaire ni suffisantepour détecter le défauts

Si nous avions choisi B3 (qui est aussi indép. De B1) au lieu de B2, on aurait obtenu une base sans détecter l ’erreur.

Page 110: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Couverture « vectorielle » !

Program p (input, output); var a : array[1..2] of integer; E, i : integer; found : boolean; begin read(i, E, a[1], a[2]); found := false; while i <= 2 do begin if (a[i] = E) then found := true else found := false ; i := i + 1; end; writeln(found);end.

1

72

4

3

5

6

u1

u2

u3

u4 u5

u6 u7

u8

i>2

a[i]=Ea[i]/=E

i:= i+1

Page 111: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

72

4

3

5

6

u1

u2

u3

u4 u5

u6 u7

u8

i>2

a[i]=Ea[i]/=E

i:= i+1

DT1 ={i=3} sensibilise B1=[u1, u2]

Modifions la condition du nœud 2 :DT2 ={i=1, E=10, a[1]=20, a[2]=10}

qui sensibiliseB2 =[u1, u3, u4, u6, u8, u3, u5, u7, u8, u2]

Page 112: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

72

4

3

5

6

u1

u2

u3

u4 u5

u6 u7

u8

i>2

a[i]=Ea[i]/=E

i:= i+1

En modifiant la condition du nœud 3

DT3 = {i=1, E=10, a[1]=10, a[2] = 20]sensibilise :B3 =[u1,u3,u5,u7,u8,u3,u6,u8,u2]

Mais B3 n ’est pas indépendant de B2, caradmettent le même vecteur v = [1, 1, 2, 1, 1, 1, 1, 2]

Page 113: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

B2 et B3 ont les mêmes arcs le même nb de fois.

On produit 2 autres chemins : B4 et B5DT4 ={i=1, E=10, a[1]=10, a[2]=10}sensibilisantB4 =[u1, u3, u5, u7, u8, u3, u5, u7, u8,u2]DT5 ={i=1, E=10, a[1]=20, a[2]=30}sensibilisantB5 =[u1, u3, u4, u6, u8, u3, u4, u6, u8, u2]

B1, B4 et B5 sont vectoriellement indépendants

Page 114: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Limites

Résultats exactsDT1 found = false car boucle non exécutéeDT4 found = trueDT5 found est affecté deux fois à false

Or ne détectent pas l ’erreur (la valeur de found ne dépend endéfinitive que de la dernière valeur de l ’élément du tableau.

Le seul chemin parmi ceux proposés, qui détectait l ’erreurétait B3 (celui que l ’on a rejeté à cause de sa dépendance avecB2 !)

Page 115: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Couverture des PLCSPortion Linéaire de Code Suivie de SautLCSAJ (Linear Code Subpath And Jump)

005 INPUT A, C010 B= 2*A020 A=A+1030 IF A<0 THEN GOTO 60040 B= -A050 PRINT A+B060 IF B=2*C THEN GOTO 80070 A=1:GOTO 90080 A=-2:GOTO 20090 PRINT A100 END

En gras et vertles « sauts »

PLCS : chemin partant d ’un nœud saut et aboutissantà un nœud saut. L ’avant dernier et dernier nœud sont le seul sautdu chemin

Page 116: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

PLCS20

5

60

80

90

100

30

40

70

1) [5, 20, 30, 60]2) [5, 20, 30, 40, 60, 80]3) [5, 20, 30, 40, 60, 70, 90]4) [20, 30, 60]5) [20, 30, 40, 60, 80]6) [20, 30, 40, 60, 70, 90]7) [60, 80]8) [60, 70, 90]9) [80, 20]10) [90, 100]

4 incluse dans 1, 5 dans 2, 6 dans 37 dans 2, 8 dans 3

Page 117: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

TER3

Si on exécute les 3 chemins :B1 = [5, 20, 30, 60, 70, 90, 100]B2 = [5, 20, 30, 40, 60, 80, 20, 30, 60, 70, 90, 100]B3 = [5, 20, 30, 40, 60, 70, 90, 100]

on couvre la totalité des PLCS

TER3 = nb de PLCS couvertes / nb total de PLCS

Page 118: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Tests des chemins de boucle

Limites et intérieurs à une boucle (boundary interior path test)

Limites : traversent la boucle mais ne l ’itèrent pasIntérieurs : itèrent la boucle une seule fois.

1

2

3

1

2

43

[1,2,3] chemin limite

[1,2,1,2,3] [1,2,4,2,3]

sont intérieurs

Page 119: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

1

6

43

2

5

v f

Chemins limitesL1=[1,2,3,5,6]L2 =[1,2,4,5,6]

Chemins intérieursvv=[1,2,3,5,2,3,5,6]vf=[1,2,3,5,2,4,5,6]fv=[1,2,4,5,2,3,5,6]ff=[1,2,4,5,2,4,5,6]

Page 120: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

On peut compléter par :1) chemins exécutant deux fois la boucle2) chemins exécutant le nombre max d ’itérations

Page 121: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Couvertures basées sur le flot de données

d variable définier variable référencée (utilisée)p-utilisation dans le prédicat d ’une instruction de décisionc-utilisation dans un calcul

while (i < N) do i et N sont p-utilisées et à la dernière exécution,i esst c-utilisée et ensuite définie

begin s := s + i; s et i sont c-utilisées, puis s est définie i := i + 1; end;writeln (s); s est utilisée

Page 122: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

C-utilisation et p-utilisation

Chemin d ’utilisation (c-utilisation ou p-utilisation) :chemin reliant l ’instruction de définition d ’une variable à uneinstruction utilisatrice.

1

4

2

3

read(x,y);

x >=100

x<100

x:=x*y;y:=y+1;

[1,2,3,2,4] couvre tous les arcs

L ’arc (2, 4) est p-utilisateur de x parrapport au nœud 1Or le chemin de p-utilisation [1,2,4]qui relie la définition de x au nœud 1 avec son arc p-utilisateur (2,4) n ’estpas inclus dans le chemin de testinitial.

Page 123: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

P-utilisation et c-utilisation

Le critère tous-les-p-utilisateurs nécessite que tous les arcs p-utilisateurscorrespondant à toutes les définitions du graphe (affectation, read, etc.)soient couvertes, par un chemin de p-utilisation.

Nous ne développerons pas plus

Page 124: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Complémentarité des méthodes

If a > b then x := a - belse x := b - a

Si le programmeur avait dû écrire y := b - a au lieu dex : b - a, alors une couverture basée sur le flot de données sera sans doute en mesure de détecter l ’erreur

Si le programmeur a commis une erreur de branchement (a < b au lieude a > b) une couverture basée sur les chemins sera plus pertinente.

Page 125: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Test mutationnels

Sélection du meilleur mécanicien parmi 10 candidats

On présente à chaque candidat (DT) différentes pannes (mutants)que l ’on a volontairement provoquées sur la voiture (programmeinitial)Le candidat détectant le plus de pannes sera le plus compétent

On va tester si la DT est appropriée en comparant les résultats qu ’elledonnera lorsqu ’elle est soumise aux différents mutants

Page 126: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Mutants

Principaux : Mutants qui, pour au moins une DT, donnent des résultats différents du programme initial

Prog. Principal :a := b + c ; writeln (a) ;

Mutants :i) a := b + 1; writeln (a);ii) a := b - c; writeln (a);iii) a := b + c; writeln (b) ;

Page 127: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Mutants (suite)

Mutants secondaires Donnent pour toutes les DT les mêmes résultats que ceux du programme initial

var a, b, c : interger;beginif a < b then c := a;end i) if a <= b - 1 then c := a;

ii) if a + 1 <= b then c := a;iii) if a < b then c := a + 0;

Page 128: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Mutants principaux

Plus une DT tue de mutants principaux, plus elle est appropriéeCas idéal : une DT qui tue tous les mutants principaux.

Si le programme initial est erroné et que sa bonne version constitueun mutant de celui-ci :1) soit ces programmes donnent toujours le même résultat (ils sontéquivalents)

2) soit donnent des résultats différents. La DT peut les distinguer. Elle est appropriée

Page 129: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Exemple

Prog. : ajouter 2 à un nombre lu en entrée

Erreur : confusion entre ^ et + et *

On choisit l ’entrée de 2.

Si le résultat est 5, prog. erroné

Si le résultat est 4, sûr d ’avoir bien testé ?

Non ! x:= x *2 , x := x ^2

Page 130: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Mutants

On produit DT {x=3} pour tuer les deux mutantsx := x*2 et x := x2

Page 131: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Tolérance aux erreurs

read (a, b);while b > 0 do begin a := a + 1; b := b - 1; manip (a, b) ; end;

Manip(a, b) permet d ’observer et modifierles valeurs de a et b en cours d ’exécution.

Soit étant initial S0 =<3,5>

1e observation état S1 = <4,4>2e état S2 = <5,3>3e état S3 = <6,2>4e état S4 = <7,1>5e état S5 = <8,0>

S5 = <a + b, 0>

Page 132: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Tolérance aux erreurs

read (a, b);while b > 0 do begin a := a + 1; b := b - 1; manip (a, b) ; end;

1e observation état S1 = <4,4>On modifie S2 en S2 ’=<17, -1>le bouclage s ’arrête et l ’état final est :<17, -1>

L ’algo n ’a pas toléré la « déformation »

On recherche des transformations, qui tout en modifiant un état intermédiaire, peuvent secompenser par le comportement ultérieur et donnerle résultat attendu

Page 133: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

P-correct, s-correct

1e observation état S1 = <4,4>Modification de S2S2 ’ = <7,1>S3 = <8, 0>

S est faiblement correct (f-correct) à un certain endroit par rapportà un état initial S0, ssi, en reprenant à l ’algo à partir de cet état,on retrouve le résultat attendu.

<7,1> est f-correct par rapport à <3,5> mais aussi à <1,7> , <4,4> etc.

S2 = <5, 3> issu d ’un fonctionnement normal, est strictement correct

Page 134: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Sp-correct

2e observation modifions S2=<5,3> en <8,-2>On obtient l ’état final <8,-2>, qui n ’est pas le résultat attendu maison a bien la bonne valeur de a

<8,-2> est correct d ’après les spécifications (sp-correct) par rapportà S0 et à l ’endroit de la 2e observation.

Page 135: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Les états intermédiaires

1) modifications donnant le résultat final attendu.Etat intermédiaire f-correct

2) modifications qui ne donnent pas le résultat final attendu, maiscelui prévu par les spécifications.Etat intermédiaire sp-correct

3) modifications altérant irrémédiablement l ’état intermédiaire.Etat non-sp correct

Page 136: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

F-récupérable

Si l ’état S courant n ’est plus f-correct.

Si on peut le transformer par une routine de récupération locale, enun état f-correct,

l ’état est f-récupérable.

Page 137: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur

Fin

Page 138: Erreur, défaut, anomalie 1) On constate une anomalie 2) due à un défaut (on dit aussi une faute (!) )du logiciel 3) défaut du à une erreur du programmeur