Outils d’analyse statique et de vérification pour les applications Java distribuées Christophe Massol Avec Eric Madelaine, Rabéa Boulifa PROJET OASIS, SOPHIA ANTIPOLIS Massol Christophe Stage DESS Telecom Septembre 2004 1 SOMMAIRE •Projet OASIS •Objectif du stage •Utilisation et adaptation d’outils existants •Analyses spécifiques à la vision distribué •Génération d’un graphe d’appel de méthode étendu •Conclusion 2 Projet OASIS Objets Actifs, Sémantique, Internet et Sécurité Chef de projet: Isabelle Attali Projet commun INRIA, I3S et UNSA Objectif : Proposer des méthodes et des outils pour l’analyse, la construction, la vérification et la maintenance d’applications réparties Java •Conception de méthodes Concevoir des méthodes pour la programmation distribuée •Librairie ProActive Propose des primitives simplifiant la programmation d’applications réparties Java (grilles de calcul, Internet, terminaux mobiles) •Plate-forme Vercors Environnement d’analyse et de vérification de programmes Java basé sur la librairie ProActive 3 Projet OASIS: Librairie ProActive •Primitives de haut niveau: Communication transparente entre objets distribués sur un réseau. •Le comportement de l’application ne dépend pas de la répartition des objets. •Objet actif : •Appel et réception d’appels distants •Gestion de son comportement •Queue de requêtes d’appels distants •Messages asynchrones basés sur les Futurs •Objet mobile Object Object Proxy Proxy Librairie ProActive Objet actif A Body JVM A JVM B Communication ProActive Body Objet actif B 4 Projet OASIS: Plate-forme Vercors (1) VERification de modèles pour COmposants Répartis communicants, surs et Sécurisés Analyse de la structure de l’application Code utilisateur Structure de l’application Langage ProActive Graphe XMCG Calcul des comportements Modèle compositionnel paramétré Outil d’instanciation Modèle compositionnel fini Outil de verification Environnement d’analyse et de vérification de programmes Java 5 Projet OASIS: Plate-forme Vercors (2) VERification de modèles pour COmposants Répartis communicants, surs et Sécurisés Analyse de la structure de l’application Code utilisateur Structure de l’application Langage ProActive Graphe XMCG Calcul des comportements Modèle compositionnel paramétré Outil d’instanciation Modèle compositionnel fini Outil de verification Environnement d’analyse et de vérification de programmes Java 6 Objectif du stage •Création du cœur d’un prototype d’analyse de code ProActive: •Parsing du code Java ProActive en code intermédiaire •Etablissement de la structure du réseau : •Objets distribués présents dans le code •liens entre objets distribués •Reconnaissance des traitements de la librairie ProActive dans le code utilisateur : •Appels de méthodes distantes •Traitement des requêtes •Utilisation d’un Futur •Génération d’un graphe d’appel de méthode étendu représentant toutes ces informations •Interfaçage avec les outils sémantiques de l’équipe 7 Utilisation et adaptation d’outils existants •BANDERA •Parsing d’un code source -> Jimple •Module de slicing Bandera Source Java Parsing •Module d’abstraction de code •Interface graphique •SOOT •Plate-forme d’analyse et d’optimisation de code •Code intermédiaire Jimple •SPARK •Analyseur du pointeur basé sur Jimple •REQS •Analyse de classe •Production d’un graphe d’appel de méthode Slicing Représentation Jimple Abstraction Représentation interne Jimple Public void m1(){ O o; Pp; p = new P() ; p.m() ; o = newActive(); o.m() ; } Spark 8 Analyse du code utilisateur Structure du réseau: •Reconnaissance des objets actifs: Analyse du code ProActive: •Création d’un objet actif •Type •Sélection des requêtes •Paramètres de création •Point d’appel distant •Liens de communications •Utilisation d ’un Futur 9 Génération du graphe XMCG (1) •Graphe d’appel de méthode représentant les différentes activités d’un programme •Graphe nœuds/transitions •Call (m, c) •Serve (m, mode ) •Use (futur) •Pp (label) •Ent (m, args) •Ret (val) 10 Génération du graphe XMCG (2) Transitions intra-procédurales: •code séquentiel Transitions d’appel de méthode: •Local (o, m, args, var) •Remote (o, m, args, futur) •Unknown (o, m , args, var, futur) •Static (m, args, var) 11 Conclusion Travaux réalisés: •Adaptation des logiciels existants (Bandera, Spark) à notre vision distribuée •Analyse de la structure du réseau distribué •Reconnaissance des modules d’appel au langage distribué •Implémentation du graphe XMCG Difficultés: •Simulation de la librairie ProActive •Collecte de l’information distribuée 12 Adaptation des outils à ProActive Modification du module de génération de code Jimple (Bandera) • Reconnaissance des primitives de la librairie ProActive Traitement des primitives de création d’un objet actif (newActive, turnActive) par l’outil Spark • Nécessité de simuler les actions caractéristiques générées : Appel au constructeur Contrôle du comportement de l ’objet activeObject = new A(...); A activeObject = (A) newActive(…); génère activeObject.runActivity() ; Outils d’analyse statique et de vérification pour les applications Java distribuées 13 Massol Christophe Collecte des objets actifs •Reconnaissance d’un nœud de création d’objet actif : Parcours de la représentation interne Jimple Recherche d’un nœud d’affectation de pointeur Jimple Identification de la nature de la méthode appelée (newActive, turnActive) •Collecte des informations de création d’objet actifs Paramètres du constructeur appelé par les primitives ProActive Type de l’objet actif Adressage de l’objet dans la représentation interne Soot Outils d’analyse statique et de vérification pour les applications Java distribuées 14 Massol Christophe Collecte des liens de communication Traitement des appels, différenciation entre appel local et appel distant =>Identification des appels distants afin d’analyser les communications entre objets actifs •Parcours de l’arbre Jimple •Recherche d’une instruction d’appel de méthode •Appel à l’étude Spark (recherche de la nature du pointeur appelé) •Retour d ’un ensemble de points de création lié au pointeur •Identification d’une création d’objet actif par adressage Difficultés: Collection d’objets de même type Outils d’analyse statique et de vérification pour les applications Java distribuées 15 Massol Christophe