340 likes | 465 Views
Laboratoire de génie logiciel. La passerelle DISCOVER-SPOOL : alimentation d'un dépôt de code source pour l'analyse détaillée de systèmes de taille industrielle Jean-François Bédard Département d’informatique et de recherche opérationnelle Université de Montréal. SPOOL
E N D
Laboratoire de génie logiciel La passerelle DISCOVER-SPOOL :alimentation d'un dépôtde code source pourl'analyse détaillée desystèmes de tailleindustrielleJean-François BédardDépartement d’informatique etde recherche opérationnelleUniversité de Montréal SPOOL Spreading Desirable Properties into the Design of Object-Oriented, Large-Scale Software Systems
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
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
XMI Base de donnéesorientée objetPOET Environnement SPOOL Capture du code source(C, C++, Java) Parseurs DISCOVER Scripts d’exportation Tcl/Access Outils de visualisationet d’analyse Analyse des dépendances Recherche et exploration Inspection conceptuelle
Rappels • lex et yacc • Arbres syntaxiques abstraits (AST) • Graphes sémantiques abstraits (ASG) • UML et XMI • Profil RCR
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
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
class (Employee) function (main) contains(1) contains(1) contains(3) contains(5) formal parm () object (raise) operator (=) object (salary) instance instance instance opd(1) opd(2) type (int) type (void) type (int) name (raise) literal (50) contains(2) contains(4) object (jones) operator (=) class Employee { public: int salary; }; main(void) { Employee jones; int raise; jones.salary = 800; raise = 50; }; instance opd(1) opd(2) type (Employee) operator (.) literal (800) opd(1) opd(2) name (jones) name (salary) Exemple d’AST
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
type (void) type (int) class (Employee) contains(1) instance instance object (salary) function (main) instance contains(2) contains(3) instance contains(1) formal parm () object (jones) object (raise) opd(2) contains(4) contains(5) opd(1) operator (=) operator (=) opd(1) opd(1) opd(2) opd(2) operator (.) literal (800) literal (50) Exemple d’ASG
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
Bank accountNumber : Integer 0..1 customer manager 0..* Person firstName : String lastName : String birthDate : Date sex : enum {male, female} getIncome(Date) : Integer Company name : String address : String getStockPrice() : Real managedCompanies employee employer 0..* 0..* Job title : String startDate : Date salary : Integer Exemple de diagramme de classes UML
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
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>
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
BehavioralFeature «stereotype» RCR.Step Tags step_kind «stereotype» RCR.CreateStep Tags createStep_kind «stereotype» RCR.DestroyStep Tags destroyStep_kind «stereotype» RCR.AssignStep Tags assignStep_kind «stereotype» RCR.AccessStep Tags accessStep_kind «stereotype» RCR.CallStep Tags callStep_kind «stereotype» RCR.ConvertStep Tags convertStep_kind «stereotype» RCR.CalculateStep Tags calculateStep_kind «stereotype» RCR.CompareStep Tags compareStep_kind «stereotype» RCR.ReflectionStep Tags reflectionStep_kind
État de l’art • GEN++ • Datrix • CPPX • Columbus • DISCOVER • Passerelle Datrix-SPOOL
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)
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
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
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
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
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
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
Fichiers source(C, C++, Java) FichiersXMI de base FichiersXMI/RCR Scriptsd’exportationTcl/Access ImportateurXMI/RCR DISCOVER Arbressyntaxiquesabstraits(AST) DépôtSPOOL/RCR Ébauche de la solution
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
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
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
MBehavioralFeature MRCRStep step_kind MRCRAccessStep accessStep_kind composite part MRCRAssignStep assignStep_kind target value MRCRCalculateStep calculateStep_kind operand MRCRCallStep callStep_kind operation argument MRCRCompareStep compareStep_kind operand MRCRConvertStep convertStep_kind value type MRCRCreateStep createStep_kind type step arraySize initValue MRCRDestroyStep destroyStep_kind target step MRCRReflectionStep reflectionStep_kind entity Nouvelles classes du dépôt SPOOL/RCR
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
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
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
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