rapport: ajout ocl
This commit is contained in:
parent
a640fd8331
commit
5d052564ff
BIN
rapport/assets/petriNet_complet.png
Normal file
BIN
rapport/assets/petriNet_complet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 257 KiB |
BIN
rapport/assets/simplePDL_complet.png
Normal file
BIN
rapport/assets/simplePDL_complet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 307 KiB |
Binary file not shown.
|
@ -104,12 +104,12 @@ Les relations Ressource-Request et Request-WorkDefinition sont déclarées en EO
|
|||
Le modèle SimplePDL est maintenant complet pour représenter des processus de développement.
|
||||
Un exemple complet d’utilisation de ce modèle serait :
|
||||
|
||||
% \begin{figure}[H]
|
||||
% \centering
|
||||
% \includegraphics[width=15cm]{simplePDL_complet.png}
|
||||
% \caption{Métamodèle simplePDL complet}
|
||||
% \label{simplePDL_complet}
|
||||
% \end{figure}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=15cm]{simplePDL_complet.png}
|
||||
\caption{Métamodèle simplePDL complet}
|
||||
\label{simplePDL_complet}
|
||||
\end{figure}
|
||||
|
||||
\subsection{petriNet.ecore}
|
||||
|
||||
|
@ -120,12 +120,12 @@ Ils sont donc nommés et reliés entre eux par des arcs.
|
|||
Ses arcs ont un attribut entier nommé weight pour indiquer le poids de l’arc ainsi qu’un boolean outgoing pour indiquer si ce dernier est dirigé d’une Place vers une Transition ou d’une Transition vers une Place.
|
||||
(Si outgoing est vrai, alors l’arc va de la transition vers la place.)
|
||||
|
||||
% \begin{figure}[H]
|
||||
% \centering
|
||||
% \includegraphics[width=15cm]{petriNet_complet.png}
|
||||
% \caption{Métamodèle petriNet complet}
|
||||
% \label{petriNet_complet}
|
||||
% \end{figure}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=15cm]{petriNet_complet.png}
|
||||
\caption{Métamodèle petriNet complet}
|
||||
\label{petriNet_complet}
|
||||
\end{figure}
|
||||
|
||||
\section{Sémantique statique (avec OCL)}
|
||||
|
||||
|
@ -134,16 +134,49 @@ Elles assurent certains points de cohérence et permettent d'éviter les ambigu
|
|||
|
||||
\subsection{simplePDL.ocl}
|
||||
|
||||
Pour les modèles SimplePDL, nous obligeons l’utilisateur à entrer des noms valides pour le Process, les WorkDefinition et les Resource.
|
||||
Les noms doivent aussi être unique pour les WorkDefinition et les Ressource pour améliorer la clarté du modèle.
|
||||
Nous avons aussi contraint l’utilisateur à utiliser les WorkSequence sur des WorkDefinition appartenant au même Process.
|
||||
Pour éviter des non-sens, les WorkSequence ne peuvent pas non plus avoir le même successeur et prédécesseur.
|
||||
Nous avons aussi ajouté des contraintes sur les quantités des Resource et Request.
|
||||
En effet, cela n’a pas de sens d’savoir des Resource ou des Request avec des quantités négatives.
|
||||
De plus, une Request ne peut pas être plus grande que le nombre initial de ressources.
|
||||
(Le nombre initial de ressources est le maximum puisqu’il n’y a pas de création.)
|
||||
Pour les modèles SimplePDL, nous contraignons les noms des Process au format camelCase. De même les noms des WorkDefinitions et des Resources doivent posséder au minimum 2 caractères et ne pas être exclusivement constitués de chiffres ou d'underscores.
|
||||
\begin{textcode}
|
||||
context Process
|
||||
inv validName('Invalid name: ' + self.name):
|
||||
self.name.matches('[A-Za-z_][A-Za-z0-9_]*')
|
||||
context WorkDefinition, Resource
|
||||
inv nameMin2Char: self.name.matches('..+')
|
||||
inv weirdName: not self.name.matches('([0-9]*|_*)')
|
||||
\end{textcode}
|
||||
|
||||
Pour ne pas avoir d'ambiguité dans le modèle, les noms des WorkDefinitions et des Ressources doivent être uniques:
|
||||
\begin{textcode}
|
||||
inv uniqNamesWD: self.processElements
|
||||
->select(pe | pe.oclIsKindOf(WorkDefinition))
|
||||
->collect(pe | pe.oclAsType(WorkDefinition))
|
||||
->forAll(w1, w2 | w1 = w2 or w1.name <> w2.name)
|
||||
inv uniqNamesRes: self.processElements
|
||||
->select(pe | pe.oclIsKindOf(Resource))
|
||||
->collect(pe | pe.oclAsType(Resource))
|
||||
->forAll(r1, r2 | r1 = r2 or r1.name <> r2.name)
|
||||
\end{textcode}
|
||||
|
||||
Nous avons aussi contraint l’utilisateur à utiliser les WorkSequence sur des WorkDefinition appartenant au même Process. Pour éviter des non-sens, les WorkSequence ne peuvent pas non plus avoir le même successeur et prédécesseur.
|
||||
\begin{textcode}
|
||||
context WorkSequence
|
||||
inv successorAndPredecessorInSameProcess('Activities not in the same process : '
|
||||
+ self.predecessor.name + ' in ' + self.predecessor.process().name+ ' and '
|
||||
+ self.successor.name + ' in ' + self.successor.process().name):
|
||||
self.process() = self.successor.process()
|
||||
and self.process() = self.predecessor.process()
|
||||
inv notReflexive: self.predecessor <> self.successor
|
||||
\end{textcode}
|
||||
|
||||
|
||||
Nous avons aussi ajouté des contraintes sur les quantités des Resource et Request.
|
||||
En effet, cela n’a pas de sens d’savoir des Resource ou des Request avec des quantités négatives. De plus, une Request ne peut pas être plus grande que le nombre initial de ressources. (Le nombre initial de ressources est le maximum puisqu’il n’y a pas de création.)
|
||||
\begin{textcode}
|
||||
context Resource, Request
|
||||
inv negativeQuantity: self.quantity > 0
|
||||
context Request
|
||||
inv greedy: self.quantity <= self.target.quantity
|
||||
\subsection{petriNet.ocl}
|
||||
\end{textcode}
|
||||
|
||||
Les modèles PetriNet étant relativement similaireq aux modèles SimplePDL, nous avons établi des contraintes OCL similaires.
|
||||
Nous obligeons le Network et les Node à avoir des noms uniques mais également sensés.
|
||||
|
@ -184,23 +217,23 @@ Il nous est possible de transcrire nos modèles vers d'autres formats de fichier
|
|||
Nous pouvons dans un premier temps de transformer nos modèles simplePDL selon le langage de balisage HTML.
|
||||
|
||||
\begin{htmlcode}
|
||||
<head><title>developpement</title></head>
|
||||
<body>
|
||||
<head><title>developpement</title></head>
|
||||
<body>
|
||||
<h1>Process "developpement"</h1>
|
||||
<h2>Work definitions</h2>
|
||||
<ul>
|
||||
<li>Conception</li>
|
||||
<li>
|
||||
RedactionDoc requires Conception to be finished,
|
||||
Conception to be started.
|
||||
</li>
|
||||
<li>Programmation requires Conception to be finished.</li>
|
||||
<li>
|
||||
RedactionTests requires Conception to be started,
|
||||
Programmation to be finished.
|
||||
</li>
|
||||
<li>Conception</li>
|
||||
<li>
|
||||
RedactionDoc requires Conception to be finished,
|
||||
Conception to be started.
|
||||
</li>
|
||||
<li>Programmation requires Conception to be finished.</li>
|
||||
<li>
|
||||
RedactionTests requires Conception to be started,
|
||||
Programmation to be finished.
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</body>
|
||||
\end{htmlcode}
|
||||
|
||||
\subsection{simplePDL $\rightarrow$ dot}
|
||||
|
@ -208,13 +241,13 @@ Nous pouvons dans un premier temps de transformer nos modèles simplePDL selon l
|
|||
Nous pouvons de même transformer nos modèles simplePDL selon le langage de description de graphe DOT.
|
||||
|
||||
\begin{textcode}
|
||||
digraph "developpement" {
|
||||
digraph "developpement" {
|
||||
"Conception" -> "RedactionDoc" [arrowhead=vee label=finishToFinish]
|
||||
"Conception" -> "RedactionDoc" [arrowhead=vee label=startToStart]
|
||||
"Conception" -> "Programmation" [arrowhead=vee label=finishToStart]
|
||||
"Conception" -> "RedactionTests" [arrowhead=vee label=startToStart]
|
||||
"Programmation" -> "RedactionTests" [arrowhead=vee label=finishToFinish]
|
||||
}
|
||||
}
|
||||
\end{textcode}
|
||||
|
||||
\subsection{petriNet $\rightarrow$ tina}
|
||||
|
@ -222,10 +255,10 @@ digraph "developpement" {
|
|||
Enfin, il nous est possible de transformer nos modèles petriNet selon le language de description de réseau de Petri TINA (format .net).
|
||||
|
||||
\begin{textcode}
|
||||
net coolNetwork
|
||||
pl debut (1)
|
||||
pl fin (0)
|
||||
tr debut2fin debut*1 -> fin*1
|
||||
net coolNetwork
|
||||
pl debut (1)
|
||||
pl fin (0)
|
||||
tr debut2fin debut*1 -> fin*1
|
||||
\end{textcode}
|
||||
|
||||
\section{Définition de syntaxes concrètes graphiques (avec Sirius)}
|
||||
|
@ -259,21 +292,21 @@ Dans la continuité de la création d'outils pour manipuler et visualiser nos mo
|
|||
Ainsi, pour simplePDL, la syntaxe textuelle suivante permet de manipuler nos modèles, sans passer par des outils complexes générés automatiquement par Eclipse.
|
||||
|
||||
\begin{textcode}
|
||||
process Developpement {
|
||||
res Crayon 10
|
||||
res Papier 20
|
||||
wd Conception
|
||||
req Crayon 10
|
||||
req Papier 5
|
||||
wd RedactionTest
|
||||
wd RedactionDoc
|
||||
wd Programmation
|
||||
ws f2s from Conception to Programmation
|
||||
ws s2s from Conception to RedactionTest
|
||||
ws s2s from Conception to RedactionDoc
|
||||
ws f2f from Conception to RedactionDoc
|
||||
ws f2f from Programmation to RedactionTest
|
||||
}
|
||||
process Developpement {
|
||||
res Crayon 10
|
||||
res Papier 20
|
||||
wd Conception
|
||||
req Crayon 10
|
||||
req Papier 5
|
||||
wd RedactionTest
|
||||
wd RedactionDoc
|
||||
wd Programmation
|
||||
ws f2s from Conception to Programmation
|
||||
ws s2s from Conception to RedactionTest
|
||||
ws s2s from Conception to RedactionDoc
|
||||
ws f2f from Conception to RedactionDoc
|
||||
ws f2f from Programmation to RedactionTest
|
||||
}
|
||||
\end{textcode}
|
||||
|
||||
\subsection{Éditeur textuel petriNet}
|
||||
|
|
Loading…
Reference in a new issue