Séminaire GÉLO, Montréal, le 3 avril 2002 SPOOL Spreading Desirable Properties into the Design of...
-
Upload
aglae-giraud -
Category
Documents
-
view
102 -
download
0
Transcript of Séminaire GÉLO, Montréal, le 3 avril 2002 SPOOL Spreading Desirable Properties into the Design of...
Séminaire GÉLO, Montréal, le 3 avril 2002
SPOOLSpreading Desirable Properties
into the Design of Object-Oriented, Large-Scale
Software Systems
La passerelle DISCOVER-SPOOL :alimentation d'un dépôtde code source pourl'analyse détaillée desystèmes de tailleindustrielle
Jean-François Bédard
Département d’informatique etde recherche opérationnelleUniversité de Montréal
Laboratoire de génie logiciel
Séminaire GÉLO, Montréal, le 3 avril 2002
Résumé de la présentation
• Objectifs de la recherche
• Environnement SPOOL
• Rappels, état de l’art
• Description du problème
• Génération des fichiers XMI
• Dépôt SPOOL évolué
• Expérimentations, travaux futurs
Séminaire GÉLO, Montréal, le 3 avril 2002
Objectifs de la recherche
• Offrir à l’environnement de rétro-
ingénierie SPOOL une passerelle
évoluée
• Étendre le métamodèle UML pour
modéliser les corps des méthodes
• Valider le profil RCR par implantation
Séminaire GÉLO, Montréal, le 3 avril 2002
Environnement SPOOL
Capture du code source(C, C++, Java)
Parseurs DISCOVER
Scripts d’exportation Tcl/Access
Base de donnéesorientée objet
POET
XMI
Outils de visualisationet d’analyse
Analyse des dépendances
Recherche et exploration
Inspection conceptuelle
Séminaire GÉLO, Montréal, le 3 avril 2002
Rappels
• lex et yacc
• Arbres syntaxiques abstraits (AST)
• Graphes sémantiques abstraits (ASG)
• UML et XMI
• Profil RCR
Séminaire GÉLO, Montréal, le 3 avril 2002
lex et yacc
• Utilitaires UNIX pour la construction de
compilateurs
• lex effectue l’analyse lexicale
(division des données d’entrée en jetons)
• yacc se charge du parsage
(découverte des relations entre les jetons)
• Le parseur interagit étroitement avec le
lexeur
Séminaire GÉLO, Montréal, le 3 avril 2002
Arbres syntaxiques abstraits (AST)
• Les AST encodent la représentation
intermédiaire entre le code source et le
code objet
• Chaque nœud représente un élément
structurel du langage (énoncés,
expressions, littéraux, etc.)
• Les AST contiennent toute l’information
significative tirée du code source
Séminaire GÉLO, Montréal, le 3 avril 2002
Exemple d’AST
contains(1)
instance instance instance opd(2)opd(1)
contains(1) contains(3) contains(5)
instance
contains(2)
opd(2)opd(1)
contains(4)
opd(2)opd(1)
formal parm()
object(salary)
type(int)
class(Employee)
type(void)
object(raise)
type(int)
name(raise)
literal(50)
operator(=)
function(main)
object(jones)
type(Employee)
operator(.)
literal(800)
operator(=)
name(jones)
name(salary)
class Employee{ public: int salary;};
main(void){ Employee jones; int raise; jones.salary = 800; raise = 50;};
Séminaire GÉLO, Montréal, le 3 avril 2002
Graphes sémantiques abstraits (ASG)
• Les ASG constituent des AST
augmentés d’informations
sémantiques
• Ajout de liens entre les utilisations
et les déclarations des variables,
des types et des fonctions
Séminaire GÉLO, Montréal, le 3 avril 2002
Exemple d’ASG
contains(1)
opd(2)
opd(1)contains(5)
opd(1)opd(1)
instanceinstance
instance
contains(3)
instance
contains(4)
contains(2)
opd(2)
opd(2)
contains(1)
object(salary)
class(Employee)
type(void)
literal(50)
operator(=)
object(jones)
type(int)
formal parm()
object(raise)
function(main)
literal(800)
operator(=)
operator(.)
Séminaire GÉLO, Montréal, le 3 avril 2002
UML
• UML (Unified Modeling Language) est un
langage graphique pour la visualisation, la
construction, la spécification et la documentation
des composantes des systèmes logiciels
• UML représente une collection des meilleures
pratiques pour concevoir des systèmes
complexes, particulièrement dans le domaine de
l’orienté objet
Séminaire GÉLO, Montréal, le 3 avril 2002
Exemple de diagramme de classes UML
manager
managedCompanies
0..*
employee
0..*
employer
0..*
0..1
customer
Bank
accountNumber : Integer
Company
name : Stringaddress : String
getStockPrice() : Real
Job
title : StringstartDate : Datesalary : Integer
Person
firstName : StringlastName : StringbirthDate : Datesex : enum {male, female}
getIncome(Date) : Integer
Séminaire GÉLO, Montréal, le 3 avril 2002
XMI
• XMI (XML Metadata Interchange) est
un format d’échange intégrant trois
standards industriels : XML, UML et
MOF
• Il facilite l’échange de métamodèles
entre les outils de modélisation
basés sur UML et les dépôts
conceptuels basés sur MOF
Séminaire GÉLO, Montréal, le 3 avril 2002
Exemple de document XMI
<XMI version="1.1" xmlns:UML="org.omg/UML1.3"> <XMI.header> <XMI.model xmi.name="Department" href="Department.xml"/> <XMI.metamodel xmi.name="UML" href="UML.xml"/> </XMI.header> <XMI.content> <UML:Class name="Department" xmi.id="Department"> <UML:ModelElement.ownedElements> <UML:Attribute name="name" type="String"/> <UML:Attribute name="location" type="String"/> </UML:ModelElement.ownedElements> </UML:Class> <!-- autres classes --> <UML:Association> <UML:Association.connection> <UML:AssociationEnd name="memberOf" type="Department"/> <UML:AssociationEnd name="persons" type="Person"/> </UML:Association.connection> </UML:Association> </XMI.content></XMI>
Séminaire GÉLO, Montréal, le 3 avril 2002
Profil RCR
• Le profil RCR (rétroconception,
compréhension, réingénierie) offre une
solution en relation avec UML pour la
modélisation détaillée des corps des
méthodes d’un système
• RCR propose des extensions au
métamodèle UML sous la forme de
métaéléments stéréotypés
Séminaire GÉLO, Montréal, le 3 avril 2002
BehavioralFeature
«stereotype»RCR.Step
Tagsstep_kind
«stereotype»RCR.CalculateStep
TagscalculateStep_kind
«stereotype»RCR.CreateStep
TagscreateStep_kind
«stereotype»RCR.AssignStep
TagsassignStep_kind
«stereotype»RCR.CallStep
TagscallStep_kind
«stereotype»RCR.CompareStep
TagscompareStep_kind
«stereotype»RCR.DestroyStep
TagsdestroyStep_kind
«stereotype»RCR.AccessStep
TagsaccessStep_kind
«stereotype»RCR.ConvertStep
TagsconvertStep_kind
«stereotype»RCR.ReflectionStep
TagsreflectionStep_kind
Séminaire GÉLO, Montréal, le 3 avril 2002
État de l’art
• GEN++
• Datrix
• CPPX
• Columbus
• DISCOVER
• Passerelle Datrix-SPOOL
Séminaire GÉLO, Montréal, le 3 avril 2002
GEN++
• GEN++ est un générateur d’analyseurs
de code source C++, basé sur le
processeur frontal Cfront et sur un
langage abstrait de spécification de
requêtes, GENOA
• GENOA visualise le code source du
point de vue des graphes sémantiques
abstraits (ASG)
Séminaire GÉLO, Montréal, le 3 avril 2002
Datrix
• Les parseurs Datrix traitent les systèmes
rédigés en C, C++ et Java
• Les parseurs construisent en mémoire
les ASG correspondants et émettent
leurs graphes en TA-like ou VCG
• Les fichiers TA-like sont utilisés dans
SPOOL par le convertisseur ASG2XMI
Séminaire GÉLO, Montréal, le 3 avril 2002
CPPX
• CPPX est un compilateur C++ qui produit en
sortie une base d’informations
• CPPX utilise le compilateur GCC de GNU et
convertit les ASG résultants en fichiers GXL,
TA ou VCG
• La base d’informations est une collection de
faits à propos d’un programme et de ce qu’il
contient, définit, utilise, modifie, requiert,
importe et exporte
Séminaire GÉLO, Montréal, le 3 avril 2002
Columbus
• Columbus est un cadre d’application de rétro-
ingénierie logicielle pour l’analyse, la représentation
interne, le filtrage et l’exportation de code source
• Dans sa version actuelle, Columbus contient des
modules de traitement des systèmes écrits en C++
• Entités extraites du code source : les structures
(class, struct, union) et leurs composantes (attributs
et fonctions), les énumérations, les templates et les
objets globaux
Séminaire GÉLO, Montréal, le 3 avril 2002
DISCOVER
• DISCOVER est un atelier de génie logiciel
comportant une suite d’outils aidant à la
compréhension des systèmes
• DISCOVER contient un dépôt alimenté par le
parsage détaillé du code source C, C++, Java
et SQL
• DISCOVER donne accès aux AST ainsi
emmagasinés par un langage de scriptage
dérivé de Tcl, Tcl/Access
Séminaire GÉLO, Montréal, le 3 avril 2002
Passerelle Datrix-SPOOL
• Passerelle pour alimenter le dépôt
orienté objet de l'atelier SPOOL
• Elle recueille les fichiers .asg de Datrix
et importe leur contenu dans le dépôt
• Composée de deux applications : le
convertisseur ASG2XMI et l’importateur
XMI
Séminaire GÉLO, Montréal, le 3 avril 2002
Description du problème
• Alimentation d’un dépôt de code source
permettant l’analyse détaillée de systèmes
logiciels de taille industrielle
• Éléments constitutifs d’un système
considérés et exclus
• Langages de programmation considérés
• Attentes techniques : processus rapides et
fichiers compacts
Séminaire GÉLO, Montréal, le 3 avril 2002
Ébauche de la solution
Arbressyntaxiques
abstraits(AST)
Scriptsd’exportation
Tcl/Access
FichiersXMI de base
FichiersXMI/RCR
DépôtSPOOL/RCR
DISCOVERImportateur
XMI/RCR
Fichiers source
(C, C++, Java)
Séminaire GÉLO, Montréal, le 3 avril 2002
Fichiers XMI de base
• Fichiers décrivant principalement les
éléments constitutifs d’un système
• Approche retenue : construction préalable
de tables de symboles globales
• Éléments recueillis : les structures et leurs
attributs, les énumérations et leurs littéraux,
les alias (typedef) et les déclarations et
définitions de fonctions
Séminaire GÉLO, Montréal, le 3 avril 2002
Fichiers XMI/RCR
• Fichiers décrivant principalement les objets
globaux et les corps des méthodes d’un
système
• Implantation concrète du profil RCR
• Script d’exportation XMI/RCR : ensemble
de procédures (104) rattachées aux types
de nœuds d’AST rencontrés, regroupées à
l’intérieur de 7 familles génériques
Séminaire GÉLO, Montréal, le 3 avril 2002
Dépôt SPOOL/RCR
• Intégration du profil RCR dans le
modèle actuel du dépôt SPOOL
par l’adjonction de nouvelles
classes et dépendances
• Buts visés : supporter le langage
Java et modéliser le détail des
corps des méthodes
Séminaire GÉLO, Montréal, le 3 avril 2002
Nouvelles classes du dépôt SPOOL/RCR
MRCRAccessStep
accessStep_kindcompositepart
MBehavioralFeature
MRCRAssignStep
assignStep_kindtargetvalue
MRCRStep
step_kind
MRCRCalculateStep
calculateStep_kindoperand
MRCRCallStep
callStep_kindoperationargument
MRCRCompareStep
compareStep_kindoperand
MRCRConvertStep
convertStep_kindvaluetype
MRCRCreateStep
createStep_kindtypesteparraySizeinitValue
MRCRDestroyStep
destroyStep_kindtargetstep
MRCRReflectionStep
reflectionStep_kindentity
Séminaire GÉLO, Montréal, le 3 avril 2002
Importateur XMI/RCR
• L’importateur XMI/RCR lit les fichiers
XMI de base et XMI/RCR et crée les
objets correspondants dans le dépôt
de données SPOOL/RCR
• Architecture relativement simple :
utilisation du parseur xml4j d’IBM
• Traitement rapide des fichiers
Séminaire GÉLO, Montréal, le 3 avril 2002
Résultats des expérimentations
• Ajustements au profil RCR
• Tests de génération XMI : systèmes
Apache, ET++, SPOOL et jKitGo
• Importation réussie des fichiers XMI
de base dans SPOOL
• Fichiers XMI plus complets tout en
étant plus compacts
Séminaire GÉLO, Montréal, le 3 avril 2002
Travaux futurs
• Implantation du dépôt SPOOL/RCR
• Implantation de l’importateur XMI/RCR
• Ajustements aux scripts d’exportation
• Développement de nouveaux outils
d’analyse et de visualisation pour l’atelier
SPOOL
• Application des algorithmes de génération
des fichiers XMI et XMI/RCR à d’autres
processeurs frontaux
Séminaire GÉLO, Montréal, le 3 avril 2002
Conclusion
• La disponibilité d'arbres syntaxiques abstraits
de qualité constitue la pierre angulaire de
l’analyse statique rigoureuse du code source
• L’intégration du profil RCR fournit une preuve
tangible de l’efficacité des mécanismes
d’extension d’UML
• L’utilisation du format d’échange XMI met en
valeur une solution efficiente pour l’encodage
de modèles complexes
Séminaire GÉLO, Montréal, le 3 avril 2002
Merci pour votre
présence et votre
attention.