Slides
Transcription
Slides
++ VVL 2016 Ampleur & Kinder Sommaire I) Test -rappels (test, type de test, graphes de flot, critères de couvertures) -partiel II) Preuve -rappels -partiel Test : définition -exécution d’un programme dans le but d’y trouver des anomalies => ne peut pas démontrer l’absence de défaut -Démarche: générer des données, construire l’oracle, exécuter le programme, analyser les résultats Types de tests -Test fonctionnel (boîte noire) : vérifie que le test est conforme à sa spécification => pas de regard sur le code même -Test structurel (boîte blanche): vérifie l’implémentation du programme, en utilisant sa structure interne (son code) => graphe de flot de contrôle, critère de couverture -Test mutationnel : évaluation du programme en fonction d’une liste de fautes probables Outil: graphe de flot de contrôle, de flot de données -Contrôle : -un noeud pour chaque instruction -un noeud final de sortie pour chaque instruction du programme, comporte un arc reliant le noeud de l’instruction au noeud de l’instruction suivante (on peut étiqueter les transition par les instructions) -Données : y ajoute les informations de définition et d’utilisation des variables Exemple de graphe de flot de contrôle if x 0 then x := 1 else skip ; y := 1; while ! (x <= 0) do y := y * x; x := x done - 1; Graphe de flot de contrôle: exemple (suite) Critères de couvertures Idée: définir des niveaux de fiabilité en parcourant son graphe Critère: - toutes les instructions => tous les noeuds - toutes les décisions => toutes les branches toutes les branches passant i fois dans la boucle tous les chemins de longueur au plus k toutes les utilisations => toutes les définitions différentes de variables tous les chemins possibles => se résument à savoir compter Logique de Hoare - Exemples Triplet {P} s {Q} ~ {Précond} s {Postcond} Exemples de triplets valides (correction partielle) {false} s {3 = 5} ok {x=4} x:= x + 2 {x=6} ok {x=3} while (x>0) do x++ ; end ; {x<=0} ok {x>3 \/ x<-1} if x>0 then x:=x+1 else x:=-x fi {x>1} ok WP : Weakest precondition WP(s,Q) = plus faible proposition logique P telle que {P} s {Q} soit valide Calcul via règles et arbre de dérivation Ex : {x>3 \/ x<-1} if x>0 then x:=x+1 else x:=-x fi {x>1} valide car WP(if x>0 then x:=x+1 else x:=-x fi {x>1})={x>0 \/ x<-1} or {x>3 \/ x<-1} => {x>0 \/ x<-1} Partiel 2015 - Partie 2 - Exo 1 q1 1) WP(a = 2*b ; b=a-3, b<0) = WP(a=2*b, WP(b=a-3,b<0) =WP(a=2*b, a -3 < 0) =WP(a=2*b, a<3) = 2*b <3 = b<3/2 (règle if) (règle aff) Exo 1 - Q2 2) WP(if e then c end,Q) =WP(if e then c else skip end,Q) = {e => WP(c,Q)} /\ {!e => Q}