\chapter{Échéancier détaillé}

\section{Planification}

La réalisation de ce présent travail de bachelor a été faite en suivant les \emph{User Stories} définies au chapitre "Analyse et planification" de la pré-étude. La période de réalisation en elle-même a été découpée en six \glspl{sprint} de deux semaines. Le but est de pouvoir faire une revue avec le client à la fin de chacun d'entre eux, pour avoir des retours sur le travail effectué et réajuster la priorité d'une fonctionnalité si besoin. Le premier sprint ayant surtout consisté à mettre en place l'environnement de développement et le réseau de test, il n'y avait pas lieu de faire une revue, car il n'y avait rien de terminé à montrer au client. Le dernier sprint se termine le jour du rendu de ce présent rapport, aucune revue ne sera donc faite avant cette date.

\vspace{3mm}
\begin{table}[H]
    \centering
    \caption{Planification des sprint}
    \label{gestion-tab-sprint}
    \begin{tabular}{|l|l|l|l|}
    \hline
    \textbf{N°} & \textbf{Début}    & \textbf{Fin}  & \textbf{Revue}    \\ \hline
    1           & 09.07.2018        & 22.07.2018    & -                 \\ \hline
    2           & 23.07.2018        & 05.08.2018    & 09.08.2018        \\ \hline
    3           & 06.08.2018        & 19.08.2018    & 21.08.2018        \\ \hline
    4           & 20.08.2018        & 02.09.2018    & 04.09.2018        \\ \hline
    5           & 03.09.2018        & 16.09.2018    & 18.09.2018        \\ \hline
    6           & 17.09.2018        & 28.09.2018    & -                 \\ \hline
    \end{tabular}
\end{table}
\vspace{3mm}

La gestion des sprints est gérée par le serveur Gitlab sous la forme de "milestone". Cette fonctionnalité permet de définir une date de début et de fin et d'attribuer ensuite les tâches et les requêtes de mise à jour du code. Cela permet également d'avoir une vue consolidée du travail en cours ainsi que du temps de travail nécessaires pour les fonctionnalités en cours de développement.

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gitlab_milestones}
    \caption{Gestion des sprints avec Gitlab}
\end{figure}

Certaines fonctionnalités requièrent du développement sur plusieurs parties différentes du projet et ont donc été découpées en tâches afin de pouvoir en assurer un suivi plus précis. De plus, avant de pouvoir commencer la première partie de l'application, il a fallut mettre en place le réseau de test décrit dans la pré-étude (section 3.4) ainsi que l'environnement de développement. Tout cela a été regroupé dans une user story qui va précéder la première. La tableau suivant reprend donc la liste des fonctionnalités triées par priorités, les identifiants seront ensuite utilisés dans les détails des sprints. 

\vspace{3mm}

\begin{table}[H]
    \centering
    \caption{Liste des User Stories}
    \label{gestion-us-tab}
    \begin{tabular}{|l|l|}
    \hline
    \textbf{Identifiant}             & \textbf{User Story}                              \\ \hline
    0   &   Mise en place du réseau de test et de l'environnement de développement      \\ \hline
    1   &   Obtenir les règles de sécurité d'un équipement Fortinet                     \\ \hline
    2   &   Enregistrer les informations de connexion d'un équipement                   \\ \hline
    3   &   Automatisation de la récupération des informations                          \\ \hline
    4   &   Pérenniser les informations                                                 \\ \hline
    5   &   Executer une recherche dans les règles de sécurité                          \\ \hline
    6   &   Chiffrer les échanges                                                       \\ \hline
    7   &   Pouvoir faire une recherche avec un formulaire WEB                          \\ \hline
    8   &   Afficher les règles de sécurité de chaque équipement                        \\ \hline
    9   &   Obtenir les règles de sécurité d'un équipement PaloAlto                     \\ \hline 
    \end{tabular}
\end{table}

\vspace{3mm}

\newpage
\section{Sprints}

\subsection{Sprint 1}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint1}
    \caption{Détail des taches du sprint 1}
\end{figure}

Une grande partie de ce sprint a été dédiée à la préparation de l'environnement de travail requis pour ce projet. Cela comprend notamment la mise en place d'un serveur de virtualisation pour pouvoir mettre en place une instance Gitlab\cite{gitlabsite} ainsi que d'autres machines virtuelles qui se sont occupées d'exécuter et de valider les différents tests. Avec cela, un mécanisme de backup journalier du serveur a été configuré pour se protéger contre une éventuelle perte de données.

Le réseau de test (comme décrit dans la section sur le routage (\ref{subsec:network:ip:routing})) a ensuite été configuré pour simuler une architecture réseau utilisant les mêmes technologies que celles du CHUV. Ces équipements ont pu ensuite servir d'éléments de tests pertinents durant le développement de l'application.

La seconde partie du sprint a servi à commencer le programme qui permet de pouvoir exécuter des requêtes sur les équipements Fortinet. 

\newpage
\subsection{Sprint 2}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint2}
    \caption{Détail des taches du sprint 2}
\end{figure}

Sprint principalement orienté sur la création du backend. Mise en place de l'application, création des modèles de classe et intégration du module pour interfacer les Fortinet. Apprentissage de l'utilisation des outils de tests Ruby et mise en place de structure dans le code.

Travail de recherche sur les mécanismes utilisés quand on veut faire du chiffrement symétrique. Mise en place de la solution SymetricEncryption\cite{symmetricencryption} pour chiffrer les mots de passes des identifiants dans la base de donnée.

Installation et configuration de objets pour pouvoir les stocker dans la base MongoDB. Utilisation de mongoid\cite{mongoid} également pour faire les tests de validation des attributs.

Première revue avec les futurs utilisateurs pour valider les trois premières user stories. L'accès à l'information se fait via des requêtes HTTP qui ont été fournies sous la forme d'une collection pour le programme Postman\cite{postman}.

\newpage
\subsection{Sprint 3}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint3}
    \caption{Détail des taches du sprint 3}
\end{figure}

Finalisation de l'intégration des objets dans MongoDB qui a permit de développer l'algorithme pour rechercher efficacement une règle de sécurité dans un équipement. Pour cela, il a fallu faire quelques modifications sur certains objets et notamment la conversion décimale pour les objets de type \Colorbox{light-gray}{\lstinline|Address|}.

Création du projet pour la partie frontend de l'application avec une interface de recherche sobre mais qui permet de démontrer le bon fonctionnement de la recherche. La seconde revue a permis de valider cette fonctionnalité et ainsi que des retours sur l'interface WEB.

\newpage
\subsection{Sprint 4}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint4}
    \caption{Détail des taches du sprint 4}
\end{figure}

Sprint complètement concentré sur la partie frontend du projet et également la mise en place du chiffrement SSL pour utiliser le protocole HTTPS. L'aspect visuel de la recherche de règle, ainsi que l'affichage des résultats retournés par celle-ci, a été revue pour prendre en compte les retours de la revue précédente. Pour cela, la façon de formatter les polices de sécurité (\Colorbox{light-gray}{\lstinline|Policy|}) en JSON a été revue.

L'interface WEB permet maintenant de voir les équipements gérés dans l'application et d'obtenir la liste des règles implémentées dans ceux-ci. La troisième revue a valider cette partie-là et quelques retours supplémentaires sont arrivés concernant l'affichage des polices de sécurité.

\newpage
\subsection{Sprint 5}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint5}
    \caption{Détail des taches du sprint 5}
\end{figure}

Création et développement du projet d'accès aux équipements PaloAlto, construit selon la même logique que celui pour les Fortinet. Il s'en suit l'intégration et le support de ces derniers dans l'application principale.

Mise à jour de l'interface WEB pour améliorer l'affichage et l'ergonomie. La quatrième revue a permis de valider les dernières user stories, mais en remontant un problème qui survient dans certains cas avec des recherches qui inclus des équipements PaloAlto.


\newpage
\subsection{Sprint 6}

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{sprint6}
    \caption{Détail des taches du sprint 6}
\end{figure}

Corrections des derniers problèmes remontés et finalisation du présent rapport.
