ch-evaluation.tex 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. % vim:spell spelllang=fr
  2. \chapter{Résultats expérimentaux}
  3. \label{ch:evaluation}
  4. Dans ce chapitre, nous présentons des résultats expérimentaux obtenus avec nos
  5. outils, notamment leurs performances. Nous discutons notre approche et nos
  6. choix technologiques, leur intérêt, ainsi que les limitations et perspectives de
  7. notre implémentation technique.
  8. Nous avons tenté d'évaluer nos outils afin d'améliorer les points limitants et
  9. de parfaire nos points forts par rapport à d'autres outils tels qu'{\atl} ou
  10. d'autres outils de transformation utilisant des stratégies de réécriture.
  11. \section{Utilisabilité}
  12. %\ttodo{revoir, notamment faire des références à ATL ici}
  13. Compte tenu du fait qu'un de nos objectifs était de simplifier le processus de
  14. développement pour les utilisateurs, un premier aspect de notre évaluation
  15. concerne l'utilisabilité de nos outils.
  16. Fortement dépendant du contexte et de l'utilisateur, ce critère est
  17. difficilement mesurable et quantifiable. Nous pouvons toutefois exposer des
  18. retours utilisateurs.
  19. %Ce critère ne peut être évalué de
  20. %manière complètement formelle et objective (avec des valeurs chiffrées), mais
  21. %nous pouvons exposer des retours utilisateurs.
  22. Nous avons pu tester en conditions réelles une partie de nos outils : il
  23. s'agissait de développer une transformation en {\tomjava} dans le cadre du
  24. projet {\quarteft} par une entreprise partenaire du projet. Le développeur
  25. était un ingénieur en informatique maîtrisant le langage {\java} ainsi que
  26. l'environnement {\eclipse}. Il ne connaissait pas {\tom}, ni les langages à
  27. base de règles de réécriture, ni le concept de stratégie avant de commencer.
  28. La prise en main du langage {\tom} sans les nouvelles constructions s'est faite
  29. sans aucune difficulté et sans réel besoin de support de notre part hormis la
  30. documentation officielle en ligne. Nous avons donné un support informel pour
  31. l'usage des stratégies {\tom} afin d'accélérer son développement. L'outil
  32. {\tomemf} a été utilisé pour générer les ancrages formels inclus dans la
  33. transformation. Si l'usage en lui-même n'a pas posé de problème à l'ingénieur
  34. (peu d'options différentes, documentation centralisée), nous lui avons fourni
  35. un support plus important. En effet, l'usage par un non développeur a permis de
  36. découvrir des \emph{bugs} et des manques de fonctionnalités (besoin de
  37. génération massive de \emph{mappings} en une seule fois qui a donné lieu à la
  38. fonctionnalité de génération multiple de \emph{EPackages}, conflits de noms
  39. qui a donné lieu à la fonctionnalité de préfixage, génération multiple des
  40. ancrages pour les bibliothèques UML2 et {\ecore}, {\etc}). Ces premiers retours
  41. utilisateur ont joué un rôle important dans l'amélioration de l'outil
  42. {\tomemf}.
  43. Lors de ce test en conditions réelles, l'utilisateur a suivi la méthodologie
  44. avec les stratégies, mais n'a cependant pas utilisé les constructions {\tom}
  45. haut-niveau dédiées aux transformations de modèles. En effet, elles n'étaient
  46. pas incluses dans la version stable du moment.
  47. L'aspect hybride de notre approche a permis à l'utilisateur d'être très
  48. rapidement opérationnel sans qu'il ait à apprendre un nouveau langage complet.
  49. De plus, du fait de son environnement de développement, sa transformation a pu
  50. être immédiatement intégrée dans les outils développés, ce qui n'aurait pas été
  51. aussi simple avec des langages tels que {\atl}, {\kermeta} ou même {\stratego}. Si
  52. notre approche utilisant {\tom} fournit moins de fonctionnalités pour la
  53. transformation de modèles que {\atl}, nous avons l'avantage de ne pas nous
  54. séparer des fonctionnalités (bibliothèques notamment) du langage généraliste
  55. considéré ({\java} dans notre cas), ce qui permet à l'utilisateur d'exprimer
  56. tout de même ce qu'une construction {\tom} ne pourrait pas fournir nativement.
  57. Le principe d'utiliser des stratégies de réécritures pour encoder les
  58. transformations de modèles semble aussi un choix judicieux du point de vue
  59. de l'utilisateur : la décomposition d'une transformation en transformations
  60. élémentaires est naturelle pour appréhender la complexité et le principe
  61. d'écriture de règles est aussi courant dans d'autres langages. Nous ne
  62. changeons donc pas fondamentalement les habitudes du développeur. Grâce aux
  63. mécanismes en jeu dans notre approche, nous avons une forte expressivité dans
  64. les motifs (membre gauche) et nous offrons une grande liberté à l'utilisateur
  65. dans les actions (membre droit) grâce à leur nature composite.
  66. Le fait que notre approche se fonde sur un changement d'espace technologique
  67. pourrait paraître limitant en première approche (outil supplémentaire pour
  68. opérer le changement), cependant cet outil (générateur d'ancrages formels) est
  69. extrêmement simple d'utilisation et ne nécessite qu'une seule intervention en
  70. début de développement.
  71. Le choix de l'usage d'un outil par rapport à un autre ne peut être définitif et
  72. universel : il doit être effectué de manière réfléchie en tenant compte de
  73. critère tels que l'environnement de développement, les fonctionnalités
  74. respectives des outils envisagés ainsi que les performances des outils. Dans un
  75. contexte {\java}+{\emf}, compte tenu des premiers retours, le choix de nos
  76. outils est pertinent.
  77. \section{Performances}
  78. De manière générale, un outil peut être extrêmement intéressant
  79. scientifiquement, mais inutilisable du fait de ses performances (implémentation
  80. inefficace ou problème à résoudre trop complexe). Dans un cadre industriel,
  81. cette question se pose rapidement, étant donné que des modèles \og réels \fg
  82. (généralement de plus grandes tailles que ceux utilisés pour le prototypage
  83. initial) sont transformés. Il est donc naturel d'évaluer ses performances, même
  84. si n'est pas l'objectif premier de l'outil. Dans le domaine de la vérification
  85. du logiciel, les outils de \emph{model-checking} sont généralement des outils
  86. consommateurs de ressources (temps et mémoire), ce qui peut constituer un
  87. goulet d'étranglement dans une chaîne de développement imposant une
  88. vérification de ce type. Il ne faut donc pas que les autres traitements aient
  89. des performances moindres (et deviendraient de fait le nouveau goulet
  90. d'étranglement), ou que leurs temps d'exécution ajoutent trop de délais avant
  91. ce goulet. Un second aspect de l'évaluation des performances vient du fait que
  92. beaucoup d'outils de transformation existent, mais leur passage à l'échelle est
  93. souvent un facteur limitant. C'est donc dans ce contexte que nous avons
  94. effectué une première évaluation des performances de nos outils, d'une part
  95. {\tomemf}, d'autre part les constructions haut-niveau dédiées aux
  96. transformations de modèles.
  97. \subsection{{\tomemf}}
  98. Nous avons expérimenté {\tomemf} sur divers métamodèles afin de nous assurer de
  99. son passage à l'échelle. Très rapidement, nous avons constaté que peu de très
  100. gros métamodèles sont utilisés, les métamodèles {\ecore} et {\uml} étant
  101. souvent les plus gros métamodèles utilisés régulièrement. Nous avons donc
  102. appliqué notre outil sur ces métamodèles pour générer les \emph{mappings}
  103. correspondant, ainsi que sur les parties des deux métamodèles du cas
  104. d'utilisation présenté dans le chapitre~\ref{sec:simplepdl2pn}.
  105. \begin{table}[h]
  106. \begin{center}
  107. \input{tables/statsTomEMF}
  108. \caption{Tailles de quelques métamodèles significatifs ainsi que des
  109. \emph{mappings} {\tomemf} correspondant.}
  110. \label{table:statsTomEMF}
  111. \end{center}
  112. \end{table}
  113. % nom : typeterm / op / oplist / oparray / lignes
  114. %SimplePDL : 8 / 8 / 0 / 2 /185
  115. %PetriNet : 8 / 6 / 0 / 2 / 185
  116. Nous constatons que les temps de génération donnés dans la
  117. table~\ref{table:statsTomEMF} sont extrêmement bas, de l'ordre de la seconde.
  118. Notre outil de génération d'ancrages est tout à fait capable de gérer un \og
  119. gros \fg{} métamodèle, dans un temps négligeable par rapport à la durée de
  120. développement et d'exécution d'une transformation comme nous allons le voir.
  121. Considérant ces temps de génération pour de tels métamodèles, nous estimons que
  122. les performances de l'outil {\tomemf} sont largement suffisantes et qu'elles ne
  123. sont pas limitantes dans la chaîne de développement.
  124. Outre l'aspect performances que nous jugeons satisfaisant, cet outil s'est
  125. avéré simple à utiliser pour un utilisateur complètement extérieur au projet
  126. {\tom}. Cela nous donne un indice positif sur l'utilisabilité de notre outil.
  127. \subsection{Transformation}
  128. %%\ttodo{chiffres plus à jour ! attention, Benchmark pour SimplePDL, les temps sont exprimés en millisecondes (ms). }
  129. Afin de tester les performances du langage, nous avons utilisé la
  130. transformation \emph{SimplePDLToPetriNet} sur des modèles de tailles
  131. différentes. Nous avons fait ce choix, car ayant servi de support au
  132. développement de nos outils, nous en avions une bonne maîtrise tout en ayant
  133. une confiance élevée dans son implémentation. Nous l'avons aussi implémentée
  134. dans d'autres langages afin d'avoir des points de comparaison avec l'existant.
  135. S'agissant d'une transformation connue dans le domaine, nous avons pu corriger
  136. et améliorer ces implémentations grâce à celles existantes.
  137. Pour le modèle d'entrée, nous avons défini un processus paramétrable généré de
  138. manière déterministe en fonction de deux paramètres :
  139. \begin{itemize}
  140. \item le nombre de \emph{WorkDefinitions} présentes (\texttt{N}) ;
  141. \item le fait qu'il y ait ou non des \emph{WorkSequences}.
  142. \end{itemize}
  143. Le processus d'entrée n'est pas hiérarchique, mais cela n'a pas d'impact sur la
  144. complexité du modèle d'entrée étant donné que :
  145. \begin{itemize}
  146. \item l'image d'un \emph{Process} est plus simple que l'image d'une
  147. \emph{WorkDefinition}, nous pouvons nous limiter à jouer sur le nombre de
  148. \emph{WorkDefinitions} plutôt que sur le nombre de \emph{Process} ;
  149. \item un processus père existant, des éléments \emph{resolve} sont dans tous
  150. les cas créés pour chaque \emph{WorkDefinition} ;
  151. \item l'ajout de séquences entre les activités permet d'ajouter d'autres
  152. éléments \emph{resolve} et donc augmenter la complexité du modèle d'entrée
  153. et de la transformation.
  154. \end{itemize}
  155. Il s'agissait surtout d'être en mesure de générer des modèles d'entrée définis
  156. simplement, mais parfaitement maîtrisés (dont les éléments sources sont
  157. dénombrables de manière fiable) et pouvant atteindre de très grosses tailles
  158. (plusieurs millions d'éléments). La figure~\ref{fig:inputModel} donne la forme
  159. générale d'un tel processus donné en entrée ainsi que le réseau de Petri
  160. résultant par l'application de la transformation \emph{SimplePDLToPetriNet}.
  161. \begin{figure}[h]
  162. \begin{center}
  163. \input{figures/inputModel}
  164. \caption{Forme générale des modèles d'entrée générés.}
  165. \label{fig:inputModel}
  166. \end{center}
  167. \end{figure}
  168. En fonction des deux paramètres et de la définition du processus, nous pouvons
  169. parfaitement dénombrer les éléments constituant le modèle source, ainsi que
  170. ceux constituant le résultat. Il est aussi possible de dénombrer précisément
  171. les éléments intermédiaires \emph{resolve} créés.
  172. Ainsi, dans notre exemple, pour un processus avec $N$ \emph{WorkDefinitions}
  173. ($N>1$) chaînées, il y a $N-1$ \emph{WorkSequences}. Les règles de
  174. transformation produisant des réseaux de Petri identiques à ceux vus dans le
  175. chapitre~\ref{sec:simplepdl2pn} que nous rappelons dans la
  176. figure~\ref{fig:rappel2PN}, nous établissons le
  177. tableau~\ref{table:productionRules} donnant les règles de production des
  178. éléments sources. Dans ce tableau, $n$ et $r$ signifient respectivement
  179. $normal$ et $resolve$, les abréviations Pl, Tr, A, P, WD, WS correspondent
  180. respectivement à \emph{Place}, \emph{Transition}, \emph{Arc}, \emph{Process},
  181. \emph{WorkDefinition} et \emph{WorkSequence}. Les trois dernières colonnes du
  182. tableau sont les totaux d'éléments \emph{resolve} créés (T$_{resolve}$),
  183. d'éléments créés (T$_{\text{\textit{intermédiaire}}}$), et d'éléments dans les
  184. versions finales des images des sources après résolution (T$_{final}$).
  185. \begin{figure}[!h]
  186. \begin{center}
  187. \begingroup
  188. \tikzset{every picture/.style={scale=0.7}}%
  189. \begin{subfigure}[h]{0.25\linewidth}
  190. \input{figures/PNProcess_notext}
  191. %\caption{P P P}
  192. \label{fig:rappelP2PN}
  193. \end{subfigure}
  194. \quad %\qquad
  195. \begin{subfigure}[h]{0.30\linewidth}
  196. \input{figures/PNWorkDefinition_notext}
  197. %\caption{WD WD WD}
  198. \label{fig:rappelWD2PN}
  199. \end{subfigure}
  200. \quad %\qquad
  201. \begin{subfigure}[h]{0.35\linewidth}
  202. \input{figures/PNWorkSequence_notext}
  203. %\caption{WS WS WS}
  204. \label{fig:rappelWD2PN}
  205. \end{subfigure}
  206. \caption{Réseaux de Petri images d'un \emph{Process}, d'une
  207. \emph{WorkDefinition} et d'une \emph{WorkSequence}.}
  208. \label{fig:rappel2PN}
  209. \endgroup
  210. \end{center}
  211. \end{figure}
  212. Compte tenu du fait que nos modèles d'entrée générés n'ont pas de processus
  213. hiérarchiques, les arcs de synchronisation ainsi que les éléments
  214. \emph{resolve} associés n'existent pas dans l'image du \emph{Process}.
  215. \begin{table}[h]
  216. \begin{center}
  217. \input{tables/productionRules}
  218. \caption{Dénombrement des éléments cibles créés à partir d'éléments
  219. sources.}
  220. \label{table:productionRules}
  221. \end{center}
  222. \end{table}
  223. Ainsi, pour un processus composé de $N$ \emph{WorkDefinitions} (avec $N > 1$)
  224. on obtient $14N+8$ éléments cibles \emph{normaux} et $4N-2$ éléments
  225. \emph{resolve}, comme le résume la table~\ref{table:denombrementCibles}.
  226. \begin{table}[h]
  227. \begin{center}
  228. \input{tables/denombrementCibles}
  229. \caption{Dénombrement des éléments cibles créés en fonction du nombre de
  230. \emph{WorkDefinitions} donné en entrée ($N>1$).}
  231. \label{table:denombrementCibles}
  232. \end{center}
  233. \end{table}
  234. Les valeurs que nous donnons par la suite sont celles d'expériences menées sur
  235. un serveur ayant les caractéristiques suivantes :
  236. \begin{itemize}
  237. \item système Unix 64 bits ;
  238. \item RAM : 24 GB ;
  239. \item processeurs : 2 $\times$ \num{2.93} GHz Quad-Core Intel Xeon.
  240. \end{itemize}
  241. Cependant, mis à part pour les transformations à plusieurs millions
  242. d'éléments qui demandent des ressources supérieures à celles fournies par un
  243. poste de bureau, ces expériences peuvent tout à fait être reproduites sur une
  244. machine bien plus modeste.
  245. La table~\ref{table:tempsTomFull} donne les temps moyens de la transformation
  246. appliquée sur des modèles de tailles différentes. La première colonne donne le
  247. nombre d'éléments sources du modèle d'entrée en fonction du paramètre d'entrée
  248. $N$. La deuxième colonne donne le nombre d'éléments constituant le modèle
  249. résultant. Les temps moyens sont donnés par les colonnes suivantes, en séparant
  250. les deux phases, la dernière colonne donnant les durées totales. Pour donner
  251. une idée de la taille des données, la sérialisation \texttt{.xmi} d'un modèle à
  252. \num{2000000} d'éléments sources (dernière ligne) est un fichier d'environ
  253. \num{320} Mo.
  254. %La table~\ref{table:denombrement} donne les tailles des modèles sources et
  255. %cibles, ainsi que les nombres d'éléments de notre exemple. Le modèle source
  256. %était entièrement généré, et connaissant sa forme, nous sommes en mesure de
  257. %dénombrer ses éléments ainsi que ceux du modèle résultant. Pour donner une idée
  258. %de la taille des données, la sérialisation \texttt{.xmi} d'un modèle à 2000000
  259. %d'éléments est un fichier d'environ 320 Mo.
  260. %\begin{table}[h]
  261. %\begin{center}
  262. %\input{tables/denombrement}
  263. %\caption{Dénombrement des éléments IN et OUT pour l'exemple 1}
  264. %\label{table:denombrement}
  265. %\end{center}
  266. %\end{table}
  267. %OSEF, on fait du motu-one
  268. %Version \og filip \fg :
  269. %\begin{table}[h]
  270. %\begin{center}
  271. %\begin{tabular}{rr|r|rrrr|r}
  272. % N (nbr WD) & src(2N) & tgt(14N+8)&
  273. % \multicolumn{2}{c}{phase\#1} & \multicolumn{2}{c}{phase\#2} & total \\
  274. % & & & temps & \% & temps & \% & \\
  275. %% Exemple & N (nbr WD) & tot. src(2N) & tot. tgt(14N+8)& phase\#1 & & total \\
  276. % \hline
  277. % 10 & 20 & 148 & 19 & 19.19 & 80 & 80.81 & 99 \\
  278. % 100 & 200 & 1408 & 76 & 7.79 & 891 & 92.21 & 976 \\
  279. % 500 & 1000 & 7008 & 249 & 0.54 & 45768 & 99.46 & 46017 \\
  280. % 1000 & 2000 & 14008 & 522 & 0.12 & 437047 & 99.88 & 437569 \\
  281. % & & & & & \multicolumn{2}{r|}{$\sim$7min 17s} & $\sim$7min 17s \\
  282. % 5000 & 10000 & 70008 & ?? & 0.?? & ?? & 99.?? & ?? \\
  283. % & & & & & \multicolumn{2}{r|}{$\sim$??min ??s} & $\sim$??min ??s \\
  284. % 10000 & 20000 & 140008 & ?? & 0.01 & ?? & 99.99 & ?? \\
  285. % & & & & & \multicolumn{2}{r|}{$\sim$??min ??s} & $\sim$??min ??s \\
  286. %\end{tabular}
  287. %\caption{Temps de transformation, exemple 1}
  288. %\label{table:stats}
  289. %\end{center}
  290. %\end{table}
  291. \begin{table}[h]
  292. \begin{center}
  293. \input{tables/tempsTomFull}
  294. \caption{Mesures de durées de transformation en fonction des tailles des
  295. modèles sources.}
  296. % \label{table:temps}
  297. \label{table:tempsTomFull}
  298. \end{center}
  299. \end{table}
  300. % 1er décembre : 126 094 099 + 24 262 874 = 150 356 973 (model gen: 57 877 925)
  301. % 35h1min34s + 6h44min..s = 41h45min (16h4min37s)
  302. %benchWOemfresolve/MY
  303. %? 53644826 -> 14h 54min
  304. La figure~\ref{fig:courbeTemps} donne une représentation graphique des temps
  305. d'exécution en fonction de la taille du modèle d'entrée. Plus le modèle
  306. source est gros, plus la durée de la transformation est élevée. Nous notons que
  307. plus le modèle source est important, plus la part de la première phase de la
  308. transformation est importante par rapport à la phase de résolution. Cela
  309. s'explique par deux facteurs : d'une part par la transformation elle-même qui
  310. crée bien plus d'éléments cibles (\emph{normaux} et \emph{resolve}) qu'elle ne
  311. doit en résoudre, d'autre part par les améliorations et optimisations que nous
  312. avons apportées au code généré et aux mécanismes développés.
  313. \begin{figure}[h]
  314. \begin{center}
  315. \input{figures/courbeTemps}
  316. \caption{Temps moyen de transformation (en ms) en fonction du nombre d'éléments
  317. dans le modèle source (phase 1, phase 2, total).}
  318. \label{fig:courbeTemps}
  319. \end{center}
  320. \end{figure}
  321. En effet, ces résultats ne sont pas les résultats que nous pourrions obtenir
  322. avec la version stable actuelle de nos outils : initialement, la phase de
  323. résolution était largement plus consommatrice de ressources et la durée d'une
  324. transformation était quasiment celle de la seconde phase (environ $99\%$ du
  325. temps d'exécution pour des modèles de taille $>$100). De plus, dans leur
  326. première version stable publiée, outre une certaine lenteur, nos outils
  327. consomment une grande quantité de mémoire. Lors des premières expériences, nos
  328. transformations étaient beaucoup plus longues à s'exécuter que la même
  329. transformation développée en {\atl} (donnée en~\ref{annexe:atlpdl2pn}). Nous ne
  330. pouvions exécuter une transformation d'un modèle source de \num{20000} éléments
  331. ou plus, par manque de mémoire (20GB alloués par défaut). De son côté, {\atl}
  332. franchissait ce seuil est bloquait aux alentours de \num{50000} éléments
  333. sources par manque de mémoire. C'est ce qu'illustre le
  334. tableau~\ref{table:tempsTomEvolution} qui donne les temps d'exécution de deux
  335. versions de nos outils, que nous comparons à ceux avec {\atl}. Nous avons donc
  336. travaillé en priorité sur l'amélioration du code généré pour la phase de
  337. résolution afin de corriger ces lacunes.
  338. \begin{table}[h]
  339. \begin{center}
  340. \input{tables/comparatifTemps}
  341. \caption{Comparaison des performances entre Tom (première et dernière
  342. versions) et ATL.}
  343. \label{table:tempsTomEvolution}
  344. \end{center}
  345. \end{table}
  346. Dans un premier temps, constatant que l'essentiel du temps était passé dans
  347. l'appel de fonctions du \emph{framework} {\emf}, nous avons modifié la
  348. résolution de liens. Nous nous reposions exclusivement sur les méthodes
  349. \emph{emf} gérant la résolution de liens, qui étaient appelées au sein de la
  350. stratégie de résolution. Cependant, l'implémentation de cette méthode dans le
  351. \emph{framework} {\emf} n'est pas assez efficace. Nous avons donc implémenté
  352. notre propre résolution de liens. Dans un second temps, nous avons continué à
  353. optimiser en modifiant notre approche lors de la trace technique des objets
  354. créés. Ces améliorations successives ont drastiquement diminué la durée
  355. d'exécution de la seconde phase par rapport à la première qui concentre
  356. maintenant l'essentiel du temps processeur d'une transformation.
  357. Finalement, nous avons abouti à la version actuelle qui sera intégrée dans la
  358. prochaine version stable de {\tom}. Tout au long de la transformation, nous
  359. stockons les éléments tracés servant à la résolution (traçabilité technique)
  360. ainsi que les éléments référençant les éléments intermédiaires \emph{resolve}
  361. (c'est-à-dire ayant un pointeur vers un élément \emph{resolve}, par exemple un
  362. arc image d'une \emph{WorkSequence} dans l'exemple
  363. \emph{SimplePDLToPetriNet}).
  364. En début de phase de résolution, nous récupérons l'ensemble des éléments
  365. intermédiaires temporaires. Nous le parcourons et pour chaque élément de cet
  366. ensemble, nous parcourons l'ensemble des objets le référençant pour leur
  367. appliquer la résolution de lien. Avec notre implémentation, nous parcourons le
  368. minimum d'objets possible, ce qui réduit considérablement les parcours
  369. (notamment par rapport à {\emf}). Ces optimisations nous ont apporté un gain
  370. conséquent nous permettant de passer d'outils transformant difficilement des
  371. petits modèles de \num{10000} éléments en des outils capables de transformer
  372. des modèles de plusieurs millions d'éléments.
  373. Finalement, ces premiers résultats expérimentaux nous permettent d'exprimer un
  374. avis sur nos choix technologiques initiaux, en particulier sur l'utilisation de
  375. {\emf}. Si ce choix paraissait naturel pour pouvoir avoir une couverture
  376. initiale maximale de chaînes de développement, d'outils et d'utilisateurs, il
  377. paraît beaucoup moins naturel lorsque l'on commence à s'intéresser aux
  378. performances. En effet, notre travail de \emph{profiling} et d'optimisation
  379. nous a montré que le facteur limitant essentiel résidait dans les appels
  380. {\emf}. Leur limitation puis leur suppression a drastiquement amélioré les
  381. performances de nos outils. Dans notre contexte, et pour les tâches demandées,
  382. nous n'avions finalement pas un besoin fondamental de toutes les
  383. fonctionnalités fournies par {\emf}. Une version simplifiée et optimisée de la
  384. gestion des références inverses suffisait amplement pour notre phase de
  385. résolution. Il est donc plus intéressant en termes de performances pures et de
  386. mémoire de nous passer de la technologie de support ({\emf} dans notre
  387. implémentation actuelle) pour tout ce qui relève de la mécanique interne de la
  388. transformation. De plus, nous affranchir totalement d'une technologie nous
  389. permet d'obtenir des outils plus génériques, et donc plus facilement
  390. intégrables dans d'autres contextes et chaînes de développement.
  391. Cependant, si le choix initial d'utilisation des services {\emf} pour le moteur
  392. des transformations s'est avéré peu judicieux et a été remis en cause en cours
  393. de thèse, il a été fondamental pour avoir une implémentation concrète et un
  394. support de travail. De plus, notre travail a mis en avant ce choix peu
  395. judicieux pour la mise en œuvre de mécanismes internes de nos transformations,
  396. ce qui ne remet pas en cause l'usage d'{\emf} dans d'autres contextes avec
  397. d'autres outils, ni même son usage avec {\tom}. En effet, au-delà des
  398. constructions haut-niveau qui s'appuyaient partiellement sur {\emf}, subsiste
  399. notre outil de génération automatique d'ancrages formels qui permet d'opérer le
  400. changement d'espace technologique.
  401. %Il est totalement décorrélé du langage de transformation et de
  402. %l'implémentation concrète de la phase de résolution.
  403. Cet outil reste extrêmement intéressant pour faciliter l'écriture des
  404. transformations ---~de manière totalement indépendante du langage de
  405. transformation ainsi que de sa mise en œuvre technique~--- dans un contexte
  406. {\java}-{\emf}.
  407. \section{Perspectives}
  408. \label{ch:evaluation:perspectives}
  409. %De notre travail de thèse ainsi que de ces premiers résultats expérimentaux,
  410. %plusieurs pistes de recherche et de développement se profilent.
  411. L'ensemble de nos outils peut être actuellement considéré comme un prototype
  412. opérationnel. Cependant, dans le cadre d'une utilisation plus large et dans un
  413. contexte industriel réel, on pourrait s'orienter vers différents aspects qui
  414. ont émergé de ce travail de thèse et des premiers résultats expérimentaux.
  415. Nous avons pu éprouver l'intérêt de notre approche hybride pour développer des
  416. transformations de modèles. Cette approche facilite de développement grâce aux
  417. outils de génération de code et aux constructions haut-niveau avec une forte
  418. expressivité, tout en conservant l'environnement global existant. Il reste donc
  419. possible d'utiliser les spécificités du langage généraliste au sein duquel nous
  420. nous intégrons pour certaines tâches tout en manipulant des termes dans une
  421. autre partie de l'application. Le travail d'adaptation que l'utilisateur doit
  422. fournir est de fait plus faible, d'où une plus grande efficacité.
  423. Notre approche a aussi l'avantage de perturber au minimum la chaîne de
  424. développement et le choix de l'adopter n'est pas irréversible ou coûteux dans
  425. le sens où chaque transformation développée peut être remplacée par sa version
  426. dans le langage hôte (ou écrite avec un autre outil) sans changer le reste du
  427. logiciel. Dans cette optique d'intégration non-intrusive dans des
  428. environnements existants, une voie serait de travailler à la généralisation de
  429. nos outils afin d'étendre l'approche à d'autres langages et technologies. Par
  430. exemple, un premier pas dans cette direction pourrait être de se pencher sur
  431. l'utilisation de {\kevoree} ainsi que sur l'extension au langage {\ada} (des
  432. travaux sur le sujet ont déjà été entamés).
  433. L'utilisation de constructions haut-niveau et d'outils de génération permet à
  434. l'utilisateur de se concentrer sur le cœur de l'application et de déléguer à un
  435. outil automatique les tâches répétitives sujettes à erreurs pour un humain.
  436. Cela contribue à augmenter la confiance dans le logiciel développé.
  437. Un autre axe de travail consisterait à réfléchir sur les stratégies que nous
  438. utilisons pour transformer des modèles. Nous nous sommes aperçus que certaines
  439. relations étaient souvent vues comme intéressantes (composition), mais que dans
  440. certaines situations, d'autres relations pouvaient être le centre de la
  441. transformation. Travailler sur la paramétrisation des stratégies de réécriture
  442. par des types de relation à suivre pourrait être une voie à explorer.
  443. Un autre aspect intéressant que d'autres outils couvrent est la transformation
  444. de modèles multiples : actuellement notre approche considère un seul modèle
  445. source et un seul modèle cible. Cependant, on pourrait gagner en expressivité
  446. en permettant d'écrire des transformations à plusieurs sources et cibles. %Une
  447. %première approche dans ce sens serait dans un premier temps de créer un modèle
  448. %englobant ces différents modèles d'entrées
  449. Bien que les outils soient complètement opérationnels, une optimisation serait
  450. probablement nécessaire pour un usage plus large dans un cadre industriel, tant
  451. du point de vue de leurs performances que de leur utilisabilité. Nos travaux
  452. d'amélioration des performances par réingénierie de la phase de résolution
  453. constituent une première étape qui sera concrétisée dans une prochaine
  454. \emph{release} du projet {\tom}.
  455. Du point de vue de la modularité et de la réutilisation du code, les stratégies
  456. de réécriture nous fournissent un socle intéressant de par leur modularité
  457. intrinsèque. Nos expérimentations sur le sujet ont abouti à un prototype de nos
  458. outils avec phase de résolution modulaire. Cependant, pour des raisons de
  459. confort d'utilisation pour le développeur, nous avons choisi de ne pas intégrer
  460. cette fonctionnalité par défaut dans la version stable actuelle. Nous avons
  461. cependant une base de travail pour réfléchir à cet aspect. Il faut toutefois
  462. noter que les évolutions de nos outils dues à l'amélioration de leurs
  463. performances risquent d'entrer en concurrence avec l'approche adoptée dans
  464. notre prototype modulaire. De fait, l'aspect performance est actuellement
  465. privilégié.
  466. Nous avons aussi pu apporter une traçabilité au sein d'un langage généraliste
  467. tel que {\java}. Il s'agissait d'apporter une aide substantielle au processus
  468. de qualification d'un logiciel. L'aspect traçabilité des transformations semble
  469. être un thème particulièrement prometteur. En effet, les industries développant
  470. du logiciel critique ont un besoin accru de traçabilité pour qualifier et
  471. certifier leurs outils. L'adoption de l'ingénierie dirigée par les modèles a
  472. entraîné l'usage de nouvelles méthodes et de nouveaux outils tandis que les
  473. contraintes légales subsistent. Partant de ce constat, les travaux sur la
  474. traçabilité à des fins de validation du logiciel offrent des perspectives
  475. intéressantes. Dans l'implémentation actuelle de nos travaux, les constructions
  476. pour la traçabilité ne sont pas distinctes. Une première étape serait de
  477. distinguer clairement (par deux constructions distinctes du langage) la
  478. traçabilité utilisée à des fins purement techniques (usage pour la phase de
  479. résolution) et la traçabilité métier. Notre approche de trace à la demande
  480. permet déjà de limiter la taille des traces et donc de les rendre plus
  481. exploitables \emph{a posteriori}. Se pose aussi la question de l'exploitation
  482. du modèle de lien, de manière automatique ou non dans le processus de
  483. qualification.
  484. %virer ça
  485. %\noindent \textbf{\textit{Approche hybride.}} Notre choix d'utiliser Tom est
  486. %intéressant car nous nous plaçons à la frontière de deux espaces
  487. %technologiques qui sont souvent peu connus ensembles par le développeur
  488. %moyen. Cette approche nous permet d'utiliser des concepts et outils formels
  489. %tout en restant accessible à des utilisateurs non-académiques. Il s'agit
  490. %d'aider l'utilisateur à améliorer la qualité de son logiciel sans pour
  491. %autant le pousser à changer radicalement d'environnement, d'outil, de langage
  492. %et d'habitudes. Le cela permet de limiter le coût du développement par
  493. %rapport à l'adoption d'outils complètement spécifiques et dédiés.
  494. %
  495. %\noindent \textbf{\textit{Langage de transformation.}} Concernant l'expression de la transformation elle-même ainsi que
  496. %l'implémentation de l'approche en deux temps avec résolution, nous ne
  497. %devrions pas apporter de changements fondamentaux. Il s'agit d'une approche
  498. %relativement classique dans le monde des transformations de modèles qui a
  499. %montré son efficacité. Les évolutions à venir viseront essentiellement
  500. %l'amélioration de l'expérience utilisateur et la simplification de la prise
  501. %en main des outils :
  502. %\begin{itemize}
  503. %\compresslist
  504. %
  505. % \item L'introduction de raccourcis syntaxiques permettra de
  506. %% L'écriture des définitions pourra être amélioré par l'introduction
  507. %% de raccourcis syntaxiques permettant de
  508. % spécifier plus simplement la stratégie après le mot-clef
  509. % \lex{traversal}. Dans le cas le plus courant, l'utilisateur suit nos
  510. % recommandations et ne souhaite véritablement spécifier que le type de
  511. % parcours et non toute la stratégie (avec les paramètres la plupart du
  512. % temps identiques à ceux de la transformation) ;
  513. %
  514. % \item Une simplification de l'utilisation du modèle de lien est aussi à
  515. % l'étude afin que l'utilisateur n'ait plus à le spécifier explicitement
  516. % ;
  517. %
  518. % \item Nous souhaitons alléger la syntaxe de la construction \lex{\%resolve}
  519. % pour ne plus avoir à donner explicitement les types en les inférant.
  520. %
  521. %\end{itemize}
  522. %
  523. %\noindent \textbf{\textit{\'Evaluation et limitations.}} Nous avons essayé
  524. %de trouver des usages pour lesquels nos outils étaient particulièrement
  525. %intéressants ou au contraires pour lesquels ils apportaient peu. Nous les
  526. %avons notamment utilisés pour implémenter l'exemple de l'applatissement
  527. %d'une hiérarchie de classes (les feuilles de l'arbre d'héritage
  528. %récupèrent tous les attributs de leurs surclasses). Cet exemple nous
  529. %semblait intéressant du fait que la relation de composition n'est pas
  530. %centrale et que notre outil est calibré pour la relation de composition. \\
  531. %Nous avons constaté que pour un tel exemple dont l'implémentation
  532. %récursive en Java, Java+Tom classique (sans la partie modèle) ou ATL est
  533. %triviale, les constructions dédiées aux modèles n'apportent aucun
  534. %véritable gain. Elles complexifient même la transformation, sans
  535. %véritablement tirer parti des outils développés. Nous constatons aussi
  536. %que \lex{\%transformation} prend beaucoup d'intérêt lors de l'utilisation
  537. %d'éléments \emph{resolve}, car les structures de données ainsi que la
  538. %phase de résolution sont générées automatiquement. En revanche, cet
  539. %exemple n'en nécessitant pas, le code est plus concis et lisible avec du Tom
  540. %classique sans construction \lex{\%transformation}. Cet exemple nous a aussi
  541. %amené à réfléchir à l'extension de l'\emph{introspecteur} à
  542. %d'autres liens que les liens de composition (paramétrisation par les liens).
  543. %
  544. %\noindent \textbf{\textit{Traçabilité.}} Ce faible intérêt apparent
  545. %pour les transformations les moins complexes peut être compensé par un
  546. %autre axe de travail actuel : la traçabilité des transformations. Elle
  547. %est actuellement assurée par le modèle de lien et la construction
  548. %\lex{\%tracelink}, cependant cela comprend deux aspects de la traçabilité que
  549. %nous souhaitons distinguer : la traçabilité
  550. %\emph{technique} et de \emph{spécification}.\\
  551. %La traçabilité \emph{technique} est la traçabilité utilisée en
  552. %interne pour la transformation elle-même (pour la phase de résolution).
  553. %Bien qu'extrêment utile à des fins de debug, Cette traçabilité
  554. %proche de l'implémentation peut être très éloignée d'une
  555. %spécification. La certification d'un logiciel peut par conséquent être
  556. %particulièrement ardue avec cette unique traçabilité, qui est
  557. %d'ailleurs implémentée dans ATL ~\cite{Jouault2005} et
  558. %Kermeta~\cite{Falleri2006}.\\
  559. %La traçabilité de \emph{spécification} peut quant à elle être
  560. %décorrélée de l'implémentation technique. Elle décrit des relations
  561. %entre des sources et des cibles comme une spécification peut le faire, sans
  562. %forcément adopter le découpage des règles de l'implémentation. Nous
  563. %souhaitons séparer clairement ces deux traçabilités et donc découper
  564. %la construction \lex{\%tracelink} en deux constructions distinctes qui joueront
  565. %chacune un r\^ole spécifique. Techniquement, il nous faudra lever la
  566. %limitation actuelle de ne pouvoir lier qu'une seule source à plusieurs
  567. %cibles. Cela nous permettra de travailler à la généralisation de la
  568. %traçabilité d'une transformation pour les approches hybrides, et à
  569. %l'ajout de la traçabilité dans les transformations écrites avec des
  570. %langages généralistes grand public.
  571. %
  572. %\noindent \textbf{\textit{Enrichissement de l'expressivité du langage.}}
  573. %Notre solution est proche de celle apportée par ATL. Cependant, nous nous
  574. %distonguons par notre volonté de nous intégrer totalement à des langages
  575. %généralistes (et particulièrement Java). Nous souhaitons aussi étendre
  576. %et généraliser le mécanisme \emph{resolve} à des sources multiples, ce
  577. %que ne permet pas ATL. Actuellement, un élément \emph{resolve} (ou le
  578. %\emph{resolveTemp} d'ATL) ne lie qu'un élément source à un élément
  579. %cible. Nous souhaitons améliorer l'expressivité de notre langage en offrant
  580. %la possibilité du \emph{resolve} multi-sources ainsi que des règles
  581. %multi-\emph{patterns}. Cela passe par l'élaboration de nouveaux mécanismes
  582. %tels que des \emph{patterns} paramétrés ou des stratégies multi-sujets
  583. %sur lesquelles nous travaillons actuellement.
  584. %
  585. %\noindent \textbf{\textit{Modularité.}} Ensuite, dans l'optique d'accroître
  586. %la modularité de notre approche -- et donc la réutilisabilité des
  587. %transformations --, un nouvel axe de travail est de décomposer la phase de
  588. %résolution jusqu'alors monolithique en \emph{résolutions élémentaires}.
  589. %Si une définition pouvait être réutilisée dans une autre
  590. %transformation, il était nécessaire de générer (ou éventuellement
  591. %développer) une nouvelle phase de résolution adaptée à la nouvelle
  592. %transformation. En décomposant cette phase en briques élémentaires, nous
  593. %rendons la phase de résolution modulaire et réutilisable. Une définition
  594. %-- accompagnée des résolutions élémentaires associées -- pourra donc
  595. %être complètement portable dans d'autres transformations.
  596. %
  597. %\noindent \textbf{\textit{Usage industriel.}} Bien que les versions courantes
  598. %du langage et des outils puissent être encore améliorées, l'ensemble est
  599. %déjà utilisable dans un contexte non-académique. Nos outils ont été
  600. %utilisés par nos partenaires industriels durant le projet
  601. %Quarteft~\footnote{\url{http://www.quarteft.loria.fr}} financé par la
  602. %FRAE~\footnote{Fondation de Recherche pour l'Aéronautique et l'Espace :
  603. %\url{http://www.fnrae.org}}.
  604. % vim:spell spelllang=fr