Title: Outils%20d
1Outils danalyse statique et de vérification
pour les applications Java distribuées
Christophe MassolAvecEric Madelaine, Rabéa
BoulifaPROJET OASIS, SOPHIA ANTIPOLIS
Stage DESS Telecom Septembre 2004
2SOMMAIRE
- Projet OASIS
- Objectif du stage
- Utilisation et adaptation doutils existants
- Analyses spécifiques à la vision distribué
- Génération dun graphe dappel de méthode étendu
- Conclusion
3Projet 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 lanalyse, la construction, la vérification
et la maintenance dapplications réparties Java - Conception de méthodes
- Concevoir des méthodes pour la programmation
distribuée - Librairie ProActive
- Propose des primitives simplifiant la
programmation dapplications réparties Java
(grilles de calcul, Internet, terminaux mobiles) - Plate-forme Vercors
- Environnement danalyse et de vérification de
programmes Java basé sur la librairie ProActive
4Projet OASIS Librairie ProActive
- Primitives de haut niveau Communication
transparente entre objets distribués sur un
réseau. - Le comportement de lapplication ne dépend pas de
la répartition des objets. - Objet actif
- Appel et réception dappels distants
- Gestion de son comportement
- Queue de requêtes dappels distants
- Messages asynchrones basés sur les Futurs
- Objet mobile
Librairie ProActive
JVM A
JVM B
Communication ProActive
5Projet OASIS Plate-forme Vercors (1)
VERification de modèles pour COmposants Répartis
communicants, surs et Sécurisés
Environnement danalyse et de vérification de
programmes Java
6Projet OASIS Plate-forme Vercors (2)
VERification de modèles pour COmposants Répartis
communicants, surs et Sécurisés
Environnement danalyse et de vérification de
programmes Java
7Objectif du stage
- Création du cœur dun prototype danalyse 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 dun Futur
- Génération dun graphe dappel de méthode étendu
représentant toutes ces informations - Interfaçage avec les outils sémantiques de
léquipe
8Utilisation et adaptation doutils existants
Bandera
- BANDERA
- Parsing dun code source -gt Jimple
- Module de slicing
- Module dabstraction de code
- Interface graphique
- SOOT
- Plate-forme danalyse et doptimisation de code
- Code intermédiaire Jimple
- SPARK
- Analyseur du pointeur basé sur Jimple
- REQS
- Analyse de classe
- Production dun graphe dappel de méthode
Représentation Jimple
Public void m1() O o P p p new P()
p.m() o newActive() o.m()
Spark
9Analyse du code utilisateur
- Structure du réseau
- Reconnaissance des objets actifs
- Type
- Paramètres de création
- Liens de communications
- Analyse du code ProActive
- Création dun objet actif
- Sélection des requêtes
- Point dappel distant
- Utilisation d un Futur
10Génération du graphe XMCG (1)
- Graphe dappel de méthode représentant les
différentes activités dun programme - Graphe nœuds/transitions
- Call (m, c)
- Serve (m, mode )
- Use (futur)
- Pp (label)
- Ent (m, args)
- Ret (val)
11Génération du graphe XMCG (2)
- Transitions intra-procédurales
- code séquentiel
- Transitions dappel de méthode
- Local (o, m, args, var)
- Remote (o, m, args, futur)
- Unknown (o, m , args, var, futur)
- Static (m, args, var)
12Conclusion
- 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 dappel au langage
distribué - Implémentation du graphe XMCG
- Difficultés
- Simulation de la librairie ProActive
- Collecte de linformation distribuée
13Adaptation 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 dun objet
actif (newActive, turnActive) par loutil Spark - Nécessité de simuler les actions caractéristiques
générées - Appel au constructeur
- Contrôle du comportement de l objet
génère
- Outils danalyse statique et de vérification pour
les applications Java distribuées - Massol Christophe
14Collecte des objets actifs
- Reconnaissance dun nœud de création dobjet
actif - Parcours de la représentation interne Jimple
- Recherche dun nœud daffectation de pointeur
Jimple - Identification de la nature de la méthode appelée
(newActive, turnActive) - Collecte des informations de création dobjet
actifs - Paramètres du constructeur appelé par les
primitives ProActive - Type de lobjet actif
- Adressage de lobjet dans la représentation
interne Soot
- Outils danalyse statique et de vérification pour
les applications Java distribuées - Massol Christophe
15Collecte des liens de communication
- Traitement des appels, différenciation entre
appel local et appel distant - gtIdentification des appels distants afin
danalyser les communications entre objets actifs - Parcours de larbre Jimple
- Recherche dune instruction dappel 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 dune création dobjet actif par
adressage - Difficultés
- Collection dobjets de même type
- Outils danalyse statique et de vérification pour
les applications Java distribuées - Massol Christophe