\documentclass[a4paper, 12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{color}
\usepackage{xcolor}
\usepackage{natbib}
\usepackage[hidelinks]{hyperref}
\usepackage[nottoc, numbib]{tocbibind}
\usepackage[justification=centering]{caption}
\usepackage{mathtools}
\usepackage{lipsum}
\usepackage{lscape}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{minted}
\usepackage{multicol}
\usepackage{svg}

\newminted{bash}{numbersep=6pt}

\usepackage{contour}
\usepackage{ulem}
\renewcommand{\ULdepth}{1.8pt}
\contourlength{0.8pt}
\newcommand{\myuline}[1]{%
  \uline{\phantom{#1}}%
  \llap{\contour{white}{#1}}%
}

\newcommand{\dst}{\displaystyle}

\usepackage[margin=2cm]{geometry}

\graphicspath{
    {./assets/}
}

\begin{document}

\begin{figure}[t]
    \centering
    $\includesvg[height=1cm]{inp-enseeiht.svg}$
\end{figure}

\title{
    \vspace{4cm}
    \textbf{Rapport de Mini-Projet} \\
    Génie du Logiciel et des Systèmes \\
    Chaîne de vérification de modèles de processus
}
\author{
    \myuline{Groupe M-02} \\
    Fainsin Laurent \\
    Guillotin Damien \\
}
\date{
    \vspace{10cm}
    Département Sciences du Numérique \\
    Deuxième année \\
    2021 — 2022
}

\maketitle

\newpage

\tableofcontents

\newpage

\section{Métamodèles Ecore}

\subsection{simplePDL.ecore}

Ce projet se base sur un langage simplifié de modélisation de processus de développement, appelé SimplePDL.
Nous sommes donc parti du modèle Ecore de base du modèle SimplePDL auquel nous avons ajouté progressivement des nouveaux éléments.
Dans un premier temps, il a fallu ajouter la modélisation des guidances comme indiqué dans le sujet.

\begin{figure}[H]
    \centering
    \includegraphics[width=15cm]{simplePDL_guidance.png}
    \caption{Métamodèle simplePDL avec guidance}
    \label{simplePDL_guidance}
\end{figure}

Nous avons ensuite dû choisir une manière de modéliser les ressources nécessaires au processus de développement.
Notre choix de modélisation s’est porté sur : une Ressource (qui implémente ProcessElement) est demandée par le biai d’une Request elle-même générée par une WorkDefinition.
On se retrouve donc avec un nouveau modèle Ecore de la forme :

\begin{figure}[H]
    \centering
    \includegraphics[width=15cm]{simplePDL_guidance_ressource.png}
    \caption{Métamodèle simplePDL avec guidance et ressource}
    \label{simplePDL_guidance_ressource}
\end{figure}

Les relations Ressource-Request et Request-WorkDefinition sont déclarées en EOpposite pour pouvoir facilement passer d’un fils à un parent et vice versa.
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}

\subsection{petriNet.ecore}

En se basant sur ce que l’on a vu pour le modèle SimplePDL, nous avons créé un modèle Ecore permettant de modéliser les réseaux de pétri.
Nous avons modélisé un réseau comme étant composé de nœuds.
Ces nœuds peuvent être les places ou des transitions.
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}

\section{Contraintes OCL}

Les contraintes OCL sont là pour vérifier des informations du modèle vis-à-vis du métamodèle.
Elles assurent certains points de cohérence et permettent d'éviter les ambiguïtés.

\subsection{simplePDL.ocl}

Pour le modèle 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.

\subsection{petriNet.ocl}

Pour le modèle PetriNet, ...

\end{document}
