ch-notions.tex 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195
  1. % vim:spell spelllang=fr
  2. \chapter{Transformations de modèles}
  3. \label{ch:notions}
  4. %20-30p
  5. Dans ce chapitre, nous présentons un domaine du développement logiciel en plein
  6. essor : l'Ingénierie Dirigée par les Modèles ({\idm}). Nous présentons les
  7. approches actuelles et les notions importantes de ce domaine indispensables à
  8. la bonne compréhension de ce document. Dans un premier temps, nous expliquons
  9. ce qu'est l'{\idm} et notamment l'approche {\mda} (\emph{Model Driven
  10. Architecture}). Ensuite, nous abordons la problématique des transformations de
  11. modèles, et enfin nous présentons brièvement certains outils très utilisés.
  12. %\ttodo{
  13. %\begin{itemize}
  14. %\item modèles, métamodèles, {\etc} $\rightarrow$ OK
  15. %\item transformations de modèles
  16. %\begin{itemize}
  17. % \item taxonomie $\rightarrow$ OK
  18. % \item approches $\rightarrow$ OK
  19. % \item approche opérationnelle $\rightarrow$ OK
  20. % \item approche relationnelle $\rightarrow$ OK
  21. % \item outils $\rightarrow$ NOK
  22. %\end{itemize}
  23. %\item vérification : tests / model-checking / validation $\rightarrow$ NOK, en
  24. % faire un chapitre
  25. %\end{itemize}
  26. %todo: \cite{Brown2004} $\rightarrow$ OK
  27. %}
  28. \section{Modélisation}% \todo{[vs Ingénierie Dirigée par les modèles]}}
  29. %\subsection{{\mde} / {\mda}}
  30. À partir des années 80, l'ingénierie du logiciel a été marquée par l'approche
  31. objet dans laquelle le principe « Tout est objet » prévaut. Ce principe permet
  32. d'amener les outils et les technologies à la simplicité, la généralité et la
  33. bonne intégration dans les systèmes. Cette approche repose sur la notion
  34. d'\emph{objet}, qui \emph{est une instance} d'une \emph{classe}, qui peut
  35. \emph{hériter} d'une autre classe (\emph{surclasse}).
  36. L'arrivée de l'{\idm} a renouvelé les notions phares guidant le développement
  37. logiciel. Le principe « Tout est objet » est remplacé par celui du «
  38. Tout est modèle »~\cite{bezivin2004}~\cite{Bezivin2005a}. Les notions de
  39. \emph{modèle} \emph{représentant} un système, et \emph{conforme à} un
  40. \emph{métamodèle} sont apparues. L'approche {\idm} vise à élever le niveau
  41. d'abstraction dans la spécification logicielle, et à augmenter l'automatisation
  42. dans le développement. L'idée promue par l'{\idm} est d'utiliser les
  43. modèles à différents niveaux d'abstraction pour développer les systèmes, et
  44. ainsi élever le niveau d'abstraction dans la spécification du programme.
  45. L'augmentation de l'automatisation dans le développement logiciel est obtenue
  46. en utilisant des transformations de modèles exécutables. Les modèles de plus
  47. haut niveau sont transformés en modèles de plus bas niveau jusqu'à ce que le
  48. modèle puisse être exécuté en utilisant soit la génération de code, soit
  49. l'interprétation du modèle (exécution du modèle).
  50. La définition même de modèle a longtemps été discutée, et de nombreuses
  51. propositions ---~dont notamment celle de~\cite{Bezivin2001a}, ainsi que celle
  52. de~\cite{Kleppe2003}~--- nous permettent de donner la définition suivante :
  53. \begin{definition}[Modèle]
  54. Un modèle est la représentation ou l'abstraction d'un (ou d'une partie d'un)
  55. système, écrit dans un langage bien défini. Un modèle doit pouvoir être
  56. utilisé à la place du système modélisé pour répondre à une question sur le
  57. système représenté.
  58. %%Bezivin2001a
  59. %"A model is a simplification of a system built with an intended goal in mind. The
  60. %model should be able to answer questions in place of the actual system." [19]
  61. %Dans~\cite{Kleppe2003} (p.16), les auteurs définissent un modèle comme
  62. %suit : \emph{A model is a description of (part of) a system written in a
  63. %well-defined language}. Ce que nous traduisons par la définitions suivante : Un
  64. %modèle est une description (d'une partie) d'un système écrit dans un langage
  65. %bien défini.
  66. \end{definition}
  67. Il en découle la définition de la relation \emph{représente} entre le modèle et
  68. le système modélisé~\cite{Atkinson2003,Seidewitz2003,Bezivin2005a}. Du fait de
  69. l'utilisation du modèle à la place du système, cette représentation doit être
  70. pertinente. La définition précédente amène aussi à préciser la notion de langage
  71. bien défini :%bien défini, que nous empruntons à~\cite{Kleppe2003} (p.16) :
  72. \begin{definition}[Langage bien défini]
  73. Un langage bien défini est un langage avec une forme bien définie (syntaxe), et
  74. une signification (sémantique), qui est appropriée pour une interprétation
  75. automatique par un ordinateur\footnote{Traduction de~\cite{Kleppe2003}, page 16
  76. : \emph{A well-defined language is a language with well-defined form (syntax),
  77. and meaning (semantics), which is suitable for automated interpretation by a
  78. computer.}}.
  79. \end{definition}
  80. Pour pouvoir utiliser un modèle, son langage de modélisation doit être précisé.
  81. Il est représenté par un métamodèle.
  82. \begin{definition}[Métamodèle]
  83. Un métamodèle est un modèle qui définit le langage d'expression d'un
  84. modèle~\cite{omgmof}, c'est-à-dire le langage de modélisation.\\
  85. Dans la suite de ce document, nous noterons les métamodèles $MM$, indicés en
  86. fonction de leur nature : ainsi un métamodèle source ---~respectivement cible~---
  87. sera noté $MM_s$ ---~respectivement $MM_t$.
  88. \end{definition}
  89. La relation qui lie un modèle à son métamodèle est la relation de
  90. \emph{conformité}, c'est-à-dire qu'un métamodèle est la spécification d'un
  91. modèle : on dit qu'un modèle \emph{est conforme à} son métamodèle.
  92. %\subsection{Approche {\mda}}
  93. %\todo{[{\mda}, standards ]}
  94. La publication en 2000 de l'initiative {\mda}~\cite{mda} par
  95. l'{\omg}\footnote{Object Management Group : \url{http://www.omg.org/}.} a
  96. considérablement amplifié l'intérêt de l'{\idm}. Le {\mda} est la vision qu'a
  97. l'{\omg} de l'{\idm} : il s'agissait de définir un cadre pour utiliser
  98. concrètement les modèles dans le développement logiciel~\cite{Kleppe2003,
  99. Mellor2004}.
  100. %\todo{Pour cela, elle impose l'usage de certains types de modèles, comment ces
  101. %modèles sont préparés, et les relations entre les différents types de
  102. %modèles.}
  103. Pour cela, elle propose différents standards pour résoudre des problèmes
  104. soulevés par l'ingénierie dirigée par les modèles :
  105. \begin{itemize}
  106. \item établissement de nouveaux langages de modélisation~\cite{omgmof} ;
  107. \item modélisation des systèmes~\cite{uml2,uml241} ;
  108. \item expression de la sémantique statique des modèles et des
  109. métamodèles~\cite{omgocl2} ;
  110. \item représentation des modèles sous forme de documents {\xml} (pour
  111. l'interopérabilité)\cite{omgxmi} ;
  112. \item représentation des parties graphiques d'un modèle au format {\xml}~\cite{omgdi}.
  113. \end{itemize}%~\cite{cmw}
  114. %\todo{[Partie {\mof}]}
  115. L'{\omg} a donc proposé le standard {\mof}~\cite{omgmof}\footnote{Meta Object
  116. Facility : \url{http://www.omg.org/mof/}.} comme un sous-ensemble du
  117. diagramme de classes {\uml}. Intuitivement, un métamodèle est composé d'un
  118. ensemble de métaclasses qui contiennent des \emph{attributs} et des
  119. \emph{opérations} comme les classes en programmation orientée objet. Les
  120. métaclasses peuvent être liées par héritage, et par une métarelation
  121. (une association ou une composition). Chaque modèle doit se conformer à un
  122. tel métamodèle, c'est-à-dire être un ensemble d'éléments,
  123. d'attributs et de relations entre les éléments se conformant à leurs
  124. métadéfinitions.
  125. %Ce standard {\mof} ---~composé de deux parties depuis la version 2.0
  126. %({\emof}\footnote{Essential {\mof}} et {\cmof}\footnote{Complete {\mof}})~---
  127. Ce standard {\mof} ---~composé de {\emof}\footnote{Essential {\mof}} et {\cmof}\footnote{Complete {\mof}} depuis la version 2.0~---
  128. permet d'établir de nouveaux langages de modélisation et se situe au sommet
  129. d'une architecture en quatre couches proposée par l'{\omg} (figure~\ref{fig:mdalevels}).
  130. \begin{figure}[h]%H]
  131. \begin{center}
  132. \input{figures/mdalevels}
  133. \caption{Organisation du {\mda} en 4 niveaux d'abstraction (3+1).}
  134. \label{fig:mdalevels}
  135. \end{center}
  136. \end{figure}
  137. La couche M0 est celle du monde réel qui est représenté par des modèles de la
  138. couche M1. Ces modèles sont conformes à leurs métamodèles ---~couche M2~--- qui
  139. sont eux-mêmes décrits par le métamétamodèle {\mof} ---~couche M3. Ce dernier est
  140. unique et métacirculaire, c'est-à-dire qu'il se décrit lui-même.
  141. \begin{definition}[Métamétamodèle]
  142. Un métamétamodèle est un métamodèle qui décrit un langage de métamodélisation.
  143. Il permet donc de définir des langages de modélisation et est métacirculaire,
  144. c'est-à-dire qu'il se décrit lui-même.
  145. \end{definition}
  146. Cette approche hiérarchique est classique et on la retrouve dans plusieurs
  147. autres domaines de l'informatique. Une telle hiérarchie définit ce que l'on
  148. appelle un \emph{espace technique} (ou \emph{espace
  149. technologique})~\cite{KurtevBezAks2002, Bezivin2006}. Ainsi, nous parlerons de
  150. \emph{modelware}, de \emph{grammarware}~\cite{Klint2005,grammarware} pour
  151. l'espace des grammaires définies par l'EBNF\footnote{Extended Backus-Naur
  152. Form}, de \emph{dataware} (ou parfois \emph{DBware}) avec SQL et de
  153. \emph{documentware} avec {\xml}. Ce que nous appelons métamodèle dans l'espace
  154. des modèles correspond à la grammaire dans l'espace \emph{grammarware}, au
  155. type dans les langages de programmation, au
  156. schéma dans les espaces \emph{documentware} et \emph{dataware}.
  157. %\todo{[Modelware+{\uml} ; schema $\leftrightarrow$ grammaire $\leftrightarrow$
  158. %MM]}.
  159. Pour illustrer notre propos, dans la figure~\ref{fig:mdalevelsinterpretation},
  160. nous interprétons les niveaux d'abstraction de cette organisation en couches du
  161. {\mda} et faisons une analogie avec l'espace technique des grammaires. Ainsi,
  162. {\mof} correspond à l'EBNF, tandis que la couche M2 contient les langages
  163. définis par la grammaire, la couche M1 les programmes écrits dans ces langages,
  164. et M0 consiste en les exécutions de ces programmes.
  165. \begin{figure}[h]%H]
  166. \begin{center}
  167. \input{figures/mdalevelsinterpretation}
  168. \caption{Interprétation des niveaux d'abstraction du {\mda}.}
  169. \label{fig:mdalevelsinterpretation}
  170. \end{center}
  171. \end{figure}
  172. Outre {\mof}, l'{\omg} propose d'utiliser d'autres standards dans son
  173. approche {\mda}, notamment {\uml} (\emph{Unified Modeling Language}) et ({\ocl}
  174. \emph{Object Constraint Language}) :
  175. \begin{itemize}
  176. %\todo{[Partie {\uml}]}
  177. %\emph{Unified Modeling Language} ({\uml}) est le standard de
  178. \item {\uml} est le standard de modélisation des systèmes logiciels. Il est
  179. composé depuis 2009~\cite{uml2} du paquetage \emph{UML 2.2 Superstructure}
  180. qui est le standard pour la modélisation orientée objet, ainsi que du
  181. paquetage \emph{UML 2.2 Infrastructure} décrivant le noyau commun entre
  182. {\mof} et {\uml}.
  183. %\todo{[Partie OCL ]}
  184. %\emph{Object Constraint Language} (OCL) a été proposé pour exprimer la
  185. \item {\ocl} a été proposé pour exprimer la sémantique axiomatique des modèles
  186. et des métamodèles. Il permet d'exprimer des contraintes sur les
  187. métamodèles (invariant, pre- et post-conditions sur les opérations), afin de
  188. mieux les définir pour ensuite pouvoir les outiller.
  189. %{\ocl} ne permet pas de créer ou modifier un élément du modèle
  190. \end{itemize}
  191. %\\\todo{[{\mda} : après les standards, l'approche en elle-même]}\\
  192. L'initiative {\mda} se concentre sur la variabilité technique d'un logiciel,
  193. c'est-à-dire sur la manière de spécifier un logiciel indépendamment de la
  194. plateforme, afin de mettre en œuvre des systèmes durables et maintenables. Elle
  195. propose d'élaborer différents modèles pour définir une architecture de
  196. spécification à plusieurs niveaux. Pour cela, les notions de CIM
  197. (\emph{Computation Independent Model}), PIM (\emph{Platform Independent Model})
  198. et PSM (\emph{Platform Specific Model}) ont été introduites :
  199. \begin{itemize}
  200. \item \textbf{CIM :} modèle d'exigence, défini hors de toute
  201. considération informatique (par exemple, le diagramme de cas d'utilisation
  202. {\uml}) ;
  203. \item \textbf{PIM :} ce modèle défini indépendamment de la plateforme
  204. d'exécution est aussi appelé modèle d'analyse et conception ;
  205. \item \textbf{PSM :} modèle de code, pour lequel les
  206. caractéristiques de la plateforme d'exécution ont été prises en compte.
  207. \end{itemize}
  208. Le passage de PIM à PSM peut se faire par des transformations de modèles,
  209. intégrant parfois des transformations intermédiaires de PIM à PIM (pour des
  210. raisons d'interopérabilité), d'où leur place de choix dans les approches
  211. modèles pour le développement logiciel.
  212. %\ttodo{OMG dit que {\mda} == "un autre petit pas sur la longue route pour
  213. %transformer l'art de fabriquer du logiciel en science de l'ingénierie"
  214. %(retrouver la citation exacte + traduire).}\\
  215. %\ttodo{donc métaclasse, métarelation et conformité à définir, à mettre en
  216. %relation avec la relation objet/classe, comme dans le papier de
  217. %Bézivin\cite{Bezivin2005a}}
  218. %\subsection{Ecore}
  219. %Le {\mda} fournit le terreau pour aider l'{\idm} à se développer, cependant il
  220. %ne s'agit pas de son unique vision, qui peut être abordée de différentes
  221. %manières~\cite{Favre2006}. On pense notamment aux \emph{usines logicielles}
  222. Le {\mda} fournit un socle pour aider l'{\idm} à se développer. Cependant, il
  223. s'agit d'une vision parmi d'autres~\cite{Favre2006}. On pense notamment aux
  224. \emph{usines logicielles} (\emph{Software Factories})~\cite{Greenfield2003}
  225. dont l'idée est de se calquer sur le processus de production du monde matériel
  226. pour mettre en œuvre celui du monde logiciel. Il s'agit de composer des
  227. applications à partir d'un grand nombre d'outils, de \emph{patterns}, de
  228. modèles et de \emph{frameworks}. Les idées principales de cette approche sont :
  229. \begin{itemize}
  230. \item la spécialisation des fournisseurs et développeurs de logiciels ;
  231. \item l'utilisation d'outils dédiés (transformations de modèles, langages et
  232. outils de modélisation) ;
  233. \item l'intégration systématique de code réutilisable.
  234. \end{itemize}
  235. Microsoft a intégré ces concepts au sein de son \emph{framework} {\dotnet} et
  236. de son environnement de développement. %Visual Studio
  237. %=> lignes d-e produits (software product lines)
  238. De son côté, IBM a activement contribué à l'approche {\mda} %et à l'élaboration
  239. %des standards liés (notamment principal développeur de {\uml})
  240. en étant le principal développeur de {\uml} et en participant à l'élaboration
  241. des standards {\mof}, {\xmi} et {\cwm}. IBM donne sa vision du {\mda} dans
  242. ~\cite{Booch2004} où ces trois principes sont développés :
  243. \begin{itemize}
  244. \item \textbf{représentation directe :} il faut se détacher du domaine
  245. technologique et se concentrer sur les idées et concepts du domaine métier.
  246. Réduire la distance sémantique entre le domaine métier et la représentation
  247. permet de répondre plus directement et précisément aux problèmes. Pour
  248. prendre en compte ces situations métier, on utilise des langages dédiés (
  249. \emph{Domain Specific Language}, {\dsl}) ;
  250. \item \textbf{automatisation :} il faut automatiser tout ce qui ne nécessite
  251. pas d'intelligence et de réflexion ;%. L'un des objectifs du {\mda} est de
  252. % combler le fossé sémantique entre les concepts d'un domaine et
  253. % l'implémentation technique en les modélisant tous les deux ;
  254. \item \textbf{standards ouverts :} les standards encouragent la création de
  255. communautés autour d'outils, et un développement ouvert permet d'assurer
  256. que ces standards soient implémentés de manière cohérente tout en poussant
  257. à leur adoption. Les communautés autour des plateformes de logiciel libres
  258. ont un rôle structurant.
  259. %communautés autour de plateformes de logiciel libre (ex : {\mof} ou {\xml}).
  260. \end{itemize}
  261. IBM a donc proposé son langage de métamodélisation ---~{\ecore}~--- pour
  262. l'\emph{Eclipse Modeling Framework} ({\emf})~\cite{emf09}. Il s'aligne
  263. quasiment sur {\emof}, et cette proximité des deux métamodèles permet à {\emf}
  264. de supporter directement {\emof} comme une sérialisation {\xmi} alternative de
  265. {\ecore}. Le passage de l'un à l'autre consiste essentiellement en des tâches
  266. de renommage de classes et de fonctionnalités. {\ecore} est intégré dans
  267. l'environnement {\eclipse} et est l'un des \emph{frameworks} les plus utilisés
  268. pour la manipulation de modèles, ce qui en fait un standard \emph{de facto}.
  269. Il fait le lien entre la programmation {\java} et la modélisation. C'est
  270. pourquoi nous avons choisi {\emf} comme première technologie pour les
  271. outils développés durant cette thèse.
  272. %{\emf} est peut être vu comme une unification de {\xml}, {\uml} et {\java}
  273. %\ttodo{IBM eclipse IDE en 2001, EMF == proposition {\mda} de IBM, Ecore+UML2 +
  274. %GEF/GMP ? ex p11 et 12 }
  275. %\ttodo{Papyrus}
  276. %\subsection{Approche Usines logicielles (MS)}
  277. %\todo{alternatives techno : Ecore (Eclipse), grammarware, BdD, {\xml}}
  278. %\todo{
  279. %\begin{itemize}
  280. %\item « On the unification power of models »~\cite{Bezivin2005a} $\rightarrow$ OK
  281. %\item sur les principes de base de l'{\idm}~\cite{bezivin2004} $\rightarrow$ OK
  282. %\item what Models means ~\cite{Seidewitz2003} $\rightarrow$ OK
  283. %\item IDm au delà de {\mda}~\cite{Favre2006} $\rightarrow$ OK
  284. %\item {\mda} en action ~\cite{Blanc2005} $\rightarrow$ OK
  285. %\item espaces technologiques :~\cite{KurtevBezAks2002},~\cite{Bezivin2006} $\rightarrow$ OK
  286. %\item Vue large de l'ingénierie des modèles :~\cite{Bezivin2005b} -> court
  287. %\item {\mda}~\cite{mda} $\rightarrow$ OK
  288. %\item spéc de QVT~\cite{omgqvt1} $\rightarrow$ OK
  289. %\item Model-Driven Development: A Metamodeling Foundation\cite{Atkinson2003} $\rightarrow$ OK
  290. %\end{itemize}
  291. %}
  292. %\subsection{Définitions modélisation}
  293. %modèle, métamodèle, métamétamodèle, langage (?), relations (représente,
  294. %se conforme à)
  295. Pour une description approfondie du {\mda}, le lecteur intéressé pourra se
  296. référer à ~\cite{Kleppe2003}, \cite{Brown2004} et~\cite{Blanc2005}.
  297. \section{Transformations de modèles}
  298. %\todo{cœur de l'{\idm}, intérêt pratique (génération de code, réingénierie, migration
  299. %technologique, analyse de code, {\etc}) ; réutilisation}
  300. Les transformations de modèles sont au cœur de l'{\idm}~\cite{Sendall2003}.
  301. Elles permettent d'automatiser les tâches répétitives ---~application d'un
  302. traitement à un grand nombre de modèles ou multiples applications d'un
  303. traitement sur un modèle~--- ainsi que des tâches complexes et sujettes à
  304. erreurs si elles étaient effectuées manuellement par un utilisateur. Les
  305. transformations de modèles sont aussi utiles dans le cas où le développement
  306. d'un système est segmenté et que les rôles dans le développement sont séparés :
  307. si le spécialiste de la plateforme n'est pas le spécialiste du système
  308. développé, le traitement par l'un d'un modèle produit par l'autre est
  309. particulièrement complexe. Les transformations de modèles permettent un gain
  310. accru en termes de productivité, de maîtrise de la complexité, de diminution
  311. des risques et donc, finalement, de coût. Elles sont utilisées pour réaliser
  312. des tâches variées telles que :
  313. \begin{itemize}
  314. \item la réingénierie %$^{\todo{trouver le bon mot, réusinage ?}}$
  315. (\emph{refactoring}) : tâche qui consiste à changer un logiciel de
  316. telle sorte que son comportement extérieur n'est pas affecté tout en
  317. améliorant sa structure interne\footnote{Traduction de la définition
  318. de~\cite{Fow99}} ;% \todo{[« \emph{Refactoring is the process of changing a
  319. %software system in such a way that it does not alter the external behavior
  320. %of the code yet improves its internal structure}]} »
  321. \item la génération de code : processus qui produit du code à partir
  322. d'instructions abstraites en prenant en compte les caractéristiques de la
  323. plateforme cible d'exécution ;
  324. \item le raffinement : transformation d'une spécification abstraite en une
  325. spécification (plus) concrète;
  326. \item la normalisation : mise en conformité d'un logiciel, adaptation du style
  327. de code, \etc ;
  328. \item la migration : passage d'une technologie (ou d'une version à une autre
  329. d'une technologie) à l'autre ;
  330. \item la sérialisation : processus de mise en série des données sous la
  331. forme d'un fichier ;
  332. \item la rétro-conception ou rétro-ingénierie (\emph{reverse engineering}) :
  333. étude d'un programme pour en comprendre le fonctionnement interne et
  334. sa méthode de conception.
  335. \end{itemize}
  336. \begin{definition}[Transformation de modèle]
  337. Une transformation de modèle $T$ est une relation d'un (ou plusieurs)
  338. métamodèle(s) source(s) $MM_s$ vers un (ou plusieurs) métamodèle(s) cible(s)
  339. $MM_t$. On la notera : $T : MM_s \rightarrow MM_t$ (ou $T : MM_{s_0} \times
  340. \ldots \times MM_{s_n} \rightarrow MM_{t_0} \times \ldots \times MM_{t_m}$ dans
  341. le cas d'une transformation de $n$ métamodèles sources vers $m$ métamodèles
  342. cibles).
  343. \end{definition}
  344. Dans la suite du document, nous considérerons essentiellement des
  345. transformations de modèles d'un seul métamodèle source vers un seul
  346. métamodèle cible ($T : MM_s \rightarrow MM_t$).
  347. Compte tenu de la diversité des transformations, tant par leurs approches de
  348. développement, que par les structures de données dont elles se servent pour
  349. représenter les modèles qu'elles manipulent, que par les caractéristiques des
  350. métamodèles sources et cibles, de nombreux travaux ont été menés pour tenter de
  351. les classifier~\cite{Czarnecki2003}, \cite{Sendall2003}, \cite{ibm06},
  352. \cite{MensG06}.
  353. %Dans la suite de cette section, nous définissons et présentons différents types
  354. %de transformations~\ref{ssec:taxonomie} ainsi que plusieurs
  355. %approches~\ref{ssec:approches}.
  356. %Plusieurs chercheurs ont travaillé sur la classification des transformations de
  357. %modèles, selon différents critères : identité du métamodèle source et cible,
  358. %changement de niveau d'abstraction entre la source et la cible, multiplicité des
  359. %sources et des cibles, structures représentant les modèles.
  360. %\todo{type, taxonomie, approches :
  361. % \begin{itemize}
  362. % \item taxonomie MensG06
  363. % \item type : multiplicité
  364. % \item stuctures pour représenter les modèles (chronologique)
  365. % \item approches de développement Blanc2005, + les autres
  366. % \end{itemize}
  367. %}
  368. \subsection{Taxonomie des transformations}
  369. \label{ssec:taxonomie}
  370. %\subsection{Types (\todo{vs taxonomie}) de transformations}
  371. On distingue différents types de transformations de modèles que l'on peut
  372. définir et classifier selon que les métamodèles source et cible sont
  373. identiques ou non, et selon qu'ils appartiennent ou non au même niveau
  374. d'abstraction. C'est à partir de ces critères que~\cite{MensG06} a proposé une
  375. taxonomie des transformations de modèles sur laquelle nous nous appuyons dans
  376. cette section.
  377. %. Dans cette section, nous nous appuyons sur la taxonomie
  378. %de transformations de modèles proposée par~\cite{MensG06}.
  379. \begin{definition}[Transformation endogène]
  380. Une transformation $T : MM_s \rightarrow MM_t$ est dite endogène si $MM_s =
  381. MM_t$, c'est-à-dire si les métamodèles source et cible sont identiques.
  382. \end{definition}
  383. Par exemple, une activité de réingénierie d'un logiciel est une transformation
  384. endogène. Par analogie avec les langues naturelles, la reformulation d'une
  385. phrase en est aussi une. Une transformation endogène s'opère dans un
  386. même espace technologique, si les modifications sont directement appliquées
  387. sur le modèle source, on parle de transformation \emph{in-place}. Dans le
  388. cas contraire, il s'agit d'une transformation \emph{out-place}.
  389. \begin{definition}[Transformation exogène]
  390. %Une transformation est dite exogène si les métamodèles source et
  391. %cible sont différents.\\
  392. Une transformation $T : MM_s \rightarrow MM_t$ est dite exogène si $MM_s \neq
  393. MM_t$, c'est-à-dire si les métamodèles cible et source sont différents..
  394. \end{definition}
  395. Par exemple, la migration d'un système ou la réécriture d'un logiciel dans un
  396. autre langage est une transformation exogène. En utilisant l'analogie
  397. précédente, la traduction en est aussi une. Une transformation exogène est
  398. toujours \emph{out-place} et peut permettre un changement d'espace technique.
  399. \begin{definition}[Transformation horizontale]
  400. Une transformation est dite horizontale si les modèles source et cible
  401. appartiennent au même niveau d'abstraction.
  402. \end{definition}
  403. Par exemple, l'activité de réingénierie est une transformation horizontale
  404. (endogène), tout comme celle de migration (exogène).
  405. \begin{definition}[Transformation verticale]
  406. Une transformation est dite verticale si les modèles source et cible
  407. n'appartiennent pas au même niveau d'abstraction.
  408. \end{definition}
  409. Par exemple, la rétro-conception et le raffinement sont des transformations
  410. verticales, respectivement exogène et endogène.
  411. %est une transformation verticale (exogène),
  412. La figure~\ref{tab:transformationclassification} résume sous forme matricielle
  413. cette classification en fonction des deux critères :
  414. \begin{itemize}
  415. \item les colonnes classifient les transformations selon le changement de
  416. niveau d'abstraction (transformation verticale {\vs} horizontale) ;
  417. \item les lignes classifient les transformations selon que le métamodèle
  418. cible est le même (ou non) que le métamodèle source (transformation
  419. endogène {\vs} exogène).
  420. \end{itemize}
  421. \begin{figure}[H]
  422. \begin{center}
  423. \begin{tabular}{m{3.4cm}|m{4cm}|m{4cm}}
  424. %\diagbox[dir=NW]{XXX}YYY} & Horizontale & Verticale \\
  425. & \begin{center}\vspace{0.4cm}\input{figures/transformationHorizontale}\newline \newline {\scriptsize{Transformation horizontale}}\end{center}
  426. & \begin{center}\input{figures/transformationVerticale}\newline {\scriptsize{Transformation verticale}}\end{center} \\
  427. \hline
  428. %\vspace*{\stretch{1}}
  429. \input{figures/transformationExo} & Migration, \newline Sérialisation & Génération de
  430. code, \newline Retro-conception\\
  431. %\vspace*{\stretch{1}}
  432. \hline
  433. \input{figures/transformationEndo} & Optimisation, \newline Réingénierie, \newline
  434. Normalisation, \newline Simplification & Raffinement \\
  435. \end{tabular}
  436. \caption{Classification des catégories de transformations de modèles.}
  437. \label{tab:transformationclassification}
  438. \end{center}
  439. \end{figure}
  440. \subsection{Approches de développement des transformations de modèles }
  441. \label{ssec:approches}
  442. %\todo{opérationnelle, relationnelle, architecturelle + directement dans le
  443. % monde des modèles ou depuis d'autres espaces technologiques $\rightarrow$ pas
  444. % une approche à part entière, c'est plus orthogonal aux précédentes approches
  445. % en fait\\+ approches par programmation, par modélisation, et par template
  446. % dans~\cite{Blanc2005}}
  447. %
  448. %\todo{techniques de transfo + \cite{ibm06}
  449. %\begin{itemize}
  450. %\item impérative : plus naturel pour le codeur, parcours du modèle source,
  451. %génération de la cible, plus lourd et complexe à écrire, mais plus
  452. %d'expressivité si algo complexe
  453. %\item déclarative : pattern, remplacements par des règles $l \rightarrow r$
  454. % ;plus simple à écrire
  455. %\item hybride : versions déclaratives ont souvent des constructions
  456. %impératives pour remédier aux cas complexes. $\Rightarrow$ Tom est un peu hybride
  457. %\end{itemize}}
  458. %\todo{structures (et chrono) :
  459. % \begin{itemize}
  460. % \item[Transformations de structures séquentielles d'enregistrements] script
  461. % avec un fichier en entrée et un fichier en sortie. typiquement : AWK,
  462. % sed, Perl, etc. \og lisible\fg{} et maintenable, parsing de l'input
  463. % nécessaire
  464. % \item[transformation d'arbres] Parcours d'un arbre en entrée, génération
  465. % d'arbre en sortie. Typiquement : le monde XML (+XSLT ou XQuery), et celui
  466. % des grammaires et des compilateurs.
  467. % \item[Transformations de graphes] modèle == graphe orienté étiqueté en
  468. % entrée -> pdlutôt approche modélisation (transfo = modèle comme un autre)
  469. % \end{itemize}
  470. %}
  471. %\ttodo{tout ce qui est au-dessus doit être nettoyé}
  472. Les transformations de modèles peuvent être classifiées selon leurs approches
  473. de développement et selon les structures de données représentant les modèles.
  474. Trois approches de transformation de modèles sont définies
  475. dans~\cite{Blanc2005} :
  476. \begin{itemize}
  477. \item par programmation ;
  478. \item par \emph{template} ;
  479. \item par modélisation.
  480. \end{itemize}
  481. %\subsubsection{Approche par programmation}
  482. %\ttodo{?}
  483. %Usage d'un langage de programmation classique/généraliste OO, par exemple Java ;
  484. %transformation == programme => utilisé et pratique car outillage
  485. Dans l'approche par programmation, une transformation est développée
  486. en utilisant des langages de programmation \og classiques \fg{} (généralistes)
  487. généralement orientés objet, tels que {\java}. La transformation se présente
  488. sous la forme d'un programme %semblable à tout autre programme
  489. et le développeur
  490. a accès à tout l'écosystème existant (environnement de développement,
  491. bibliothèques, documentation, communauté d'utilisateurs\ldots). Cela en fait
  492. une approche très répandue.
  493. %\subsubsection{Approche par \emph{template}}
  494. %\ttodo{?}
  495. Dans l'approche par \emph{template}, un \emph{modèle cible paramétré}
  496. (ou \emph{modèle template}) est défini.
  497. %canevas est défini pour les modèles cibles, on parle de \emph{modèle cible
  498. %paramétré} ou de \emph{modèle template}).
  499. La transformation consiste alors à procéder au remplacement des paramètres en
  500. utilisant les valeurs fournies par le modèle source. %(\todo{Approche du
  501. %logiciel Softeam MDA Modeler})
  502. C'est ce qu'implémente le logiciel \textit{Softeam MDA Modeler}.
  503. %\subsubsection{Approche par modélisation}
  504. %\ttodo{Les langages de modélisation sont définis en utilisant le standard {\mof} et
  505. %sont manipulés en utilisant OCL~\cite{omgocl2}.}
  506. %\ttodo{?}
  507. %concepts de l'{\idm}, modélisation des transformations de modèles
  508. %standard QVT,
  509. %règles de transformation, relations entre source et cible (MM)
  510. La troisième approche identifiée ---~l'approche par modélisation~--- consiste à
  511. %modéliser la transformation et à la
  512. considérer la transformation elle-même comme un modèle conforme à son
  513. métamodèle de transformation. L'{\omg} a défini le standard
  514. \emph{Query/View/Transformation} ({\qvt}) pour modéliser les transformations de
  515. modèles~\cite{omgqvt1}. Il est composé de trois langages conformes à {\mof}
  516. ---~{\qvto}, {\qvtr} et {\qvtc}~--- regroupant deux paradigmes de description
  517. des transformations de modèles :
  518. \begin{itemize}
  519. %\subsubsection{Approche modélisation opérationnelle}
  520. %\ttodo{}
  521. \item[\textbf{Approche opérationnelle :}] une transformation de modèle est exprimée
  522. comme une séquence de pas d'exécution élémentaires qui construisent le
  523. modèle cible (instanciation des nouveaux éléments, initialisation
  524. des attributs, création des liens, {\etc}) en utilisant les informations du
  525. modèle source. Cette approche, appelée \emph{opérationnelle},
  526. est impérative. Elle peut être implémentée en utilisant des outils dédiés
  527. tels que {\kermeta}, {\qvto}, ou en utilisant des bibliothèques
  528. %réflexives ou du code généré
  529. au sein d'un langage généraliste.
  530. %\subsubsection{Approche modélisation relationnelle}
  531. %\ttodo{}
  532. \item[\textbf{Approche relationnelle :}] une transformation de modèle peut aussi être
  533. définie comme des relations devant exister entre la source et la cible à la
  534. fin de la transformation. Cette approche, appelée
  535. \emph{relationnelle} (ou déclarative), n'est pas directement exécutable,
  536. mais peut parfois être traduite en une transformation opérationnelle.
  537. \end{itemize}
  538. La principale différence entre les deux approches est le fait que l'approche
  539. opérationnelle nécessite de décrire le contrôle comme une partie de la
  540. transformation, tandis que cet aspect est géré par le moteur d'exécution dans le
  541. cas de l'approche relationnelle.
  542. %\ttodo{ici, un bloc avec les 3 approches architecturales de~\cite{Sendall2003}
  543. %est commenté}
  544. %\todo{3 Approches architecturales :~\cite{Sendall2003}
  545. %\begin{itemize}
  546. % \item manipulation directe de modèle (\emph{pull}): accès à la représentation
  547. % interne d'un modèle et capacité à manipuler la représentation en utilisant
  548. % une API
  549. % \item représentation intermédiaire : export du modèles dans un format
  550. % standard (XML par exemple) pour pouvoir le transfosrmer avec des outils
  551. % externes
  552. % \item support d'un langage de transformation : langage fournissent un
  553. % ensemble de constructions pour exprimer, composer et appliquer des
  554. % transformations
  555. %\end{itemize}}
  556. %
  557. %\todo{\textbf{Vieux bout de texte, que faire de ça ? utilisable/exploitable ?}\\Certains auteurs~\cite{Sendall2003} considèrent même une troisième
  558. %approche architecturelle basée sur l'introduction d'une représentation
  559. %intermédiaire com\-me {\xml} ou n'importe quelle autre syntaxe concrète
  560. %textuelle. La transformation de modèle peut ensuite être décrite en
  561. %utilisant un langage tel que {\xslt}~\cite{xslt} ou tout autre langage de
  562. %transformation comme Stratego/XT, ASF+SDF, Rascal, etc.}
  563. %\todo{directement dans le monde des modèles ou depuis d'autres espaces
  564. %technologiques : pas une approche à part entière, c'est plus orthogonal aux précédentes
  565. %approches en fait}
  566. %Un aspect différenciant des outils
  567. %utilisés pour la transformation de modèles est le type de structures de données
  568. %sur lesquelles il s'appuie pour représenter les modèles.
  569. %%Un autre aspect différenciant dans les approches de transformations de modèles
  570. %%est la question des structures de données représentant les modèles. %%La
  571. %%%manière dont sont représentés les modèles permet de séparer les outils utilisés
  572. %%%%pour écrire les transformations en familles
  573. %\todo{[ici ou dans la section suivante?]}
  574. Un autre aspect différenciant des transformations de modèles est la question de
  575. la représentation des modèles. Si le type de structure de données permettant de
  576. représenter un modèle peut être indépendant de l'approche, la
  577. représentation choisie a toutefois des conséquences concrètes concernant les
  578. outils utilisés pour les transformations. On peut distinguer ainsi rois grandes
  579. familles d'outils de transformation :
  580. %\todo{[Transformation de fichiers] }
  581. \paragraph{Transformation de texte (fichiers).}
  582. %\subsubsection{Transformation de texte (fichiers)}
  583. L'approche la plus simple et intuitive à comprendre, mais aussi, historiquement,
  584. la plus ancienne, consiste à transformer séquentiellement des fichiers donnés
  585. en entrée à des scripts, qui produisent eux-mêmes des fichiers en sortie. C'est
  586. l'approche adoptée par les outils s'appuyant sur {\awk}, {\sed} ou {\perl}. Ils
  587. conviennent particulièrement bien aux transformations les plus simples, qui sont
  588. généralement assez faciles à comprendre et à maintenir. Cependant, cette
  589. approche nécessite de \emph{parser} l'entrée et de sérialiser la sortie, et ne
  590. permet pas de manipuler une structure plus abstraite~\cite{Gerber2002}. % \todo{[2.4 du papier,
  591. %text-based tools ; argument syntaxe concrète vs abstraite -> mouais, à voir ]}
  592. %Du fait du faible niveau d'abstraction et de leur usage peu approprié pour
  593. %développer des transformations complexes dans un contexte industriel, nous ne
  594. %nous étendrons pas sur ce type d'outils.
  595. %\subsubsection{Transformation d'arbres}
  596. \paragraph{Transformation d'arbres.}
  597. %\todo{[Transformation d'arbres] }
  598. La structure d'arbre est une seconde représentation courante des modèles.
  599. L'arbre en entrée est parcouru et des nœuds sont créés au fur et à mesure de
  600. l'exécution des pas de transformation pour générer un arbre de sortie (ou
  601. modifier directement l'arbre source). C'est l'approche des outils de
  602. transformation reposant sur {\xml} tels que {\xslt}~\cite{xslt} ou
  603. {\xquery}\footnote{Plus exactement {\xqueryuf}~\cite{xqueryuf} étant donné que
  604. {\xquery} 1.0 n'a pas de fonctionnalité pour modifier les
  605. données.}~\cite{xquery,xqueryuf}. C'est aussi traditionnellement l'approche des
  606. compilateurs et, plus généralement, des outils de l'espace technique
  607. \emph{grammarware} (les langages respectent des grammaires ---~des
  608. métamodèles~--- conformes à EBNF).
  609. %\subsubsection{Transformation de graphes}
  610. \paragraph{Transformation de graphes.}
  611. %\todo{[Transformation de graphes] }
  612. Un troisième type de représentation de modèle possible est le graphe (orienté
  613. et étiqueté). C'est souvent la représentation adoptée par les outils modernes
  614. dédiés à la modélisation et aux transformations de modèles (par exemple
  615. AGG~\cite{Taentzer2004}). Cette représentation est fortement liée à l'approche
  616. de développement de transformation par modélisation que nous avons décrite plus
  617. haut. C'est aussi la principale représentation de modèles de la plupart des
  618. outils que nous allons présenter dans la section suivante.
  619. %$transfo(MM_{a_{i}}, MM_{b_{j}}, M_t, M_{a_{i}}) \rightarrow MM_{b_{j}}$
  620. \subsection{Outils existants}
  621. \label{ssec:outils}
  622. %\todo{familles d'outils :
  623. %\begin{itemize}
  624. %\item données == séquences -> fichiers texte -> AWK
  625. %\item données == arbres -> {\xml} ({\xslt}), compilation, Tom, RASCAL, etc.
  626. %\item données == graphes -> {\uml} -> ATL, QVT, Kermeta, etc.
  627. %\end{itemize}
  628. %}
  629. Dans cette section, nous présentons différents outils utilisés dans le cadre de
  630. l'{\idm} pour modéliser ou développer des transformations de modèles. Ces outils
  631. adoptent l'une ou l'autre des approches décrites dans la section
  632. précédente, voire une combinaison de plusieurs méthodes.
  633. Du fait de leur faible niveau d'abstraction et de leur usage peu approprié pour
  634. développer des transformations complexes dans un contexte industriel, nous ne
  635. nous étendrons pas sur les outils de transformation de texte (type {\awk, \sed
  636. ou \perl}).
  637. %\ttodo{\begin{itemize}
  638. % \item QVT
  639. % \begin{itemize}
  640. % \item QVT relations
  641. % \begin{itemize}
  642. % \item Medini
  643. % \item MMT (anciennement M2M)
  644. % \end{itemize}
  645. % \item QVT operational
  646. % \begin{itemize}
  647. % \item SmartQVT
  648. % \end{itemize}
  649. % \item QVt core : \optimalj
  650. % \item Kermeta (op)
  651. % \item jQVT : moteur QVT pour Java, XBase à la place de OCL, support de EMF
  652. % \item QVT-like
  653. % \begin{itemize}
  654. % \item Tefkat (QVT-R)
  655. % \item ATL
  656. % \item {\great}~\cite{Agrawal2003,Balasubramanian2007}
  657. % \item Viatra
  658. % \end{itemize}
  659. % \end{itemize}
  660. % \item transfo de graphes
  661. % \begin{itemize}
  662. % \item Viatra
  663. % \item (TGG) {\moflon}\footnote{\url{http://www.moflon.org}}\cite{Amelunxen2006}
  664. % \item AGG généraliste ; Henshin\footnote{\url{http://www.eclipse.org/modeling/emft/henshin/}}\cite{Arendt2010}
  665. % \end{itemize}
  666. % \item transfo
  667. % \begin{itemize}
  668. % \item Rascal~\cite{Klint2011,Klint2011a} $\rightarrow$ OK
  669. % \item tom $\rightarrow$ OK
  670. % \item Stratego/XT ~\cite{Visser01}-> Spoofax~\cite{Kats2010} $\rightarrow$ OK
  671. % \item Maude~\cite{Clavel1996,Clavel1996a,Clavel2002} ; Maude et MDE~\cite{Romero2007,Rivera2008} MOMENT\footnote{\url{http://moment.dsic.upv.es/}} $\rightarrow$ OK
  672. % \item ASF+SDF $\rightarrow$ OK
  673. % \item TXL
  674. % \end{itemize}
  675. % \item langages généralistes : Java+EMF $\rightarrow$ OK
  676. %\end{itemize}}
  677. \subsubsection{Outils généralistes}
  678. Pour écrire une transformation de modèles, il est nécessaire de sélectionner
  679. non seulement une approche, mais également un langage et un type d'outil. Si le
  680. {\mda} plaide en faveur d'outils et de langages dédiés (\dsl), il est tout à
  681. fait possible d'écrire une transformation de modèles comme n'importe quel autre
  682. programme informatique, en choisissant un langage généraliste. On l'utilise
  683. généralement avec un \emph{framework} fournissant des fonctionnalités pour
  684. manipuler les modèles.
  685. \paragraph{\emf.}{\emf}~\cite{emf09} est un \emph{framework} de modélisation
  686. ouvert initié par IBM. Intégré à l'environnement {\eclipse}, il comprend une
  687. infrastructure de génération de code pour développer des applications à partir
  688. de modèles pouvant être spécifiés en utilisant \uml, \xml ou \java. Ces modèles
  689. peuvent ensuite être importés et manipulés avec les services fournis par
  690. {\emf}. Le métamodèle central du \emph{framework} est {\ecore}. Il est aligné
  691. sur {\emof} (le passage de l'un à l'autre consiste essentiellement en quelques
  692. renommages), ce qui en fait son implémentation de référence. Compte tenu de
  693. l'environnement (\eclipse) dans lequel il est intégré, ainsi que du langage de
  694. programmation généraliste utilisé (\java) et des standards liés ({\xml} et
  695. {\uml}), {\emf} est une technologie intéressante
  696. %car accessible à la plupart des développeurs.
  697. dans le cas d'un développement de transformation par des utilisateurs \og non
  698. spécialistes \fg{}\footnote{Nous désignons par \emph{utilisateur non
  699. spécialiste} tout utilisateur ayant bénéficié d'une formation satisfaisante en
  700. informatique avec un socle théorique minimal, un apprentissage de la
  701. programmation orientée objet, ainsi que l'utilisation d'outils tels que
  702. {\eclipse}. Par exemple, un jeune ingénieur en début de carrière est un
  703. développeur non spécialiste. Son expertise est donc bien supérieure à celle
  704. d'un étudiant n'ayant pas encore reçu de formation, mais inférieure à celle
  705. d'un ingénieur expert de son domaine depuis de longues années.}. Il a
  706. l'avantage d'être bien outillé et maintenu, de bénéficier d'une large
  707. communauté d'utilisateurs et de pouvoir facilement être couplé avec les outils
  708. des écosystèmes \java, \uml et \xml. Nous reparlerons par la suite de {\emf}
  709. qui nous a servi de technologie de support pour le développement de nos outils.
  710. \paragraph{\xml.} Une famille d'outils utilisables pour les transformations est
  711. celle de l'espace technique {\xml}. Les modèles sont des arbres conformes à des
  712. schémas, et des outils de transformation tels que {\xslt}~\cite{xslt} et
  713. {\xqueryuf}~\cite{xqueryuf} permettent de parcourir et transformer les
  714. documents {\xml}. Bien que verbeuse, la syntaxe {\xml} a l'avantage d'être
  715. simple et très répandue. Beaucoup d'outils et d'applications utilisant
  716. nativement {\xml}, il peut être intéressant d'avoir une vision \emph{arbre
  717. \xml} des modèles. Ces outils peuvent aussi être utilisés en conjonction de
  718. \emph{frameworks} tels que {\emf} sans adaptation majeure, ceux-ci ayant
  719. généralement une fonctionnalité de sérialisation {\xml} (standard {\xmi} de
  720. l'initiative {\mda}).
  721. \paragraph{Outils de transformation d'arbres.}
  722. Les outils généralistes de transformation d'arbres ---~plus couramment associés
  723. aux mondes de la compilation, de l'analyse de code et de la réécriture qu'à
  724. l'{\idm}~--- ont aussi leur rôle à jouer en {\idm} et peuvent fournir une base
  725. technique solide pour la construction d'autres outils. Outre le langage
  726. {\tom}~\cite{Moreau2003,Balland2007,TomManual-2.10} sur lequel nous nous sommes
  727. appuyés pour ce travail, d'autres outils de la communauté présentent un intérêt
  728. certain. Notons par exemple
  729. {\rascal}\footnote{Voir \url{http://www.rascal-mpl.org/}.}~\cite{Klint2011,Klint2011a},
  730. le langage de métaprogrammation conçu pour l'analyse de programmes qui succède
  731. à {\asfsdf}~\cite{Brand2001}. Il existe sous forme d'un \emph{plugin}
  732. {\eclipse} et permet d'analyser, d'effectuer des requêtes et de transformer des
  733. programmes sous la forme de modèles conformes à M3\footnote{Métamodèle
  734. générique pour représenter du code parsé dans {\rascal},
  735. \url{http://tutor.rascal-mpl.org/Rascal/Libraries/lang/java/m3/m3.html}.}.
  736. %expérience d'utilisation de Rascal avec M3 (métamodèle générique pour
  737. %représenter du code parsé dans Rascal), analyse, requêtes, transformations
  738. Pour le même type d'utilisation, l'outil
  739. {\spoofax}\footnote{Voir \url{http://strategoxt.org/Spoofax/}.}~\cite{Kats2010}
  740. ---~lui aussi disponible sous forme d'un \emph{plugin} {\eclipse}~--- intègre
  741. {\stratego}~\cite{Visser1998},\cite{Visser01} et {\sdf}. Il permet d'écrire des
  742. transformations de programmes en utilisant des règles et des stratégies de
  743. réécriture.
  744. Le système {\maude}\footnote{Voir \url{http://maude.cs.uiuc.edu/}.}\cite{Clavel1996,
  745. Clavel1996a, Clavel2002} est un autre outil de réécriture. Il comprend une
  746. infrastructure orientée objet permettant d'implémenter des modèles et
  747. métamodèles. Des travaux ont été menés dans ce sens par plusieurs
  748. équipes~\cite{Romero2007,Rivera2008,Rusu2011}, ce qui a donné naissance à
  749. divers outils dont le projet
  750. {\moment}\footnote{Voir \url{http://moment.dsic.upv.es/}.} qui permet d'effectuer des
  751. transformations de modèles {\emf} avec {\maude}~\cite{Boronat2009,Boronat2010}.
  752. \paragraph{Outils de réécriture de graphes.} L'une des représentations de
  753. modèles pouvant être le graphe, l'utilisation d'outils de réécriture de graphes
  754. est une approche qui a été expérimentée~\cite{Taentzer10,Schurr2008} en
  755. utilisant des outils catégoriques tels que le \emph{single-pushout} et le
  756. \emph{double-pushout}, ainsi que le formalisme de spécification \emph{Triple
  757. Graph Grammar} (TGG)~\cite{Konigs2005}. Dans cette catégorie d'outils, on
  758. notera {\moflon}\footnote{Voir \url{http://www.moflon.org/}.} qui repose sur le
  759. mécanisme TGG pour implémenter des transformations de
  760. modèles~\cite{Amelunxen2006},
  761. {\henshin}\footnote{Voir \url{http://www.eclipse.org/modeling/emft/henshin/}.}\cite{Arendt2010}
  762. reposant sur le système AGG\footnote{\emph{Attributed Graph Grammar} :
  763. \url{http://user.cs.tu-berlin.de/~gragra/agg/}.}\cite{Taentzer2004}, ainsi que
  764. {\viatra}\footnote{Sous-projet de GMT :
  765. \url{http://www.eclipse.org/gmt/}.}~\cite{Varro2007}. Du fait de la complexité
  766. des algorithmes liés à la transformation de graphes ---~et donc des
  767. ressources nécessaires pour transformer efficacement des graphes de grande
  768. taille~---, le principal problème de l'approche par réécriture de graphes
  769. réside dans le coût élevé des transformations et la difficulté de passer à
  770. l'échelle.% son passage à l'échelle.
  771. \subsubsection{Outils dédiés}
  772. La solution largement mise en avant en {\idm} pour le développement de
  773. transformations de modèles est l'utilisation de langages dédiés. On pense
  774. notamment au standard {\qvt}~\cite{omgqvt1} proposé par l'initiative {\mda}.
  775. \paragraph{{\qvt}.}Il est composé de trois langages de transformation
  776. différents, comme illustré par la figure~\ref{fig:qvt} : d'une part {\qvtr} et
  777. {\qvtc} pour la partie déclarative, d'autre part {\qvto} pour la partie
  778. impérative.
  779. %\ttodo{refaire schéma ? schéma officiel/de la norme ci-dessous moche}
  780. \begin{figure}[h]
  781. \centering
  782. \input{figures/schemaQVT_new}
  783. %\includegraphics[scale=1.0]{figures/schemaQVTofficiel.png}
  784. \caption{Architecture du standard {\qvt}~\cite{omgqvt1}.}
  785. \label{fig:qvt}
  786. \end{figure}
  787. {\qvtr} et {\qvtc} constituent la partie déclarative de {\qvt}. {\qvtr} est un
  788. langage orienté utilisateur avec une syntaxe textuelle et graphique permettant
  789. de définir des transformations à un niveau d'abstraction élevé (représentation
  790. graphique possible). {\qvtc} est quant à lui plus bas niveau avec uniquement
  791. une syntaxe textuelle. Il sert à spécifier la sémantique de {\qvtr} sous la
  792. forme d'une transformation \emph{Relations2Core}. L'expression d'une
  793. transformation avec {\qvt} déclaratif est une association de motifs
  794. (\emph{patterns}) entre la source et la cible. Bien que relativement complexe à
  795. prendre en main, il permet de définir des transformations bidirectionnelles.
  796. {\optimalj} était une implémentation commerciale de {\qvtc}, mais son
  797. développement a cessé. Les outils
  798. {\mediniqvt}\footnote{\url{http://projects.ikv.de/qvt/wikia}}, {\eclipsemmt}
  799. (anciennement {\eclipsemtom}\footnote{\url{http://www.eclipse.org/m2m/}}) ainsi
  800. que {\moment}~\cite{Boronat2009} implémentent quant à eux {\qvtr}.
  801. Le langage {\qvto} supporte la partie impérative de {\qvt}. De par la nature
  802. même du style impératif, la navigation et la création d'éléments du modèle
  803. cible sont explicites. {\qvto} étend {\qvtr} et {\qvtc} par ajout de
  804. constructions impératives telles que la séquence, la répétition, la sélection,
  805. {\etc} ainsi que par des constructions {\ocl}. {\smartqvt} et
  806. {\eclipsemmtoqvt} implémentent {\qvto}.
  807. %\ttodo{à mettre ?}
  808. %Le tableau\needcite{} résume la classification des outils implémentant {\qvt},
  809. %selon qu'ils implémentent la partie déclarative ou impérative.
  810. %\begin{tabular}[h]{m{2.5cm}m{5cm}}
  811. % & \\
  812. % \hline
  813. %Core & (OptimalJ (fini)\\
  814. %Operational Mappings& Borland Together Architect 2006\newline SmartQVT\newline Eclipse M2M\newline ATL\\
  815. %Relations & \mediniqvt\newline ModelDorf\newline MomentQVT\newline M2M, ATL\\
  816. %\end{tabular}
  817. %Comparaison QVTo vs QVTr, dans Guduric2009\\
  818. %\begin{tabular}{m{0.25\linewidth}|m{0.35\linewidth}|m{0.35\linewidth}}
  819. %Critère & QVT-Operational & QVT-Relational\\
  820. %\hline
  821. %Paradigme de programmation & impératif & déclaratif \\
  822. %Niveau d'abstraction & bas niveau & haut niveau \\
  823. %Traçabilité & unidirectionnelle & bidirectionnelle \\
  824. %Compétences requises & répandues & rares, inhabituelles\\
  825. %Scénarios de transfo & génération ou synchro dans 1 sens & génération+synchro
  826. %2 sens,
  827. %contrôle de conformité, \\
  828. %Niveau de contrôle & Précis & générique \\
  829. %Complexité du code & Standard & Initialement complexe \\
  830. %Organisation du code & Comme QVT-R + bibliothèques de transfo & héritage de
  831. %transformation, surcharge de règles\\
  832. %Représentation graphique & Inappropriée & Possible \\
  833. %Outils & SmartQVT & mediniQVT \\
  834. %\end{tabular}
  835. \paragraph{\emph{{\qvt}-like}.}
  836. %n'implémente pas à proprement parler le standard {\qvt}, cependant on peut le
  837. %classer dans la catégorie des \emph{{\qvt}-like}, c'est-à-dire qu'il s'agit
  838. %d'un langage de transformation similaire à {\qvt}.
  839. Les outils dont nous allons parler ici n'implémentent pas, à proprement parler,
  840. le standard {\qvt}, mais sont cependant suffisamment proches et similaires pour
  841. être souvent classés dans la catégorie des \emph{{\qvt}-like}. Le premier
  842. d'entre eux est très certainement
  843. {\atl}\footnote{\url{http://www.eclipse.org/atl/}}~\cite{Bezivin2003-firstExperiment,Bezivin2005,Jouault2006,JouaultABK08}
  844. : il s'agit d'un des langages les plus utilisés dans la communauté des
  845. modèles et est intégré dans l'environnement {\eclipse}~\cite{atl04}. Il permet
  846. de spécifier une transformation d'un ensemble de modèles sources en un ensemble
  847. de modèles cibles. Écrire un programme {\atl} consiste à écrire des règles
  848. (\emph{rules}) en donnant une source et une cible. Une règle peut faire appel à
  849. des fonctions d'aide (\emph{helper}) permettant d'effectuer un traitement
  850. (collecte de valeurs dans une liste, \etc).
  851. %\todo{\begin{itemize} \item ATL :~\cite{Bezivin2003-ATLTechReport}, premières
  852. %XP~\cite{Bezivin2003-firstExperiment}({\xslt} into XQuery), plus
  853. %récent~\cite{JouaultABK08}, \item Environnement Eclipse pour ATL~\cite{atl04}
  854. %\item Traçabilité (\emph{loosely coupled}) :~\cite{Jouault2005} \item Modeling
  855. %in Large, modeling in small :~\cite{Bezivin2005} \item Syntaxe ATL
  856. %:~\cite{Jouault2006} \item Poster, fiche de résumé :~\cite{Jouault2006a} \item
  857. %comparaison CGT vs AGG vs ATL :~\cite{Groenmo2009} \end{itemize}} Dans la
  858. %suite du document, les exemples sur lesquels nous nous appuyons sont tous des
  859. %exemples qui ont déjà été écrits en {\atl}.
  860. Outre {\atl}, d'autres outils \emph{{\qvt}-like} existent, notamment
  861. {\tefkat}\footnote{\url{http://tefkat.sourceforge.net/}}~\cite{Lawley2006} (qui
  862. propose une syntaxe à la {\sql} et offre une implémentation de {\qvtr}),
  863. {\great}~\cite{Agrawal2003,Balasubramanian2007} et {\viatra}~\cite{Varro2007},
  864. qui sont des outils de transformation de graphes. Ces deux derniers sont
  865. distribués sous forme d'un \emph{plugin} {\eclipse} ce qui leur permet
  866. d'interagir avec l'environnement {\emf}. Enfin, dans cette catégorie d'outils,
  867. nous pouvons ajouter
  868. {\jqvt}\footnote{\url{http://sourceforge.net/projects/jqvt/}} qui est un moteur
  869. {\qvt} pour {\java}. Il est intégré dans {\eclipse}, est compatible avec {\emf}
  870. et n'utilise pas {\ocl}, mais
  871. {\xbase}\footnote{\url{https://wiki.eclipse.org/Xbase}}.
  872. \paragraph{\kermeta.} Il s'agit d'un environnement de métamodélisation dans
  873. {\eclipse}. Il permet de définir et spécifier des langages de modélisation
  874. dédiés. Le langage
  875. {\kermeta}\footnote{\url{http://www.kermeta.org}}~\cite{kermeta10} mêle
  876. plusieurs paradigmes de programmation (orienté objet, orienté
  877. aspects~\cite{Muller2005,Muller2005a}, par contrats, fonctionnel) et fournit un
  878. support complet de {\ecore} et de {\emof}. Ainsi, tout modèle {\kermeta}
  879. conforme à {\emof} est aussi un programme {\kermeta} valide. Une définition
  880. {\kermeta} peut être compilée pour produire un modèle exécutable. Le code
  881. généré est exprimé en {\java} et {\scala}, qui peut être ensuite compilé pour
  882. être exécuté sur la machine virtuelle {\java}.
  883. %Le langage {\kermeta} repose sur
  884. %\ttodo{is'étendre un peu plus sur {\kermeta} ; parler de K2/K3 ; de la génération
  885. %de code jvm/scala.}
  886. %impératif
  887. %kevoree\footnote{\url{http://kevoree.org}}
  888. %\section{Validation et vérification du logiciel}
  889. %intro, définitions, contraintes, outils
  890. %
  891. %\ttodo{augmenter la qualité du soft, la confiance dans le logiciel :
  892. %vérification. Comment ? tests et simulation ; preuve mathématique ; MC
  893. %(exploration d'espaces d'états, tests exhaustifs, recherche de contre-exemple)}
  894. %
  895. %Dans cette section, nous abordons différentes manières de valider et vérifier
  896. %le logiciel afin d'en améliorer sa qualité, et donc la confiance que
  897. %l'utilisateur peut avoir dans les logiciels qu'il utilise.
  898. %
  899. %\ttodo{pourquoi ai-je écrit ces 4 paragraphes ? utile ou pas ?}
  900. %
  901. %\paragraph{Tests.}Une première approche, intuitive, est de tester intensément
  902. %tout programme informatique avant sa mise en production. Il existe diverses
  903. %méthodologies et techniques pour tester du code. On citera par exemple la mise
  904. %en place de tests unitaires censés tester des \emph{unités} de code (fonctions,
  905. %classes). Cela a été popularisé par les méthodes agiles, et particulièrement
  906. %par l'approche dirigée par les tests (\emph{Tests Driven Engineering}). Bien
  907. %que l'utilisation de tests permette d'améliorer grandement la qualité du
  908. %logiciel durant sa phase de développement, la solution des tests unitaires
  909. %commence à montrer ses limites lors de développements de logiciels complexes où
  910. %les \emph{bugs} peuvent avoir des origines plus nombreuses. Du fait des coûts
  911. %et des délais de développement, il n'est pas rare de ne pas écrire de tests
  912. %pour se concentrer sur le logiciel lui-même. Par conséquent, certains morceaux
  913. %de code ne sont pas testés et sont donc susceptibles de recéler des
  914. %\emph{bugs}. Des techniques de génération automatique de tests ont vu le jour
  915. %\ttodo{quelques réf aussi} pour augmenter la couverture de tests et tester au
  916. %maximum les cas limite. D'autres comportements anormaux peuvent aussi naître
  917. %d'une combinaison de comportements normaux de modules fonctionnels
  918. %indépendamment. Le problème pouvant alors provenir d'une incompréhension entre
  919. %les équipes de développeurs, ou entre le client et le fournisseur
  920. %(spécification ambiguë).\\
  921. %Cependant, si l'intégration de tests est absolument nécessaire dans le
  922. %processus de développement d'un logiciel, elle se révèle insuffisante dans le
  923. %cas du logiciel critique. En effet, tester intensément un logiciel permet
  924. %de tester son comportement dans la plupart des cas, mais rien ne garantit que
  925. %toutes les situations ont été testées.\ttodo{un peu de contexte sur le test}
  926. %
  927. %\paragraph{Preuve.}À l'opposé, une autre approche pour améliorer la confiance
  928. %dans un logiciel consiste à prouver mathématiquement les algorithmes. Le
  929. %problème étant alors que la preuve formelle est généralement faite sur les
  930. %algorithmes ou les spécifications, mais pas sur l'implémentation elle-même. Or,
  931. %le facteur humain n'est pas à négliger, l'implémentation concrète du logiciel
  932. %dépendant fortement du développeur et des outils utilisés durant le processus.
  933. %En outre, lors d'une preuve, le contexte réel n'est pas forcément pris en
  934. %compte et certaines conditions d'utilisation réelles peuvent fortement
  935. %influencer le comportement et la fiabilité de l'application.
  936. %\ttodo{petite réf sur les protocoles réseau ? protocole ethernet ? gap pratique
  937. %vs théorie car phénomènes physiques (bruit), ou alors physique, bio}\\
  938. %\todo{"Beware of bugs in the above code; I have only proved it correct, not
  939. %tried it." --- D.E.Knuth}
  940. %
  941. %
  942. %\paragraph{Simulation.}Pour répondre à ce problème de réalisme du comportement
  943. %d'une système sous conditions d'utilisation réelles, une approche liée aux
  944. %tests revient à simuler ou émuler le système pour étudier son comportement et
  945. %détecter les anomalies. L'intérêt de ce type d'approche est que l'on peut
  946. %travailler sur un système qui serait coûteux à déployer en conditions réelles.
  947. %Notons par exemple les domaines du nucléaire ou de l'avionique \ttodo{référence
  948. %à l'A380 entièrement simulé ?} qui ne permettent pas aisément des tests
  949. %logiciels en conditions réelles, en particulier lors des premières étapes de
  950. %développement. \ttodo{réf aux gens qui font de la simulation pour \emph{tester} ?}
  951. %
  952. %Par rapport une preuve formelle, les méthodes de tests ont aussi l'inconvénient
  953. %d'être fortement conditionnées par la plateforme sur lesquels els sont exécutés
  954. %et par les technologies employées.
  955. %
  956. %\paragraph{Model-checking.}Le \emph{model-checking} est une autre approche
  957. %entre preuve et test. Elle consiste modéliser un système selon un formalisme
  958. %donné, puis à explorer les espaces d'états possibles de ce système pour le
  959. %valider. Cela revient à du test exhaustif, ce qui a donc valeur de preuve.
  960. %L'intérêt du \emph{model-checking} est que ---~contrairement aux tests~--- il est
  961. %généralement indépendant de la plateforme d'exécution et qu'il apporte une
  962. %validation formelle du système. On peut toutefois reprocher au
  963. %\emph{model-checking} de ne pas toujours être proche de la réalité et d'avoir
  964. %un coût en ressources élevé dans le cas de systèmes complexes. Cela a conduit
  965. %certains à adopter des approches hybrides de \emph{model-checking} à
  966. %l'exécution sur des applications réelles simulées \ttodo{réf. à ceux qui font
  967. %du MC sur des binaires à run-time par ex ? domaine différent, mais un peu lié}.
  968. %
  969. %Dans le cadre du développement de logiciels critiques, la vérification des
  970. %applications est imposée par la loi et des normes à respecter. Ainsi, tout
  971. %logiciel critique devant être embarqué dans un avion doit suivre une procédure
  972. %de certification.
  973. %
  974. %\todo{problèmes : \begin{itemize}
  975. % \item outils de modélisation non qualifiés et non certifiés => certifier
  976. % des outils ou aider à certifier
  977. % \item pb {\mde} : beaucoup d'outils dans les chaînes de développement => introduction des
  978. %outils "certifieurs" automatiques, problématique
  979. %\end{itemize}}
  980. %
  981. %\subsection{Qualification}
  982. %\ttodo{définir, expliquer, donner les normes, dont DO-XXX}
  983. %
  984. %La qualification d'un logiciel participe à atteindre un objectif.
  985. %
  986. %
  987. %
  988. %\subsection{Certification}
  989. %\ttodo{définir, expliquer.}
  990. %
  991. %
  992. %\ttodo{Différences entre qualification et certification.}
  993. %Problématiques : traçabilité, séparer spécification/implémentation/vérification
  994. %
  995. %
  996. %\section{Traçabilité}
  997. %ici ? traçabilité interne vs traçabilité de spécification ; intérêt (contrainte
  998. %des précédentes sous-sous-sections). Souvent traçabilité interne ou fortement
  999. %liée à l'implémentation de la transformation. Se fait bien techniquement.
  1000. %
  1001. \section{Limitations actuelles et points d'amélioration}
  1002. Le lancement de l'initiative {\mda} a donné un véritable élan à l'{\idm} et de
  1003. nombreux outils ont vu le jour. Cependant, malgré l'intérêt indéniable de
  1004. cette approche pour le développement logiciel, l'{\idm} n'est pas encore
  1005. fortement établie dans les chaînes de développement industrielles et gagne
  1006. lentement du terrain.
  1007. La complexité des systèmes s'accroissant, l'industrie voit dans l'{\idm} une
  1008. solution pour améliorer leur développement tout en diminuant leurs coûts. En
  1009. effet, pour appréhender cette complexité, il est nécessaire pour les
  1010. développeurs d'abstraire les problèmes. Pour ce faire, il faut des outils
  1011. accessibles et utilisables dans un cadre industriel.
  1012. La grande diversité des outils peut aussi être un frein à l'adoption des
  1013. techniques de l'{\idm} : un trop grand nombre d'outils et de technologies
  1014. segmente le domaine, ce qui peut empêcher que les communautés atteignent une
  1015. masse critique. De plus, beaucoup d'outils adoptant les concepts de l'{\idm}
  1016. sont issus de la recherche et sont utilisés par un public académique. N'ayant
  1017. pas forcément vocation à industrialiser les prototypes développés, le monde de
  1018. la recherche produit souvent des outils peu accessibles tant sur leur forme
  1019. (ergonomie, non conformité aux pratiques industrielles habituelles) que sur le
  1020. fond (concepts peu connus et maîtrisés par peu de monde, expertise nécessaire).
  1021. Ce frein lié à la multiplicité des outils peu accessibles peut être levé par
  1022. l'établissement de standards tels que ceux proposés par l'{\omg}, ainsi que par
  1023. le déploiement d'environnements comme {\eclipse} pour pousser à la
  1024. cristallisation et au développement de communautés autour des technologies
  1025. liées.
  1026. Un autre aspect limitant vient de l'adaptation des chaînes de développement
  1027. logicielles existantes à ces nouvelles méthodes de développement et à ces
  1028. nouveaux outils. Compte tenu de leur coût d'intégration et des
  1029. changements induits par une telle modification d'un processus de développement,
  1030. il n'est pas raisonnable d'adopter un nouvel outil encore à l'état de prototype
  1031. ou nécessitant des compétences spécifiques maîtrisées par un petit nombre
  1032. d'experts ou encore n'ayant aucun lien avec des technologies déjà présentes
  1033. dans la chaîne de développement existante. Il faut donc mettre en œuvre des
  1034. ponts entre les technologies pour les rendre plus attrayantes et plus
  1035. facilement intégrables, afin de faciliter ce processus fortement consommateur
  1036. de ressources.
  1037. Outre l'adaptation normale des chaînes de développement aux nouveaux outils,
  1038. certains domaines ont des contraintes strictes de qualité concernant les outils
  1039. de production du logiciel. C'est le cas des chaînes de développement des
  1040. systèmes critiques que l'on retrouve notamment en aéronautique, dans le secteur
  1041. automobile, ainsi que dans celui de la santé. Les logiciels produits et servant
  1042. à produire sont soumis à des exigences légales nécessitant des processus lourds
  1043. de validation du logiciel. Le domaine de l'{\idm} étant relativement
  1044. jeune, il n'est pas encore pleinement adopté dans ce type d'industrie qui a
  1045. besoin d'outils adaptés à ses contraintes permettant de faciliter la validation
  1046. du logiciel à moindre coût (et présenter ainsi un intérêt supérieur par rapport
  1047. à l'existant).
  1048. L'un des aspects les plus intéressants est l'usage de l'{\idm} dans le cadre du
  1049. développement fiable : pour les problématiques légales évoquées précédemment, la
  1050. demande industrielle est très forte, et peu de réponses concrètes existent ou
  1051. alors pour des coûts déraisonnables. C'est dans ce contexte que nous nous
  1052. proposons d'apporter un élément de solution avec ce travail, afin d'accompagner
  1053. l'adoption de nouveaux outils tout en améliorant la qualité du logiciel. Nous
  1054. abordons la problématique de la validation du logiciel dans le
  1055. chapitre~\ref{ch:verification}.
  1056. %\todo{limitations dans quel contexte ?
  1057. %\begin{itemize}
  1058. %\item {\idm} : multiplication des outils
  1059. %\item souci validation avec beaucoup d'outils (contexte)
  1060. %\item approches actuelles coûteuses
  1061. %\item on pourrait apporter des outils pour faciliter la validation, et
  1062. %augmenter la confiance dans le logiciel
  1063. %\item technique : choix des outils ; DSL vs GPL ; framework
  1064. %\item traçabilité : trace exploitable -> on va en parler plus tard, dans le
  1065. % chapitre suivant
  1066. %\end{itemize}}
  1067. % vim:spell spelllang=fr