2004-1609-report-CMassol - Sophia Antipolis

publicité
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
Téléchargement