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}

Documents pareils