Java Path Finder Pourquoi sy intresser 29102008 1
- Slides: 37
Java Path Finder Pourquoi s’y intéresser ? 29/10/2008 1
Tendance pour les outils de test • Pour cet exposé, test de programmes • Annonces de milliers de Lo. C testées automatiquement ? ? • 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/2008 2
Histoire • Développé à la NASA depuis 1999 • Logiciel libre (sourceforge) • Auteurs : – Villem Visser – Klaus Havelund – Corina Pasareanu – etc, etc 29/10/2008 3
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/2008 4
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/2008 5
Model-checking (rappel) valide Modèle Model Checker , Formule de logique temporelle contreexemple • 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 « P 1 until P 2 » , etc 29/10/2008 6
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/2008 7
Test generation using modelchecking • Exploits the fact that model-checkers may yield counterexamples – 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 counterexample, 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/2008 8
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/2008 9
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/2008 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/2008 11
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 < exp. Booléenne> • 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/2008 12
Le noyau de JPF • Two major concepts: Search and JVMJPF • Search is the JVM driver and Property evaluator • JVM is the state generator JAVA Bytecode LTL or deadlock or assert JPF: search + Java Virtual Machine Property holds Error display 29/10/2008 13
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 • • • 29/10/2008 • public static int random(int max); public static boolean random. Bool(); public static void begin. Atomic(); public static void end. Atomic(); ignore. If(cond); … 14
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/2008 15
JPF et slicing Static Analysis JAVA Bytecode LTL or deadlock or assert Sliced JAVA JPF: search + JVM Property holds Error display 29/10/2008 16
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/2008 17
JPF et “Partial Order Reduction” Static Analysis JAVA Bytecode JPF: search + JVM 29/10/2008 LTL or deadlock or assert ? Property holds Error display POR Info 18
JPF et Abstraction par prédicats Abstract Java JAVA Bytecode LTL or deadlock or assert JPF: search + JVM 29/10/2008 Property holds Error display 19
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. add. Boolean(“x. GTy”, A. x > B. y) – Pb avec l’abstraction : sur-approximation des comportements => raffinement par essais d’exécution des contre-exemples 29/10/2008 20
JPF et Analyses spécialisées JAVA Analyses spécialisées Fenêtre d’ordonnancement Diagnostics: deadlocks, race 29/10/2008 Bytecode LTL or deadlock or assert JPF: search + JVM Property holds Error display 21
Le bazar global 29/10/2008 22
29/10/2008 23
Exemples • Toujours les mêmes • NASA’s remote agent spacecraft control system, 1998, LISP, SPIN, deadlock en vol en 1999 • K 9 Rover, 8 KLOC, 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 100000 lignes serait « naïf » 29/10/2008 24
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/2008 25
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/2008 26
Valeurs symboliques Swap int x, y; x = X, y = Y 1 : if (x > y) { X >? Y 1 [ X > Y ] x = X + Y 1 2: x = x + y; [ X <= Y ] END 3: y = x – y; 4: x = x – y; 5: if (x – y > 0) 2 [ X > Y ] y = X + Y – Y = X 3 [ X > Y ] x = X + Y – X = Y 4 [ X > Y ] Y - X >? 0 5 [ X > Y, Y – X <= 0 ] END 29/10/2008 Prédicats de chemins 6: assert(false); } 5 [ X > Y, Y – X > 0 ] END 27
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/2008 28
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/2008 29
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/2008 30
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/2008 } 31
• 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/2008 32
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/2008 33
rep. Ok(): conditions (1)-(5) (3) All paths from a node to its leaves contain the same number of black nodes. (1) The root is BLACK (2) Red nodes can only have black children (4) Acyclic (5) Consistent Parents 29/10/2008 34
Fragment de Rep. Ok boolean rep. Ok(Entry e) { // root has no parent, root is black, … // Red. Has. Only. Black. Children work. List = new Linked. List(); work. List. add(e); while (!work. List. is. Empty()) { Entry current=(Entry)work. List. remove. First(); 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) work. List. add(cl); if (cr != null) work. List. add(cr); } // equal number of black nodes on left and right sub-tree… return true; 29/10/2008 } 35
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 Rep. Ok + procédure de décision • Ils engendrent des tests “white-box” pour couvrir les branches des méthodes 29/10/2008 36
“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. YICES 1 [4] – supports types and operations similar to those of CVC -Lite. STP 2 [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, Real. Paver [10] that supports linear and non-linear constraints over floating point 29/10/2008 37 numbers. »
- Intresser
- Java path finder
- Java symbolic execution
- Spoorboekje
- 29102008 color
- Fme shortest path finder
- Pourquoi gilbert montagné se balance-t-il lorsqu'il chante
- Pourquoi les plongeurs plongent en arrière
- Tu me demandes pourquoi je tue alexandre
- Pourquoi le petit lu à 52 dents ?
- What is missing
- Les 5 pourquoi qualité
- Analyse 5 pourquoi
- Vive le portugal en portugais
- Chant quand le ciel est bleu mon garçon
- Apostasie définition biblique
- Pourquoi y a t il quelque chose plutôt que rien heidegger
- Pourquoi le parnasse s'oppose au romantisme
- 5 pourquoi
- Pourquoi l'alliance se porte à l'annulaire
- Pourquoi s'échauffer en eps
- Exemple diaporama oral dnb parcours avenir
- 1 pierre 3:3-4
- Pourquoi cette question
- Pourquoi le poulet a-t-il traversé la route
- Conduction corps humain
- Pourquoi choisir la chimie
- Méthode des 5 pourquoi
- Les paires torsadées
- Ccresus
- Frères bogdanov avant après
- Pourquoi le pere noel rit tout le temps
- Qimata
- Javatpoint ejb
- Pengertian awt dan swing pada java
- How to import java.util.scanner
- Import java.io.* in java
- Import java.lang.*