Test de Systèmes Informatiques



Documents pareils
Formula Negator, Outil de négation de formule.

Génie Logiciel avec Ada. 4 février 2013

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours de Master Recherche

Arbres binaires de recherche

Pourquoi l apprentissage?

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Cours de Programmation 2

Quatrième partie IV. Test. Test 15 février / 71

Initiation à la Programmation en Logique avec SISCtus Prolog

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Recherche dans un tableau

Qualité du logiciel: Méthodes de test

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Présentation du langage et premières fonctions

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Utilisation des tableaux sémantiques dans les logiques de description

OCL - Object Constraint Language

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Évaluation et implémentation des langages

Théorie des Langages

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Vérification formelle de la plate-forme Java Card

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Cours de Génie Logiciel

Conception des systèmes répartis

Calculabilité Cours 3 : Problèmes non-calculables.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Approche de modélisation des tests de logiciels complexes par un système multi-agents

Cours d algorithmique pour la classe de 2nde

Model checking temporisé

Intelligence Artificielle Planification

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

modèles génériques applicables à la synthèse de contrôleurs discrets pour l Internet des Objets

Cours 1 : La compilation

Université de Bangui. Modélisons en UML

CCI Génie Logiciel UFR - IMA. Objectifs du cours d'aujourd'hui. Génie Logiciel Validation par le test. Qu est-ce que tester un programme?

IFT2255 : Génie logiciel

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Programmation Web. Madalina Croitoru IUT Montpellier

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Vérification et Validation

Chapitre VI- La validation de la composition.

Les diagrammes de modélisation

Test et Validation du Logiciel

Théorie de la Programmation

Introduction aux systèmes temps réel. Iulian Ober IRIT

Raisonnement probabiliste

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Initiation à l algorithmique

Introduction à MATLAB R

Rappels sur les suites - Algorithme

Systèmes d information et bases de données (niveau 1)

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Licence Sciences et Technologies Examen janvier 2010

Matrice d accès. Master SEMS, Pierre Paradinas. October 16, 2013

Algorithmes d'apprentissage

Les simulations dans l enseignement des sondages Avec le logiciel GENESIS sous SAS et la bibliothèque Sondages sous R

TP 1. Prise en main du langage Python

Objets Combinatoires élementaires

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Programmer en JAVA. par Tama

Compilation (INF 564)

Programmation linéaire

= constante et cette constante est a.

UML (Paquetage) Unified Modeling Language

Qu est-ce qu une probabilité?

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Analyse de sécurité de logiciels système par typage statique

M1 : Ingénierie du Logiciel

Corrigé des TD 1 à 5

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Cours 1 : Qu est-ce que la programmation?

Fondements de l informatique Logique, modèles, et calculs

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Algorithmique des Systèmes Répartis Protocoles de Communications

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Simulation de variables aléatoires

Bases de données Cours 5 : Base de données déductives

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Chapitre I : le langage UML et le processus unifié

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

FICHE UE Licence/Master Sciences, Technologies, Santé Mention Informatique

Objets et Programmation. origine des langages orientés-objet

VÉRIFICATION DES SYSTÈMES À PILE AU MOYEN DES ALGÈBRES DE KLEENE

Conception de circuits numériques et architecture des ordinateurs

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Algorithmique et Programmation Fonctionnelle

Intelligence Artificielle et Systèmes Multi-Agents. Badr Benmammar

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Initiation à la programmation en Python

Transcription:

Test de Systèmes Informatiques Première partie : Introduction au sujet Deuxième partie : concepts et problèmes Troisième partie : approches formelles, 2 exemples septembre 2011 Test de Systèmes Informatiques 1

Qu est-ce-que le test en Informatique? «We know less about the theory of testing, which we do often, than about the theory of program proving, which we do seldom» Goodenough J. B., Gerhart S., IEEE Transactions on Software Engineering, 1975 septembre 2011 Test de Systèmes Informatiques 2

En général Tester un système c'est : Provoquer son exécution dans des conditions bien définies et reproductibles Observer son comportement Décider si ce comportement est conforme aux spécifications Dans le but de trouver des fautes septembre 2011 Test de Systèmes Informatiques 3

Cas du logiciel : définitions Deux classes de méthodes Par examen de la spécification ou du programme : test statique Par exécution de tout ou partie du système obtenu après installation du logiciel : test dynamique Test dynamique : Choisir les données de test : jeu de tests Faire exécuter le système contre le jeu de tests Décider si le résultat est correct ou non : oracle Dans cette conférence, test dynamique septembre 2011 Test de Systèmes Informatiques 4

Les trois problèmes du test dynamique Sélection : d un jeu fini de tests parmi toutes les données possibles Soumission : par un contrôleur de test ( driver ), en utilisant si besoin des simulations, des modules fictifs ( stubs ) Décision ( oracle ) : le test soumis donne-til un résultat conforme à la spécification? septembre 2011 Test de Systèmes Informatiques 5

Instrumentation "driver" (ou contrôleur de test ou "mulet") oracle donnée de test résultat verdict composant sous test "stubs" (ou modules fictifs, ou "bouchons") septembre 2011 Test de Systèmes Informatiques 6

Sélection des tests Structurelle : basée sur la structure du programme Critères de couverture des instructions, des enchaînements, des chemins, des couples définitionsutilisations, Fonctionnelle : basée sur la spécification Couverture et composition des cas mentionnés dans la spécification Aléatoire ou statistique : tirage selon une distribution sur le domaine d entrée NB: l oracle est toujours basé sur la spécification septembre 2011 Test de Systèmes Informatiques 7

Sélection Structurelle/ Fonctionnelle Sélection basée uniquement sur la structure du programme Sélection basée uniquement sur la spécification résultats résultats Oracle basé sur la spécification C est une boîte noire! septembre 2011 Test de Systèmes Informatiques 8

Il faut faire les deux! Boite noire : permet de tester que tous les cas spécifiés sont traités correctement «On n a rien oublié» Structurel : permet de tester que tous les items couverts du programme satisfont la spécification «Tous les sous-cas introduits par la programmation sont corrects» septembre 2011 Test de Systèmes Informatiques 9

Base de la sélection structurelle : chemins et prédicats Graphe de contrôle Blocs élémentaires Enchaînements possibles Exécutions possibles => Chemins du graphe Condition d exécution d un chemin donné = prédicat sur les données obtenu par conjonction, négation éventuelle, et évaluation symbolique des conditions rencontrées lors de l exécution septembre 2011 Test de Systèmes Informatiques 10

Exemple : le bon vieux pgcd begin read(p, q) ; B1 r := p - p%q*q ; while r 0 do begin P1 p := q ; q:=r ; B2 r := p - p%q*q ; end ; write(q) ; B3 end B2 E B1 P1 B3 S septembre 2011 Test de Systèmes Informatiques 11

E Le pgcd, suite Chemins E B1 P1 (B2 P1)* B3 S Prédicats de chemins E B1 P1 B3 S : p 0 - p 0 %q 0 *q 0 = 0 (p 0 divisible par q 0 ) E B1 P1 B2 P1 B3 S : p 0 - p 0 %q 0 *q 0 0 p 1 = q 0 q 1 = p 0 - p 0 %q 0 *q 0 p 1 - p 1 %q 1 *q 1 = 0 ETC B2 Obtention d un test permettant d exécuter un chemin : on résout le prédicat du chemin B1 P1 B3 S septembre 2011 Test de Systèmes Informatiques 12

Problème avec les chemins et les prédicats Certains prédicats sont insatisfiables => le chemin correspondant est infaisable et ne peut pas être couvert par un test Il s agit de chemins du graphe de contrôle qui comportent des conditions contradictoires : if x > 0 then B1 else B2 ; {x reste inchangé} ; if x > 0 then B3 else B4 ; Il n existe pas de test permettant de couvrir ces chemins car il n existe pas de données permettant de les exécuter septembre 2011 Test de Systèmes Informatiques 13

Plus généralement : cas infaisables La satisfiabilité d un prédicat est un problème indécidable Face à une conjonction de cas dans un programme ou une spécification, on n a pas de méthode générale pour décider si on doit tester ce cas ou non. Mais heureusement on peut souvent restreindre la logique considérée Solution partielle : la résolution programmation logique et ses extensions, et/ou résolution de contraintes : CLP, SMT solvers) septembre 2011 Test de Systèmes Informatiques 14

Test «Boîte Noire» Basé sur une analyse de la spécification Spécification «comportementale» : critères de couverture similaires au test structurel Spécification par propriétés : décomposition (dépliage) Méthodes existantes et recherches : Comportements décrits par des automates/systèmes de transitions/machines à états Types de données décrits par des propriétés (axiomes, pré et post-conditions, invariants) On mélange les deux Approches probabilistes (marches aléatoires, etc) septembre 2011 Test de Systèmes Informatiques 15

Test de Systèmes Informatiques Première partie : Introduction au sujet Deuxième partie : concepts et problèmes Troisième partie : approches formelles, 2 exemples septembre 2011 Test de Systèmes Informatiques 16

Concepts et Problèmes On teste un système Ce n est pas un texte ou un diagramme : c est une entité dynamique Il faut savoir contrôler cette entité Il faut savoir l observer On cherche à provoquer des défaillances, i.e. des comportements non conformes à ce qu on attend input output septembre 2011 Test de Systèmes Informatiques 17

Digression sur le test et la preuve On teste un système, on fait la preuve d une formule La carte n'est pas le territoire Le texte du programme, ou de sa spécification, n est pas le système septembre 2011 Test de Systèmes Informatiques 18

Programme Tout le monde sait ce que c est J Un programme est un texte dans un langage bien défini Il y a une syntaxe, une (ou des) sémantiques, et des compilateurs A program is a very detailed solution to a much more abstract problem [Ball, 2005] {i=0 ; read(x); repeat { i++ ; perd(x, i); } until term(i,x) ; septembre 2011 Test de Systèmes Informatiques 19

A quoi sert un programme? Il peut être compilé puis intégré dans un système {i=0 ; read(x); repeat { i++ ; perd(x, i); } until term(i,x) ; output input septembre 2011 Test de Systèmes Informatiques 20

Preuve de Programme Program {i=0 ; read(x); repeat { i++ ; perd(x, i); } until term(i,x) ; + Assertions logiques Theorem Prover Vu comme une formule (par exemple, Le bon vieux {Pre} Prog {Post} ) Static Analyser Libraries axiomatisation Proof envt SAT solver septembre 2011 Test de Systèmes Informatiques 21

Qu est-ce qu une preuve? Théorie: Axiomes Règles d infèrence Formule ϕ Moteur de preuve + Stratégies Théorème: (oui/non/?) Finalement: un processus sophistiqué mais purement syntaxique. On manipule des textes septembre 2011 Test de Systèmes Informatiques 22

Intermède Program {i=0 ; read(x); repeat { i++ ; perd(x, i); } until term(i,x) ; + CORRECT! Assertions logiques septembre 2011 Test de Systèmes Informatiques 23

Retour au test Le système est exécuté sur des données sélectionnées NB: séquences de données pour les systèmes réactifs Ces exécutions sont observées, et une décision est prise sur leur conformité par rapport à un modèle ou une spécification Problèmes : Sélection Oracle Contrôle, non-déterminisme Evaluation du résultat d une campagne de test Données de test sélectionnées Oracle Résultats, observations défaillance/ résultat correct septembre 2011 Test de Systèmes Informatiques 24

Model-based testing Domaine très ancien (75 et avant) et très actif Il y a toute sorte de modèles (pourquoi pas J ) Toujours présente, mais pas toujours explicite : hypothèse de testabilité. Le système sous test se comporte comme un modèle (inconnu) de même nature que celui qui guide le test Origine [Chow 78] pour les FSM (machine avec nb. d états fini) [Bernot et al. 91] pour des spécifications algébriques septembre 2011 Test de Systèmes Informatiques 25

Test de Systèmes Informatiques Première partie : Introduction au sujet Deuxième partie : concepts et problèmes Troisième partie : approches formelles, 2 exemples : FSM, Spéc. algébriques septembre 2011 Test de Systèmes Informatiques 26

Le modèle est une FSM Système sous test inconnu, mais FSM equivalence? SUT output Hypothèse de testabilité pour cette approche : Le Système sous Test se comporte comme une FSM (inconnue) qui a le même nombre d états que la description input Autrement dit, dans le SUT, quelque soit le chemin d exécution suivi pour atteindre un état s, l exécution de la transition s x:y-> s a le même effet (même donnée =>même sortie + même changement d état) septembre 2011 Test de Systèmes Informatiques 27

Exemple: reconnaissance de commentaires *,φ: _ 1 2 3 4 /: _ /: _ φ = tout caractère sauf * et / : *: _ φ: φ /: _ φ: _ /: / φ: * φ *: _ ceci n est pas un commentaire /* tout ceci / * est un ** commentaire */ ceci n est plus un commentaire *: * Cette FSM supprime d un texte donné tout ce qui n est pas un commentaire septembre 2011 Test de Systèmes Informatiques 28

Finite State Machine S: ensemble fini d états, I: alphabet d entrée, O: alphabet de sortie T: ensemble fini de transitions: s x:y-> s' T, s, s' S, x I, y O λ(s,x)=y, λ*(s,w)=w', w I*, w' O* Etats équivalents : w, λ*(s,w) = λ*(s',w) Ici, on considère des FSM : déterministes, complètes ( s S, x I, s x:y-> s' T), minimales (pas d états équivalents), et tous les états sont atteignables septembre 2011 Test de Systèmes Informatiques 29

Un des tests de s -x/y-> s? homing sequence h I* => answ O*: alors l état du SUT doit être équivalent à s s. OU reset h/answ s s préambule w/λ*(s s,w) w I*: et dans la FSM, w mène de s s à s. s x/y septembre 2011 Test de Systèmes Informatiques 30? exécution de la transition z/λ*(s, z) z est une des chaînes qui permettent de reconnaître s observation

Un des tests du préambule de s -x/y-> s? homing sequence h I* => answ O*: alors l état du SUT doit être équivalent à s s. Ou reset h/answ s s préambule w I*: dans la FSM, w mène de s s à s. w/λ*(s s,w)? z/λ*(s, z) z est une une des chaînes Qui permettent de de reconnaître s observation : on est dans l état requis septembre 2011 Test de Systèmes Informatiques 31

Exemple: la W method Théorème: toute telle FSM a un ensemble caractérisant W= {w 1,, w m } I +, qui permet de distinguer les états s s' w W tel que λ*(s,w) λ*(s',w) Séquences de test : p.z, avec p P, z Z P: pour toute transition s x:y-> s, il y a deux séquences de P, p et p.x, telles que p mène de l état initial à s Z = W i.e., couverture des transitions, avec observation des états d origine et de destination septembre 2011 Test de Systèmes Informatiques 32

L exemple de nouveau /: _ 1 2 3 4 /: _ *,φ: _ φ: _ /: / φ: * φ *: _ Ensemble caractérisant : {*φ} *: _ /: _ φ: φ *: * état *φ 1 _ 2 φ 3 *φ 4 **φ septembre 2011 Test de Systèmes Informatiques 33

Construction de P * 1 1 2 * 4 3 3 4 3 1 φ φ 1 / * φ 3 1 2 / septembre 2011 Test de Systèmes Informatiques 34 / Arbre qui couvre toutes les transitions la racine est l état initial les fils d un noeud sont les états atteignables à partir de ce noeud si un état est déjà dans l arbre il est terminal

Construction de P : algorithme On construit un arbre de test dont les nœuds sont étiquetés par les états, et les arcs par des données La racine de l'arbre est étiqueté par l'état initial (niveau 1 de l'arbre) Le niveau k+1 de l'arbre est obtenu en examinant les nœuds du niveau k de gauche à droite. Un nœud de niveau k étiqueté par l'état s est terminal si s apparaît déjà dans un nœud non terminal à un niveau j k. Sinon, si il existe une transition s x:y-> s', on attache à ce nœud un arc étiqueté par x, dont le nœud extremité est étiqueté par s' septembre 2011 Test de Systèmes Informatiques 35

Tableau des tests et résultats attendus *φ rien /*/*φ /*φ **φ rien /*φ*φ φ*φ état *φ 1 _ 2 φ 3 *φ 4 **φ φ*φ /*φ rien φ /***φ **φ /****φ ***φ * / φ 1 1 2 / //*φ φ /**φ*φ *φ*φ * φ 3 1 2 /φ*φ rien /**/*φ rien * φ / /**φ *φ 4 3 3 4 3 1 septembre 2011 Test de Systèmes Informatiques 36

Complétude de P.Z Soit A, B, deux FSM avec mêmes I et O ; Soit V I*; s A est un état de A, s B est un état de B; s A et s B sont V-équivalents ssi w V, λ*(s A,w) = λ*(s B,w) A et B sont V-équivalents : leurs états initiaux sont V-équivalents Théorème de Chow : soit A et B avec le même nb d états, et mêmes I et O A et B équivalents A et B P.Z équivalents septembre 2011 Test de Systèmes Informatiques 37

Analyse de cette stratégie de test On a fait mieux depuis : élimination des sous-séquences redondantes (préfixes) ; classes de FSM plus facilement observables ; nombre d états n. Le critère est la couverture des transitions : on vérifie qu'on part bien de l'état de départ et qu'on arrive bien à l'état d'arrivée. On fait des hypothèses fortes sur l'implémentation sous test : voir page suivante Dans la présentation de l'exemple, hypothèse d'uniformité sur les caractères de * et / : en fait φ est une classe d'équivalence au niveau de la spécification septembre 2011 Test de Systèmes Informatiques 38

Hypothèses sur l implémentation Elle se comporte comme une FSM, i.e. elle n'a pas de mémoire quelque soit p qui mène la FSM de l'état initial à l'état s i, la transition s i x:y-> s j, est exécutée de la même manière Elle se comporte comme une FSM déterministe à n états on sait se mettre dans l'état initial (procédure de reset correcte et pas trop coûteuse) septembre 2011 Test de Systèmes Informatiques 39

Test de Systèmes Informatiques Première partie : Introduction au sujet Deuxième partie : concepts et problèmes Troisième partie : approches formelles, 2 exemples : FSM, Spéc. algébriques septembre 2011 Test de Systèmes Informatiques 40

Test boîte noire basé sur des spécifications formelles relation de satisfaction : SUT sat SP Qu est-ce que cela veut dire qu un système satisfait une spécification? C est beaucoup plus difficile à définir qu il n y paraît et l équivalence n est certainement pas adéquate On dérive de sat les notions : test, expérience de test, et verdict (oracle): SUT passe T (où T est un Jeu de Test) septembre 2011 Test de Systèmes Informatiques 41

Hypothèses, exhaustivité Définition du Jeu de Test Exhaustif d'une spécification, et de l Hypothèse de Testabilité des systèmes : SUT testable => (SUT passe exhaust(sp) <=> SUT sat SP) Le jeu de test exhaustif sert ensuite de référence pour la sélection d un jeu de test fini septembre 2011 Test de Systèmes Informatiques 42

Sélection (test exhaustif souvent infini ou trop grand) Hypothèses de Sélection H, sur SUT, et construction de jeux de test finis T tels que : H valide pour SUT =>(SUT passe T <=> SUT sat SP) <H, T> est un contexte de test valide et non biaisé La spécification sert de point de départ pour le choix des hypothèses et la construction des tests septembre 2011 Test de Systèmes Informatiques 43

Exemple de Spécifications Spécifications algébriques des types de données, Ax Signature = <S, OP> : noms d ensembles de valeurs, et opérations ou prédicats sur ces ensembles Axiomes Ax : propriétés des opérations x + 0 = x x + s(y) = s(x+y) x + y = y + x septembre 2011 Test de Systèmes Informatiques 44

«Types are Algebras» Algèbres : des ensembles et des opérations sur ces ensembles pile vide empiler Les entiers Les piles dépiler sommet Attention, il n y a pas de notion de modification d état «empiler(p,n)» construit une nouvelle valeur du type Pile à partir de la valeur p et de n «dépiler(p)» aussi septembre 2011 Test de Systèmes Informatiques 45

Exemple : Stack spec STACK [ sort Elem] = sort Stack généricité ops empty : Stack push : Stack x Elem -> Stack pop : Stack ->?Stack top : Stack ->?Elem e : Elem ; S : Stack def top(empty) top(push(s, e)) = e def pop(empty) pop(push(s, e)) = S end opérations partielles prédicats de définition septembre 2011 Test de Systèmes Informatiques 46

Rappel Test «boîte noire», ou fonctionnel On se base uniquement sur les spécifications pour sélectionner des tests On se sert également de la spécification comme «oracle» (décision du succès ou de l échec d un test) Mais problèmes dus aux niveaux d abstraction et à l observabilité septembre 2011 Test de Systèmes Informatiques 47

Particularités du test basé sur des spécifications logiques On ne veut pas vérifier des couples <données, résultat> On veut vérifier que les opérations implémentées par le système satisfont les axiomes Exemple spec SPmin = NATURAL-ARITHMETIC then op min3 : Nat x Nat x Nat -> Nat X, Y, Z : Nat X Y X Z => min3 (X, Y, Z) = X Y X Y Z => min3 (X, Y, Z) = Y Z X Z Y => min3 (X, Y, Z) = Z end septembre 2011 Test de Systèmes Informatiques 48

Qu est-ce qu un test? Le SUT fournit des procédures ou des fonctions pour exécuter les opérations de SP (exemple : classe Java, paquetage Ada, structure ML ) op est implémentée par op SUT Etant donné un -terme clos t, on note t SUT le résultat de son calcul par SUT Soit ε une SP -équation test de ε : toute instanciation close t = t' de ε expérience de test de P contre t = t' : évaluations de t SUT et t SUT et comparaison des valeurs résultats NB : oracle test de l'égalité Ces définitions se généralisent facilement à d autres axiomes septembre 2011 Test de Systèmes Informatiques 49

Retour à l exemple Test basé sur : X Y X Z => min3 (X, Y, Z) = X t1 t2 t1 t3 => min3 (t1, t2, t3) = t1, où t1, t2, t3 sont des termes clos, de sorte Nat, quelconques Une expérience de test Exécution : évaluation de t1 SUT SUT t2 SUT, t1 SUT SUT t3 SUT, min3 SUT (t1 SUT, t2 SUT, t3 SUT ), t1 SUT Oracle :si le premier résultat est vrai, et le second aussi, alors le troisième et le quatrième doivent être identiques NB : Les termes qui ne satisfont pas les prémisses donnent des tests inintéressants On a ainsi tous les éléments pour construire un programme de test septembre 2011 Test de Systèmes Informatiques 50

Jeu de test exhaustif Soit une spécification SP = (, Ax), le jeu de test exhaustif de SP, noté Exhaust SP est l'ensemble de toutes les instances closes bien typées de tous les axiomes de SP: Exhaust SP = {Φσ Φ Ax, σ = {σ s : var(φ) s (T ) s s S} } NB1 : définition derivée de la notion classique de satisfaction d'un axiome par un -modèle NB2 : on n a pas forcément d oracle «fini» pour toutes les formes d axiomes (, ) ; certains tests sont inconclusifs et peuvent être supprimés NB3 : Exhaust SP est exhaustif par rapport à la spécification, pas toujours par rapport au programme septembre 2011 Test de Systèmes Informatiques 51

Hypothèse de testabilité Inévitable : quand on teste un système, on est obligé de faire des hypothèses sur son comportement et son environnement Ici SUT est -testable si : il définit un «- modèle M SUT finiment engendré par rapport à», c est-à-dire Les opérations sont déterministes Toutes les valeurs sont spécifiées (pas de «junks») Notation : H min septembre 2011 Test de Systèmes Informatiques 52

Test et correction On note SUT = Exhaust SP le fait que SUT passe tous les tests de Exhaust SP avec succès On a H min => (M SUT = Ax <=> SUT = Exhaust SP ) Autrement dit, sous l hypothèse de testabilité, le succès du test exhaustif garantit la correction de SUT par rapport à SP Mais comment sélectionner des sous-ensembles finis de Exhaust SP? septembre 2011 Test de Systèmes Informatiques 53

Sélection et Hypothèses On fait des hypothèses PLUS FORTES sur SUT Exemple : Hypothèse d'uniformité Φ(X) formule, SUT système, D sous-domaine ( t 0 D)( SUT = Φ(t 0 ) ( t D) (SUT = Φ(t))) Détermination des sous-domaines? guidée par la spécification, à suivre Autre exemple : Hypothèse de Régularité (( t T ) ( t k SUT = Φ(t) )) ( t T ) (SUT = Φ(t)) Détermination de t? cf. spécification septembre 2011 Test de Systèmes Informatiques 54

Le choix des hypothèses? <SUT testable, Exhaust SP > <Hyp. Faible, Gros Jeu detest > <Hyp. Forte, Petit JT> <SUT correct, Ø> septembre 2011 Test de Systèmes Informatiques 55

Une Méthode Point de départ : couverture des axiomes (un test par axiome) => hypothèses d uniformité fortes sur les sortes des variables ou sur le domaine de validité des prémisses Exemple : 3 cas de test pour SPmin X Y X Z => min3 (X, Y, Z) = X Y X Y Z => min3 (X, Y, Z) = Y Z X Z Y => min3 (X, Y, Z) = Z 3 sous-domaines d uniformité septembre 2011 Test de Systèmes Informatiques 56

Affaiblissement des hypothèses Affaiblissements successifs par utilisation des axiomes de la spécification L exemple, intuitivement : correspond à deux sous-cas, < ou = on le décompose dans les cas de test X Y X Z => min3 (X, Y, Z) = X devient X=Y X=Z => min3 (X, Y, Z) = X X=Y X<Z => min3 (X, Y, Z) = X X<Y X=Z => min3 (X, Y, Z) = X X<Y X=Z => min3 (X, Y, Z) = X Le domaine X Y X Z a été décomposé en 4 sous-domaines En tout on a 12 cas de test septembre 2011 Test de Systèmes Informatiques 57

Un exemple plus complexe spec LIST-NAT-WITH-SORT = NATURAL-ARITHMETIC then generated type List ::= empty cons(nat ; List) pred sorted : List ; x, y : Nat ; z : List sorted(empty) sorted (cons(x, empty)) sorted (cons(x, cons(y, z)) <=> x y sorted(cons(y, z)) end couverture des axiomes (exemple) sorted(empty) doit être vrai sorted (cons(23, empty)) doit être vrai sorted (cons(151, cons(55, )) et 151 255 sorted(cons(255, ) doivent donner le même résultat septembre 2011 Test de Systèmes Informatiques 58

Affaiblissement de l hypothèse d uniformité pour le 3e axiome On va utiliser la table de vérité de de true true <=> true on obtient : A B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) de true false <=> false on obtient : A B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) de false true <=> false on obtient : (A B) sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) de false false <=> false on obtient : (A B) sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) On a alors 4 cas de test pour le 3e axiome on peut tester encore plus septembre 2011 Test de Systèmes Informatiques 59

On décompose Les deux premiers cas deviennent 4 A B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) devient A=B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) A<B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) et A B sorted(cons(b, L)) => sorted(cons(a, cons (B, L)) devient A=B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) A<B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) On a 6 cas pour le 3e axiome ; on teste les cas «aux limites» On peut encore tester plus en «dépliant» sorted septembre 2011 Test de Systèmes Informatiques 60

Dépliage Dépliage: une technique classique pour transformer (et comprendre) les définitions recursives Remplacement de f(op(x)) par la définition de f, avec remplacement adéquat des variables fact(n) = def if n=0 then 1 else n*f(n-1) devient : fact(n) = def if n=0 then 1 else if (n-1)=0 then n*1 else n*(n-1)*f(n-2) etc i.e. fact(n) = def if n=0 then 1 else if n=1 then 1 else n*(n-1)*f(n-2) NB : on remplace la définition de la fonction fact par son graphe, i.e. son test exhaustif septembre 2011 Test de Systèmes Informatiques 61

Retour au premier des 6 cas de tests A=B sorted(cons(b, L)) => sorted(cons(a, cons(b, L)) Sachant que sorted (cons(x, cons(y, z)) <=> x y sorted(cons(y, z)) On déplie la première instance de sorted : B -> A L -> cons(b, L ) sorted(cons(b, L)) devient sorted(cons(a, cons(b, L ))) qui devient A B sorted(cons(b, L )) A=A A B sorted(cons(b, L )) => sorted(cons(a, cons(a, cons(b, L )))) On peut continuer ainsi, en décomposant et en dépliant sorted jusqu à le Jeu de Test Exhaustif Pas tout à fait : des variables demeurent septembre 2011 Test de Systèmes Informatiques 62

Quand et comment s arrêter En fonction du contexte (risque, coût, délais), on décide pour chaque spécification : Quels prédicats décomposer Quelles opération déplier et combien de fois (rarement plus d une fois) Une bonne stratégie standard : composer tous les sous-cas deux à deux NB : on peut avoir des compositions de sous-cas infaisables Implémentation dans le cas d axiomes positifs conditionnels : surréduction (unification + réécriture) septembre 2011 Test de Systèmes Informatiques 63

Le problème de l oracle décider de l'égalité de t SUT et t SUT Le cas simple : la sorte s de t et t' correspond à un type du langage de programmation (sorte observable) ou on teste un prédicat Hypothèse d oracle faible : l égalité sur les types du langage et les booléens sont implémentés correctement septembre 2011 Test de Systèmes Informatiques 64

Les autres cas Comment tester que pop(push(s, X)) = S? Solution : les contextes observables Exemples top(_), top(pop(_)), top(push(pop(_), e)) Pour tout contexte observable minimal C, on teste : C(pop(push(S, X))) = C(S) septembre 2011 Test de Systèmes Informatiques 65

Le jeu de test exhaustif observable OC [s] : ensemble des contextes observables (minimaux) sur s pour la signature S o sous-ensemble des sortes observables Les axiomes dans Ax sont positifs conditionnels et les équations dans les préconditions sont de sorte observable(*), Soit L t = u Exhaust SP, avec t et u de sorte s S o, on teste L C(t) = C(u) pour tout C OC [s] Si t et u de sorte s S o, on teste L t = u (*) sinon il y a risque de biais lorsqu'on sélectionne On sélectionne, septembre 2011 Test de Systèmes Informatiques 66

Tous les contextes sont nécessaires pour certaines fautes! proc empty_stack() ; stack.h := 0 ; stack.foo := 2 ; end empty_stack ; proc push(x: natural) ; stack.a[stack.h] := x ; stack.h := stack.h +1 ; stack.foo := stack.foo+1; end push ; proc pop() ; if stack.h > 0 then stack.h := stack.h - 1 ; stack.foo := 0 ; end if ; end pop ; proc top() ; if stack.foo = 1 then return stack.h ; --!!! elseif stack.h > 0 then return stack.a[stack.h] ; end if ; end top ; /* Exemple dû à Gilles Bernot septembre 2011 Test de Systèmes Informatiques 67

Souvenez-vous : Il faut faire aussi du test structurel! On trouve la faute en couvrant toutes les branches de top septembre 2011 Test de Systèmes Informatiques 68

Pour en savoir plus T.S. Chow. Testing software design modeled by finite-state machines. IEEE Transactions on Software Engineering, SE-4(3):178 187, 1978. G. Bernot, M.-C. Gaudel, B. Marre, Software Testing based on Formal Specifications : a theory and a tool, Software Engineering Journal, 6(6), Nov. 1991. M.-C. Gaudel, Testing can be formal too, LNCSn 915, Springer-Verlag, pp. 82-96, 1995. M.-C. Gaudel and P. Le Gall. Testing data types implementations from algebraic specifications. LNCS n 4949, Springer-Verlag, 2007. pp. 209-239. Marie-Claude Gaudel. Checking models, proving programs, and testing systems. LNCS n 6706, pp. 1-13. Springer-Verlag, 2011. See also http://www.lri.fr/~mcg/pubs/mcg.html septembre 2011 Test de Systèmes Informatiques 69