123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- % vim:spell spelllang=fr
- \chapter{Spécification et traçabilité des transformations}
- \label{ch:traceability}
- %10p
- Dans ce chapitre, nous abordons la notion de spécification et de traçabilité
- d'une transformation de modèles.
- %Dans ce chapitre, nous expliquons ce qu'est la traçabilité et comment spécifier
- %celle d'une transformation de modèle.
- Les systèmes se complexifiant, l'{\idm} a apporté des solutions pour faciliter
- et accélérer le développement logiciel. Cependant, si la manière de développer
- un logiciel ainsi que les technologies utilisées ont changé depuis les débuts
- de l'informatique, les contraintes liées à la maintenance (évolution du
- logiciel, déboguage) et à la fiabilité (qualification, certification)
- restent identiques.
- %Ainsi, dans le cadre de la qualification, il est nécessaire
- %d'adopter la traçabilité. Lorsque l'on écrit et utilise une transformation, il
- %est nécessaire de connaître et de conserver les relations entre les sources et
- %les cibles. Ces relations sont données par la trace.
- Ainsi, dans le cadre des transformations qualifiables, nous souhaitons avoir
- confiance dans les transformations développées, du point de vue formel (pour la
- vérification) ainsi que de celui de l'autorité de certification. La norme
- DO-178/ED-12 exige la traçabilité entre le code source et le code objet, c'est
- donc une problématique essentielle des compilateurs dans le contexte de la
- qualification. Cette problématique est généralisable à toute transformation,
- notamment aux transformations de modèles. En effet, l'ingénierie dirigée par
- les modèles étant de plus en plus présente dans les chaînes de développement de
- systèmes critiques, du code généré à partir d'un modèle peut faire partie du
- logiciel final.
- \section{Spécification}
- Dans le chapitre~\ref{ch:verification}, nous avons vu qu'il fallait qualifier
- les transformations dans le cadre du développement de systèmes critiques. Il
- est important de spécifier les transformations pour vérifier leur conformité,
- afin de disposer de la traçabilité code source--code objet. Pour cela, nous
- nous appuyons sur les transformations de modèles. %\todo{La traçabilité s'effectue au
- %niveau de la spécification, or les langages tels que {\qvtr} ou {\atl}
- %proposent une traçabilité mécanique dans l'implémentation. De manière générale,
- %cette traçabilité technique n'est pas substituable à celle de spécification. }
- Reprenons le cas d'utilisation \emph{SimplePDLToPetriNet} brièvement illustré
- dans le chapitre précédent et spécifions les modèles source et destination
- ci-après.
- \begin{figure}[h]%[fig:simplepdlmmodel]{Métamodèle SimplePDL.}%[H] %[!h]
- \begin{center}
- \input{figures/simplesimplepdlmmodel}
- \caption{Métamodèle SimplePDL possible.}
- \label{fig:simplesimplepdlmmodel}
- \end{center}
- \end{figure}
- Le langage SimplePDL dont le métamodèle est donné
- figure~\ref{fig:simplepdlmmodel} permet d'exprimer simplement des processus
- génériques. Un processus (\emph{Process}) est composé d'éléments
- (\emph{ProcessElement}). Chaque \emph{ProcessElement} référence son processus
- \emph{parent} et peut être soit une \emph{WorkDefinition}, soit une
- \emph{WorkSequence}. Une \emph{WorkDefinition} définit une activité qui doit
- être effectuée durant le processus (un calcul, une action, {\etc}). Une
- \emph{WorkSequence} définit quant à elle une relation de dépendance entre deux
- activités. La deuxième (\emph{successor}) peut être démarrée ---~ou
- terminée~--- uniquement lorsque la première (\emph{predecessor}) est déjà
- démarrée ---~ou terminée~--- selon la valeur de l'attribut \emph{linkType} qui
- peut donc prendre quatre valeurs : \emph{startToStart}, \emph{finishToStart},
- \emph{startToFinish} ou \emph{finishToFinish}. Afin de pouvoir représenter des
- processus hiérarchiques, une \emph{WorkDefinition} peut elle-même être définie
- par un processus imbriqué (référence \emph{process}), qui conserve un lien vers
- l'activité qu'il décrit (référence \emph{from}).
- Le métamodèle donné par la figure~\ref{fig:petrinetmmodel2} permet d'exprimer
- les réseaux de Petri. Un tel réseau se définit par un ensemble de nœuds
- (\emph{Node}) qui sont soit des places de type \emph{Place}, soit des
- transitions de type \emph{Transition}, ainsi que par des arcs (\emph{Arc}). Un
- arc (orienté) relie deux nœuds de types différents (le réseau de Petri est un
- graphe biparti) et peut être de type \emph{normal} ou \emph{read-arc}. Il
- spécifie le nombre de jetons (\emph{weight} ---~poids~---) consommés dans la
- place source ou produits dans la place cible lorsqu'une transition est tirée.
- Un \emph{read-arc} vérifie uniquement la disponibilité des jetons sans pour
- autant les consommer (test de franchissement). Le marquage d'un réseau de Petri
- est défini par le nombre de jetons dans chaque place (\emph{marking}).
- \begin{figure}[h]%[fig:petrinetmmodel]{Métamodèle PetriNet.}%[H] %[!h]
- \begin{center}
- \input{figures/petrinetmmodel}
- \caption{Métamodèle des réseaux de Petri.}
- \label{fig:petrinetmmodel2}
- \end{center}
- \end{figure}
- \FloatBarrier
- \section{Traçabilité}
- La traçabilité est très importante dans le cadre de la maintenance pour pouvoir
- suivre l'évolution d'un logiciel et détecter des \emph{bugs} introduits durant
- le cycle de vie de l'application. C'est un précieux outil pour l'analyse et
- la vérification de transformations, ce qui explique que ce soit une exigence de
- qualification. La traçabilité peut prendre plusieurs formes. Nous distinguons
- notamment la traçabilité \emph{interne} (autrement appelée \emph{technique}) de
- la traçabilité de spécification.
- \subsection{Traçabilité interne}
- La traçabilité \emph{interne} ou \emph{technique}~\cite{Jouault2005} a un usage
- purement technique au sein de la transformation. C'est-à-dire qu'elle est
- utilisée pour opérer la transformation, mais n'est pas nécessairement utile dans
- le cadre d'un processus de qualification. Dans les approches compositionnelles
- des transformations comme la nôtre, il faut mettre en œuvre un mécanisme
- permettant d'assembler les résultats partiels. Dans notre cas, si des éléments
- intermédiaires \emph{resolve} sont créés, il est nécessaire de pouvoir les
- faire correspondre à des éléments cibles réels. Il faut donc pouvoir marquer
- les éléments susceptibles de correspondre à un \emph{resolve} donné afin
- d'assurer la réalisation de la phase de résolution. Nous avons mis en œuvre
- cette traçabilité dans le cadre de notre approche décrite dans le
- chapitre~\ref{ch:approach} et nous la décrivons plus précisément dans le
- chapitre~\ref{ch:outils}. Nous ne nous attardons donc pas sur cette notion dans
- ce chapitre.
- Du fait de son usage, la traçabilité technique est étroitement liée à
- l'implémentation de la transformation. Elle est difficilement générique, ce qui
- peut nécessiter de la réingénierie lors d'une évolution de la transformation.
- %\todo{Deux types de traçabilité pouvant être distingués, nous nous concentrons
- %essentiellement sur la
- %traçabilité de spécification dans ce chapitre. En effet, la traçabilité
- %\emph{interne} (ou \emph{technique}) ---~purement mécanique~--- est liée
- %%permet de réaliser le
- %mécanisme de résolution exposé dans le chapitre précédemment.}
- %\todo{types de traçabiilité : implicite/explicite ; interne/spec ; choix ;
- %approche}
- \subsection{Traçabilité de spécification}
- La traçabilité de spécification est quant à elle une exigence de qualification.
- C'est-à-dire qu'il faut pouvoir lier une source à une cible selon une
- spécification donnée. Ce type de traçabilité n'a pas d'usage technique pour le
- bon déroulement de la transformation elle-même et n'est pas nécessairement liée
- à l'implémentation.
- La traçabilité des transformations de modèles étant un élément essentiel dans
- un cadre industriel, beaucoup de langages l'ont implémenté. Cependant, les
- langages tels que {\qvtr} et {\atl} proposent une traçabilité mécanique, mais
- qui n'est pas substituable à la traçabilité de spécification.
- %\ttodo{==============================
- % \begin{itemize}
- % \item traçabilité vs spec
- % \item intérêt
- % \item que tracer ? quel format ? usage
- % \item spec MM + explication
- % \item spec textuelle
- % \item OCL contrainte sur la spec textuelle
- % \item approche implicite
- % \end{itemize}
- % ==============================}
- En {\idm}, l'usage de {\uml} est courant et comme nous avons pu le voir dans le
- chapitre~\ref{ch:notions}, un métamodèle permet de spécifier un langage. Pour
- exprimer la traçabilité dans ce contexte, il est donc naturel d'utiliser des
- métaclasses pour avoir un formalisme cohérent. On peut alors exprimer
- simplement la traçabilité par le métamodèle~\ref{fig:linkmmodel}.
- \begin{figure}[h]
- \begin{center}
- \input{figures/linkmmodel}
- \caption{Métamodèle générique de trace.}
- \label{fig:linkmmodel}
- \end{center}
- \end{figure}
- Une \emph{Trace} concerne une transformation donnée nommée. Elle est composée
- d'un ensemble de relations (ou de liens de trace \emph{TraceLink}) entre des
- éléments sources et cibles. Un lien de trace établit une relation entre un ou
- plusieurs éléments sources (\emph{SourceElement}) et un ou plusieurs éléments
- cibles (\emph{TargetElement}). Une relation de trace est nommée et peut être
- considérée comme une règle ayant un membre gauche (source) et en membre droit
- (cible). Ce métamodèle est générique afin de donner une intuition. Il doit
- cependant être spécifique pour chaque transformation donnée. Dans le cas de
- \emph{SimplePDLToPetrinet}, \emph{SourceElement} de la
- figure~\ref{fig:linkmmodel} est remplacé par les métaclasses \emph{Process},
- \emph{WorkDefinition} et \emph{WorkSequence} ou alors est leur surtype. Dans le
- cas d'un \emph{framework} comme {\emf}, on peut utiliser \emph{EObject}.
- Lors de la certification et de la qualification, les spécifications sont
- cependant très souvent écrites en langue naturelle (français ou anglais). Le
- tâche de l'expert qualifieur consiste alors à comparer la spécification
- textuelle au code du logiciel et aux sorties produites pour des entrées
- données. Cette tâche est complexe et fortement sujette à erreurs du fait du
- rôle central que joue l'humain dans ce processus. Tout doit donc être mis en
- œuvre pour assister l'expert qualifieur en lui fournissant des éléments de
- confiance supplémentaires. C'est le rôle des outils et de leurs implémentations
- de la traçabilité.
- Cette trace peut revêtir différents aspects et n'est pas forcément utilisable
- avec des outils automatiques. Par exemple, l'implémentation de la traçabilité
- peut consister en la génération de commentaires lisibles par un humain. C'est
- d'ailleurs l'approche adoptée par l'outil {\btollvm} ---~hors du contexte de
- l'{\idm}~--- qui opère une transformation du langage {\B} vers le langage
- intermédiaire de {\llvm}\footnote{Le projet {\llvm} est une infrastructure de
- compilateur modulaire et réutilisable, voir \url{http://www.llvm.org}.}. Ces
- commentaires facilitent la lecture et la compréhension du code par l'expert,
- mais ne sont cependant pas réutilisables en tant que tels comme entrées d'un
- outil automatique de vérification. Un point particulièrement intéressant est
- d'assurer la traçabilité d'une transformation en générant une trace formelle
- exploitable \emph{a posteriori} par d'autres outils. L'intérêt est alors de
- permettre de se passer de l'écriture d'une preuve formelle ---~coûteuse à
- obtenir~--- tout en conservant une confiance forte dans la transformation. Une
- telle trace générée lors d'une transformation peut-être utilisée de deux
- manières :
- \begin{itemize}
- \item elle peut être comparée à une trace de référence donnée en spécification ;
- \item des propriétés données en spécification peuvent être vérifiées.
- \end{itemize}
- Dans le premier cas d'utilisation, le format de la trace doit être parfaitement
- spécifié afin que, pour une entrée et une transformation données, la trace
- puisse être comparée à une trace de référence. Cette dernière fait alors office
- de spécification de la transformation.
- Dans le second cas d'utilisation de la trace, il faut pouvoir exprimer des
- propriétés à vérifier. Dans le contexte de la modélisation, {\ocl} est utilisé
- pour décrire des règles s'appliquant sur des modèles {\uml}. Lors d'une
- transformation de modèle, des pre-conditions peuvent donc être écrites pour les
- éléments sources, des post-conditions pour les éléments cibles et des
- invariants pour les liens de traçabilité.
- Dans notre approche, nous avons proposé une traçabilité de spécification. La
- transformation par réécriture présentée étant une transformation par parties,
- nous agrégeons un ensemble de règles (\emph{définitions}) pour obtenir la
- transformation finale. Chacune de ces \emph{définitions} est nommée et nous
- utilisons son nom pour construire le lien de trace lors de la génération du
- métamodèle de lien (au temps de compilation). Le membre gauche de nos règles
- constitue la source de chaque lien de trace, tandis que les éléments du membre
- droit sont les cibles de la relation de trace. Sur action explicite de
- l'utilisateur, nous établissons une relation un élément source et élément
- cible. Dans sa forme actuelle, notre implémentation permet de lier plusieurs
- cibles à une seule source (relations \texttt{1..N}), l'objectif étant à terme
- d'établir des liens entre plusieurs sources et plusieurs cibles (relations
- \texttt{N..N}).
- Reprenons le cas de la transformation \emph{SimplePDLToPetriNet} et choisissons
- une règle comme exemple : \emph{Process2PetriNet}. Cette règle transforme les
- éléments \emph{Process} du modèle source en un réseau de Petri composé de trois
- places ($p\_ready$, $p\_running$ et $p\_finished$), deux transitions
- ($t\_start$ et $t\_finish$) et de quatre arcs ($ready2start$, $start2running$,
- $running2finish$ et $finish2finished$). De cette description textuelle, nous
- pouvons spécifier la relation liant la source \emph{src} aux éléments cibles
- comme suit :
- \begin{verbatim}
- Process2PetriNet = {
- src : Process ;
- p_ready, p_running, p_finished : Place ;
- t_start, t_finish : Transition ;
- ready2start, start2running, running2finish, finish2finished : Arc
- }
- \end{verbatim}
- On peut faire de même avec les relations \emph{WorkDefinition2PetriNet} et
- \emph{WorkSequence2PetriNet} pour compléter la spécification.
- Il est ensuite possible d'exprimer des contraintes sur cette relation,
- notamment des contraintes de nommage des éléments cibles. Dans notre cas,
- supposons que l'on impose que le nom d'un élément cible soit composé de deux
- parties, sur le principe suivant :
- \begin{itemize}
- \item le nom de l'élément source lui ayant donné naissance en préfixe ;
- \item un suffixe pertinent pour décrire l'élément (par exemple \emph{ready}
- pour la place \emph{p\_ready}).
- \end{itemize}
- Avec ces conventions, nous pouvons par exemple écrire la contrainte de nommage
- pour la place \emph{p\_ready} peut être écrite comme suit (\verb+concat()+ est
- l'opération de concaténation des chaînes de caractères dans {\ocl}) :
- \begin{verbatim}
- p_ready.Name = src.Name.concat('_').concat(p_ready.Name);
- \end{verbatim}
- La trace est donc exploitable à des fins de qualification.
- %L'un des intérêts de
- %l'{\idm} est d'avoir la capacité de fournir des
- %Compte tenu du processus de qualification actuel et de l'importance de cette
- %Cette problématique étant fondamentale pour tout développement de système
- %critique, dans un autre domaine que l'{\idm},
- %C'est d'ailleurs l'approche adoptée par l'outil {\btollvm} qui implémente la
- %traçabilité de la transformation du langage {\B} vers le langage intermédiaire
- %de {\llvm} sous la forme de commentaires lisibles par un humain. Ces
- %commentaires sont générés pour un code {\B} donné et évoluent donc avec
- %l'outil. Ils facilitent la lecture et la compréhension du code par l'expert
- %mais ne sont pas réutilisables en tant que tel comme entrée d'un outil
- %automatique de vérification.
- %(\emph{SourceElement}) ---~association \emph{sources}~--- et un ou plusieurs
- %éléments cibles (\emph{TargetElement}) --~association \emph{targets}~---.
- %\ttodo{là il y a un problème : où est le liant ? d'où est-ce que ça sort ? etc.}
- %Ensuite, on se propose d'assurer la correction en exprimant les
- %propriétés avec {\ocl}.
- %On écrit des pre-conditions pour les sources, des
- %post-conditions pour les cibles et des invariants pour les liens de
- %traçabilité. Ainsi, dans notre exemple, la traçabilité peut être spécifiée sous
- %la forme de contraintes {\ocl} telles que \todo{Nom du \emph{Process}
- %SimplePDL = Préfixe des éléments du réseau de Petri image ; Nom d'une
- %\emph{WorkDefinition} = Préfixe des éléments du réseau de Petri image de
- %l'activité}. (\ttodo{en OCL ?}).
- %Un modèle = nœuds + arcs (seront attribués)
- %
- %capturer 1 certain nombre de nœuds et d'arcs $\Rightarrow nouvel ensemble$
- %
- %nœuds bidons (resolve)
- %
- %Transfo de Modèles : {nœuds, arcs} -> autre {n,a} + nœuds à trous (resolve)
- %
- %Transfo pour réécriture de graphe
- %
- %Comment construire cette fonction ? par parties (bouts de graphes, avec des
- %trous)
- %
- %réécriture de termes $\Rightarrow$ graphe + arbre de recouvrement (par la
- %composition) + liens (associations)
- %%
- %%mécanique de termes, RW arbres
- %
- %+ enrichissement asso + recoller les morceaux de graphes
- %%
- %%description compositionnelle du problème : règles, assemblage via resolve.
- %\ttodo{ }
- %\ttodo{tout ce qui suit doit disparaitre d'une manière ou d'une autre ============}
- %\ttodo{réorganisation complète :
- % \begin{itemize}
- %% \item Comment spécifier ? illustrer la traçabilité (sans technique)
- %% \item spéc sous forme de contraintes OCL : Nom petri = Nom process, etc.
- %% \item propriétés OCL pre src / post tgt / inv lines de traçabilité
- % \item cas d'utilisation SimplePDL2PetriNet à remonter du ch7 (MM) (modèles
- % simples dans le ch4)
- % \item modèle = ensemble de nœuds et arcs
- % \item transfo de graphe, autre ensemble avec en intermédiaire la possibilité d'introduire des nœuds resolve
- % \item transfo pour réécrire le graphe
- % \item comment construire cette fonction ? par parties (bouts de graphe,
- % éventuellement des bouts avec des trous)
- % \item réécriture de termes, graphe -> arbre de recouvrement (composition) +
- % liens (association)
- % \end{itemize}
- %}
- %1e point : cf ch3, système critiques, qualification de transfo\\
- %important de spécifier la transformation pour vérifier la conformité
- %disposer de la traçabilité CS-CO\\
- %$\Rightarrow$ s'appuyer pour transfo les modèles\\
- %niveau spéc, donc différent de QVTR\\
- %ex comment spécifier
- %
- %ch5, comment spécifier $\Rightarrow$ illustrer traçabilité (sans tech)
- %
- %spéc sous forme de contraintes OCL : nom Petri = nom Process (par exemple), nom
- %activité
- %si on génère les liens de traçabilité, contraintes OCL applicables $\Rightarrow$
- %confiance$+$ $\Rightarrow$ pas besoin de preuve
- %2e point : langage QVTR, ATL, etc. proposent une traçabilité mécanique de
- %l'implémentation, pas substituable à celle de spécification
- %ex : aplatissement machines à états
- %\ttodo{tout ce qui précède doit disparaître d'une manière ou d'une autre\\============}
- %\ttodo{=========================================}
- %Metamodèle dans la vraie vie :
- %\begin{figure}[h]
- % \begin{center}
- % \input{figures/actuallinkmmodel}
- % \caption{Métamodèle de trace généré}
- % \label{fig:actuallinkmmodel}
- % \end{center}
- %\end{figure}
- %\todo{todo:
- %\begin{itemize}
- % \item Intérêt
- % \item types
- % \begin{itemize}
- % \item interne
- % \begin{itemize}
- % \item explication
- % \item implémentation technique NON
- % \end{itemize}
- % \item spécification
- % \begin{itemize}
- % \item explication
- % \item implémentation technique / projet d'implémentation NON
- % \end{itemize}
- % \end{itemize}
- %\end{itemize}}
- %\ttodo{??? \begin{itemize}
- %\item DO-330 <- exigences dans l'industrie, pour la qualification du logiciel
- %\item que tracer ? comment ? quel format
- %\item intérêt
- %\item une idée de modèle de lien
- %\item comment utiliser les traces ? avec quels outils ?
- %\end{itemize}}
- %Les systèmes se complexifiant, l'{\idm} a apporté des solutions pour faciliter
- %et accélérer le développement logiciel. Cependant, si la manière de développer
- %un logiciel ainsi que les technologies utilisées ont changé depuis les débuts
- %de l'informatique, les contraintes liées à la maintenance (évolution du
- %logiciel, déboguage) ainsi qu'à la fiabilité (qualification, certification)
- %restent identiques. Ainsi, dans le cadre de la qualification, il est nécessaire
- %d'adopter la traçabilité. Lorsque l'on écrit et utilise une transformation, il
- %est nécessaire de connaître et de conserver les relations entre les sources et
- %les cibles. Ces relations sont données par la trace.
- %Nous abordons la notion de traçabilité
- %La notion de traçabilité est fondamentale en {\idm} pour différentes raisons
- %: %logiciel construit à partir de modèles, puis génération de code =>
- %%maintenance difficile
- %\begin{itemize}
- %\item qualification de logiciels obtenus via IDM
- %\item maintenance logicielle : changement d'archi, détection etcorrection de
- %bugs, etc.
- %\item analyse de transformations/compilations
- %\end{itemize}
- %définition de la \emph{trace navigation}~\cite{Vanhooff}
- %\section{Traçabilité interne}
- %%\subsection{\todo{Explication}}
- %usage pour les transfos elles-mêmes ; fortement liée à l'implémentation ;
- %problèmes en cas de réingénierie.
- %\subsection{Implémentation technique}
- %la partie « resolvelink » de \lex{\%tracelink} ; faut vraiment découper la
- % construction en deux pour que les deux traçabilités soient bien
- % distinctes
- %\section{Traçabilité des spécifications}
- %%\subsection{\todo{Explication}}
- %intérêt ; découpler la trace des règles implémentées. La traçabilité de
- %spécification n'est pas un debug ;
- %
- %%\subsection{Mise en {\oe}uvre / projet d'implémentation}
- %sur le mode « tout est modèle », je veux « tout est terme ». Le \emph{modèle de
- %lien} devient un \emph{terme de lien}.\\
- %TRACE, qui est l'ouverture vers un « contexte/environnement de termes ».
- \section{Synthèse}%Approche}
- %\ttodo{en vrac : environnement hybride / 1..N / marquage /}
- Nous avons vu qu'on pouvait distinguer deux types de traçabilité :
- \emph{interne} et \emph{de spécification}. Nous avons mis en œuvre les deux, la
- première étant absolument nécessaire à la bonne réalisation de notre approche,
- la seconde étant utile pour le développement de transformations qualifiables.
- Nous avons vu dans le chapitre~\ref{ch:verification:trace} que la traçabilité
- est généralement classée en deux catégories : \emph{implicite} et
- \emph{explicite}. Un aspect important de notre approche réside dans notre choix
- d'une traçabilité \emph{explicite}, ce qui implique l'introduction d'une
- syntaxe concrète dans le langage pour capturer explicitement les liens de
- trace. Dans le cas d'un choix implicite, tout doit être tracé et il faut
- prévoir un mécanisme pour trier et sélectionner les informations pertinentes
- \emph{a posteriori} (un système de requête sur la trace générée par exemple).
- Notre choix présente l'intérêt de produire des traces ciblées d'une taille plus
- raisonnable. Elles sont donc exploitables plus facilement \emph{a posteriori}.
- Enfin, un autre point intéressant qui ne peut transparaître sans aborder la
- question technique tient au fait de notre environnement technologique hybride.
- En effet, nous apportons une traçabilité au sein d'un langage généraliste par
- l'ajout d'une construction dédiée. Dans un environnement homogène et parfaitement maîtrisé, la
- difficulté est levée rapidement, la traçabilité pouvant être assurée
- relativement simplement. En revanche, dans notre contexte, nous sommes à la
- frontière de deux mondes que l'utilisateur peut franchir selon ses convenances.
- Si l'utilisation du langage {\tom} et la manipulation de termes ne lui
- conviennent pas, l'utilisateur peut revenir à un mode de programmation en pur
- {\java}, auquel cas nous perdons le contrôle de cette partie du code. Ajouter
- la traçabilité dans cet environnement devient plus complexe. Nous détaillons la
- mise en œuvre de notre approche dans le chapitre~\ref{ch:outils}.
- Finalement, notre approche permet un usage \emph{a posteriori} de la trace
- générée à des fins de vérification dans le cadre de la qualification.
- %\todo{tout ce qui suit doit disparaitre ============================== }
- %
- %Notre approche sur la traçabilité d'une transformation consiste à exprimer
- %explicitement les relations liant une source à une cible. Nous sommes
- %actuellement en mesure d'associer une source à plusieurs cibles (relations
- %\texttt{1..N}). Nous disposons des deux types de traçabilité : d'une part la
- %traçabilité \emph{interne} (ou \emph{technique}) qui nous permet d'assurer la
- %phase de résolution, d'autre part la traçabilité des spécifications. Notre
- %approche est intéressante dans le sens où la granularité de la trace n'est pas
- %imposée à l'utilisateur (trop haut niveau ---~modèle source lié au modèle
- %cible~--- ou trop bas niveau ---~tous les éléments cibles sont forcément liés à
- %des éléments sources~---). Un autre intérêt certain de notre approche est son
- %environnement technologique : nous nous plaçons à la frontière des langages
- %généralistes et des langages dédiés en intégrant des constructions spécialisées
- %dans des outils généralistes. Cela nous permet d'ajouter une traçabilité dans
- %une transformation écrite en {\java} notamment. Nous décrivons l'aspect cet
- %aspect technique dans le chapitre~\ref{ch:outils:trace}, avec l'explication de
- %l'implémentation des outils.
- %\todo{en vrac}
- %
- %La traçabilité \emph{interne} est la traçabilité qui permet de réaliser la
- %phase de résolution. Elle consiste à marquer les éléments cibles d'une
- %\emph{définition} comme étant des éléments pouvant correspondre à des éléments
- %\emph{resolve}. Cette traçabilité a un intérêt technique.
- %
- %\todo{en vrac}
- %
- %Dans un environnement parfaitement maîtrisé, il est relativement simple
- %d'assurer la traçabilité d'une transformation : en effet, l'utilisateur a moins
- %de possibilités de s'écarter de l'environnement. Dans notre approche hybride,
- %nous sommes constamment à la frontière de deux mondes que l'utilisateur peut
- %franchir selon ses convenances. Si l'utilisation du langage {\tom} et la
- %manipulation de termes ne lui conviennent pas, l'utilisateur peut revenir à un
- %mode de programmation en pur {\java}, auquel cas nous perdons le contrôle de
- %cette partie du code. Ajouter la traçabilité dans cet environnement devient
- %plus complexe. Nous avons pris le parti de fournir une traçabilité qui puisse
- %être utilisée simplement au sein de {\java}.
- %\todo{en vrac}
- %
- %Nous avons vu dans le chapitre~\ref{ch:verification:trace} que la traçabilité
- %est généralement classée en deux catégories : \emph{implicite} et
- %\emph{explicite}. Dans notre approche, nous avons fait le choix d'une
- %traçabilité \emph{explicite}, ce qui implique l'introduction d'une syntaxe
- %concrète dans le langage pour capturer explicitement les liens de trace.
- %\todo{en vrac}
- %
- %Dans notre approche, afin d'obtenir des traces exploitables, nous avons choisi
- %d'aborder le problème de la traçabilité sur une action explicite de
- %l'utilisateur. Dans l'extension du langage {\tom}, nous proposons une
- %construction dédiée à la traçabilité.
- %\todo{en vrac}
- %
- %Nous distinguons deux types de traçabilité : la traçabilité dite \emph{interne}
- %ou \emph{technique}~\cite{Jouault2005} ainsi que la traçabilité de
- %spécification.
- %\todo{en vrac}
- %
- %La traçabilité \emph{interne} a un usage purement technique au sein de la
- %transformation, c'est-à-dire qu'elle est utilisée pour opérer la transformation
- %mais n'est pas nécessairement utile dans le cadre d'un processus de
- %qualification. Cette traçabilité est nécessaire à la réalisation de la phase de
- %résolution. En effet, si l'on crée des éléments \emph{resolve}, il faut aussi
- %marquer les éléments susceptibles de correspondre à un \emph{resolve} donné.
- %Les éléments tracés de la sorte sont donc les pendants des \emph{resolve}.
- %\section{Travail connexe (\todo{section à part entière ou au début plutôt ?})}
- %\section{\todo{Synthèse}}
- %\ttodo{}
- % vim:spell spelllang=fr
|