ch-traceability.tex 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. % vim:spell spelllang=fr
  2. \chapter{Spécification et traçabilité des transformations}
  3. \label{ch:traceability}
  4. %10p
  5. Dans ce chapitre, nous abordons la notion de spécification et de traçabilité
  6. d'une transformation de modèles.
  7. %Dans ce chapitre, nous expliquons ce qu'est la traçabilité et comment spécifier
  8. %celle d'une transformation de modèle.
  9. Les systèmes se complexifiant, l'{\idm} a apporté des solutions pour faciliter
  10. et accélérer le développement logiciel. Cependant, si la manière de développer
  11. un logiciel ainsi que les technologies utilisées ont changé depuis les débuts
  12. de l'informatique, les contraintes liées à la maintenance (évolution du
  13. logiciel, déboguage) et à la fiabilité (qualification, certification)
  14. restent identiques.
  15. %Ainsi, dans le cadre de la qualification, il est nécessaire
  16. %d'adopter la traçabilité. Lorsque l'on écrit et utilise une transformation, il
  17. %est nécessaire de connaître et de conserver les relations entre les sources et
  18. %les cibles. Ces relations sont données par la trace.
  19. Ainsi, dans le cadre des transformations qualifiables, nous souhaitons avoir
  20. confiance dans les transformations développées, du point de vue formel (pour la
  21. vérification) ainsi que de celui de l'autorité de certification. La norme
  22. DO-178/ED-12 exige la traçabilité entre le code source et le code objet, c'est
  23. donc une problématique essentielle des compilateurs dans le contexte de la
  24. qualification. Cette problématique est généralisable à toute transformation,
  25. notamment aux transformations de modèles. En effet, l'ingénierie dirigée par
  26. les modèles étant de plus en plus présente dans les chaînes de développement de
  27. systèmes critiques, du code généré à partir d'un modèle peut faire partie du
  28. logiciel final.
  29. \section{Spécification}
  30. Dans le chapitre~\ref{ch:verification}, nous avons vu qu'il fallait qualifier
  31. les transformations dans le cadre du développement de systèmes critiques. Il
  32. est important de spécifier les transformations pour vérifier leur conformité,
  33. afin de disposer de la traçabilité code source--code objet. Pour cela, nous
  34. nous appuyons sur les transformations de modèles. %\todo{La traçabilité s'effectue au
  35. %niveau de la spécification, or les langages tels que {\qvtr} ou {\atl}
  36. %proposent une traçabilité mécanique dans l'implémentation. De manière générale,
  37. %cette traçabilité technique n'est pas substituable à celle de spécification. }
  38. Reprenons le cas d'utilisation \emph{SimplePDLToPetriNet} brièvement illustré
  39. dans le chapitre précédent et spécifions les modèles source et destination
  40. ci-après.
  41. \begin{figure}[h]%[fig:simplepdlmmodel]{Métamodèle SimplePDL.}%[H] %[!h]
  42. \begin{center}
  43. \input{figures/simplesimplepdlmmodel}
  44. \caption{Métamodèle SimplePDL possible.}
  45. \label{fig:simplesimplepdlmmodel}
  46. \end{center}
  47. \end{figure}
  48. Le langage SimplePDL dont le métamodèle est donné
  49. figure~\ref{fig:simplepdlmmodel} permet d'exprimer simplement des processus
  50. génériques. Un processus (\emph{Process}) est composé d'éléments
  51. (\emph{ProcessElement}). Chaque \emph{ProcessElement} référence son processus
  52. \emph{parent} et peut être soit une \emph{WorkDefinition}, soit une
  53. \emph{WorkSequence}. Une \emph{WorkDefinition} définit une activité qui doit
  54. être effectuée durant le processus (un calcul, une action, {\etc}). Une
  55. \emph{WorkSequence} définit quant à elle une relation de dépendance entre deux
  56. activités. La deuxième (\emph{successor}) peut être démarrée ---~ou
  57. terminée~--- uniquement lorsque la première (\emph{predecessor}) est déjà
  58. démarrée ---~ou terminée~--- selon la valeur de l'attribut \emph{linkType} qui
  59. peut donc prendre quatre valeurs : \emph{startToStart}, \emph{finishToStart},
  60. \emph{startToFinish} ou \emph{finishToFinish}. Afin de pouvoir représenter des
  61. processus hiérarchiques, une \emph{WorkDefinition} peut elle-même être définie
  62. par un processus imbriqué (référence \emph{process}), qui conserve un lien vers
  63. l'activité qu'il décrit (référence \emph{from}).
  64. Le métamodèle donné par la figure~\ref{fig:petrinetmmodel2} permet d'exprimer
  65. les réseaux de Petri. Un tel réseau se définit par un ensemble de nœuds
  66. (\emph{Node}) qui sont soit des places de type \emph{Place}, soit des
  67. transitions de type \emph{Transition}, ainsi que par des arcs (\emph{Arc}). Un
  68. arc (orienté) relie deux nœuds de types différents (le réseau de Petri est un
  69. graphe biparti) et peut être de type \emph{normal} ou \emph{read-arc}. Il
  70. spécifie le nombre de jetons (\emph{weight} ---~poids~---) consommés dans la
  71. place source ou produits dans la place cible lorsqu'une transition est tirée.
  72. Un \emph{read-arc} vérifie uniquement la disponibilité des jetons sans pour
  73. autant les consommer (test de franchissement). Le marquage d'un réseau de Petri
  74. est défini par le nombre de jetons dans chaque place (\emph{marking}).
  75. \begin{figure}[h]%[fig:petrinetmmodel]{Métamodèle PetriNet.}%[H] %[!h]
  76. \begin{center}
  77. \input{figures/petrinetmmodel}
  78. \caption{Métamodèle des réseaux de Petri.}
  79. \label{fig:petrinetmmodel2}
  80. \end{center}
  81. \end{figure}
  82. \FloatBarrier
  83. \section{Traçabilité}
  84. La traçabilité est très importante dans le cadre de la maintenance pour pouvoir
  85. suivre l'évolution d'un logiciel et détecter des \emph{bugs} introduits durant
  86. le cycle de vie de l'application. C'est un précieux outil pour l'analyse et
  87. la vérification de transformations, ce qui explique que ce soit une exigence de
  88. qualification. La traçabilité peut prendre plusieurs formes. Nous distinguons
  89. notamment la traçabilité \emph{interne} (autrement appelée \emph{technique}) de
  90. la traçabilité de spécification.
  91. \subsection{Traçabilité interne}
  92. La traçabilité \emph{interne} ou \emph{technique}~\cite{Jouault2005} a un usage
  93. purement technique au sein de la transformation. C'est-à-dire qu'elle est
  94. utilisée pour opérer la transformation, mais n'est pas nécessairement utile dans
  95. le cadre d'un processus de qualification. Dans les approches compositionnelles
  96. des transformations comme la nôtre, il faut mettre en œuvre un mécanisme
  97. permettant d'assembler les résultats partiels. Dans notre cas, si des éléments
  98. intermédiaires \emph{resolve} sont créés, il est nécessaire de pouvoir les
  99. faire correspondre à des éléments cibles réels. Il faut donc pouvoir marquer
  100. les éléments susceptibles de correspondre à un \emph{resolve} donné afin
  101. d'assurer la réalisation de la phase de résolution. Nous avons mis en œuvre
  102. cette traçabilité dans le cadre de notre approche décrite dans le
  103. chapitre~\ref{ch:approach} et nous la décrivons plus précisément dans le
  104. chapitre~\ref{ch:outils}. Nous ne nous attardons donc pas sur cette notion dans
  105. ce chapitre.
  106. Du fait de son usage, la traçabilité technique est étroitement liée à
  107. l'implémentation de la transformation. Elle est difficilement générique, ce qui
  108. peut nécessiter de la réingénierie lors d'une évolution de la transformation.
  109. %\todo{Deux types de traçabilité pouvant être distingués, nous nous concentrons
  110. %essentiellement sur la
  111. %traçabilité de spécification dans ce chapitre. En effet, la traçabilité
  112. %\emph{interne} (ou \emph{technique}) ---~purement mécanique~--- est liée
  113. %%permet de réaliser le
  114. %mécanisme de résolution exposé dans le chapitre précédemment.}
  115. %\todo{types de traçabiilité : implicite/explicite ; interne/spec ; choix ;
  116. %approche}
  117. \subsection{Traçabilité de spécification}
  118. La traçabilité de spécification est quant à elle une exigence de qualification.
  119. C'est-à-dire qu'il faut pouvoir lier une source à une cible selon une
  120. spécification donnée. Ce type de traçabilité n'a pas d'usage technique pour le
  121. bon déroulement de la transformation elle-même et n'est pas nécessairement liée
  122. à l'implémentation.
  123. La traçabilité des transformations de modèles étant un élément essentiel dans
  124. un cadre industriel, beaucoup de langages l'ont implémenté. Cependant, les
  125. langages tels que {\qvtr} et {\atl} proposent une traçabilité mécanique, mais
  126. qui n'est pas substituable à la traçabilité de spécification.
  127. %\ttodo{==============================
  128. % \begin{itemize}
  129. % \item traçabilité vs spec
  130. % \item intérêt
  131. % \item que tracer ? quel format ? usage
  132. % \item spec MM + explication
  133. % \item spec textuelle
  134. % \item OCL contrainte sur la spec textuelle
  135. % \item approche implicite
  136. % \end{itemize}
  137. % ==============================}
  138. En {\idm}, l'usage de {\uml} est courant et comme nous avons pu le voir dans le
  139. chapitre~\ref{ch:notions}, un métamodèle permet de spécifier un langage. Pour
  140. exprimer la traçabilité dans ce contexte, il est donc naturel d'utiliser des
  141. métaclasses pour avoir un formalisme cohérent. On peut alors exprimer
  142. simplement la traçabilité par le métamodèle~\ref{fig:linkmmodel}.
  143. \begin{figure}[h]
  144. \begin{center}
  145. \input{figures/linkmmodel}
  146. \caption{Métamodèle générique de trace.}
  147. \label{fig:linkmmodel}
  148. \end{center}
  149. \end{figure}
  150. Une \emph{Trace} concerne une transformation donnée nommée. Elle est composée
  151. d'un ensemble de relations (ou de liens de trace \emph{TraceLink}) entre des
  152. éléments sources et cibles. Un lien de trace établit une relation entre un ou
  153. plusieurs éléments sources (\emph{SourceElement}) et un ou plusieurs éléments
  154. cibles (\emph{TargetElement}). Une relation de trace est nommée et peut être
  155. considérée comme une règle ayant un membre gauche (source) et en membre droit
  156. (cible). Ce métamodèle est générique afin de donner une intuition. Il doit
  157. cependant être spécifique pour chaque transformation donnée. Dans le cas de
  158. \emph{SimplePDLToPetrinet}, \emph{SourceElement} de la
  159. figure~\ref{fig:linkmmodel} est remplacé par les métaclasses \emph{Process},
  160. \emph{WorkDefinition} et \emph{WorkSequence} ou alors est leur surtype. Dans le
  161. cas d'un \emph{framework} comme {\emf}, on peut utiliser \emph{EObject}.
  162. Lors de la certification et de la qualification, les spécifications sont
  163. cependant très souvent écrites en langue naturelle (français ou anglais). Le
  164. tâche de l'expert qualifieur consiste alors à comparer la spécification
  165. textuelle au code du logiciel et aux sorties produites pour des entrées
  166. données. Cette tâche est complexe et fortement sujette à erreurs du fait du
  167. rôle central que joue l'humain dans ce processus. Tout doit donc être mis en
  168. œuvre pour assister l'expert qualifieur en lui fournissant des éléments de
  169. confiance supplémentaires. C'est le rôle des outils et de leurs implémentations
  170. de la traçabilité.
  171. Cette trace peut revêtir différents aspects et n'est pas forcément utilisable
  172. avec des outils automatiques. Par exemple, l'implémentation de la traçabilité
  173. peut consister en la génération de commentaires lisibles par un humain. C'est
  174. d'ailleurs l'approche adoptée par l'outil {\btollvm} ---~hors du contexte de
  175. l'{\idm}~--- qui opère une transformation du langage {\B} vers le langage
  176. intermédiaire de {\llvm}\footnote{Le projet {\llvm} est une infrastructure de
  177. compilateur modulaire et réutilisable, voir \url{http://www.llvm.org}.}. Ces
  178. commentaires facilitent la lecture et la compréhension du code par l'expert,
  179. mais ne sont cependant pas réutilisables en tant que tels comme entrées d'un
  180. outil automatique de vérification. Un point particulièrement intéressant est
  181. d'assurer la traçabilité d'une transformation en générant une trace formelle
  182. exploitable \emph{a posteriori} par d'autres outils. L'intérêt est alors de
  183. permettre de se passer de l'écriture d'une preuve formelle ---~coûteuse à
  184. obtenir~--- tout en conservant une confiance forte dans la transformation. Une
  185. telle trace générée lors d'une transformation peut-être utilisée de deux
  186. manières :
  187. \begin{itemize}
  188. \item elle peut être comparée à une trace de référence donnée en spécification ;
  189. \item des propriétés données en spécification peuvent être vérifiées.
  190. \end{itemize}
  191. Dans le premier cas d'utilisation, le format de la trace doit être parfaitement
  192. spécifié afin que, pour une entrée et une transformation données, la trace
  193. puisse être comparée à une trace de référence. Cette dernière fait alors office
  194. de spécification de la transformation.
  195. Dans le second cas d'utilisation de la trace, il faut pouvoir exprimer des
  196. propriétés à vérifier. Dans le contexte de la modélisation, {\ocl} est utilisé
  197. pour décrire des règles s'appliquant sur des modèles {\uml}. Lors d'une
  198. transformation de modèle, des pre-conditions peuvent donc être écrites pour les
  199. éléments sources, des post-conditions pour les éléments cibles et des
  200. invariants pour les liens de traçabilité.
  201. Dans notre approche, nous avons proposé une traçabilité de spécification. La
  202. transformation par réécriture présentée étant une transformation par parties,
  203. nous agrégeons un ensemble de règles (\emph{définitions}) pour obtenir la
  204. transformation finale. Chacune de ces \emph{définitions} est nommée et nous
  205. utilisons son nom pour construire le lien de trace lors de la génération du
  206. métamodèle de lien (au temps de compilation). Le membre gauche de nos règles
  207. constitue la source de chaque lien de trace, tandis que les éléments du membre
  208. droit sont les cibles de la relation de trace. Sur action explicite de
  209. l'utilisateur, nous établissons une relation un élément source et élément
  210. cible. Dans sa forme actuelle, notre implémentation permet de lier plusieurs
  211. cibles à une seule source (relations \texttt{1..N}), l'objectif étant à terme
  212. d'établir des liens entre plusieurs sources et plusieurs cibles (relations
  213. \texttt{N..N}).
  214. Reprenons le cas de la transformation \emph{SimplePDLToPetriNet} et choisissons
  215. une règle comme exemple : \emph{Process2PetriNet}. Cette règle transforme les
  216. éléments \emph{Process} du modèle source en un réseau de Petri composé de trois
  217. places ($p\_ready$, $p\_running$ et $p\_finished$), deux transitions
  218. ($t\_start$ et $t\_finish$) et de quatre arcs ($ready2start$, $start2running$,
  219. $running2finish$ et $finish2finished$). De cette description textuelle, nous
  220. pouvons spécifier la relation liant la source \emph{src} aux éléments cibles
  221. comme suit :
  222. \begin{verbatim}
  223. Process2PetriNet = {
  224. src : Process ;
  225. p_ready, p_running, p_finished : Place ;
  226. t_start, t_finish : Transition ;
  227. ready2start, start2running, running2finish, finish2finished : Arc
  228. }
  229. \end{verbatim}
  230. On peut faire de même avec les relations \emph{WorkDefinition2PetriNet} et
  231. \emph{WorkSequence2PetriNet} pour compléter la spécification.
  232. Il est ensuite possible d'exprimer des contraintes sur cette relation,
  233. notamment des contraintes de nommage des éléments cibles. Dans notre cas,
  234. supposons que l'on impose que le nom d'un élément cible soit composé de deux
  235. parties, sur le principe suivant :
  236. \begin{itemize}
  237. \item le nom de l'élément source lui ayant donné naissance en préfixe ;
  238. \item un suffixe pertinent pour décrire l'élément (par exemple \emph{ready}
  239. pour la place \emph{p\_ready}).
  240. \end{itemize}
  241. Avec ces conventions, nous pouvons par exemple écrire la contrainte de nommage
  242. pour la place \emph{p\_ready} peut être écrite comme suit (\verb+concat()+ est
  243. l'opération de concaténation des chaînes de caractères dans {\ocl}) :
  244. \begin{verbatim}
  245. p_ready.Name = src.Name.concat('_').concat(p_ready.Name);
  246. \end{verbatim}
  247. La trace est donc exploitable à des fins de qualification.
  248. %L'un des intérêts de
  249. %l'{\idm} est d'avoir la capacité de fournir des
  250. %Compte tenu du processus de qualification actuel et de l'importance de cette
  251. %Cette problématique étant fondamentale pour tout développement de système
  252. %critique, dans un autre domaine que l'{\idm},
  253. %C'est d'ailleurs l'approche adoptée par l'outil {\btollvm} qui implémente la
  254. %traçabilité de la transformation du langage {\B} vers le langage intermédiaire
  255. %de {\llvm} sous la forme de commentaires lisibles par un humain. Ces
  256. %commentaires sont générés pour un code {\B} donné et évoluent donc avec
  257. %l'outil. Ils facilitent la lecture et la compréhension du code par l'expert
  258. %mais ne sont pas réutilisables en tant que tel comme entrée d'un outil
  259. %automatique de vérification.
  260. %(\emph{SourceElement}) ---~association \emph{sources}~--- et un ou plusieurs
  261. %éléments cibles (\emph{TargetElement}) --~association \emph{targets}~---.
  262. %\ttodo{là il y a un problème : où est le liant ? d'où est-ce que ça sort ? etc.}
  263. %Ensuite, on se propose d'assurer la correction en exprimant les
  264. %propriétés avec {\ocl}.
  265. %On écrit des pre-conditions pour les sources, des
  266. %post-conditions pour les cibles et des invariants pour les liens de
  267. %traçabilité. Ainsi, dans notre exemple, la traçabilité peut être spécifiée sous
  268. %la forme de contraintes {\ocl} telles que \todo{Nom du \emph{Process}
  269. %SimplePDL = Préfixe des éléments du réseau de Petri image ; Nom d'une
  270. %\emph{WorkDefinition} = Préfixe des éléments du réseau de Petri image de
  271. %l'activité}. (\ttodo{en OCL ?}).
  272. %Un modèle = nœuds + arcs (seront attribués)
  273. %
  274. %capturer 1 certain nombre de nœuds et d'arcs $\Rightarrow nouvel ensemble$
  275. %
  276. %nœuds bidons (resolve)
  277. %
  278. %Transfo de Modèles : {nœuds, arcs} -> autre {n,a} + nœuds à trous (resolve)
  279. %
  280. %Transfo pour réécriture de graphe
  281. %
  282. %Comment construire cette fonction ? par parties (bouts de graphes, avec des
  283. %trous)
  284. %
  285. %réécriture de termes $\Rightarrow$ graphe + arbre de recouvrement (par la
  286. %composition) + liens (associations)
  287. %%
  288. %%mécanique de termes, RW arbres
  289. %
  290. %+ enrichissement asso + recoller les morceaux de graphes
  291. %%
  292. %%description compositionnelle du problème : règles, assemblage via resolve.
  293. %\ttodo{ }
  294. %\ttodo{tout ce qui suit doit disparaitre d'une manière ou d'une autre ============}
  295. %\ttodo{réorganisation complète :
  296. % \begin{itemize}
  297. %% \item Comment spécifier ? illustrer la traçabilité (sans technique)
  298. %% \item spéc sous forme de contraintes OCL : Nom petri = Nom process, etc.
  299. %% \item propriétés OCL pre src / post tgt / inv lines de traçabilité
  300. % \item cas d'utilisation SimplePDL2PetriNet à remonter du ch7 (MM) (modèles
  301. % simples dans le ch4)
  302. % \item modèle = ensemble de nœuds et arcs
  303. % \item transfo de graphe, autre ensemble avec en intermédiaire la possibilité d'introduire des nœuds resolve
  304. % \item transfo pour réécrire le graphe
  305. % \item comment construire cette fonction ? par parties (bouts de graphe,
  306. % éventuellement des bouts avec des trous)
  307. % \item réécriture de termes, graphe -> arbre de recouvrement (composition) +
  308. % liens (association)
  309. % \end{itemize}
  310. %}
  311. %1e point : cf ch3, système critiques, qualification de transfo\\
  312. %important de spécifier la transformation pour vérifier la conformité
  313. %disposer de la traçabilité CS-CO\\
  314. %$\Rightarrow$ s'appuyer pour transfo les modèles\\
  315. %niveau spéc, donc différent de QVTR\\
  316. %ex comment spécifier
  317. %
  318. %ch5, comment spécifier $\Rightarrow$ illustrer traçabilité (sans tech)
  319. %
  320. %spéc sous forme de contraintes OCL : nom Petri = nom Process (par exemple), nom
  321. %activité
  322. %si on génère les liens de traçabilité, contraintes OCL applicables $\Rightarrow$
  323. %confiance$+$ $\Rightarrow$ pas besoin de preuve
  324. %2e point : langage QVTR, ATL, etc. proposent une traçabilité mécanique de
  325. %l'implémentation, pas substituable à celle de spécification
  326. %ex : aplatissement machines à états
  327. %\ttodo{tout ce qui précède doit disparaître d'une manière ou d'une autre\\============}
  328. %\ttodo{=========================================}
  329. %Metamodèle dans la vraie vie :
  330. %\begin{figure}[h]
  331. % \begin{center}
  332. % \input{figures/actuallinkmmodel}
  333. % \caption{Métamodèle de trace généré}
  334. % \label{fig:actuallinkmmodel}
  335. % \end{center}
  336. %\end{figure}
  337. %\todo{todo:
  338. %\begin{itemize}
  339. % \item Intérêt
  340. % \item types
  341. % \begin{itemize}
  342. % \item interne
  343. % \begin{itemize}
  344. % \item explication
  345. % \item implémentation technique NON
  346. % \end{itemize}
  347. % \item spécification
  348. % \begin{itemize}
  349. % \item explication
  350. % \item implémentation technique / projet d'implémentation NON
  351. % \end{itemize}
  352. % \end{itemize}
  353. %\end{itemize}}
  354. %\ttodo{??? \begin{itemize}
  355. %\item DO-330 <- exigences dans l'industrie, pour la qualification du logiciel
  356. %\item que tracer ? comment ? quel format
  357. %\item intérêt
  358. %\item une idée de modèle de lien
  359. %\item comment utiliser les traces ? avec quels outils ?
  360. %\end{itemize}}
  361. %Les systèmes se complexifiant, l'{\idm} a apporté des solutions pour faciliter
  362. %et accélérer le développement logiciel. Cependant, si la manière de développer
  363. %un logiciel ainsi que les technologies utilisées ont changé depuis les débuts
  364. %de l'informatique, les contraintes liées à la maintenance (évolution du
  365. %logiciel, déboguage) ainsi qu'à la fiabilité (qualification, certification)
  366. %restent identiques. Ainsi, dans le cadre de la qualification, il est nécessaire
  367. %d'adopter la traçabilité. Lorsque l'on écrit et utilise une transformation, il
  368. %est nécessaire de connaître et de conserver les relations entre les sources et
  369. %les cibles. Ces relations sont données par la trace.
  370. %Nous abordons la notion de traçabilité
  371. %La notion de traçabilité est fondamentale en {\idm} pour différentes raisons
  372. %: %logiciel construit à partir de modèles, puis génération de code =>
  373. %%maintenance difficile
  374. %\begin{itemize}
  375. %\item qualification de logiciels obtenus via IDM
  376. %\item maintenance logicielle : changement d'archi, détection etcorrection de
  377. %bugs, etc.
  378. %\item analyse de transformations/compilations
  379. %\end{itemize}
  380. %définition de la \emph{trace navigation}~\cite{Vanhooff}
  381. %\section{Traçabilité interne}
  382. %%\subsection{\todo{Explication}}
  383. %usage pour les transfos elles-mêmes ; fortement liée à l'implémentation ;
  384. %problèmes en cas de réingénierie.
  385. %\subsection{Implémentation technique}
  386. %la partie « resolvelink » de \lex{\%tracelink} ; faut vraiment découper la
  387. % construction en deux pour que les deux traçabilités soient bien
  388. % distinctes
  389. %\section{Traçabilité des spécifications}
  390. %%\subsection{\todo{Explication}}
  391. %intérêt ; découpler la trace des règles implémentées. La traçabilité de
  392. %spécification n'est pas un debug ;
  393. %
  394. %%\subsection{Mise en {\oe}uvre / projet d'implémentation}
  395. %sur le mode « tout est modèle », je veux « tout est terme ». Le \emph{modèle de
  396. %lien} devient un \emph{terme de lien}.\\
  397. %TRACE, qui est l'ouverture vers un « contexte/environnement de termes ».
  398. \section{Synthèse}%Approche}
  399. %\ttodo{en vrac : environnement hybride / 1..N / marquage /}
  400. Nous avons vu qu'on pouvait distinguer deux types de traçabilité :
  401. \emph{interne} et \emph{de spécification}. Nous avons mis en œuvre les deux, la
  402. première étant absolument nécessaire à la bonne réalisation de notre approche,
  403. la seconde étant utile pour le développement de transformations qualifiables.
  404. Nous avons vu dans le chapitre~\ref{ch:verification:trace} que la traçabilité
  405. est généralement classée en deux catégories : \emph{implicite} et
  406. \emph{explicite}. Un aspect important de notre approche réside dans notre choix
  407. d'une traçabilité \emph{explicite}, ce qui implique l'introduction d'une
  408. syntaxe concrète dans le langage pour capturer explicitement les liens de
  409. trace. Dans le cas d'un choix implicite, tout doit être tracé et il faut
  410. prévoir un mécanisme pour trier et sélectionner les informations pertinentes
  411. \emph{a posteriori} (un système de requête sur la trace générée par exemple).
  412. Notre choix présente l'intérêt de produire des traces ciblées d'une taille plus
  413. raisonnable. Elles sont donc exploitables plus facilement \emph{a posteriori}.
  414. Enfin, un autre point intéressant qui ne peut transparaître sans aborder la
  415. question technique tient au fait de notre environnement technologique hybride.
  416. En effet, nous apportons une traçabilité au sein d'un langage généraliste par
  417. l'ajout d'une construction dédiée. Dans un environnement homogène et parfaitement maîtrisé, la
  418. difficulté est levée rapidement, la traçabilité pouvant être assurée
  419. relativement simplement. En revanche, dans notre contexte, nous sommes à la
  420. frontière de deux mondes que l'utilisateur peut franchir selon ses convenances.
  421. Si l'utilisation du langage {\tom} et la manipulation de termes ne lui
  422. conviennent pas, l'utilisateur peut revenir à un mode de programmation en pur
  423. {\java}, auquel cas nous perdons le contrôle de cette partie du code. Ajouter
  424. la traçabilité dans cet environnement devient plus complexe. Nous détaillons la
  425. mise en œuvre de notre approche dans le chapitre~\ref{ch:outils}.
  426. Finalement, notre approche permet un usage \emph{a posteriori} de la trace
  427. générée à des fins de vérification dans le cadre de la qualification.
  428. %\todo{tout ce qui suit doit disparaitre ============================== }
  429. %
  430. %Notre approche sur la traçabilité d'une transformation consiste à exprimer
  431. %explicitement les relations liant une source à une cible. Nous sommes
  432. %actuellement en mesure d'associer une source à plusieurs cibles (relations
  433. %\texttt{1..N}). Nous disposons des deux types de traçabilité : d'une part la
  434. %traçabilité \emph{interne} (ou \emph{technique}) qui nous permet d'assurer la
  435. %phase de résolution, d'autre part la traçabilité des spécifications. Notre
  436. %approche est intéressante dans le sens où la granularité de la trace n'est pas
  437. %imposée à l'utilisateur (trop haut niveau ---~modèle source lié au modèle
  438. %cible~--- ou trop bas niveau ---~tous les éléments cibles sont forcément liés à
  439. %des éléments sources~---). Un autre intérêt certain de notre approche est son
  440. %environnement technologique : nous nous plaçons à la frontière des langages
  441. %généralistes et des langages dédiés en intégrant des constructions spécialisées
  442. %dans des outils généralistes. Cela nous permet d'ajouter une traçabilité dans
  443. %une transformation écrite en {\java} notamment. Nous décrivons l'aspect cet
  444. %aspect technique dans le chapitre~\ref{ch:outils:trace}, avec l'explication de
  445. %l'implémentation des outils.
  446. %\todo{en vrac}
  447. %
  448. %La traçabilité \emph{interne} est la traçabilité qui permet de réaliser la
  449. %phase de résolution. Elle consiste à marquer les éléments cibles d'une
  450. %\emph{définition} comme étant des éléments pouvant correspondre à des éléments
  451. %\emph{resolve}. Cette traçabilité a un intérêt technique.
  452. %
  453. %\todo{en vrac}
  454. %
  455. %Dans un environnement parfaitement maîtrisé, il est relativement simple
  456. %d'assurer la traçabilité d'une transformation : en effet, l'utilisateur a moins
  457. %de possibilités de s'écarter de l'environnement. Dans notre approche hybride,
  458. %nous sommes constamment à la frontière de deux mondes que l'utilisateur peut
  459. %franchir selon ses convenances. Si l'utilisation du langage {\tom} et la
  460. %manipulation de termes ne lui conviennent pas, l'utilisateur peut revenir à un
  461. %mode de programmation en pur {\java}, auquel cas nous perdons le contrôle de
  462. %cette partie du code. Ajouter la traçabilité dans cet environnement devient
  463. %plus complexe. Nous avons pris le parti de fournir une traçabilité qui puisse
  464. %être utilisée simplement au sein de {\java}.
  465. %\todo{en vrac}
  466. %
  467. %Nous avons vu dans le chapitre~\ref{ch:verification:trace} que la traçabilité
  468. %est généralement classée en deux catégories : \emph{implicite} et
  469. %\emph{explicite}. Dans notre approche, nous avons fait le choix d'une
  470. %traçabilité \emph{explicite}, ce qui implique l'introduction d'une syntaxe
  471. %concrète dans le langage pour capturer explicitement les liens de trace.
  472. %\todo{en vrac}
  473. %
  474. %Dans notre approche, afin d'obtenir des traces exploitables, nous avons choisi
  475. %d'aborder le problème de la traçabilité sur une action explicite de
  476. %l'utilisateur. Dans l'extension du langage {\tom}, nous proposons une
  477. %construction dédiée à la traçabilité.
  478. %\todo{en vrac}
  479. %
  480. %Nous distinguons deux types de traçabilité : la traçabilité dite \emph{interne}
  481. %ou \emph{technique}~\cite{Jouault2005} ainsi que la traçabilité de
  482. %spécification.
  483. %\todo{en vrac}
  484. %
  485. %La traçabilité \emph{interne} a un usage purement technique au sein de la
  486. %transformation, c'est-à-dire qu'elle est utilisée pour opérer la transformation
  487. %mais n'est pas nécessairement utile dans le cadre d'un processus de
  488. %qualification. Cette traçabilité est nécessaire à la réalisation de la phase de
  489. %résolution. En effet, si l'on crée des éléments \emph{resolve}, il faut aussi
  490. %marquer les éléments susceptibles de correspondre à un \emph{resolve} donné.
  491. %Les éléments tracés de la sorte sont donc les pendants des \emph{resolve}.
  492. %\section{Travail connexe (\todo{section à part entière ou au début plutôt ?})}
  493. %\section{\todo{Synthèse}}
  494. %\ttodo{}
  495. % vim:spell spelllang=fr