1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195 |
- % vim:spell spelllang=fr
- \chapter{Transformations de modèles}
- \label{ch:notions}
- %20-30p
- Dans ce chapitre, nous présentons un domaine du développement logiciel en plein
- essor : l'Ingénierie Dirigée par les Modèles ({\idm}). Nous présentons les
- approches actuelles et les notions importantes de ce domaine indispensables à
- la bonne compréhension de ce document. Dans un premier temps, nous expliquons
- ce qu'est l'{\idm} et notamment l'approche {\mda} (\emph{Model Driven
- Architecture}). Ensuite, nous abordons la problématique des transformations de
- modèles, et enfin nous présentons brièvement certains outils très utilisés.
- %\ttodo{
- %\begin{itemize}
- %\item modèles, métamodèles, {\etc} $\rightarrow$ OK
- %\item transformations de modèles
- %\begin{itemize}
- % \item taxonomie $\rightarrow$ OK
- % \item approches $\rightarrow$ OK
- % \item approche opérationnelle $\rightarrow$ OK
- % \item approche relationnelle $\rightarrow$ OK
- % \item outils $\rightarrow$ NOK
- %\end{itemize}
- %\item vérification : tests / model-checking / validation $\rightarrow$ NOK, en
- % faire un chapitre
- %\end{itemize}
- %todo: \cite{Brown2004} $\rightarrow$ OK
- %}
- \section{Modélisation}% \todo{[vs Ingénierie Dirigée par les modèles]}}
- %\subsection{{\mde} / {\mda}}
- À partir des années 80, l'ingénierie du logiciel a été marquée par l'approche
- objet dans laquelle le principe « Tout est objet » prévaut. Ce principe permet
- d'amener les outils et les technologies à la simplicité, la généralité et la
- bonne intégration dans les systèmes. Cette approche repose sur la notion
- d'\emph{objet}, qui \emph{est une instance} d'une \emph{classe}, qui peut
- \emph{hériter} d'une autre classe (\emph{surclasse}).
- L'arrivée de l'{\idm} a renouvelé les notions phares guidant le développement
- logiciel. Le principe « Tout est objet » est remplacé par celui du «
- Tout est modèle »~\cite{bezivin2004}~\cite{Bezivin2005a}. Les notions de
- \emph{modèle} \emph{représentant} un système, et \emph{conforme à} un
- \emph{métamodèle} sont apparues. L'approche {\idm} vise à élever le niveau
- d'abstraction dans la spécification logicielle, et à augmenter l'automatisation
- dans le développement. L'idée promue par l'{\idm} est d'utiliser les
- modèles à différents niveaux d'abstraction pour développer les systèmes, et
- ainsi élever le niveau d'abstraction dans la spécification du programme.
- L'augmentation de l'automatisation dans le développement logiciel est obtenue
- en utilisant des transformations de modèles exécutables. Les modèles de plus
- haut niveau sont transformés en modèles de plus bas niveau jusqu'à ce que le
- modèle puisse être exécuté en utilisant soit la génération de code, soit
- l'interprétation du modèle (exécution du modèle).
- La définition même de modèle a longtemps été discutée, et de nombreuses
- propositions ---~dont notamment celle de~\cite{Bezivin2001a}, ainsi que celle
- de~\cite{Kleppe2003}~--- nous permettent de donner la définition suivante :
- \begin{definition}[Modèle]
- Un modèle est la représentation ou l'abstraction d'un (ou d'une partie d'un)
- système, écrit dans un langage bien défini. Un modèle doit pouvoir être
- utilisé à la place du système modélisé pour répondre à une question sur le
- système représenté.
- %%Bezivin2001a
- %"A model is a simplification of a system built with an intended goal in mind. The
- %model should be able to answer questions in place of the actual system." [19]
- %Dans~\cite{Kleppe2003} (p.16), les auteurs définissent un modèle comme
- %suit : \emph{A model is a description of (part of) a system written in a
- %well-defined language}. Ce que nous traduisons par la définitions suivante : Un
- %modèle est une description (d'une partie) d'un système écrit dans un langage
- %bien défini.
- \end{definition}
- Il en découle la définition de la relation \emph{représente} entre le modèle et
- le système modélisé~\cite{Atkinson2003,Seidewitz2003,Bezivin2005a}. Du fait de
- l'utilisation du modèle à la place du système, cette représentation doit être
- pertinente. La définition précédente amène aussi à préciser la notion de langage
- bien défini :%bien défini, que nous empruntons à~\cite{Kleppe2003} (p.16) :
- \begin{definition}[Langage bien défini]
- Un langage bien défini est un langage avec une forme bien définie (syntaxe), et
- une signification (sémantique), qui est appropriée pour une interprétation
- automatique par un ordinateur\footnote{Traduction de~\cite{Kleppe2003}, page 16
- : \emph{A well-defined language is a language with well-defined form (syntax),
- and meaning (semantics), which is suitable for automated interpretation by a
- computer.}}.
- \end{definition}
- Pour pouvoir utiliser un modèle, son langage de modélisation doit être précisé.
- Il est représenté par un métamodèle.
- \begin{definition}[Métamodèle]
- Un métamodèle est un modèle qui définit le langage d'expression d'un
- modèle~\cite{omgmof}, c'est-à-dire le langage de modélisation.\\
- Dans la suite de ce document, nous noterons les métamodèles $MM$, indicés en
- fonction de leur nature : ainsi un métamodèle source ---~respectivement cible~---
- sera noté $MM_s$ ---~respectivement $MM_t$.
- \end{definition}
- La relation qui lie un modèle à son métamodèle est la relation de
- \emph{conformité}, c'est-à-dire qu'un métamodèle est la spécification d'un
- modèle : on dit qu'un modèle \emph{est conforme à} son métamodèle.
- %\subsection{Approche {\mda}}
- %\todo{[{\mda}, standards ]}
- La publication en 2000 de l'initiative {\mda}~\cite{mda} par
- l'{\omg}\footnote{Object Management Group : \url{http://www.omg.org/}.} a
- considérablement amplifié l'intérêt de l'{\idm}. Le {\mda} est la vision qu'a
- l'{\omg} de l'{\idm} : il s'agissait de définir un cadre pour utiliser
- concrètement les modèles dans le développement logiciel~\cite{Kleppe2003,
- Mellor2004}.
- %\todo{Pour cela, elle impose l'usage de certains types de modèles, comment ces
- %modèles sont préparés, et les relations entre les différents types de
- %modèles.}
- Pour cela, elle propose différents standards pour résoudre des problèmes
- soulevés par l'ingénierie dirigée par les modèles :
- \begin{itemize}
- \item établissement de nouveaux langages de modélisation~\cite{omgmof} ;
- \item modélisation des systèmes~\cite{uml2,uml241} ;
- \item expression de la sémantique statique des modèles et des
- métamodèles~\cite{omgocl2} ;
- \item représentation des modèles sous forme de documents {\xml} (pour
- l'interopérabilité)\cite{omgxmi} ;
- \item représentation des parties graphiques d'un modèle au format {\xml}~\cite{omgdi}.
- \end{itemize}%~\cite{cmw}
- %\todo{[Partie {\mof}]}
- L'{\omg} a donc proposé le standard {\mof}~\cite{omgmof}\footnote{Meta Object
- Facility : \url{http://www.omg.org/mof/}.} comme un sous-ensemble du
- diagramme de classes {\uml}. Intuitivement, un métamodèle est composé d'un
- ensemble de métaclasses qui contiennent des \emph{attributs} et des
- \emph{opérations} comme les classes en programmation orientée objet. Les
- métaclasses peuvent être liées par héritage, et par une métarelation
- (une association ou une composition). Chaque modèle doit se conformer à un
- tel métamodèle, c'est-à-dire être un ensemble d'éléments,
- d'attributs et de relations entre les éléments se conformant à leurs
- métadéfinitions.
- %Ce standard {\mof} ---~composé de deux parties depuis la version 2.0
- %({\emof}\footnote{Essential {\mof}} et {\cmof}\footnote{Complete {\mof}})~---
- Ce standard {\mof} ---~composé de {\emof}\footnote{Essential {\mof}} et {\cmof}\footnote{Complete {\mof}} depuis la version 2.0~---
- permet d'établir de nouveaux langages de modélisation et se situe au sommet
- d'une architecture en quatre couches proposée par l'{\omg} (figure~\ref{fig:mdalevels}).
- \begin{figure}[h]%H]
- \begin{center}
- \input{figures/mdalevels}
- \caption{Organisation du {\mda} en 4 niveaux d'abstraction (3+1).}
- \label{fig:mdalevels}
- \end{center}
- \end{figure}
- La couche M0 est celle du monde réel qui est représenté par des modèles de la
- couche M1. Ces modèles sont conformes à leurs métamodèles ---~couche M2~--- qui
- sont eux-mêmes décrits par le métamétamodèle {\mof} ---~couche M3. Ce dernier est
- unique et métacirculaire, c'est-à-dire qu'il se décrit lui-même.
- \begin{definition}[Métamétamodèle]
- Un métamétamodèle est un métamodèle qui décrit un langage de métamodélisation.
- Il permet donc de définir des langages de modélisation et est métacirculaire,
- c'est-à-dire qu'il se décrit lui-même.
- \end{definition}
- Cette approche hiérarchique est classique et on la retrouve dans plusieurs
- autres domaines de l'informatique. Une telle hiérarchie définit ce que l'on
- appelle un \emph{espace technique} (ou \emph{espace
- technologique})~\cite{KurtevBezAks2002, Bezivin2006}. Ainsi, nous parlerons de
- \emph{modelware}, de \emph{grammarware}~\cite{Klint2005,grammarware} pour
- l'espace des grammaires définies par l'EBNF\footnote{Extended Backus-Naur
- Form}, de \emph{dataware} (ou parfois \emph{DBware}) avec SQL et de
- \emph{documentware} avec {\xml}. Ce que nous appelons métamodèle dans l'espace
- des modèles correspond à la grammaire dans l'espace \emph{grammarware}, au
- type dans les langages de programmation, au
- schéma dans les espaces \emph{documentware} et \emph{dataware}.
- %\todo{[Modelware+{\uml} ; schema $\leftrightarrow$ grammaire $\leftrightarrow$
- %MM]}.
- Pour illustrer notre propos, dans la figure~\ref{fig:mdalevelsinterpretation},
- nous interprétons les niveaux d'abstraction de cette organisation en couches du
- {\mda} et faisons une analogie avec l'espace technique des grammaires. Ainsi,
- {\mof} correspond à l'EBNF, tandis que la couche M2 contient les langages
- définis par la grammaire, la couche M1 les programmes écrits dans ces langages,
- et M0 consiste en les exécutions de ces programmes.
- \begin{figure}[h]%H]
- \begin{center}
- \input{figures/mdalevelsinterpretation}
- \caption{Interprétation des niveaux d'abstraction du {\mda}.}
- \label{fig:mdalevelsinterpretation}
- \end{center}
- \end{figure}
- Outre {\mof}, l'{\omg} propose d'utiliser d'autres standards dans son
- approche {\mda}, notamment {\uml} (\emph{Unified Modeling Language}) et ({\ocl}
- \emph{Object Constraint Language}) :
- \begin{itemize}
- %\todo{[Partie {\uml}]}
- %\emph{Unified Modeling Language} ({\uml}) est le standard de
- \item {\uml} est le standard de modélisation des systèmes logiciels. Il est
- composé depuis 2009~\cite{uml2} du paquetage \emph{UML 2.2 Superstructure}
- qui est le standard pour la modélisation orientée objet, ainsi que du
- paquetage \emph{UML 2.2 Infrastructure} décrivant le noyau commun entre
- {\mof} et {\uml}.
- %\todo{[Partie OCL ]}
- %\emph{Object Constraint Language} (OCL) a été proposé pour exprimer la
- \item {\ocl} a été proposé pour exprimer la sémantique axiomatique des modèles
- et des métamodèles. Il permet d'exprimer des contraintes sur les
- métamodèles (invariant, pre- et post-conditions sur les opérations), afin de
- mieux les définir pour ensuite pouvoir les outiller.
- %{\ocl} ne permet pas de créer ou modifier un élément du modèle
- \end{itemize}
- %\\\todo{[{\mda} : après les standards, l'approche en elle-même]}\\
- L'initiative {\mda} se concentre sur la variabilité technique d'un logiciel,
- c'est-à-dire sur la manière de spécifier un logiciel indépendamment de la
- plateforme, afin de mettre en œuvre des systèmes durables et maintenables. Elle
- propose d'élaborer différents modèles pour définir une architecture de
- spécification à plusieurs niveaux. Pour cela, les notions de CIM
- (\emph{Computation Independent Model}), PIM (\emph{Platform Independent Model})
- et PSM (\emph{Platform Specific Model}) ont été introduites :
- \begin{itemize}
- \item \textbf{CIM :} modèle d'exigence, défini hors de toute
- considération informatique (par exemple, le diagramme de cas d'utilisation
- {\uml}) ;
- \item \textbf{PIM :} ce modèle défini indépendamment de la plateforme
- d'exécution est aussi appelé modèle d'analyse et conception ;
- \item \textbf{PSM :} modèle de code, pour lequel les
- caractéristiques de la plateforme d'exécution ont été prises en compte.
- \end{itemize}
- Le passage de PIM à PSM peut se faire par des transformations de modèles,
- intégrant parfois des transformations intermédiaires de PIM à PIM (pour des
- raisons d'interopérabilité), d'où leur place de choix dans les approches
- modèles pour le développement logiciel.
- %\ttodo{OMG dit que {\mda} == "un autre petit pas sur la longue route pour
- %transformer l'art de fabriquer du logiciel en science de l'ingénierie"
- %(retrouver la citation exacte + traduire).}\\
- %\ttodo{donc métaclasse, métarelation et conformité à définir, à mettre en
- %relation avec la relation objet/classe, comme dans le papier de
- %Bézivin\cite{Bezivin2005a}}
- %\subsection{Ecore}
- %Le {\mda} fournit le terreau pour aider l'{\idm} à se développer, cependant il
- %ne s'agit pas de son unique vision, qui peut être abordée de différentes
- %manières~\cite{Favre2006}. On pense notamment aux \emph{usines logicielles}
- Le {\mda} fournit un socle pour aider l'{\idm} à se développer. Cependant, il
- s'agit d'une vision parmi d'autres~\cite{Favre2006}. On pense notamment aux
- \emph{usines logicielles} (\emph{Software Factories})~\cite{Greenfield2003}
- dont l'idée est de se calquer sur le processus de production du monde matériel
- pour mettre en œuvre celui du monde logiciel. Il s'agit de composer des
- applications à partir d'un grand nombre d'outils, de \emph{patterns}, de
- modèles et de \emph{frameworks}. Les idées principales de cette approche sont :
- \begin{itemize}
- \item la spécialisation des fournisseurs et développeurs de logiciels ;
- \item l'utilisation d'outils dédiés (transformations de modèles, langages et
- outils de modélisation) ;
- \item l'intégration systématique de code réutilisable.
- \end{itemize}
- Microsoft a intégré ces concepts au sein de son \emph{framework} {\dotnet} et
- de son environnement de développement. %Visual Studio
- %=> lignes d-e produits (software product lines)
- De son côté, IBM a activement contribué à l'approche {\mda} %et à l'élaboration
- %des standards liés (notamment principal développeur de {\uml})
- en étant le principal développeur de {\uml} et en participant à l'élaboration
- des standards {\mof}, {\xmi} et {\cwm}. IBM donne sa vision du {\mda} dans
- ~\cite{Booch2004} où ces trois principes sont développés :
- \begin{itemize}
- \item \textbf{représentation directe :} il faut se détacher du domaine
- technologique et se concentrer sur les idées et concepts du domaine métier.
- Réduire la distance sémantique entre le domaine métier et la représentation
- permet de répondre plus directement et précisément aux problèmes. Pour
- prendre en compte ces situations métier, on utilise des langages dédiés (
- \emph{Domain Specific Language}, {\dsl}) ;
-
- \item \textbf{automatisation :} il faut automatiser tout ce qui ne nécessite
- pas d'intelligence et de réflexion ;%. L'un des objectifs du {\mda} est de
- % combler le fossé sémantique entre les concepts d'un domaine et
- % l'implémentation technique en les modélisant tous les deux ;
- \item \textbf{standards ouverts :} les standards encouragent la création de
- communautés autour d'outils, et un développement ouvert permet d'assurer
- que ces standards soient implémentés de manière cohérente tout en poussant
- à leur adoption. Les communautés autour des plateformes de logiciel libres
- ont un rôle structurant.
- %communautés autour de plateformes de logiciel libre (ex : {\mof} ou {\xml}).
- \end{itemize}
- IBM a donc proposé son langage de métamodélisation ---~{\ecore}~--- pour
- l'\emph{Eclipse Modeling Framework} ({\emf})~\cite{emf09}. Il s'aligne
- quasiment sur {\emof}, et cette proximité des deux métamodèles permet à {\emf}
- de supporter directement {\emof} comme une sérialisation {\xmi} alternative de
- {\ecore}. Le passage de l'un à l'autre consiste essentiellement en des tâches
- de renommage de classes et de fonctionnalités. {\ecore} est intégré dans
- l'environnement {\eclipse} et est l'un des \emph{frameworks} les plus utilisés
- pour la manipulation de modèles, ce qui en fait un standard \emph{de facto}.
- Il fait le lien entre la programmation {\java} et la modélisation. C'est
- pourquoi nous avons choisi {\emf} comme première technologie pour les
- outils développés durant cette thèse.
- %{\emf} est peut être vu comme une unification de {\xml}, {\uml} et {\java}
- %\ttodo{IBM eclipse IDE en 2001, EMF == proposition {\mda} de IBM, Ecore+UML2 +
- %GEF/GMP ? ex p11 et 12 }
- %\ttodo{Papyrus}
- %\subsection{Approche Usines logicielles (MS)}
- %\todo{alternatives techno : Ecore (Eclipse), grammarware, BdD, {\xml}}
- %\todo{
- %\begin{itemize}
- %\item « On the unification power of models »~\cite{Bezivin2005a} $\rightarrow$ OK
- %\item sur les principes de base de l'{\idm}~\cite{bezivin2004} $\rightarrow$ OK
- %\item what Models means ~\cite{Seidewitz2003} $\rightarrow$ OK
- %\item IDm au delà de {\mda}~\cite{Favre2006} $\rightarrow$ OK
- %\item {\mda} en action ~\cite{Blanc2005} $\rightarrow$ OK
- %\item espaces technologiques :~\cite{KurtevBezAks2002},~\cite{Bezivin2006} $\rightarrow$ OK
- %\item Vue large de l'ingénierie des modèles :~\cite{Bezivin2005b} -> court
- %\item {\mda}~\cite{mda} $\rightarrow$ OK
- %\item spéc de QVT~\cite{omgqvt1} $\rightarrow$ OK
- %\item Model-Driven Development: A Metamodeling Foundation\cite{Atkinson2003} $\rightarrow$ OK
- %\end{itemize}
- %}
- %\subsection{Définitions modélisation}
- %modèle, métamodèle, métamétamodèle, langage (?), relations (représente,
- %se conforme à)
- Pour une description approfondie du {\mda}, le lecteur intéressé pourra se
- référer à ~\cite{Kleppe2003}, \cite{Brown2004} et~\cite{Blanc2005}.
- \section{Transformations de modèles}
- %\todo{cœur de l'{\idm}, intérêt pratique (génération de code, réingénierie, migration
- %technologique, analyse de code, {\etc}) ; réutilisation}
- Les transformations de modèles sont au cœur de l'{\idm}~\cite{Sendall2003}.
- Elles permettent d'automatiser les tâches répétitives ---~application d'un
- traitement à un grand nombre de modèles ou multiples applications d'un
- traitement sur un modèle~--- ainsi que des tâches complexes et sujettes à
- erreurs si elles étaient effectuées manuellement par un utilisateur. Les
- transformations de modèles sont aussi utiles dans le cas où le développement
- d'un système est segmenté et que les rôles dans le développement sont séparés :
- si le spécialiste de la plateforme n'est pas le spécialiste du système
- développé, le traitement par l'un d'un modèle produit par l'autre est
- particulièrement complexe. Les transformations de modèles permettent un gain
- accru en termes de productivité, de maîtrise de la complexité, de diminution
- des risques et donc, finalement, de coût. Elles sont utilisées pour réaliser
- des tâches variées telles que :
- \begin{itemize}
- \item la réingénierie %$^{\todo{trouver le bon mot, réusinage ?}}$
- (\emph{refactoring}) : tâche qui consiste à changer un logiciel de
- telle sorte que son comportement extérieur n'est pas affecté tout en
- améliorant sa structure interne\footnote{Traduction de la définition
- de~\cite{Fow99}} ;% \todo{[« \emph{Refactoring is the process of changing a
- %software system in such a way that it does not alter the external behavior
- %of the code yet improves its internal structure}]} »
-
- \item la génération de code : processus qui produit du code à partir
- d'instructions abstraites en prenant en compte les caractéristiques de la
- plateforme cible d'exécution ;
-
- \item le raffinement : transformation d'une spécification abstraite en une
- spécification (plus) concrète;
-
- \item la normalisation : mise en conformité d'un logiciel, adaptation du style
- de code, \etc ;
-
- \item la migration : passage d'une technologie (ou d'une version à une autre
- d'une technologie) à l'autre ;
-
- \item la sérialisation : processus de mise en série des données sous la
- forme d'un fichier ;
-
- \item la rétro-conception ou rétro-ingénierie (\emph{reverse engineering}) :
- étude d'un programme pour en comprendre le fonctionnement interne et
- sa méthode de conception.
- \end{itemize}
- \begin{definition}[Transformation de modèle]
- Une transformation de modèle $T$ est une relation d'un (ou plusieurs)
- métamodèle(s) source(s) $MM_s$ vers un (ou plusieurs) métamodèle(s) cible(s)
- $MM_t$. On la notera : $T : MM_s \rightarrow MM_t$ (ou $T : MM_{s_0} \times
- \ldots \times MM_{s_n} \rightarrow MM_{t_0} \times \ldots \times MM_{t_m}$ dans
- le cas d'une transformation de $n$ métamodèles sources vers $m$ métamodèles
- cibles).
- \end{definition}
- Dans la suite du document, nous considérerons essentiellement des
- transformations de modèles d'un seul métamodèle source vers un seul
- métamodèle cible ($T : MM_s \rightarrow MM_t$).
- Compte tenu de la diversité des transformations, tant par leurs approches de
- développement, que par les structures de données dont elles se servent pour
- représenter les modèles qu'elles manipulent, que par les caractéristiques des
- métamodèles sources et cibles, de nombreux travaux ont été menés pour tenter de
- les classifier~\cite{Czarnecki2003}, \cite{Sendall2003}, \cite{ibm06},
- \cite{MensG06}.
- %Dans la suite de cette section, nous définissons et présentons différents types
- %de transformations~\ref{ssec:taxonomie} ainsi que plusieurs
- %approches~\ref{ssec:approches}.
- %Plusieurs chercheurs ont travaillé sur la classification des transformations de
- %modèles, selon différents critères : identité du métamodèle source et cible,
- %changement de niveau d'abstraction entre la source et la cible, multiplicité des
- %sources et des cibles, structures représentant les modèles.
- %\todo{type, taxonomie, approches :
- % \begin{itemize}
- % \item taxonomie MensG06
- % \item type : multiplicité
- % \item stuctures pour représenter les modèles (chronologique)
- % \item approches de développement Blanc2005, + les autres
- % \end{itemize}
- %}
- \subsection{Taxonomie des transformations}
- \label{ssec:taxonomie}
- %\subsection{Types (\todo{vs taxonomie}) de transformations}
- On distingue différents types de transformations de modèles que l'on peut
- définir et classifier selon que les métamodèles source et cible sont
- identiques ou non, et selon qu'ils appartiennent ou non au même niveau
- d'abstraction. C'est à partir de ces critères que~\cite{MensG06} a proposé une
- taxonomie des transformations de modèles sur laquelle nous nous appuyons dans
- cette section.
- %. Dans cette section, nous nous appuyons sur la taxonomie
- %de transformations de modèles proposée par~\cite{MensG06}.
- \begin{definition}[Transformation endogène]
- Une transformation $T : MM_s \rightarrow MM_t$ est dite endogène si $MM_s =
- MM_t$, c'est-à-dire si les métamodèles source et cible sont identiques.
- \end{definition}
- Par exemple, une activité de réingénierie d'un logiciel est une transformation
- endogène. Par analogie avec les langues naturelles, la reformulation d'une
- phrase en est aussi une. Une transformation endogène s'opère dans un
- même espace technologique, si les modifications sont directement appliquées
- sur le modèle source, on parle de transformation \emph{in-place}. Dans le
- cas contraire, il s'agit d'une transformation \emph{out-place}.
- \begin{definition}[Transformation exogène]
- %Une transformation est dite exogène si les métamodèles source et
- %cible sont différents.\\
- Une transformation $T : MM_s \rightarrow MM_t$ est dite exogène si $MM_s \neq
- MM_t$, c'est-à-dire si les métamodèles cible et source sont différents..
- \end{definition}
- Par exemple, la migration d'un système ou la réécriture d'un logiciel dans un
- autre langage est une transformation exogène. En utilisant l'analogie
- précédente, la traduction en est aussi une. Une transformation exogène est
- toujours \emph{out-place} et peut permettre un changement d'espace technique.
- \begin{definition}[Transformation horizontale]
- Une transformation est dite horizontale si les modèles source et cible
- appartiennent au même niveau d'abstraction.
- \end{definition}
- Par exemple, l'activité de réingénierie est une transformation horizontale
- (endogène), tout comme celle de migration (exogène).
- \begin{definition}[Transformation verticale]
- Une transformation est dite verticale si les modèles source et cible
- n'appartiennent pas au même niveau d'abstraction.
- \end{definition}
- Par exemple, la rétro-conception et le raffinement sont des transformations
- verticales, respectivement exogène et endogène.
- %est une transformation verticale (exogène),
- La figure~\ref{tab:transformationclassification} résume sous forme matricielle
- cette classification en fonction des deux critères :
- \begin{itemize}
- \item les colonnes classifient les transformations selon le changement de
- niveau d'abstraction (transformation verticale {\vs} horizontale) ;
- \item les lignes classifient les transformations selon que le métamodèle
- cible est le même (ou non) que le métamodèle source (transformation
- endogène {\vs} exogène).
- \end{itemize}
- \begin{figure}[H]
- \begin{center}
- \begin{tabular}{m{3.4cm}|m{4cm}|m{4cm}}
- %\diagbox[dir=NW]{XXX}YYY} & Horizontale & Verticale \\
- & \begin{center}\vspace{0.4cm}\input{figures/transformationHorizontale}\newline \newline {\scriptsize{Transformation horizontale}}\end{center}
- & \begin{center}\input{figures/transformationVerticale}\newline {\scriptsize{Transformation verticale}}\end{center} \\
- \hline
- %\vspace*{\stretch{1}}
- \input{figures/transformationExo} & Migration, \newline Sérialisation & Génération de
- code, \newline Retro-conception\\
- %\vspace*{\stretch{1}}
- \hline
- \input{figures/transformationEndo} & Optimisation, \newline Réingénierie, \newline
- Normalisation, \newline Simplification & Raffinement \\
- \end{tabular}
- \caption{Classification des catégories de transformations de modèles.}
- \label{tab:transformationclassification}
- \end{center}
- \end{figure}
- \subsection{Approches de développement des transformations de modèles }
- \label{ssec:approches}
- %\todo{opérationnelle, relationnelle, architecturelle + directement dans le
- % monde des modèles ou depuis d'autres espaces technologiques $\rightarrow$ pas
- % une approche à part entière, c'est plus orthogonal aux précédentes approches
- % en fait\\+ approches par programmation, par modélisation, et par template
- % dans~\cite{Blanc2005}}
- %
- %\todo{techniques de transfo + \cite{ibm06}
- %\begin{itemize}
- %\item impérative : plus naturel pour le codeur, parcours du modèle source,
- %génération de la cible, plus lourd et complexe à écrire, mais plus
- %d'expressivité si algo complexe
- %\item déclarative : pattern, remplacements par des règles $l \rightarrow r$
- % ;plus simple à écrire
- %\item hybride : versions déclaratives ont souvent des constructions
- %impératives pour remédier aux cas complexes. $\Rightarrow$ Tom est un peu hybride
- %\end{itemize}}
- %\todo{structures (et chrono) :
- % \begin{itemize}
- % \item[Transformations de structures séquentielles d'enregistrements] script
- % avec un fichier en entrée et un fichier en sortie. typiquement : AWK,
- % sed, Perl, etc. \og lisible\fg{} et maintenable, parsing de l'input
- % nécessaire
- % \item[transformation d'arbres] Parcours d'un arbre en entrée, génération
- % d'arbre en sortie. Typiquement : le monde XML (+XSLT ou XQuery), et celui
- % des grammaires et des compilateurs.
- % \item[Transformations de graphes] modèle == graphe orienté étiqueté en
- % entrée -> pdlutôt approche modélisation (transfo = modèle comme un autre)
- % \end{itemize}
- %}
- %\ttodo{tout ce qui est au-dessus doit être nettoyé}
- Les transformations de modèles peuvent être classifiées selon leurs approches
- de développement et selon les structures de données représentant les modèles.
- Trois approches de transformation de modèles sont définies
- dans~\cite{Blanc2005} :
- \begin{itemize}
- \item par programmation ;
- \item par \emph{template} ;
- \item par modélisation.
- \end{itemize}
- %\subsubsection{Approche par programmation}
- %\ttodo{?}
- %Usage d'un langage de programmation classique/généraliste OO, par exemple Java ;
- %transformation == programme => utilisé et pratique car outillage
- Dans l'approche par programmation, une transformation est développée
- en utilisant des langages de programmation \og classiques \fg{} (généralistes)
- généralement orientés objet, tels que {\java}. La transformation se présente
- sous la forme d'un programme %semblable à tout autre programme
- et le développeur
- a accès à tout l'écosystème existant (environnement de développement,
- bibliothèques, documentation, communauté d'utilisateurs\ldots). Cela en fait
- une approche très répandue.
- %\subsubsection{Approche par \emph{template}}
- %\ttodo{?}
- Dans l'approche par \emph{template}, un \emph{modèle cible paramétré}
- (ou \emph{modèle template}) est défini.
- %canevas est défini pour les modèles cibles, on parle de \emph{modèle cible
- %paramétré} ou de \emph{modèle template}).
- La transformation consiste alors à procéder au remplacement des paramètres en
- utilisant les valeurs fournies par le modèle source. %(\todo{Approche du
- %logiciel Softeam MDA Modeler})
- C'est ce qu'implémente le logiciel \textit{Softeam MDA Modeler}.
- %\subsubsection{Approche par modélisation}
- %\ttodo{Les langages de modélisation sont définis en utilisant le standard {\mof} et
- %sont manipulés en utilisant OCL~\cite{omgocl2}.}
- %\ttodo{?}
- %concepts de l'{\idm}, modélisation des transformations de modèles
- %standard QVT,
- %règles de transformation, relations entre source et cible (MM)
- La troisième approche identifiée ---~l'approche par modélisation~--- consiste à
- %modéliser la transformation et à la
- considérer la transformation elle-même comme un modèle conforme à son
- métamodèle de transformation. L'{\omg} a défini le standard
- \emph{Query/View/Transformation} ({\qvt}) pour modéliser les transformations de
- modèles~\cite{omgqvt1}. Il est composé de trois langages conformes à {\mof}
- ---~{\qvto}, {\qvtr} et {\qvtc}~--- regroupant deux paradigmes de description
- des transformations de modèles :
- \begin{itemize}
- %\subsubsection{Approche modélisation opérationnelle}
- %\ttodo{}
- \item[\textbf{Approche opérationnelle :}] une transformation de modèle est exprimée
- comme une séquence de pas d'exécution élémentaires qui construisent le
- modèle cible (instanciation des nouveaux éléments, initialisation
- des attributs, création des liens, {\etc}) en utilisant les informations du
- modèle source. Cette approche, appelée \emph{opérationnelle},
- est impérative. Elle peut être implémentée en utilisant des outils dédiés
- tels que {\kermeta}, {\qvto}, ou en utilisant des bibliothèques
- %réflexives ou du code généré
- au sein d'un langage généraliste.
- %\subsubsection{Approche modélisation relationnelle}
- %\ttodo{}
- \item[\textbf{Approche relationnelle :}] une transformation de modèle peut aussi être
- définie comme des relations devant exister entre la source et la cible à la
- fin de la transformation. Cette approche, appelée
- \emph{relationnelle} (ou déclarative), n'est pas directement exécutable,
- mais peut parfois être traduite en une transformation opérationnelle.
- \end{itemize}
- La principale différence entre les deux approches est le fait que l'approche
- opérationnelle nécessite de décrire le contrôle comme une partie de la
- transformation, tandis que cet aspect est géré par le moteur d'exécution dans le
- cas de l'approche relationnelle.
- %\ttodo{ici, un bloc avec les 3 approches architecturales de~\cite{Sendall2003}
- %est commenté}
- %\todo{3 Approches architecturales :~\cite{Sendall2003}
- %\begin{itemize}
- % \item manipulation directe de modèle (\emph{pull}): accès à la représentation
- % interne d'un modèle et capacité à manipuler la représentation en utilisant
- % une API
- % \item représentation intermédiaire : export du modèles dans un format
- % standard (XML par exemple) pour pouvoir le transfosrmer avec des outils
- % externes
- % \item support d'un langage de transformation : langage fournissent un
- % ensemble de constructions pour exprimer, composer et appliquer des
- % transformations
- %\end{itemize}}
- %
- %\todo{\textbf{Vieux bout de texte, que faire de ça ? utilisable/exploitable ?}\\Certains auteurs~\cite{Sendall2003} considèrent même une troisième
- %approche architecturelle basée sur l'introduction d'une représentation
- %intermédiaire com\-me {\xml} ou n'importe quelle autre syntaxe concrète
- %textuelle. La transformation de modèle peut ensuite être décrite en
- %utilisant un langage tel que {\xslt}~\cite{xslt} ou tout autre langage de
- %transformation comme Stratego/XT, ASF+SDF, Rascal, etc.}
- %\todo{directement dans le monde des modèles ou depuis d'autres espaces
- %technologiques : pas une approche à part entière, c'est plus orthogonal aux précédentes
- %approches en fait}
- %Un aspect différenciant des outils
- %utilisés pour la transformation de modèles est le type de structures de données
- %sur lesquelles il s'appuie pour représenter les modèles.
- %%Un autre aspect différenciant dans les approches de transformations de modèles
- %%est la question des structures de données représentant les modèles. %%La
- %%%manière dont sont représentés les modèles permet de séparer les outils utilisés
- %%%%pour écrire les transformations en familles
- %\todo{[ici ou dans la section suivante?]}
- Un autre aspect différenciant des transformations de modèles est la question de
- la représentation des modèles. Si le type de structure de données permettant de
- représenter un modèle peut être indépendant de l'approche, la
- représentation choisie a toutefois des conséquences concrètes concernant les
- outils utilisés pour les transformations. On peut distinguer ainsi rois grandes
- familles d'outils de transformation :
- %\todo{[Transformation de fichiers] }
- \paragraph{Transformation de texte (fichiers).}
- %\subsubsection{Transformation de texte (fichiers)}
- L'approche la plus simple et intuitive à comprendre, mais aussi, historiquement,
- la plus ancienne, consiste à transformer séquentiellement des fichiers donnés
- en entrée à des scripts, qui produisent eux-mêmes des fichiers en sortie. C'est
- l'approche adoptée par les outils s'appuyant sur {\awk}, {\sed} ou {\perl}. Ils
- conviennent particulièrement bien aux transformations les plus simples, qui sont
- généralement assez faciles à comprendre et à maintenir. Cependant, cette
- approche nécessite de \emph{parser} l'entrée et de sérialiser la sortie, et ne
- permet pas de manipuler une structure plus abstraite~\cite{Gerber2002}. % \todo{[2.4 du papier,
- %text-based tools ; argument syntaxe concrète vs abstraite -> mouais, à voir ]}
- %Du fait du faible niveau d'abstraction et de leur usage peu approprié pour
- %développer des transformations complexes dans un contexte industriel, nous ne
- %nous étendrons pas sur ce type d'outils.
- %\subsubsection{Transformation d'arbres}
- \paragraph{Transformation d'arbres.}
- %\todo{[Transformation d'arbres] }
- La structure d'arbre est une seconde représentation courante des modèles.
- L'arbre en entrée est parcouru et des nœuds sont créés au fur et à mesure de
- l'exécution des pas de transformation pour générer un arbre de sortie (ou
- modifier directement l'arbre source). C'est l'approche des outils de
- transformation reposant sur {\xml} tels que {\xslt}~\cite{xslt} ou
- {\xquery}\footnote{Plus exactement {\xqueryuf}~\cite{xqueryuf} étant donné que
- {\xquery} 1.0 n'a pas de fonctionnalité pour modifier les
- données.}~\cite{xquery,xqueryuf}. C'est aussi traditionnellement l'approche des
- compilateurs et, plus généralement, des outils de l'espace technique
- \emph{grammarware} (les langages respectent des grammaires ---~des
- métamodèles~--- conformes à EBNF).
- %\subsubsection{Transformation de graphes}
- \paragraph{Transformation de graphes.}
- %\todo{[Transformation de graphes] }
- Un troisième type de représentation de modèle possible est le graphe (orienté
- et étiqueté). C'est souvent la représentation adoptée par les outils modernes
- dédiés à la modélisation et aux transformations de modèles (par exemple
- AGG~\cite{Taentzer2004}). Cette représentation est fortement liée à l'approche
- de développement de transformation par modélisation que nous avons décrite plus
- haut. C'est aussi la principale représentation de modèles de la plupart des
- outils que nous allons présenter dans la section suivante.
- %$transfo(MM_{a_{i}}, MM_{b_{j}}, M_t, M_{a_{i}}) \rightarrow MM_{b_{j}}$
- \subsection{Outils existants}
- \label{ssec:outils}
- %\todo{familles d'outils :
- %\begin{itemize}
- %\item données == séquences -> fichiers texte -> AWK
- %\item données == arbres -> {\xml} ({\xslt}), compilation, Tom, RASCAL, etc.
- %\item données == graphes -> {\uml} -> ATL, QVT, Kermeta, etc.
- %\end{itemize}
- %}
- Dans cette section, nous présentons différents outils utilisés dans le cadre de
- l'{\idm} pour modéliser ou développer des transformations de modèles. Ces outils
- adoptent l'une ou l'autre des approches décrites dans la section
- précédente, voire une combinaison de plusieurs méthodes.
- Du fait de leur faible niveau d'abstraction et de leur usage peu approprié pour
- développer des transformations complexes dans un contexte industriel, nous ne
- nous étendrons pas sur les outils de transformation de texte (type {\awk, \sed
- ou \perl}).
- %\ttodo{\begin{itemize}
- % \item QVT
- % \begin{itemize}
- % \item QVT relations
- % \begin{itemize}
- % \item Medini
- % \item MMT (anciennement M2M)
- % \end{itemize}
- % \item QVT operational
- % \begin{itemize}
- % \item SmartQVT
- % \end{itemize}
- % \item QVt core : \optimalj
- % \item Kermeta (op)
- % \item jQVT : moteur QVT pour Java, XBase à la place de OCL, support de EMF
- % \item QVT-like
- % \begin{itemize}
- % \item Tefkat (QVT-R)
- % \item ATL
- % \item {\great}~\cite{Agrawal2003,Balasubramanian2007}
- % \item Viatra
- % \end{itemize}
- % \end{itemize}
- % \item transfo de graphes
- % \begin{itemize}
- % \item Viatra
- % \item (TGG) {\moflon}\footnote{\url{http://www.moflon.org}}\cite{Amelunxen2006}
- % \item AGG généraliste ; Henshin\footnote{\url{http://www.eclipse.org/modeling/emft/henshin/}}\cite{Arendt2010}
- % \end{itemize}
- % \item transfo
- % \begin{itemize}
- % \item Rascal~\cite{Klint2011,Klint2011a} $\rightarrow$ OK
- % \item tom $\rightarrow$ OK
- % \item Stratego/XT ~\cite{Visser01}-> Spoofax~\cite{Kats2010} $\rightarrow$ OK
- % \item Maude~\cite{Clavel1996,Clavel1996a,Clavel2002} ; Maude et MDE~\cite{Romero2007,Rivera2008} MOMENT\footnote{\url{http://moment.dsic.upv.es/}} $\rightarrow$ OK
- % \item ASF+SDF $\rightarrow$ OK
- % \item TXL
- % \end{itemize}
- % \item langages généralistes : Java+EMF $\rightarrow$ OK
- %\end{itemize}}
- \subsubsection{Outils généralistes}
- Pour écrire une transformation de modèles, il est nécessaire de sélectionner
- non seulement une approche, mais également un langage et un type d'outil. Si le
- {\mda} plaide en faveur d'outils et de langages dédiés (\dsl), il est tout à
- fait possible d'écrire une transformation de modèles comme n'importe quel autre
- programme informatique, en choisissant un langage généraliste. On l'utilise
- généralement avec un \emph{framework} fournissant des fonctionnalités pour
- manipuler les modèles.
- \paragraph{\emf.}{\emf}~\cite{emf09} est un \emph{framework} de modélisation
- ouvert initié par IBM. Intégré à l'environnement {\eclipse}, il comprend une
- infrastructure de génération de code pour développer des applications à partir
- de modèles pouvant être spécifiés en utilisant \uml, \xml ou \java. Ces modèles
- peuvent ensuite être importés et manipulés avec les services fournis par
- {\emf}. Le métamodèle central du \emph{framework} est {\ecore}. Il est aligné
- sur {\emof} (le passage de l'un à l'autre consiste essentiellement en quelques
- renommages), ce qui en fait son implémentation de référence. Compte tenu de
- l'environnement (\eclipse) dans lequel il est intégré, ainsi que du langage de
- programmation généraliste utilisé (\java) et des standards liés ({\xml} et
- {\uml}), {\emf} est une technologie intéressante
- %car accessible à la plupart des développeurs.
- dans le cas d'un développement de transformation par des utilisateurs \og non
- spécialistes \fg{}\footnote{Nous désignons par \emph{utilisateur non
- spécialiste} tout utilisateur ayant bénéficié d'une formation satisfaisante en
- informatique avec un socle théorique minimal, un apprentissage de la
- programmation orientée objet, ainsi que l'utilisation d'outils tels que
- {\eclipse}. Par exemple, un jeune ingénieur en début de carrière est un
- développeur non spécialiste. Son expertise est donc bien supérieure à celle
- d'un étudiant n'ayant pas encore reçu de formation, mais inférieure à celle
- d'un ingénieur expert de son domaine depuis de longues années.}. Il a
- l'avantage d'être bien outillé et maintenu, de bénéficier d'une large
- communauté d'utilisateurs et de pouvoir facilement être couplé avec les outils
- des écosystèmes \java, \uml et \xml. Nous reparlerons par la suite de {\emf}
- qui nous a servi de technologie de support pour le développement de nos outils.
- \paragraph{\xml.} Une famille d'outils utilisables pour les transformations est
- celle de l'espace technique {\xml}. Les modèles sont des arbres conformes à des
- schémas, et des outils de transformation tels que {\xslt}~\cite{xslt} et
- {\xqueryuf}~\cite{xqueryuf} permettent de parcourir et transformer les
- documents {\xml}. Bien que verbeuse, la syntaxe {\xml} a l'avantage d'être
- simple et très répandue. Beaucoup d'outils et d'applications utilisant
- nativement {\xml}, il peut être intéressant d'avoir une vision \emph{arbre
- \xml} des modèles. Ces outils peuvent aussi être utilisés en conjonction de
- \emph{frameworks} tels que {\emf} sans adaptation majeure, ceux-ci ayant
- généralement une fonctionnalité de sérialisation {\xml} (standard {\xmi} de
- l'initiative {\mda}).
- \paragraph{Outils de transformation d'arbres.}
- Les outils généralistes de transformation d'arbres ---~plus couramment associés
- aux mondes de la compilation, de l'analyse de code et de la réécriture qu'à
- l'{\idm}~--- ont aussi leur rôle à jouer en {\idm} et peuvent fournir une base
- technique solide pour la construction d'autres outils. Outre le langage
- {\tom}~\cite{Moreau2003,Balland2007,TomManual-2.10} sur lequel nous nous sommes
- appuyés pour ce travail, d'autres outils de la communauté présentent un intérêt
- certain. Notons par exemple
- {\rascal}\footnote{Voir \url{http://www.rascal-mpl.org/}.}~\cite{Klint2011,Klint2011a},
- le langage de métaprogrammation conçu pour l'analyse de programmes qui succède
- à {\asfsdf}~\cite{Brand2001}. Il existe sous forme d'un \emph{plugin}
- {\eclipse} et permet d'analyser, d'effectuer des requêtes et de transformer des
- programmes sous la forme de modèles conformes à M3\footnote{Métamodèle
- générique pour représenter du code parsé dans {\rascal},
- \url{http://tutor.rascal-mpl.org/Rascal/Libraries/lang/java/m3/m3.html}.}.
- %expérience d'utilisation de Rascal avec M3 (métamodèle générique pour
- %représenter du code parsé dans Rascal), analyse, requêtes, transformations
- Pour le même type d'utilisation, l'outil
- {\spoofax}\footnote{Voir \url{http://strategoxt.org/Spoofax/}.}~\cite{Kats2010}
- ---~lui aussi disponible sous forme d'un \emph{plugin} {\eclipse}~--- intègre
- {\stratego}~\cite{Visser1998},\cite{Visser01} et {\sdf}. Il permet d'écrire des
- transformations de programmes en utilisant des règles et des stratégies de
- réécriture.
- Le système {\maude}\footnote{Voir \url{http://maude.cs.uiuc.edu/}.}\cite{Clavel1996,
- Clavel1996a, Clavel2002} est un autre outil de réécriture. Il comprend une
- infrastructure orientée objet permettant d'implémenter des modèles et
- métamodèles. Des travaux ont été menés dans ce sens par plusieurs
- équipes~\cite{Romero2007,Rivera2008,Rusu2011}, ce qui a donné naissance à
- divers outils dont le projet
- {\moment}\footnote{Voir \url{http://moment.dsic.upv.es/}.} qui permet d'effectuer des
- transformations de modèles {\emf} avec {\maude}~\cite{Boronat2009,Boronat2010}.
- \paragraph{Outils de réécriture de graphes.} L'une des représentations de
- modèles pouvant être le graphe, l'utilisation d'outils de réécriture de graphes
- est une approche qui a été expérimentée~\cite{Taentzer10,Schurr2008} en
- utilisant des outils catégoriques tels que le \emph{single-pushout} et le
- \emph{double-pushout}, ainsi que le formalisme de spécification \emph{Triple
- Graph Grammar} (TGG)~\cite{Konigs2005}. Dans cette catégorie d'outils, on
- notera {\moflon}\footnote{Voir \url{http://www.moflon.org/}.} qui repose sur le
- mécanisme TGG pour implémenter des transformations de
- modèles~\cite{Amelunxen2006},
- {\henshin}\footnote{Voir \url{http://www.eclipse.org/modeling/emft/henshin/}.}\cite{Arendt2010}
- reposant sur le système AGG\footnote{\emph{Attributed Graph Grammar} :
- \url{http://user.cs.tu-berlin.de/~gragra/agg/}.}\cite{Taentzer2004}, ainsi que
- {\viatra}\footnote{Sous-projet de GMT :
- \url{http://www.eclipse.org/gmt/}.}~\cite{Varro2007}. Du fait de la complexité
- des algorithmes liés à la transformation de graphes ---~et donc des
- ressources nécessaires pour transformer efficacement des graphes de grande
- taille~---, le principal problème de l'approche par réécriture de graphes
- réside dans le coût élevé des transformations et la difficulté de passer à
- l'échelle.% son passage à l'échelle.
- \subsubsection{Outils dédiés}
- La solution largement mise en avant en {\idm} pour le développement de
- transformations de modèles est l'utilisation de langages dédiés. On pense
- notamment au standard {\qvt}~\cite{omgqvt1} proposé par l'initiative {\mda}.
- \paragraph{{\qvt}.}Il est composé de trois langages de transformation
- différents, comme illustré par la figure~\ref{fig:qvt} : d'une part {\qvtr} et
- {\qvtc} pour la partie déclarative, d'autre part {\qvto} pour la partie
- impérative.
- %\ttodo{refaire schéma ? schéma officiel/de la norme ci-dessous moche}
- \begin{figure}[h]
- \centering
- \input{figures/schemaQVT_new}
- %\includegraphics[scale=1.0]{figures/schemaQVTofficiel.png}
- \caption{Architecture du standard {\qvt}~\cite{omgqvt1}.}
- \label{fig:qvt}
- \end{figure}
- {\qvtr} et {\qvtc} constituent la partie déclarative de {\qvt}. {\qvtr} est un
- langage orienté utilisateur avec une syntaxe textuelle et graphique permettant
- de définir des transformations à un niveau d'abstraction élevé (représentation
- graphique possible). {\qvtc} est quant à lui plus bas niveau avec uniquement
- une syntaxe textuelle. Il sert à spécifier la sémantique de {\qvtr} sous la
- forme d'une transformation \emph{Relations2Core}. L'expression d'une
- transformation avec {\qvt} déclaratif est une association de motifs
- (\emph{patterns}) entre la source et la cible. Bien que relativement complexe à
- prendre en main, il permet de définir des transformations bidirectionnelles.
- {\optimalj} était une implémentation commerciale de {\qvtc}, mais son
- développement a cessé. Les outils
- {\mediniqvt}\footnote{\url{http://projects.ikv.de/qvt/wikia}}, {\eclipsemmt}
- (anciennement {\eclipsemtom}\footnote{\url{http://www.eclipse.org/m2m/}}) ainsi
- que {\moment}~\cite{Boronat2009} implémentent quant à eux {\qvtr}.
- Le langage {\qvto} supporte la partie impérative de {\qvt}. De par la nature
- même du style impératif, la navigation et la création d'éléments du modèle
- cible sont explicites. {\qvto} étend {\qvtr} et {\qvtc} par ajout de
- constructions impératives telles que la séquence, la répétition, la sélection,
- {\etc} ainsi que par des constructions {\ocl}. {\smartqvt} et
- {\eclipsemmtoqvt} implémentent {\qvto}.
- %\ttodo{à mettre ?}
- %Le tableau\needcite{} résume la classification des outils implémentant {\qvt},
- %selon qu'ils implémentent la partie déclarative ou impérative.
- %\begin{tabular}[h]{m{2.5cm}m{5cm}}
- % & \\
- % \hline
- %Core & (OptimalJ (fini)\\
- %Operational Mappings& Borland Together Architect 2006\newline SmartQVT\newline Eclipse M2M\newline ATL\\
- %Relations & \mediniqvt\newline ModelDorf\newline MomentQVT\newline M2M, ATL\\
- %\end{tabular}
- %Comparaison QVTo vs QVTr, dans Guduric2009\\
- %\begin{tabular}{m{0.25\linewidth}|m{0.35\linewidth}|m{0.35\linewidth}}
- %Critère & QVT-Operational & QVT-Relational\\
- %\hline
- %Paradigme de programmation & impératif & déclaratif \\
- %Niveau d'abstraction & bas niveau & haut niveau \\
- %Traçabilité & unidirectionnelle & bidirectionnelle \\
- %Compétences requises & répandues & rares, inhabituelles\\
- %Scénarios de transfo & génération ou synchro dans 1 sens & génération+synchro
- %2 sens,
- %contrôle de conformité, \\
- %Niveau de contrôle & Précis & générique \\
- %Complexité du code & Standard & Initialement complexe \\
- %Organisation du code & Comme QVT-R + bibliothèques de transfo & héritage de
- %transformation, surcharge de règles\\
- %Représentation graphique & Inappropriée & Possible \\
- %Outils & SmartQVT & mediniQVT \\
- %\end{tabular}
- \paragraph{\emph{{\qvt}-like}.}
- %n'implémente pas à proprement parler le standard {\qvt}, cependant on peut le
- %classer dans la catégorie des \emph{{\qvt}-like}, c'est-à-dire qu'il s'agit
- %d'un langage de transformation similaire à {\qvt}.
- Les outils dont nous allons parler ici n'implémentent pas, à proprement parler,
- le standard {\qvt}, mais sont cependant suffisamment proches et similaires pour
- être souvent classés dans la catégorie des \emph{{\qvt}-like}. Le premier
- d'entre eux est très certainement
- {\atl}\footnote{\url{http://www.eclipse.org/atl/}}~\cite{Bezivin2003-firstExperiment,Bezivin2005,Jouault2006,JouaultABK08}
- : il s'agit d'un des langages les plus utilisés dans la communauté des
- modèles et est intégré dans l'environnement {\eclipse}~\cite{atl04}. Il permet
- de spécifier une transformation d'un ensemble de modèles sources en un ensemble
- de modèles cibles. Écrire un programme {\atl} consiste à écrire des règles
- (\emph{rules}) en donnant une source et une cible. Une règle peut faire appel à
- des fonctions d'aide (\emph{helper}) permettant d'effectuer un traitement
- (collecte de valeurs dans une liste, \etc).
- %\todo{\begin{itemize} \item ATL :~\cite{Bezivin2003-ATLTechReport}, premières
- %XP~\cite{Bezivin2003-firstExperiment}({\xslt} into XQuery), plus
- %récent~\cite{JouaultABK08}, \item Environnement Eclipse pour ATL~\cite{atl04}
- %\item Traçabilité (\emph{loosely coupled}) :~\cite{Jouault2005} \item Modeling
- %in Large, modeling in small :~\cite{Bezivin2005} \item Syntaxe ATL
- %:~\cite{Jouault2006} \item Poster, fiche de résumé :~\cite{Jouault2006a} \item
- %comparaison CGT vs AGG vs ATL :~\cite{Groenmo2009} \end{itemize}} Dans la
- %suite du document, les exemples sur lesquels nous nous appuyons sont tous des
- %exemples qui ont déjà été écrits en {\atl}.
- Outre {\atl}, d'autres outils \emph{{\qvt}-like} existent, notamment
- {\tefkat}\footnote{\url{http://tefkat.sourceforge.net/}}~\cite{Lawley2006} (qui
- propose une syntaxe à la {\sql} et offre une implémentation de {\qvtr}),
- {\great}~\cite{Agrawal2003,Balasubramanian2007} et {\viatra}~\cite{Varro2007},
- qui sont des outils de transformation de graphes. Ces deux derniers sont
- distribués sous forme d'un \emph{plugin} {\eclipse} ce qui leur permet
- d'interagir avec l'environnement {\emf}. Enfin, dans cette catégorie d'outils,
- nous pouvons ajouter
- {\jqvt}\footnote{\url{http://sourceforge.net/projects/jqvt/}} qui est un moteur
- {\qvt} pour {\java}. Il est intégré dans {\eclipse}, est compatible avec {\emf}
- et n'utilise pas {\ocl}, mais
- {\xbase}\footnote{\url{https://wiki.eclipse.org/Xbase}}.
- \paragraph{\kermeta.} Il s'agit d'un environnement de métamodélisation dans
- {\eclipse}. Il permet de définir et spécifier des langages de modélisation
- dédiés. Le langage
- {\kermeta}\footnote{\url{http://www.kermeta.org}}~\cite{kermeta10} mêle
- plusieurs paradigmes de programmation (orienté objet, orienté
- aspects~\cite{Muller2005,Muller2005a}, par contrats, fonctionnel) et fournit un
- support complet de {\ecore} et de {\emof}. Ainsi, tout modèle {\kermeta}
- conforme à {\emof} est aussi un programme {\kermeta} valide. Une définition
- {\kermeta} peut être compilée pour produire un modèle exécutable. Le code
- généré est exprimé en {\java} et {\scala}, qui peut être ensuite compilé pour
- être exécuté sur la machine virtuelle {\java}.
- %Le langage {\kermeta} repose sur
- %\ttodo{is'étendre un peu plus sur {\kermeta} ; parler de K2/K3 ; de la génération
- %de code jvm/scala.}
- %impératif
- %kevoree\footnote{\url{http://kevoree.org}}
-
- %\section{Validation et vérification du logiciel}
- %intro, définitions, contraintes, outils
- %
- %\ttodo{augmenter la qualité du soft, la confiance dans le logiciel :
- %vérification. Comment ? tests et simulation ; preuve mathématique ; MC
- %(exploration d'espaces d'états, tests exhaustifs, recherche de contre-exemple)}
- %
- %Dans cette section, nous abordons différentes manières de valider et vérifier
- %le logiciel afin d'en améliorer sa qualité, et donc la confiance que
- %l'utilisateur peut avoir dans les logiciels qu'il utilise.
- %
- %\ttodo{pourquoi ai-je écrit ces 4 paragraphes ? utile ou pas ?}
- %
- %\paragraph{Tests.}Une première approche, intuitive, est de tester intensément
- %tout programme informatique avant sa mise en production. Il existe diverses
- %méthodologies et techniques pour tester du code. On citera par exemple la mise
- %en place de tests unitaires censés tester des \emph{unités} de code (fonctions,
- %classes). Cela a été popularisé par les méthodes agiles, et particulièrement
- %par l'approche dirigée par les tests (\emph{Tests Driven Engineering}). Bien
- %que l'utilisation de tests permette d'améliorer grandement la qualité du
- %logiciel durant sa phase de développement, la solution des tests unitaires
- %commence à montrer ses limites lors de développements de logiciels complexes où
- %les \emph{bugs} peuvent avoir des origines plus nombreuses. Du fait des coûts
- %et des délais de développement, il n'est pas rare de ne pas écrire de tests
- %pour se concentrer sur le logiciel lui-même. Par conséquent, certains morceaux
- %de code ne sont pas testés et sont donc susceptibles de recéler des
- %\emph{bugs}. Des techniques de génération automatique de tests ont vu le jour
- %\ttodo{quelques réf aussi} pour augmenter la couverture de tests et tester au
- %maximum les cas limite. D'autres comportements anormaux peuvent aussi naître
- %d'une combinaison de comportements normaux de modules fonctionnels
- %indépendamment. Le problème pouvant alors provenir d'une incompréhension entre
- %les équipes de développeurs, ou entre le client et le fournisseur
- %(spécification ambiguë).\\
- %Cependant, si l'intégration de tests est absolument nécessaire dans le
- %processus de développement d'un logiciel, elle se révèle insuffisante dans le
- %cas du logiciel critique. En effet, tester intensément un logiciel permet
- %de tester son comportement dans la plupart des cas, mais rien ne garantit que
- %toutes les situations ont été testées.\ttodo{un peu de contexte sur le test}
- %
- %\paragraph{Preuve.}À l'opposé, une autre approche pour améliorer la confiance
- %dans un logiciel consiste à prouver mathématiquement les algorithmes. Le
- %problème étant alors que la preuve formelle est généralement faite sur les
- %algorithmes ou les spécifications, mais pas sur l'implémentation elle-même. Or,
- %le facteur humain n'est pas à négliger, l'implémentation concrète du logiciel
- %dépendant fortement du développeur et des outils utilisés durant le processus.
- %En outre, lors d'une preuve, le contexte réel n'est pas forcément pris en
- %compte et certaines conditions d'utilisation réelles peuvent fortement
- %influencer le comportement et la fiabilité de l'application.
- %\ttodo{petite réf sur les protocoles réseau ? protocole ethernet ? gap pratique
- %vs théorie car phénomènes physiques (bruit), ou alors physique, bio}\\
- %\todo{"Beware of bugs in the above code; I have only proved it correct, not
- %tried it." --- D.E.Knuth}
- %
- %
- %\paragraph{Simulation.}Pour répondre à ce problème de réalisme du comportement
- %d'une système sous conditions d'utilisation réelles, une approche liée aux
- %tests revient à simuler ou émuler le système pour étudier son comportement et
- %détecter les anomalies. L'intérêt de ce type d'approche est que l'on peut
- %travailler sur un système qui serait coûteux à déployer en conditions réelles.
- %Notons par exemple les domaines du nucléaire ou de l'avionique \ttodo{référence
- %à l'A380 entièrement simulé ?} qui ne permettent pas aisément des tests
- %logiciels en conditions réelles, en particulier lors des premières étapes de
- %développement. \ttodo{réf aux gens qui font de la simulation pour \emph{tester} ?}
- %
- %Par rapport une preuve formelle, les méthodes de tests ont aussi l'inconvénient
- %d'être fortement conditionnées par la plateforme sur lesquels els sont exécutés
- %et par les technologies employées.
- %
- %\paragraph{Model-checking.}Le \emph{model-checking} est une autre approche
- %entre preuve et test. Elle consiste modéliser un système selon un formalisme
- %donné, puis à explorer les espaces d'états possibles de ce système pour le
- %valider. Cela revient à du test exhaustif, ce qui a donc valeur de preuve.
- %L'intérêt du \emph{model-checking} est que ---~contrairement aux tests~--- il est
- %généralement indépendant de la plateforme d'exécution et qu'il apporte une
- %validation formelle du système. On peut toutefois reprocher au
- %\emph{model-checking} de ne pas toujours être proche de la réalité et d'avoir
- %un coût en ressources élevé dans le cas de systèmes complexes. Cela a conduit
- %certains à adopter des approches hybrides de \emph{model-checking} à
- %l'exécution sur des applications réelles simulées \ttodo{réf. à ceux qui font
- %du MC sur des binaires à run-time par ex ? domaine différent, mais un peu lié}.
- %
- %Dans le cadre du développement de logiciels critiques, la vérification des
- %applications est imposée par la loi et des normes à respecter. Ainsi, tout
- %logiciel critique devant être embarqué dans un avion doit suivre une procédure
- %de certification.
- %
- %\todo{problèmes : \begin{itemize}
- % \item outils de modélisation non qualifiés et non certifiés => certifier
- % des outils ou aider à certifier
- % \item pb {\mde} : beaucoup d'outils dans les chaînes de développement => introduction des
- %outils "certifieurs" automatiques, problématique
- %\end{itemize}}
- %
- %\subsection{Qualification}
- %\ttodo{définir, expliquer, donner les normes, dont DO-XXX}
- %
- %La qualification d'un logiciel participe à atteindre un objectif.
- %
- %
- %
- %\subsection{Certification}
- %\ttodo{définir, expliquer.}
- %
- %
- %\ttodo{Différences entre qualification et certification.}
- %Problématiques : traçabilité, séparer spécification/implémentation/vérification
- %
- %
- %\section{Traçabilité}
- %ici ? traçabilité interne vs traçabilité de spécification ; intérêt (contrainte
- %des précédentes sous-sous-sections). Souvent traçabilité interne ou fortement
- %liée à l'implémentation de la transformation. Se fait bien techniquement.
- %
- \section{Limitations actuelles et points d'amélioration}
- Le lancement de l'initiative {\mda} a donné un véritable élan à l'{\idm} et de
- nombreux outils ont vu le jour. Cependant, malgré l'intérêt indéniable de
- cette approche pour le développement logiciel, l'{\idm} n'est pas encore
- fortement établie dans les chaînes de développement industrielles et gagne
- lentement du terrain.
- La complexité des systèmes s'accroissant, l'industrie voit dans l'{\idm} une
- solution pour améliorer leur développement tout en diminuant leurs coûts. En
- effet, pour appréhender cette complexité, il est nécessaire pour les
- développeurs d'abstraire les problèmes. Pour ce faire, il faut des outils
- accessibles et utilisables dans un cadre industriel.
- La grande diversité des outils peut aussi être un frein à l'adoption des
- techniques de l'{\idm} : un trop grand nombre d'outils et de technologies
- segmente le domaine, ce qui peut empêcher que les communautés atteignent une
- masse critique. De plus, beaucoup d'outils adoptant les concepts de l'{\idm}
- sont issus de la recherche et sont utilisés par un public académique. N'ayant
- pas forcément vocation à industrialiser les prototypes développés, le monde de
- la recherche produit souvent des outils peu accessibles tant sur leur forme
- (ergonomie, non conformité aux pratiques industrielles habituelles) que sur le
- fond (concepts peu connus et maîtrisés par peu de monde, expertise nécessaire).
- Ce frein lié à la multiplicité des outils peu accessibles peut être levé par
- l'établissement de standards tels que ceux proposés par l'{\omg}, ainsi que par
- le déploiement d'environnements comme {\eclipse} pour pousser à la
- cristallisation et au développement de communautés autour des technologies
- liées.
- Un autre aspect limitant vient de l'adaptation des chaînes de développement
- logicielles existantes à ces nouvelles méthodes de développement et à ces
- nouveaux outils. Compte tenu de leur coût d'intégration et des
- changements induits par une telle modification d'un processus de développement,
- il n'est pas raisonnable d'adopter un nouvel outil encore à l'état de prototype
- ou nécessitant des compétences spécifiques maîtrisées par un petit nombre
- d'experts ou encore n'ayant aucun lien avec des technologies déjà présentes
- dans la chaîne de développement existante. Il faut donc mettre en œuvre des
- ponts entre les technologies pour les rendre plus attrayantes et plus
- facilement intégrables, afin de faciliter ce processus fortement consommateur
- de ressources.
- Outre l'adaptation normale des chaînes de développement aux nouveaux outils,
- certains domaines ont des contraintes strictes de qualité concernant les outils
- de production du logiciel. C'est le cas des chaînes de développement des
- systèmes critiques que l'on retrouve notamment en aéronautique, dans le secteur
- automobile, ainsi que dans celui de la santé. Les logiciels produits et servant
- à produire sont soumis à des exigences légales nécessitant des processus lourds
- de validation du logiciel. Le domaine de l'{\idm} étant relativement
- jeune, il n'est pas encore pleinement adopté dans ce type d'industrie qui a
- besoin d'outils adaptés à ses contraintes permettant de faciliter la validation
- du logiciel à moindre coût (et présenter ainsi un intérêt supérieur par rapport
- à l'existant).
- L'un des aspects les plus intéressants est l'usage de l'{\idm} dans le cadre du
- développement fiable : pour les problématiques légales évoquées précédemment, la
- demande industrielle est très forte, et peu de réponses concrètes existent ou
- alors pour des coûts déraisonnables. C'est dans ce contexte que nous nous
- proposons d'apporter un élément de solution avec ce travail, afin d'accompagner
- l'adoption de nouveaux outils tout en améliorant la qualité du logiciel. Nous
- abordons la problématique de la validation du logiciel dans le
- chapitre~\ref{ch:verification}.
- %\todo{limitations dans quel contexte ?
- %\begin{itemize}
- %\item {\idm} : multiplication des outils
- %\item souci validation avec beaucoup d'outils (contexte)
- %\item approches actuelles coûteuses
- %\item on pourrait apporter des outils pour faciliter la validation, et
- %augmenter la confiance dans le logiciel
- %\item technique : choix des outils ; DSL vs GPL ; framework
- %\item traçabilité : trace exploitable -> on va en parler plus tard, dans le
- % chapitre suivant
- %\end{itemize}}
- % vim:spell spelllang=fr
|