Ingénierie Dirigée par les Modèles (IDM)
Introduction La complexité, la variété des technologies existantes et l’accroissement des besoins font aujourd’hui dans le domaine du développement logiciel un véritable défi. Pour affronter ce défi, il est nécessaire d’offrir une approche permettant d’abstraire toutes les complexités technologiques. L’approche que nous allons étudiée dans ce chapitre est L’Ingénierie Dirigée par les Modèles (IDM). Nous le consacrerons aux concepts de base de l’IDM qui couvrent les disciplines dans lesquelles les modèles jouent un rôle principal. En suit nous allons discuter les différents outils que nous avons utilisés pour la réalisation de notre projet. 3.2 Ingénierie Dirigée par les Modèles (IDM) 3.2.1 Définition d’Ingénierie Dirigée par les Modèles (IDM) Le principe de « tout est objet » de l’approche objet des années 80, est devenu très utile pour que l’ingénierie du logiciel s’oriente aujourd’hui vers l’IDM et le principe du tout est modèle [49]. IDM est une technique de développement mettant à disposition des outils, des concepts et des langages afin de simplifier et de mieux maîtriser le processus de développement de systèmes qui ne cessent de croitre en complexité [50]. Ces outils sont construits autour du concept de méta-modèle et le concept de transformation de modèles. Cette technique est une forme d’ingénierie générative dans laquelle tout ou partie d’une application est générée automatiquement ou semi-automatiquement à partir de modèles, en utilisant notamment des transformations successives de ces modèles.
Notion de base en Ingénierie Dirigée par les Modèles
Les éléments de base de l’IDM sont
Système Un système est une entité complexe formée d’un ensemble ordonné d’éléments liés les uns aux autres et qui interagissent entre eux.
Modèle
Un modèle est une abstraction et une simplification du système qu’il représente. Pour mieux comprendre son processus de développement. Il offre donc une vision schématique d’un certains nombre d’éléments décrits sous la forme d’un ensemble de faits construits dans une intention particulière. Un modèle doit pouvoir être utilisé pour répondre à des questions que l’on se pose sur lui.
Meta-modèle
Un méta-modèle est un modèle qui permet de définir le langage utilisé pour exprimer le modèle. Il représente donc les entités d’un langage, leurs relations ainsi que leurs contraintes, Autrement dit, le méta-modèle est une spécification de la syntaxe du langage.
Méta-méta-modèle
Le méta-modèle MOF (Meta-Object Facility) [52] est un langage standard de définition « de méta-modèles pour les méta-modèles » désigné par le terme de méta-méta-modèle. Ce dernier est un modèle qui décrit Les éléments de modélisation nécessaires à la définition des langages de méta modélisation pour pouvoir interpréter un méta-modèle. Les méta-méta-modèles sont unique et méta circulaire c’est-à-dire la capacité de se définir eux-mêmes, ils sont alors autodescriptifs. C’est sur ces principes que se base l’organisation de la modélisation de l’OMG généralement décrite sous une forme pyramidale à quatre niveaux. • Niveau M0 : Le monde réel ou se trouve le système à étudier. • Niveau M1 : Les modèles représentant cette réalité défini dans un certain langage. • Niveau M2 : Les méta-modèles permettant la définition de ces modèles (méta-modèle définissant ce langage). • Niveau M3 : Le méta-méta-modèle. C’est le dernier niveau, il représente le MOF (langage de définition de méta-modèles).
Transformation de modèles
La notion de transformation de modèle est une opération et la génération d’un ou de plusieurs modèles cibles conformément à leur méta-modèle à partir d’un ou de plusieurs modèles sources conformément à leur méta-modèle. Elle est nommé d’endogène si les modèles sources et cibles instancient le même méta modèle, sinon elle est dite exogène lorsque son modèle source et son modèle cible n’instancient pas le même méta modèle. Une présentation générale des principaux concepts impliqués dans la transformation de modèles est illustrée dans la Figure 1.2.
Types de transformation
Le niveau d’abstraction est un facteur important à prendre en considération. On basant sur ce dernier on peut distinguer les types de transformation suivants:
Les transformations verticales Une transformation est dite verticale lorsque la source et la cible sont définies à des niveaux d’abstraction différents. Une baisse du niveau d’abstraction d’une transformation est appelé raffinement. Par contre, une abstraction consiste en une élévation du niveau.
Les transformations horizontales Une transformation est dite horizontale lorsque son modèle source et son modèle cible se trouvent au même niveau d’abstraction. On appliquant une modification à la représentation source. Cette modification peut être un ajout, une mise à jour, une suppression ou une restructuration d’informations.
Les transformations obliques Une transformation oblique combine une transformation horizontale et une verticale. Les compilateurs peuvent utiliser ce type de transformation qui aide à effectuer des optimisations du code source avant de générer le code exécutable
Les approches de transformation des Modèles
Plusieurs points de vue ont été la base de classification particulière de chacune des approches de transformation de modèle. Au plus haut niveau, La classification de CZarnecki [54] préconise deux types de transformation de modèles :
Les transformations Modèles vers Modèles
Ces transformations ont beaucoup évolué au cours de ces dernières années. Les transformations de modèle à modèle traduisent les modèles source en modèle cible, qui peuvent être des instances de méta-modèles identiques ou différents. Nous distinguons cinq techniques de transformation « Modèle vers Modèle » :
- Approche par manipulation directe : Cette approche de transformation se base sur une représentation interne des modèles source et cible manipuler par des APIs(Application Programming Interface),qui sont en général implémentées comme un framework orienté objet qui fournit une infrastructure pour organiser les transformations. L’utilisation de cette technique oblige le développeur de se préoccuper par l’implémentation ainsi que ordonnancement des règles. Il doit les faire à partir du zéro en utilisant un langage de programmation standard comme Java par exemple.
- Approche relationnelle : Dans cette approche les mathématiques jouent un rôle fondamental car cette manière de transformer est basée sur la logique déclarative qui exige l’utilisation des relations d’ordre mathématique pour permettre la spécification les relations entre les éléments du modèle source et ceux du modèle cible par l’adoption des contraints.
- Approche basée sur les transformations de graphes : Dans cette approche les modèles et les méta-modèles associés possèdent souvent une représentation graphique. Comme les approches relationnelles, les approches de transformation graphique sont capables d’exprimer la transformation du modèle en ce qui concerne la forme déclarative des règles de transformation. Les règles ne sont plus définies pour des éléments simples mais pour des fragments de modèles: on parle de filtrage de motif (pattern matching). Les motifs dans le modèle source, correspondant à certains critères, sont remplacés par d’autres motifs du modèle cible. Les motifs, ou fragments de modèles, sont exprimés soit dans les syntaxes concrètes respectives des modèles soit dans leur syntaxe abstraite.
- Approche basée sur la structure : Cette approche divise la transformation en deux étapes où la première est chargée de créer une structure hiérarchique du modèle cible, alors que la seconde est considérée) par l’ajustement de ses attributs et références dans la cible. Le cadre global détermine l’ordonnancement et la stratégie à appliquer, les utilisateurs ne se préoccupent que de fournir les règles de transformation.
- Approche hybride : Comme XDE et ATL, les approches hybrides sont la combinaison des différentes techniques ou alors des d’approches utilisant à la fois des règles à logique déclarative et impérative.