E. Renaux

Hors les cours BLOG

EMF, GIT ET GERRIT: le futur de l’UML est Open Source

without comments

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.

diagrExmpl

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.

générationCode

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.

EMF

Les principaux avantages d’EMF Compare

 

 

 git
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.

 

schema1

Le fonctionnement des systèmes de gestion classiques                                               

schema2

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

gitgerrit

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.

 

gerrit

 

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

Written by Elèves de CASI

mai 15th, 2014 at 3:25

Posted in Non classé