Vous êtes sur la page 1sur 15

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 1


Septembre 2004
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 Proxy Proxy Object

Librairie
ProActive
Objet Body JVM A JVM B Body Objet
actif A actif B
Communication ProActive

4
Projet OASIS: Plate-forme Vercors (1)
VERification de modèles pour COmposants Répartis communicants,
surs et Sécurisés

Code utilisateur Analyse de la structure de


l’application

Structure de Langage
l’application ProActive

Graphe
XMCG

Calcul des Modèle Outil Modèle


comportements compositionnel d’instanciation compositionnel
paramétré 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

Code utilisateur Analyse de la structure de


l’application

Structure de Langage
l’application ProActive

Graphe
XMCG

Calcul des Modèle Outil Modèle


comportements compositionnel d’instanciation compositionnel
paramétré 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 Source
Bandera

Java
•Parsing d’un code source -> Jimple
•Module de slicing Parsing

•Module d’abstraction de code Slicing


Représentation
•Interface graphique Jimple
Abstraction

•SOOT Représentation interne


Jimple
•Plate-forme d’analyse et d’optimisation de code
•Code intermédiaire Jimple
Public void m1(){
•SPARK O o;
•Analyseur du pointeur basé sur Jimple Pp;
p = new P() ;
•REQS p.m() ;
•Analyse de classe o = newActive();
o.m() ;
•Production d’un graphe d’appel de méthode } Spark

8
Analyse du code utilisateur
Structure du réseau: Analyse du code ProActive:
•Reconnaissance des objets actifs: •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(…); activeObject.runActivity()
génère ;

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