EMF, GIT ET GERRIT: le futur de l’UML est Open Source
Auteurs : Guillaume G, Alice C, Maxime L.
Le 15/05/2014
LE projet EMF est la fondation des projets de modélisation dans Eclipse. EMF permet de définir ses propres modèles. EMF Compare, et les outils de référentiels GIT et GERRIT ensembles permettraient de réaliser des opérations sur les modèles qui nécessite des suites intégrées très chères. Quid des possibilités et de leurs utilisations dans un projet informatique de modélisation ?
UML : Kézako ?
Pour les non-initiés, l’UML (Unified Modeling Language) est un langage de modélisation objet. Cela veut dire qu’il permet de représenter une application (son fonctionnement, sa mise en route et les actions susceptibles d’être effectuées) sous forme d’un diagramme.
Un exemple de diagramme de classe
En entreprise l’utilisation des diagrammes peut être primordiale car elle permet à des personnes n’ayant pas ou peu de connaissances en informatique de comprendre le fonctionnement de l’application. L’UML a également un rôle de documentation, qui peut permettre à un autre collaborateur de prendre le projet en cours de route quel que soit son rôle au sein du projet.
Il existe diverses solutions de conception / modélisation pour les entreprises comme celle proposée par IBM (Rational Software Architect) ou JBuilder mais dont l’utilisation est payante et à des prix élevés (jusqu’à 21000 € par an pour celle d’IBM). En partant de ce constat et afin de rendre la modélisation logicielle accessible au plus grand nombre, certaines personnes ont décidé de s’investir et mettre en place des solutions gratuites et open source comme celles que nous allons vous présenter dans la suite de cet article.
Le projet EMF
Tout d’abord nous allons présenter EMF (Eclipse Modeling Framework) qui a été lancé par IBM dans un but d’unification des différents outils de développement. A présent, c’est la fondation Eclipse qui s’occupe d’intégrer l’EMF dans ses divers projets. EMF est un framework de modélisation et de génération de code. C’est-à-dire qu’il fournit des outils permettant de produire des classes Java représentant le modèle avec un ensemble de classes pour adapter les éléments du modèle afin de pouvoir les visualiser, les éditer avec un système de commandes et les manipuler dans un éditeur.
Lors de l’utilisation d’EMF, on détermine deux types de modèles, les méta-modèles qui définissent les concepts (par exemple Classe, Opération, Attribut etc …) puis on crée les modèles qui instancient ces concepts (respectivement Voiture, Rouler, Moteur etc…).
Lorsque l’on créé un modèle EMF, il est par la suite lié à un modèle Ecore qui définit les concepts manipulables dans EMF et qui permet également d’intégrer directement dans le modèle des types courants comme Estring, Eboolean, Eint etc…
Toujours grâce à un modèle Ecore, il est possible de générer du code, le fonctionnement est décrit dans le schéma ci-dessous.
Schéma représentant le principe de la génération de code
Le cœur d’EMF permet donc de générer un code java pour visualiser le méta-modèle mais dispose également d’un éditeur pour pouvoir manipuler le modèle ainsi que la possibilité de tester le code obtenu.
Nous venons de voir les possibilités offertes par le cœur d’EMF, mais il faut savoir que la deuxième partie du projet EMF est de proposer des outils pouvant améliorer son utilisation. Par exemple, EMF Compare a été créé pour permettre la comparaison entre les différents modèles et de les merger. Merger c’est fusionner deux modèles, qui ont été modifiés afin d’obtenir un seul et même modèle possédant la totalité des fonctionnalités implémentées. Nous pouvons ainsi avoir l’assurance de conserver une cohérence entre les différents modèles EMF. C’est un composant essentiel car la comparaison de modèle est une fonctionnalité indispensable pour tout environnement de modélisation de niveau industriel.
Les principaux avantages d’EMF Compare
La gestion de versions en toute simplicité
Ne vous est-il jamais arrivé d’oublier le répertoire dans lequel vous êtes et d’écrire accidentellement dans le mauvais fichier ou d’écraser des fichiers que vous vouliez conserver ? Assurément !
C’est une autre problématique abordée par la fondation : la gestion de versions. En effet, un projet informatique implique presque toujours plusieurs personnes travaillant simultanément. Ainsi, lors de la conception on structure le système en éléments avec des responsabilités distinctes. Cependant, même avec ces précautions des erreurs peuvent être commises. Pour ne pas être confrontés à ce problème, il est judicieux d’utiliser un système de gestion de versions, comme par exemple GIT qui permet de ramener un fichier à un état précédent, de ramener le projet complet à un état précédent, de visualiser les changements au cours du temps, de voir qui a modifié quelque chose qui pourrait causer un problème ou encore qui a introduit un problème et quand.
Les autres systèmes de gestion de versions considèrent l’information qu’ils gèrent comme une liste de fichiers et les modifications effectuées sur chaque fichier dans le temps.
Le fonctionnement des systèmes de gestion classiques
Le fonctionnement de GIT
Contrairement à ces derniers, avec GIT les clients n’extraient plus seulement la dernière version d’un fichier, mais ils dupliquent complètement le dépôt. Ainsi, si le serveur disparaît et si les systèmes collaboraient via ce serveur, n’importe quel dépôt d’un des clients peut être copié sur le serveur pour le restaurer. Chaque extraction devient une sauvegarde complète de toutes les données (voir le schéma ci-dessous). Git
Le fonctionnement de GIT
Les modifications effectuées dans l’Eclipse Workspace sont référencées par un commit dans le local repository (dépôt local). Puis à l’aide d’un push, les changements sont enregistrés dans le remote repository (dépôt distant). Le fetch correspond à l’action inverse du push, c’est-à-dire rapatrier les fichiers contenus sur le remote repository jusqu’au local repository. Diff fait appel à EMF Compare, fonction que nous avons détaillée plus haut dans cet article.
GERRIT : La revue de code qui complète le tout
Gerrit est un logiciel qui vérifie l’intégrité du code. Son objectif est de trouver des erreurs, des vulnérabilités et de modifier les erreurs de conception afin d’améliorer la sécurité et la qualité du logiciel. Pour cela, il fournit un outil de revue de code qui sécurise la branche principale d’un dépôt avec des revues d’utilisateur automatisées. Son utilisation permet de s’assurer de la propreté du code et du partage des connaissances au sein des membres de l’équipe projet.
Comme on peut le voir su ce schéma, les modifications effectuées par chacun des développeurs sont uploadées sur le serveur de gestion de versions incorporant Gerrit mais ne deviennent réellement une partie du projet qu’une fois qu’elles ont été examinées et acceptées par les « reviewers ».
En plus de ce processus d’examen, Gerrit permet de rédiger des notes et des commentaires sur les changements pour discuter de l’évolution du logiciel. Cela permet aux développeurs de proposer leur version et d’expliquer les changements effectués alors qu’ils sont encore frais dans leur esprit. Sans ça ils devraient interrompre un autre développeur pour examiner leur code sachant que celui-ci peut déja être passé à l’étape suivante et ne plus se souvenir des détails.
Ce système est donc particulièrement utile pour les équipes dont les membres sont répartis à plusieurs endroits différents. Gerrit est notamment utilisé par Eclipse, LibreOffice, Qt, Android et beaucoup d’autres.
Pour le futur d’EMF ?
Concernant les outils présentés précédemment, l’un des gros axes d’amélioration actuels est l’implémentation de Gerrit au sein même d’EMF Compare afin de rajouter le support de la revue de modèles. Celle-ci a été annoncée pour l’année prochaine.
Pour en revenir à l’origine d’EMF compare, le regroupement de ces outils et leur implémentation au sein d’un seul composant permettra à terme de remplacer les fonctionnalités de travail d’équipe incluses dans pas mal de logiciels très coûteux dans leur version « enterprise ».
Sources :
http://fr.wikipedia.org/wiki/Comparaison_des_logiciels_d%27UML
http://fr.wikipedia.org/wiki/Eclipse_Modeling_Framework
http://www-03.ibm.com/software/products/fr/ratisoftarch
http://www.eclipse.org/emf/compare/documentation/latest/user/user-guide.html#Getting_Started
http://mbaron.developpez.com/tutoriels/eclipse/emf/creation-instanciation-modeles/
http://javablabla.blogspot.fr/2013/03/eclipse-egit-github-tuto.html
http://www.eclipsecon.org/2012/sites/eclipsecon.org.2012/files/The-Git-Tutorial.pdf
http://codeandme.blogspot.fr/2012/11/using-your-gerrit-server-in-eclipse.html
http://www.eclipsecon.org/2012/sites/eclipsecon.org.2012/files/The-Git-Tutorial.pdf
http://review.cyanogenmod.org/Documentation/intro-quick.html
http://djibril.developpez.com/tutoriels/conception/pro-git/?page=page_1#LI-C