123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- \appendix
- %code, métamodèles et modèles bruts
- \Annex{Étude de cas : Transformation SimplePDLToPetriNet}
- \section{Code de la transformation \emph{SimplePDLToPetriNet}}
- \label{annexe:pdl2pn}
- Ce code est accessible sur le dépôt officiel du projet {\tom} :
- \url{https://gforge.inria.fr/scm/?group\_id=78}. Pour plus d'informations sur le
- sujet, le lecteur pourra aussi se référer à la documentation en ligne
- accessible sur cette page
- : \url{http://tom.loria.fr/wiki/index.php5/Documentation:Playing\_with\_EMF}.
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=simplepdltopetrinet,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1,lastline=295]{code/simplepdltopetrinet/SimplePDLToPetriNet.t}
- %,caption=TODO,label=code:simplepdl2pni,captionpos=b
- \section{Modèle source}
- \label{annexe:pdl2pn:msrc}
- %\begin{codesource}
- % \input{code/simplepdltopetrinet/models/DefaultSimplePDLInstance.xmi}
- %\end{codesource}
- Cette transformation a été testée avec de nombreux modèles. Le modèle donné par
- le listing~\ref{inputsimplepdl2pn} est le modèle donné en exemple dans la
- section~\ref{sec:simplepdl2pn} du chapitre~\ref{ch:usecase}. Il s'agit aussi du
- modèle par défaut de la transformation dans le cas où aucun modèle n'est passé
- en paramètre (c'est en fait le modèle équivalent directement construit en
- {\tom} sans chargement de fichier).
- \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}
- %
- \section{Modèle résultant}
- \label{annexe:pdl2pn:mtgt}
- %\input{}
- Le modèle source donné précédemment produit le modèle cible
- suivant~\ref{outputsimplepdl2pn}, qui est en fait le réseau de Petri résultant
- de la transformation, sérialisé sous la forme d'un fichier au format compatible
- avec l'entrée du \emph{model-checker} {\tina}~\cite{Berthomieu2004} (il est
- aussi affiché directement sur la sortie standard) :
- %la sortie suivante
- %~\ref{outputsimplepdl2pn}, qui est en fait le réseau de Petri résultant
- %de la transformation, affiché dans un format compatible avec l'entrée du
- %\emph{model-checker} {\tina} (il est aussi sérialisé sous la forme d'un fichier
- %\texttt{.net}) :
- \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}
- %
- %\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}
- %\pagebreak
- %Sérialisé en \texttt{.xmi}, le modèle cible obtenu est celui donné par le
- %listing~\ref{outputmodelsimplepdl2pn} :
- %
- %\lstinputlisting[basicstyle={\ttfamily\scriptsize},name=outputmodelsimplepdl2pn,frame=tb,firstnumber=1,firstline=1,label=outputmodelsimplepdl2pn]{code/simplepdltopetrinet/resultingPetrinet.xmi}
- %%\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}
- \section{Vérification du résultat}
- \label{annexe:pdl2pn:mc}
- La boîte à outils {\tina}\footnote{\url{http://projects.laas.fr/tina}} (version
- 3.1.0) a été utilisée pour vérifier le modèle résultant de la transformation de
- modèle \emph{SimplePDLToPetriNet}.
- \subsubsection{Procédure}
- Le résultat de la transformation est un réseau de Petri dans un format lisible
- par {\tina} (fichier \texttt{result.net}. La procédure ci-après permet de
- reproduire l'expérience :
- \begin{enumerate}
- \item Visualisation du réseau de Petri :\\ \verb+~/tina-3.1.0/bin/nd result.net+
- (sauvegarde au format \texttt{.ndr})
- \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
- propriétaire)
- \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)
- \end{enumerate}
- \subsubsection{Formule et propriétés}
- \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}
- Le listing~\ref{properties} contient une formule et quatre propriétés exprimées
- en LTL afin de pouvoir être utilisées avec {\tina}. Nous les décrivons
- ci-après, dans l'ordre :
- \begin{itemize}
- %\item \verb+op finished = T /\ A_finished /\ B_finished /\ C_finished /\ D_finished;+
- \item[\textbf{ligne 1 :}] Il s'agit de la formule définissant l'opérateur
- \emph{finished} comme $\top \wedge A_{finished} \wedge B_{finished} \wedge
- C_{finished} \wedge D_{finished}$. Cela signifie que l'on considère le
- processus complet terminé lorsque toutes les activités le composant sont
- terminées (lorsqu'il y a un jeton dans chaque place $finished$ des
- activités $A$, $B$, $C$ et $D$).
- %\item \verb+[] (finished => dead);+
- \item[\textbf{ligne 3 :} $\square (finished \Rightarrow dead)$.] Cette
- première propriété signifie que tout processus dans son état final est
- terminé. %\todo{FALSE}
- %\item \verb+[] (dead => finished);+
- \item[\textbf{ligne 4 :} $\square (dead \Rightarrow finished)$.] Cette
- deuxième propriété peut être traduite par \og tout processus terminé est
- dans son état final\fg{} (correction partielle). %\todo{TRUE}
- %\item \verb+[] <> dead ;+
- \item[\textbf{ligne 5 :} $\square \lozenge dead$.] Cette troisième propriété
- est la propriété de terminaison qui assure que \og toute exécution se
- termine \fg{}. %\todo{TRUE}
- %\item \verb+- <> finished;+
- \item[\textbf{ligne 6 :} $\neg \lozenge finished$.] Cette quatrième propriété
- peut être traduite par \og l'état final n'est jamais atteint \fg{} et
- revient à vérifier la propriété de consistance faible (existence d'au moins
- une exécution du processus).%\todo{FALSE}
- \end{itemize}
- Note : \texttt{dead} est une propriété prédéfinie vraie uniquement sur les
- états de blocage.
- %Rappel
- % P : P vraie au départ du chemin (pour l'état initial)
- %square P : P vraie tout au long du chemin
- %diamond P : P vraie une fois au moins le long du chemin
- % square diamond P : P vraie infiniment souvent
- %
- %dead : deadlock property
- %finished : défini par l'utilisateur
- %aide :
- %http://homepages.laas.fr/francois/POLYS/ENSEIGNEMENT/MC2/ltl.php
- \pagebreak
- \subsubsection{Résultat fourni par {\textsf{selt}\xspace}}
- Nous avons vérifié les propriétés données précédemment sur le réseau de Petri
- généré en utilisant \texttt{selt} (partie de {\tina}). Le résultat est le
- suivant :
- \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}
- Ainsi, les propriétés 2 et 3 sont vérifiées. En revanche, les propriétés 1 et 4
- sont fausses, \texttt{selt} exhibe donc un contre-exemple pour chacune. Dans le
- cas de la quatrième propriété, une évaluation à \emph{False} permet d'affirmer
- que le processus est faiblement consistant (le contre-exemple donne une
- exécution correcte du processus).
- \Annex{Étude de cas : aplatissement d'une hiérarchie de classes}
- \section{Code de la transformation}
- \label{annexe:flattening}
- \subsection{Version 1 : transformation en {\java}+{\emf}}
- \label{annexe:flattening:v1}
- %\input{code/flattening/V0_notom_UMLClassesFlattening.java}
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v1flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V1_notom_UMLClassesFlattening.java}
- %\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}
- \subsection{Version 2 : transformation en {\tomjava} simple (+{\emf})}
- \label{annexe:flattening:v2}
- %\input{code/flattening/V2_nostrat_UMLClassesFlattening.t}
- Cette version est légèrement plus longue que la version précédente étant donné
- que nous avons intégré la création d'un modèle par défaut dans le cas où aucun
- modèle source n'est donné en argument du programme.
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v2flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V2_nostrat_UMLClassesFlattening.t}
- \subsection{Version 3 : transformation en {\tomjava} avec stratégies (+{\emf})}
- \label{annexe:flattening:v3}
- Comme pour la version précédente, nous avons intégré la création d'un modèle
- par défaut dans le cas où aucun modèle source n'est donné en paramètre, d'où sa
- taille de code légèrement supérieure à la première version.
- %\input{code/flattening/V3_stratnotransfo_UMLClassesFlattening.t}
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v3flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V3_stratnotransfo_UMLClassesFlattening.t}
- \subsection{Version 4 : transformation en {\tomjava} avec les nouvelles constructions (+{\emf})}
- \label{annexe:flattening:v4}
- %\input{code/flattening/V4_transfo_UMLClassesFlattening.t}
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=v3flattening,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/flattening/V4_transfo_UMLClassesFlattening.t}
- \Annex{Implémentation ATL de SimplePDLToPetriNet}
- \label{annexe:atlpdl2pn}
- \lstinputlisting[basicstyle={\ttfamily\scriptsize},name=atlpdl2pn,numberstyle=\tiny,numbers=left,numberblanklines=true,frame=tb,firstnumber=1,firstline=1]{code/simplepdltopetrinet.atl}
|