appendices.tex 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. \appendix
  2. %code, métamodèles et modèles bruts
  3. \Annex{Étude de cas : Transformation SimplePDLToPetriNet}
  4. \section{Code de la transformation \emph{SimplePDLToPetriNet}}
  5. \label{annexe:pdl2pn}
  6. Ce code est accessible sur le dépôt officiel du projet {\tom} :
  7. \url{https://gforge.inria.fr/scm/?group\_id=78}. Pour plus d'informations sur le
  8. sujet, le lecteur pourra aussi se référer à la documentation en ligne
  9. accessible sur cette page
  10. : \url{http://tom.loria.fr/wiki/index.php5/Documentation:Playing\_with\_EMF}.
  11. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=simplepdltopetrinet,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1,lastline=295]{code/simplepdltopetrinet/SimplePDLToPetriNet.t}
  12. %,caption=TODO,label=code:simplepdl2pni,captionpos=b
  13. \section{Modèle source}
  14. \label{annexe:pdl2pn:msrc}
  15. %\begin{codesource}
  16. % \input{code/simplepdltopetrinet/models/DefaultSimplePDLInstance.xmi}
  17. %\end{codesource}
  18. Cette transformation a été testée avec de nombreux modèles. Le modèle donné par
  19. le listing~\ref{inputsimplepdl2pn} est le modèle donné en exemple dans la
  20. section~\ref{sec:simplepdl2pn} du chapitre~\ref{ch:usecase}. Il s'agit aussi du
  21. modèle par défaut de la transformation dans le cas où aucun modèle n'est passé
  22. en paramètre (c'est en fait le modèle équivalent directement construit en
  23. {\tom} sans chargement de fichier).
  24. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=inputmodelsimplepdl2pn,frame=tb,firstnumber=1,firstline=1,captionpos=b,caption=Modèle source de l'exemple pour la transformation SimplePDLToPetriNet (format \texttt{.xmi}),label=inputsimplepdl2pn]{code/simplepdltopetrinet/models/DefaultSimplePDLInstance.xmi}
  25. %
  26. \section{Modèle résultant}
  27. \label{annexe:pdl2pn:mtgt}
  28. %\input{}
  29. Le modèle source donné précédemment produit le modèle cible
  30. suivant~\ref{outputsimplepdl2pn}, qui est en fait le réseau de Petri résultant
  31. de la transformation, sérialisé sous la forme d'un fichier au format compatible
  32. avec l'entrée du \emph{model-checker} {\tina}~\cite{Berthomieu2004} (il est
  33. aussi affiché directement sur la sortie standard) :
  34. %la sortie suivante
  35. %~\ref{outputsimplepdl2pn}, qui est en fait le réseau de Petri résultant
  36. %de la transformation, affiché dans un format compatible avec l'entrée du
  37. %\emph{model-checker} {\tina} (il est aussi sérialisé sous la forme d'un fichier
  38. %\texttt{.net}) :
  39. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=outputsimplepdl2pn,frame=tb,firstnumber=1,firstline=1,captionpos=b,caption=Modèle cible résultant de la transformation SimplePDLToPetriNet (format lisible par {\tina}),label=outputsimplepdl2pn]{code/simplepdltopetrinet/resultingPetri.net}
  40. %
  41. %\lstinputlisting[basicstyle={\ttfamily\scriptsize},name=outputsimplepdl2pn,frame=tb,firstnumber=1,firstline=47,lastline=64,captionpos=b,caption=Sortie de la transformation SimplePDLToPetriNet au format {\tina},label=outputsimplepdl2pn]{code/simplepdltopetrinet/expected_result}
  42. %\pagebreak
  43. %Sérialisé en \texttt{.xmi}, le modèle cible obtenu est celui donné par le
  44. %listing~\ref{outputmodelsimplepdl2pn} :
  45. %
  46. %\lstinputlisting[basicstyle={\ttfamily\scriptsize},name=outputmodelsimplepdl2pn,frame=tb,firstnumber=1,firstline=1,label=outputmodelsimplepdl2pn]{code/simplepdltopetrinet/resultingPetrinet.xmi}
  47. %%\lstinputlisting[basicstyle={\ttfamily\scriptsize},name=outputmodelsimplepdl2pn,frame=tb,firstnumber=1,firstline=1,captionpos=b,caption=Modèle cible résultant de la transformation SimplePDLToPetriNet\, sérialisé au format \texttt{.xmi},label=outputmodelsimplepdl2pn]{code/simplepdltopetrinet/resultingPetrinet.xmi}
  48. \section{Vérification du résultat}
  49. \label{annexe:pdl2pn:mc}
  50. La boîte à outils {\tina}\footnote{\url{http://projects.laas.fr/tina}} (version
  51. 3.1.0) a été utilisée pour vérifier le modèle résultant de la transformation de
  52. modèle \emph{SimplePDLToPetriNet}.
  53. \subsubsection{Procédure}
  54. Le résultat de la transformation est un réseau de Petri dans un format lisible
  55. par {\tina} (fichier \texttt{result.net}. La procédure ci-après permet de
  56. reproduire l'expérience :
  57. \begin{enumerate}
  58. \item Visualisation du réseau de Petri :\\ \verb+~/tina-3.1.0/bin/nd result.net+
  59. (sauvegarde au format \texttt{.ndr})
  60. \item Construction du graphe d'atteignabilité :\\ \verb+~/tina-3.1.0/bin/tina -C result.ndr result.ktz+ (le format \texttt{.ktz} est un format binaire
  61. propriétaire)
  62. \item Vérification de propriétés :\\ \verb+~/tina-3.1.0/bin/selt result.ktz prop.ltl >> result.selt+ (le fichier \texttt{prop.ltl} décrit ci-après contient les formules et les propriétés à vérifier)
  63. \end{enumerate}
  64. \subsubsection{Formule et propriétés}
  65. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=properties,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1,captionpos=b,caption=Formule et propriétés LTL à vérifier sur le modèle résulatnt de la transformation SimplePDLToPetriNet,label=properties]{code/simplepdltopetrinet/tina/tocheck.ltl}
  66. Le listing~\ref{properties} contient une formule et quatre propriétés exprimées
  67. en LTL afin de pouvoir être utilisées avec {\tina}. Nous les décrivons
  68. ci-après, dans l'ordre :
  69. \begin{itemize}
  70. %\item \verb+op finished = T /\ A_finished /\ B_finished /\ C_finished /\ D_finished;+
  71. \item[\textbf{ligne 1 :}] Il s'agit de la formule définissant l'opérateur
  72. \emph{finished} comme $\top \wedge A_{finished} \wedge B_{finished} \wedge
  73. C_{finished} \wedge D_{finished}$. Cela signifie que l'on considère le
  74. processus complet terminé lorsque toutes les activités le composant sont
  75. terminées (lorsqu'il y a un jeton dans chaque place $finished$ des
  76. activités $A$, $B$, $C$ et $D$).
  77. %\item \verb+[] (finished => dead);+
  78. \item[\textbf{ligne 3 :} $\square (finished \Rightarrow dead)$.] Cette
  79. première propriété signifie que tout processus dans son état final est
  80. terminé. %\todo{FALSE}
  81. %\item \verb+[] (dead => finished);+
  82. \item[\textbf{ligne 4 :} $\square (dead \Rightarrow finished)$.] Cette
  83. deuxième propriété peut être traduite par \og tout processus terminé est
  84. dans son état final\fg{} (correction partielle). %\todo{TRUE}
  85. %\item \verb+[] <> dead ;+
  86. \item[\textbf{ligne 5 :} $\square \lozenge dead$.] Cette troisième propriété
  87. est la propriété de terminaison qui assure que \og toute exécution se
  88. termine \fg{}. %\todo{TRUE}
  89. %\item \verb+- <> finished;+
  90. \item[\textbf{ligne 6 :} $\neg \lozenge finished$.] Cette quatrième propriété
  91. peut être traduite par \og l'état final n'est jamais atteint \fg{} et
  92. revient à vérifier la propriété de consistance faible (existence d'au moins
  93. une exécution du processus).%\todo{FALSE}
  94. \end{itemize}
  95. Note : \texttt{dead} est une propriété prédéfinie vraie uniquement sur les
  96. états de blocage.
  97. %Rappel
  98. % P : P vraie au départ du chemin (pour l'état initial)
  99. %square P : P vraie tout au long du chemin
  100. %diamond P : P vraie une fois au moins le long du chemin
  101. % square diamond P : P vraie infiniment souvent
  102. %
  103. %dead : deadlock property
  104. %finished : défini par l'utilisateur
  105. %aide :
  106. %http://homepages.laas.fr/francois/POLYS/ENSEIGNEMENT/MC2/ltl.php
  107. \pagebreak
  108. \subsubsection{Résultat fourni par {\textsf{selt}\xspace}}
  109. Nous avons vérifié les propriétés données précédemment sur le réseau de Petri
  110. généré en utilisant \texttt{selt} (partie de {\tina}). Le résultat est le
  111. suivant :
  112. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=mcresult,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1,captionpos=b,caption=Résultat fourni par \texttt{selt} pour les propriétés et le réseau de Petri fourni dans notre exemple,label=mcresult]{code/simplepdltopetrinet/tina/tocheck.selt}
  113. Ainsi, les propriétés 2 et 3 sont vérifiées. En revanche, les propriétés 1 et 4
  114. sont fausses, \texttt{selt} exhibe donc un contre-exemple pour chacune. Dans le
  115. cas de la quatrième propriété, une évaluation à \emph{False} permet d'affirmer
  116. que le processus est faiblement consistant (le contre-exemple donne une
  117. exécution correcte du processus).
  118. \Annex{Étude de cas : aplatissement d'une hiérarchie de classes}
  119. \section{Code de la transformation}
  120. \label{annexe:flattening}
  121. \subsection{Version 1 : transformation en {\java}+{\emf}}
  122. \label{annexe:flattening:v1}
  123. %\input{code/flattening/V0_notom_UMLClassesFlattening.java}
  124. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v1flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V1_notom_UMLClassesFlattening.java}
  125. %\lstinputlisting[basicstyle={\ttfamily\scriptsize},name=simplepdltopetrinet,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1,lastline=295,label=code:v0flattening,caption=Implémentation de la transformation d'aplatissement de hiérarchie de classes en Java]{code/flattening/V0.java}
  126. \subsection{Version 2 : transformation en {\tomjava} simple (+{\emf})}
  127. \label{annexe:flattening:v2}
  128. %\input{code/flattening/V2_nostrat_UMLClassesFlattening.t}
  129. Cette version est légèrement plus longue que la version précédente étant donné
  130. que nous avons intégré la création d'un modèle par défaut dans le cas où aucun
  131. modèle source n'est donné en argument du programme.
  132. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v2flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V2_nostrat_UMLClassesFlattening.t}
  133. \subsection{Version 3 : transformation en {\tomjava} avec stratégies (+{\emf})}
  134. \label{annexe:flattening:v3}
  135. Comme pour la version précédente, nous avons intégré la création d'un modèle
  136. par défaut dans le cas où aucun modèle source n'est donné en paramètre, d'où sa
  137. taille de code légèrement supérieure à la première version.
  138. %\input{code/flattening/V3_stratnotransfo_UMLClassesFlattening.t}
  139. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v3flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V3_stratnotransfo_UMLClassesFlattening.t}
  140. \subsection{Version 4 : transformation en {\tomjava} avec les nouvelles constructions (+{\emf})}
  141. \label{annexe:flattening:v4}
  142. %\input{code/flattening/V4_transfo_UMLClassesFlattening.t}
  143. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v3flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V4_transfo_UMLClassesFlattening.t}
  144. \Annex{Implémentation ATL de SimplePDLToPetriNet}
  145. \label{annexe:atlpdl2pn}
  146. \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=atlpdl2pn,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/simplepdltopetrinet.atl}