29/10/20081 Java Path Finder Pourquoi s’y intéresser ?

Slides:



Advertisements
Présentations similaires
CoRoT S.C. - 24/09/07 - S.Chaintreuil Production N0/N1/N2 Status of current software Proposed evolutions foreplanned production.
Advertisements

Les expressions de quantité
Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.
(Nom du fichier) - D1 - 01/03/2000 FTR&D/VERIMAG TAXYS : a tool for the Development and Verification of RT Systems a joint project between France Telecom.
Le Passé Composé J'ai fini Elle a dansé Il a voyagé
By: Reshiga and Pavitra
Logique approchée Michel de Rougemont Université Paris II VERA: CORRECT:
Sémantique des Systèmes Distribués et Embarqués -- UNSA 2009
Séparation des préoccupations (c) 2004, Audrey Occello, LF8 MOC Seconde partie Un exemple de programmation orientée Aspect avec AspectJ.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Quand, lorsque, aussitôt que, dès que, et après que
‘Les Verbes au Présent’
Les Verbes au Présent (The Present Tense) What is the Present Tense ? In English and in French the present tense is used to talk about things which are.
OTB Analog module: Input configuration with TSX PREMIUM (TSXCPP110)
interaction in the .LRN platform
Le livre de français – pg 107 David: Jen ai marre! Jai une heure de chimie le lundi, deux heures de physique le mardi et deux heures de biologie le samedi.
Conjugating in French step by step
Liste générique dans Linux 2.6 Source : Understanding the Linux kernel Chap3 processes p.87.
Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
Procédure dappel Appeal process 1(c) RISS / IJHS, 2012.
Connexion base de données
Reading an analog clock
L ES ADJECTIFS SPÉCIAUX - BAGS Français 1 In French, most adjectives follow the noun that they modify. Par exemple – Elle est une élève intelligente.
À pied de Miami à Ushuaia avec Kitty Déroulement manuel et automatique.
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Le Temps présent Les verbes reguliers By Mme Tatala.
Les pluriels Sometimes you cant just take one!. Les articles… There are « DEUX » articles that can show that something is plural. Les = the Les ciseaux,
How to solve biological problems with math Mars 2012.
La programmation objet Illustration de la POO en Pascal
Indefinite articles, plural of nouns
Le système scolaire en France
Proposition for a new policy for MAPMT Gain Control Sylvie Dagoret-Campagne LAL EUSO-BALLOON 8th Progress meeting1.
SEG 3601 Élaboration de cas d'utilisation avec UCEd
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Laboratoire de Bioinformatique des Génomes et des Réseaux Université Libre de Bruxelles, Belgique Introduction Statistics.
L’ensemble microcanonique
Qu’est-ce que c’est? La Formation… Verbes en –er
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Contraintes et Triggers Chapitre 5,
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
QU’EST-CE QUE TU FAIS?.
Les lycées. Sixth form is compulsory in France so it is really important to choose the right one. Look carefully at the information about colleges and.
Chapitre 9 Les sous-programmes.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
Elections des représentants du personnel aux C.A.P. – Janvier 2008
BlueJ_VI 1 Java, les objets : tout de suite ! Test, assertions, « vérification statique » Notes de cours associées au chapitre 6 Avec des assertions, utilisation.
Integer Caratheodory theorems. Linear Caratheodory Given A={a 1,…, a n } IR d. For all v cone(A) there exists B A, |B| d st v cone(B) Proof : Si A nest.
Spécification d’un modèle de protocole : Promela
French Past Tenses L’imparfait vs. Le Passé composé.
Différencier: NOMBRE PREMIER vs. NOMBRE COMPOSÉ
Branche Développement Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
27/02/2006L3 MIAGE - GLO ADA1 Les Paquetages Permettent d’encapsuler un groupe d’entités logiquement reliées. Comme toute unité de programme, le paquetage.
The Conditional Duh duh DUUUUUHHHHH!. What is the conditional? The French conditional is very similar to the English conditional mood. It describes events.
Raffinement de modèles JML Julien Groslambert LIFC Besançon Réunion GECCOO - 25 Octobre 2005 FRE 2661.
Formatting of Game © Candace R. Black, Al rights reserved. Révisions!
Unité 4 La grammaire d’Unité 4. Avoir - to have j‘ai nous avons tu as vous avez il a elles ont o Quel âge as-tu? – How old are you? o avoir… ans – to.
12 septembre
Formation utilisateurs CMS. 16/01/20082 Plan 1)Présentation 2)Espace contributeur 3)Plan du site 4)Créer des pages 5)Edition en ligne 6)Les ressources.
Le passé composé The perfect tense Eg: J’ai mangé une pizza I have eaten/ate a pizza.
(ref : Bray section pages 259 à 266)
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
IP Multicast Text available on
l y a which we have already learned means “there is/are l y a which we have already learned means “there is/are.” When we put a measure of time.
Les arbres généraux.
Transcription de la présentation:

29/10/20081 Java Path Finder Pourquoi s’y intéresser ?

29/10/20082 Tendance pour les outils de test Pour cet exposé, test de programmes Annonces de milliers de LoC testées automatique- ment ???? Analyse statique, quoi de neuf ? Rôle du Model-Checking pour le test ? “Program Model-checking”, c’est quoi ? “Run-time Verification”, c’est quoi ? Alors regardons Java Path Finder … –NB: il y aurait aussi Verisoft, SLAM, BLAST, …

29/10/20083 Histoire Développé à la NASA depuis 1999 Logiciel libre (sourceforge) Auteurs : –Villem Visser –Klaus Havelund –Corina Pasareanu –etc, etc

29/10/20084 C’est quoi Java Path Finder? “JPF is a swiss army knife for all sort of runtime based verification” Très spécialisé Java, mais tout Java, y compris les « threads » Environnement pour « traiter » des programmes Java annotés Model-checking Simulation, et récemment exécution symbolique

29/10/20085 Plan de l’exposé Quelques mots sur le model-checking Test et model-checking Model-checking de programmes, à la JPF Test de programmes avec Java Path Finder

29/10/20086 Model-checking (rappel) Le modèle est fini Les états sont étiquetés par des propriétés Les formules de logique temporelle sont, par exemple, des invariants, des « P1 until P2 », etc Modèle , Formule de logique temporelle Model Checker valide contre- exemple

29/10/20087 Model-checking, principes Exploration exhaustive du modèle Différentes représentations du modèle et de la formule –JPF : états explicites Exploration : DFS, BFS, etc –Arrêt d è s que l ’ on rencontre un é tat d é j à visit é –On sort la trace courante si on rencontre un é tat qui ne satisfait pas la propri é t é => contre-exemple

29/10/20088 Test generation using model- checking Exploits the fact that model-checkers may yield counter- examples –Given , a required property of the SUT –Given a model M of the SUT –Model-check M for ¬  The model-checker will reject ¬  and produce a counter- example, i.e. a trace that satisfies , i.e. a test sequence for  –Popular, most model-checkers have been experienced for test generation –Nice, but…

29/10/20089 New issues, …and good old ones  must be a formula in some temporal logic (not always convenient) An example: –  : AG(¬request  (request U grant)) –¬  : EF(request  ¬(request U grant)) –One counter-example is not enough (because of the universal quantification) => exhaustivity and coverage issues The finite model is an over-approximation of the system –Feasability, constraint solvers…

29/10/ Plan de l’exposé Quelques mots sur le model-checking Test et model-checking Model-checking de programmes, à la JPF Test de programmes avec Java Path Finder

29/10/ Model-checking de programmes Le programme est le modèle Infinité d’états États très complexes Problèmes de passage à l’échelle… –Représentation astucieuse des états et de leurs évolution –Exploitation de la symétrie des états –Slicing : on identifie la partie du programme qui influence la formule, et on ignore le reste –« Partial Order Reduction » –Abstraction

29/10/ Que vérifie JPF? Plusieurs modes et options //isme : détection de « race conditions » (pb avec des objets partagés) et de « deadlocks » Détection des exceptions non traitées Mauvais usage de la mémoire Assertions dans le code –assert Formules LTL : fichiers.ltl, JPF utilise Bandera, et ils disent : –Note: Currently it is possible that a trace obtained while checking an LTL formula could not be properly executed during path simulation.

29/10/ Le noyau de JPF JAVA Bytecode JPF: search + Java Virtual Machine LTL or deadlock or assert Property holds Error display Two major concepts: Search and JVM JPF Search is the JVM driver and Property evaluator JVM is the state generator

29/10/ La Classe Verify JPF arrive avec une bibliothèque de classes impressionnante, qui est extensible La classe Verify : –gov.nasa.jpf.jvm.Verify –Sert à annoter le programme –Sert à « fermer » le programme / environnement pendant la vérification : on modélise l’environnement –Quelques méthodes public static int random(int max); public static boolean randomBool(); public static void beginAtomic(); public static void endAtomic(); ignoreIf(cond); …

29/10/ Représentation des états Trois composants: –Threads, variables statiques (classes), variables dynamiques (objets) Pour chaque thread, pile d’appels de méthodes Verrous et champs de chaque classe ou objet Compression à la SPIN: tout se passe par indices (hachage), un max de valeurs sont partagées, les mises à jour ne changent que les indices des valeurs modifiées. Comparaison d’états efficace Ils annoncent des millions d’états dans 512 Mb

29/10/ JPF et slicing JAVA Bytecode JPF: search + JVM LTL or deadlock or assert Property holds Error display Static Analysis Sliced JAVA

29/10/ Techniques appliquées au model-checking Slicing (coupage en tranche) –Critère de slicing (souvent des points du programme) –Programme « slicé » : parties du programme qui peuvent affecter ou être affectées par le critère –Cas du model-checking : le critère est souvent lié à une propriété => tous les points du programmes affectant une variable de la propriété. Partial Order Reduction : détermination des instructions indépendantes de thread à thread => un seul entrelacement est considéré. Analyse statique + dynamique

29/10/ JPF et “Partial Order Reduction” JAVA Bytecode JPF: search + JVM LTL or deadlock or assert Property holds Error display Static Analysis POR Info ?

29/10/ JPF et Abstraction JAVA Bytecode JPF: search + JVM LTL or deadlock or assert Property holds Error display Abstract Java Abstraction par prédicats

29/10/ Techniques du Model-checking Réduction par symétrie –Équivalence entre états (forme canonique) : ordre sur les noms de classes et pour les objets, unique identifiant des « NEW »+ n° d’occurrence –Forme canonique du tas Abstraction: programmes abstraits obtenus par annotations de l’utilisateurs –Classe Abstract: spécification de prédicats Abstract.addBoolean(“xGTy”,A.x > B.y) –Pb avec l’abstraction : sur-approximation des comportements => raffinement par essais d’exécution des contre-exemples

29/10/ JPF et Analyses spécialisées JAVA Bytecode JPF: search + JVM LTL or deadlock or assert Property holds Error display Fenêtre d’ordon- nancement Analyses spécialisées Diagnostics: deadlocks, race

29/10/ Le bazar global

29/10/200823

29/10/ Exemples Toujours les mêmes NASA’s remote agent spacecraft control system, 1998, LISP, SPIN, deadlock en vol en 1999 K9 Rover, 8KLOC, C++/JAVA DEOS avionics operating system, slice de 1000 lignes de C++ traduit en 1443 lignes de Java Ils disent analyser “routinely” des programmes de 1000 à 5000 lignes Ils disent qu’essayer avec lignes serait « na ï f »

29/10/ Plan de l’exposé Quelques mots sur le model-checking Test et model-checking Model-checking de programmes, à la JPF Test de programmes avec Java Path Finder

29/10/ Evaluation symbolique C’est une extension : JPF-SE Liée à l’abstraction Vieille idée : King 1976! Mais généralisation aux structures dynamiques, tableaux, //isme. Le model-checker produit et explore un arbre d’exécution symbolique –Pb des boucles…=> DFS, mais profondeur itérative, ou BFS

29/10/ Swap x = X, y = Y X >? Y [ X > Y ] y = X + Y – Y = X [ X > Y ] x = X + Y – X = Y [ X > Y ] Y - X >? 0 [ X <= Y ] END [ X > Y ] x = X + Y [ X > Y, Y – X <= 0 ] END [ X > Y, Y – X > 0 ] END int x, y; 1 : if (x > y) { 2 : x = x + y; 3 : y = x – y; 4 : x = x – y; 5 : if (x – y > 0) 6 : assert(false); } 11 Prédicats de chemins Valeurs symboliques

29/10/ Exécution symbolique Valeurs d’entrée => Valeurs symboliques Valeurs des variables du programme : expressions symboliques Etat : –Valeurs symboliques des variables –Prédicat de chemin –Prochaine(s) instruction(s)

29/10/ Exécution symbolique généralisée Initialisation paresseuse : les champs sont initialisés la première fois qu’ils sont accédés Cas des références : choix non déterministe entre null, un nouvel objet (non initialisé), un objet déjà existant Cas des valeurs primitives : nouvelle valeur symbolique Conditionnelle : choix non déterministe de la condition ou de sa négation qui est alors ajoutée au PC courant => procedure de décision => si insatisfiabilité => retour arrière

29/10/ Cela paraît tout simple Il y a une bibliothèque de types symboliques –Par exemple : Expression est la classe des entiers symboliques, avec des méthodes symboliques add, gt,… Les accès et affectations aux champs sont remplacés par des méthodes get et set –Les méthodes get implémentent de l’initialisation paresseuse => Instrumentation massive Exemple class Node { int elem; Node next;} void foo() {… if(elem > t.elem) next = t.next; } }

29/10/ Instrumentation (automatique?) Class Node{ Expression elem; Node next; boolean _next_is_init = false; boolean _elem_is_init = false; static Vector v = new Vector(); static {v.add(null);} Node _new_Node() {…} Node _get_next() {…} void foo() {… if (_get_elem()._GT(t._get_elem())) _set_next(t._get_next())); } }

29/10/ Il y a deux articles : ISSTA’04 et ISSTA’06 –L’un parle de red-black trees, l’autre de containers… On engendre des séquences d’appels de méthodes par exploration exhaustive… de quoi?

29/10/ Génération de tests Exemple : les arbres équilibrés rouge-noir (cf. l’article de Korat) Ils font du black-box (basé sur des préconditions de méthodes) et du white-box (couverture des branches) Le model-checker explore exhaustivement soit les enchaînements de méthodes, soit l’arbre d’exécution symbolique

29/10/ (1) The root is BLACK (2) Red nodes can only have black children (3) All paths from a node to its leaves contain the same number of black nodes. (4) Acyclic (5) Consistent Parents repOk(): conditions (1)-(5)

29/10/ Fragment de RepOk boolean repOk(Entry e) { // root has no parent, root is black,… // RedHasOnlyBlackChildren workList = new LinkedList(); workList.add(e); while (!workList.isEmpty()) { Entry current=(Entry)workList.removeFirst(); Entry cl = current.left; Entry cr = current.right; if (current.color == RED) { if(cl != null && cl.color == RED) return false; if(cr != null && cr.color == RED) return false; } if (cl != null) workList.add(cl); if (cr != null) workList.add(cr); } // equal number of black nodes on left and right sub-tree… return true; }

29/10/ Ce qu’ils font avec çà (ISSTA’04) Ils exécutent toutes les séquences de méthodes put et remove sur un ensemble d’au plus N éléments Ils engendrent tous les arbres non-isomorphes jusqu’à une certaine (petite) taille et ils les utilisent pour tester les méthodes –En fait, c’est RepOk + procédure de décision Ils engendrent des tests “white-box” pour couvrir les branches des méthodes

29/10/ “Decision procedures” [TACAS 2007] « JPF–SE uses the following decision procedures; they vary in the types of constraints they can handle and their efficiency. Omega library [9] – supports linear integer constraints. CVC-Lite [3] – supports integer, rational, bit vectors, and linear constraints. YICES1 [4] – supports types and operations similar to those of CVC-Lite. STP2 [2] – supports operations over bit vectors. In the JPF–SE interface, all integers are treated as bit vectors of size 32. Recently, we have also added a constraint solver, RealPaver [10] that supports linear and non-linear constraints over floating point numbers. »