% vim:spell spelllang=fr
\cleardoublepage
\phantomsection
\SpecialSection{Conclusion}
\label{ch:conclusion}


%\subsection{évolutions}
%\begin{itemize}
%
%  \item[Modularité : ] cf. resolve modulaire, j'ai un proto qui est fait, mais
%    pas tant de réflexion que ça
%
%  \item[Traçabilité : ] ici je ne parle pas trop de la traçabilité liée aux
%    spéc mais plus la traçabilité technique/interne. Le "\%resolvelink" de
%    \%tracelink, + éventuellement une traçabilité type "log complet"
%
%  \item[Expressivité : ] simplification de syntaxe (traversal, arguments,
%    patterns, multi sources et cibles), lien avec le travail de Christophe ?
%
%\end{itemize}

La qualification d'outil est une étape fondamentale dans le processus de
certification du logiciel. L'objectif principal de cette thèse était de
contribuer à l'élaboration de méthodes et outils pour améliorer la confiance
dans les outils intégrés dans les chaînes de développement critiques. Le
langage {\tom} développé dans l'équipe a été le support de ces travaux.

\section*{Contributions}

\subsection*{Une méthode de transformation de modèles par réécriture}

Dans cette thèse, nous avons présenté une méthode pour transformer des modèles
en nous appuyant sur des stratégies de réécriture. Cette méthode nous permet
d'exprimer aisément une transformation à partir de règles, sans aucune notion
d'ordre d'application.En nous plaçant dans le cadre du langage {\tom}, nous
avons fait le choix d'être à la frontière entre les langages dédiés et les
langages généralistes, afin d'en tirer le meilleur des deux mondes. Nous avons
donc proposé un îlot formel dédié aux transformations de modèles qui s'intègre
au sein du langage généraliste {\java}. Du fait du fonctionnement de notre
méthode hybride, nos transformations sont modulaires. Cette qualité est
fondamentale en ingénierie du logiciel, que ce soit pour la maintenance ou la
création de nouveaux outils.

%Afin de rendre cette méthode accessible au plus grand nombre, nous avons exclus 
%L'un des objectifs était de rendre cette méthode accessible au plus grand nombre, 

\subsection*{Une représentation de modèles sous la forme de termes algébriques}

Pour transformer des modèles selon notre méthode hybride, il est nécessaire
d'opérer un changement d'espace technologique entre le monde des modèles et
celui des termes. Nous avons donc établi une représentation des modèles sous la
forme de termes algébriques. Cette dernière repose sur l'obtention d'un arbre
de recouvrement du modèle par la relation de composition. Un outil implémente
cette représentation par la génération de la signature algébrique correspondant
à un métamodèle donné. Cela permet d'instancier des modèles et de les manipuler
en tant que termes algébriques.


\subsection*{Une traçabilité des transformations}

L'exigence de traçabilité qu'impose le processus de qualification nous a
conduits à proposer un îlot formel permettant de lier un élément source à
des éléments cibles. Cette construction dédiée permet d'ajouter une traçabilité
au sein d'une transformation écrite dans un langage généraliste tel que
{\java}.


\subsection*{Des outils accessibles pour améliorer la confiance dans le logiciel}

Tout au long de ce travail, nous nous sommes appliqués à mettre en œuvre des
outils implémentant nos travaux. Nos choix ont aussi été guidés par notre souci
d'accessibilité et de diffusion. C'est pourquoi nous nous sommes appuyés sur
les langages et \emph{frameworks} très utilisés et ayant déjà percé dans
l'industrie. Si certains choix ont pu être remis en cause suite à nos
évaluations et aux tests de performance, il n'en demeure pas moins qu'ils nous
ont été très utiles pour obtenir un premier prototype opérationnel. Les outils
développés doivent faciliter le développement logiciel en limitant le code
écrit manuellement et en maximisant le code généré. 

De plus, dans cette optique d'amélioration de la confiance dans le logiciel, il
est très important de diffuser des outils de production dont le code source est
librement consultable, modifiable et rediffusable afin de pouvoir les vérifier,
corriger, améliorer et utiliser.
Par conséquent, tous nos outils sont diffusés sous licence libre. %FIXME\ttodo{??? je
%laisse ?}


\section*{Perspectives}

Les perspectives qu'ouvre ce travail sont multiples, les chaînes de
développement de systèmes critiques ayant de besoins forts pour la
qualification d'outils. Différents travaux peuvent être entrepris pour
étendre et prolonger les contributions de cette thèse, que ce soit au niveau de
la représentation et du parcours de modèles, de l'expression et de la
traçabilité des transformations ou de la généralisation des méthodes et outils.

\subsection*{Stratégies paramétrées}

L'une des pistes de recherche consiste à travailler sur les stratégies. Dans le
chapitre~\ref{ch:usecase}, nous avons mis en avant un cas d'étude qui ne permet
pas de donner la pleine mesure de nos outils. Cela s'explique par le principe
de notre représentation de modèles sous la forme de termes ainsi que par leur
parcours. Nous construisons un arbre de recouvrement par la relation de
composition pour obtenir une vue arborescente du modèle. Ensuite, les
stratégies les parcourent en suivant ces liens de composition. Bien que ce type
d'utilisation couvre la majeure partie des cas, il existe des situations où la
relation de composition n'est pas la relation d'intérêt de l'utilisateur, comme
nous l'avons montré. Afin de remédier à ce problème, il faudrait pouvoir
définir une alternative pour les stratégies de parcours en offrant la
possibilité de les paramétrer par les types de liens à suivre. Un second
prolongement serait alors de pouvoir paramétrer localement un parcours, en
fonction d'un contexte donné.

\subsection*{Modularité des transformations et réutilisation}

Un aspect récurrent en génie logiciel est la modularité et la réutilisation du
code. Du fait de notre approche construite sur les stratégies de réécriture,
nous offrons déjà une certaine modularité des transformations et permettons la
réutilisation du code de chaque transformation élémentaire. Cependant, les
\emph{définitions} écrites pour une transformation donnée peuvent rarement être
réutilisées directement, sans aucune modification. Un axe de travail serait
donc de réfléchir à l'expression des \emph{définitions} les rendant plus
génériques. Ensuite, le prototype modulaire de la phase de résolution de notre
approche pourrait être affiné, étendu et simplifié afin d'accompagner chaque
\emph{définition} par une \emph{stratégie de résolution élémentaire}.

\subsection*{Généralisation et ouverture à d'autres technologies}

Nous nous sommes appuyés sur la technologie {\emf} et le langage {\java} pour
développer des outils et tester nos travaux. À terme, il serait intéressant de
généraliser notre méthode de représentation et de transformation de modèles en
ouvrant nos outils à d'autres langages généralistes et à d'autres technologies.
%Se poserait notamment des problèmes liés au t
Nous pensons notamment au langage {\ada} pour lequel nous avons mené quelques
expérimentations et dont un \emph{backend} est maintenant présent dans {\tom}.
Les stratégies ont été implémentées et peuvent être utilisées dans un programme
{\ada}. Ce langage étant utilisé pour le développement de systèmes temps réel
et embarqués pour son haut niveau de fiabilité et de sécurité, nous pourrions
nous concentre sur ce langage. L'une des difficultés de la gestion de {\ada}
réside dans l'absence de \emph{garbage collector}. On ne peut donc aisément
implémenter toutes les fonctionnalités de {\tom} (notamment le partage maximal)
qui existent avec le langage {\java}. La généralisation de nos outils nous
permettrait aussi de nous ouvrir à d'autres technologies que {\emf}. Nous
pensons notamment à {\kevoree} qui semble être un bon candidat, tant du point
de vue fonctionnalités que performances.


%pas de titre en fin de page
%\clearpage

\subsection*{Traçabilité : extension et usage}

Nous avons fourni une traçabilité qui pourrait être étendue, d'une part à des
transformations comprenant des sources multiples, d'autre part à des objectifs
de détection et récupération d'erreurs. Cela demanderait de réfléchir à
l'évolution du métamodèle de trace. Ensuite, cette traçabilité fournie par
{\tom} pourrait être généralisée afin de dépasser le cadre de l'îlot formel
dédié aux transformations de modèles. Enfin, de manière pragmatique et à court
terme, nous envisageons de modifier le langage pour séparer la construction de
traçabilité en deux constructions distinctes, l'une dédiée à la traçabilité
interne, l'autre à la traçabilité de spécification.



% vim:spell spelllang=fr
