Rapport de PFE : Protogest 2.0
Rapport de PFE : Protogest 2.0
PROTOGEST 2.0
ÉTUDIANTS
PHILIPPE NGO NGOP 180393-05
PRÉSENTÉ AU
PROFESSEUR ALAIN APRIL
SUPERVISEUR DU PFE
P. NGO A. DEKERMENJIAN
É. ROBINSON H. LAPOINTE DI GIACOMO
C. CODIO
Automne 2018 PFE - Rapport d’achèvement Page 1 / 77
Cette licence Creative Commons signifie qu’il est permis de diffuser, d’imprimer ou de
sauvegarder sur un autre support une partie ou la totalité de cette œuvre à condition de
mentionner les auteurs, que ces utilisations soient faites à des fins non commerciales et que
le contenu de l’œuvre n’ait pas été modifié.
Automne 2018 PFE - Rapport d’achèvement Page 2 / 77
REMERCIEMENTS
L’équipe de Protogest 2.0 tient à remercier toutes les personnes qui ont contribué au succès de ce
projet et qui ont aidé lors de la rédaction de ce rapport.
Tout d’abord, l’équipe adresse ses remerciements au superviseur du projet de fin d’études (PFE),
Dr. Alain April, Professeur à l’École de Technologie Supérieure (ÉTS) de Montréal. Son écoute et
ses conseils ont beaucoup aidé dans le développement et la gestion de ce projet, notamment pour
cibler nos objectifs.
De plus, l’équipe veut souligner le support de Walid Bezzaoui, étudiant diplômé de l’ÉTS de
Montréal, pour avoir facilité la continuité de ce projet. Ses conseils et sa collaboration ont permis
une meilleure symbiose dans le travail des différentes équipes qui ont travaillé sur le projet au fil de
ses phases.
Également, l’équipe remercie l’aide de Mathieu Dupuis, étudiant diplômé de l’ÉTS de Montréal,
pour son aide à la compréhension des différentes technologies Amazon Web Services (AWS). Ses
explications et ses conseils ont été cruciaux quant à la réussite de ce projet.
Enfin, un merci spécial aux autres personnes qui, dans l’ombre, ont aidé de près ou de loin à la
réalisation du projet, à la rédaction et la révision de ce rapport.
Un grand merci.
Philippe Ngo
Émile Robinson
Albert Dekermenjian
Carl-Henri Codio
VERSIONS
Date Description #
VERSIONS 3
DOCUMENTS DE RÉFÉRENCE 7
INTRODUCTION 11
PROJET - Mandat 12
Améliorations proposées 12
PROJET - Équipe 13
PROJET - Livrables 15
PRODUIT - Description 19
Problématique 19
Sommaire des fonctionnalités 19
Product Breakdown Structure (PBS) 21
Swagger 2.0 24
MySQL Workbench 24
Node Package Manager 24
Angular Command Line 25
Bootstrap 25
Lombok 25
DISCUSSION 42
Back-End 42
Architecture microservices 42
Architecture sans session 42
Sécurité des microservices 42
Communication avec DTOs 42
Suppression de microservices 43
Front-End 43
Routage pour chaque composante 43
Module pour chaque composante 43
Conversion du template 43
Mécanisme de sécurité Cross-Origin Resource Sharing 44
Intégration de la nouvelle interface Web gratuite 44
Configuration d’un environnement de développement fonctionnel 44
Tests de la version précédente 44
Implémentation de composant 44
Infrastructure 45
Migration H2 à MySQL sur RDS 45
Connexions refusées à la base de données 45
Moteur des tables 45
Multiple connexions à la base de données 45
Méthodes de déploiement pour Spring Boot sur Lambda 46
Problème avec méthode proxy 46
Solution alternative d’hébergement sur Beanstalk 46
Automne 2018 PFE - Rapport d’achèvement Page 6 / 77
PROCHAINE PHASE 49
Développement à continuer 49
Changements technologiques suggérés 49
Fonctionnalités suggérées 50
CONCLUSION 51
RÉFÉRENCES 52
ANNEXES 55
ANNEXE 01 - Captures d’écran du Front-End 55
ANNEXE 02 - Métriques de l’analyse des risques 63
ANNEXE 03 - Métriques de l’analyse des efforts 64
ANNEXE 04 - Product Breakdown Structure (PBS) 65
ANNEXE 05 - Organization Breakdown Structure (OBS) 66
ANNEXE 06 - Work Breakdown Structure (WBS) 67
ANNEXE 07 - Heures de travail 71
Hugo Lapointe Di Giacomo 71
Philippe Ngo 72
Carl-Henri Codio 73
Albert Dekermenjian 75
Emile Robinson 76
Automne 2018 PFE - Rapport d’achèvement Page 7 / 77
DOCUMENTS DE RÉFÉRENCE
Nom Version
01 Améliorations proposées 12
05 Analyse de la problématique 19
15 Développement à continuer 49
17 Fonctionnalités suggérées 50
Automne 2018 PFE - Rapport d’achèvement Page 9 / 77
03 Architecture du Back-End 26
MVC Modèle-Vue-Contrôleur.
icense.
GNU GPL General Public L
INTRODUCTION
La coordination d’un dossier légal entre les parties prenantes d’un procès a toujours été un grand
défi pour les avocats. Ainsi, définir dans un court délai une plage horaire qui sera acceptée par
l’ensemble des parties en utilisant les moyens de communication conventionnels (téléphone,
courriel, calendrier Outlook, etc.) présente plusieurs enjeux et n’offre pas de résultats réellement
efficaces. Dans sa quête de solution, une firme d’avocats avait présenté lors de la session d’été
2018 une liste de besoins à une première équipe d’étudiants de l’ÉTS, comme projet de fin
d’études (PFE). Les analyses sur les besoins ont guidé les développeurs à concevoir et
implémenter la première version de l’application Protogest.
Protogest est une application Web regroupant un ensemble de fonctionnalités permettant de faire
la gestion et la planification des rencontres pour les avocats, et ainsi faciliter la finalisation du
protocole d’entente entre les intervenants juridiques.
Pour assurer la longévité de l’application, une nouvelle version de Protogest sera conçue durant
cette session d’automne 2018. En prenant en considération les améliorations proposées et les
difficultés rencontrées dans l’ancienne version, les outils originaux seront utilisés lors du
développement. Ce rapport présente une analyse des risques encourus, la méthodologie utilisée
dans la réalisation du projet, les modifications apportées à la conception de l’application ainsi que
les outils et technologies utilisées pour ce faire.
Automne 2018 PFE - Rapport d’achèvement Page 12 / 77
PROJET - Mandat
Le mandat du projet est le développement d’un logiciel Web qui répond aux besoins de structure
de rencontre des avocats. Il fut débuté par une autre équipe à la session universitaire précédente.
Les objectifs de la phase actuelle du projet, la phase 2, étaient donc de continuer le
développement et la conception du logiciel en évaluant les technologies utilisées, en validant le
développement actuel et, si nécessaire, en migrant le logiciel vers d’autres technologies.
Améliorations proposées
ID Description
AP01 Implémenter une communication entre Front-End et Back-End avec DTOs.
PROJET - Équipe
L’équipe a été formée automatiquement à l’aide du système de vote de la plateforme Moodle
gérée par l’ÉTS. Chaque étudiant inscrit au PFE devait sélectionner les projets qui l'intéressaient,
par ordre de préférence. Par la suite, le système a désigné un projet pour chaque étudiant en
fonction des votes et des disponibilités. Tous les membres de l’équipe ont donc été choisis par ce
système.
Le rôle de chaque étudiant a été décidé en fonction des connaissances et des expertises de
chacun. Le choix des technologies que chaque membre désirait apprendre a également influencé
le rôle de chacun.
Émile Robinson a été nommé opérateur de l’infrastructure, dû à ses bonnes connaissances dans
le domaine des technologies de l’information et des bases de données.
Philippe Ngo, Carl-Henri Codio et Albert Dekermenjian ont occupé la fonction de développeur
Front-End. Philippe avait déjà travaillé à ce poste et avait donc la plus grande maîtrise de la
technologie Angular. Successivement, Carl-Henri avait une expérience de base avec cette
technologie et Albert était désireux de l’apprendre.
- Développer le Front-End..
Carl-Henri Codio - Développeur Angular
- Rédiger la documentation.
- Développer le Front-End.
Philippe Ngo - Développeur Angular
- Rédiger la documentation.
- Développer le Back-End.
Hugo Lapointe Di - Développeur Spring Boot
- Gérer les activités de l’équipe.
Giacomo - Gestionnaire de projet
- Superviser l’avancement du projet.
Tableau 02: Description et responsabilités des membres de l’équipe
Automne 2018 PFE - Rapport d’achèvement Page 15 / 77
PROJET - Livrables
Tous les livrables de projets listés dans le tableau ci-dessous étaient obligatoires dans le cadre du
projet de fin d’études. Le rapport de projet se distingue des autres livrables par le fait qu’il s’agit
d’un texte à être lu par un individu et qui ne sert pas à l’exécution d’un programme informatique.
Subséquemment vient le code source de l’application qui se divise entre la partie Front-End et la
partie Back-End. Il a été décidé que le Front-End et le Back-End aient chacun un dépôt Github
dédié au lieu d’un même et seul dépôt regroupant les deux.
Cette décision a été prise, car la séparation des deux entités faciliterait l’automatisation du
déploiement au niveau de l’infonuagique. La très grande majorité des entreprises font la même
division, ce qui fait en sorte que cette façon de faire est devenue un standard. L’équipe a décidé
de suivre ce standard.
Les fichiers de configuration de l’infrastructure constituent un autre livrable essentiel qui permet la
configuration de l’hébergement en nuage et la configuration de la base de données.
La gestion des livrables est faite selon le rôle de chacun: trois personnes pour le Front-End, une
personne pour le Back-End et une personne pour les configurations de l’infrastructure.
La qualité du Front-End et du Back-End est garantie par des tests exécutés par les membres de
l’équipe pour vérifier si toutes les exigences fonctionnelles sont satisfaites. Des tests de validation
ont aussi été effectués séparément du côté Front-End pour vérifier la prise en charge de toutes les
entrées possibles par l’utilisateur.
La revue de code du Front-End a été effectuée par Philippe, qui avait déjà une expertise avec
Angular, la technologie utilisée par ce segment. Cette opération assure la qualité de
l’implémentation, toujours du côté Front-End.
La qualité des fichiers de configuration de l’infrastructure est quant à elle constamment vérifiée par
les divers tests de connexion au serveur.
Nom Description
Plusieurs moyens de contrôle ont été identifiés et mis en place afin de minimiser l’impact
qu’engendrerait la matérialisation de l’un des risques identifiés. L’utilisation de l’application de
gestion de projet Trello pour l’identification, l’assignation et le suivi des livrables a permis de bien
contrôler les ressources et le temps alloué à chacune des tâches, ce qui a grandement aidé à
diminuer la probabilité des risques. L’utilisation de l’outil de messagerie instantanée Slack a
grandement aidé dans les échanges d’informations et à rendre la communication beaucoup plus
efficace. Slack a contribué beaucoup à la diminution du risque de mauvaise communication.
Les tâches les plus importantes sont proposées en priorité en considérant le niveau de difficulté ou
la probabilité, les conséquences ou impacts sur les livrables et le niveau de risque sur le projet.
L’emphase est mise sur l’importance d’avoir des tâches critiques terminées par rapport à celles qui
ne le sont pas, car la conséquence de ne pas avoir une fonctionnalité importante est bien plus
grave que la conséquence de ne pas avoir une tâche moins importante.
À titre d’exemple, une mauvaise gestion de communication peut entraîner une incompréhension
dans la façon précise d’effectuer une tâche et génère des frustrations et des délais dans la
livraison de la tâche. En autre, la tâche pourrait ne pas être effectuée de la manière prévue. Une
des causes de cette mauvaise communication peut être attribuée au manque de précision des
tâches sur Trello.
Processus
Le Product Backlog est un ensemble de toutes les tâches à accomplir durant le cycle de
développement. Cet ensemble de tâches est dynamique et peut changer avec le temps en fonction
des demandes du client.
Les tâches choisies pour une période de sprint sont ensuite mises dans le Sprint Backlog. Cet
ensemble, en bonne pratique, ne devrait pas changer durant le sprint. S’il y a de nouveaux ajouts
que l’on veut avoir dans le projet, ceux-ci sont déposés dans le Product Backlog s’ils ont été
approuvés.
Le Sprint Review consiste en des démonstrations des tâches accomplies durant la période de
sprint aux autres membres de l’équipe ainsi qu’au client pour montrer l’avancement du projet.
L'accumulation des tâches accomplies durant le sprint e st considérée comme étant une
incrémentation de l’application.
Le Sprint Retrospective est une rencontre du Scrum Team afin de discuter des points forts et
faibles du sprint terminé. Il y a aussi des discussions sur les tâches incomplètes et leurs raisons
afin de trouver une solution le plus rapidement que possible. Suite au Sprint Retrospective,
l’équipe de développement débute un nouveau sprint a vec l’étape du Sprint Planning.
Dans le cadre de ce projet, l’équipe a décidé de négliger les rencontres quotidiennes pour des
raisons de manque de disponibilité des membres de l’équipe. Elle a donc opté pour des rencontres
t le Sprint Retrospective.
hebdomadaires où il y aura seulement le Sprint Planning e
Slack
Slack est une plateforme de communication collaborative propriétaire (Saas) ainsi qu’un logiciel de
gestion de projets créé par Stewart Butterfield en août 2013. Slack fonctionne à la manière d’un chat
IRC organisé en canaux correspondant à autant de sujets de discussion. La plateforme permet
également de conserver une trace de tous les échanges, permet le partage de fichiers au sein des
conversations et intègre en leur sein des services externes comme GitHub.
Automne 2018 PFE - Rapport d’achèvement Page 18 / 77
Trello
Trello est un outil de gestion de projet en ligne, lancé en septembre 2011, et inspiré par la
méthode Kanban de Toyota. Il est basé sur une organisation des projets en planches listant des
cartes, chacune représentant des tâches. Les cartes sont assignables à des utilisateurs et sont
mobiles d'une planche à l'autre, traduisant leur avancement.
Google Drive
Google Drive est un service de stockage et de partage de fichiers dans le nuage lancé par la
société Google. Google Drive, qui regroupe Google Docs, Sheets et Slides, Drawings, est une
suite bureautique permettant de modifier des documents, des feuilles de calcul, des présentations,
des dessins, des formulaires, etc. Les utilisateurs peuvent rechercher les fichiers partagés
publiquement sur Google Drive par l'entremise de moteurs de recherche Web.
GitHub
GitHub est un service Web d'hébergement et de gestion de développement de logiciels, utilisant le
logiciel de gestion de versions Git. GitHub propose des comptes professionnels payants, ainsi que
des comptes gratuits pour les projets de logiciels libres. Le site assure également un contrôle
d'accès et des fonctionnalités destinées à la collaboration comme le suivi des bogues, les
demandes de fonctionnalités, la gestion de tâches et un wiki pour chaque projet.
LucidChart
LucidChart est une application Web qui sert à produire des diagrammes. Cet outil fonctionne sur
les navigateurs Web qui supportent HTML5. Ce logiciel permet à plusieurs personnes de travailler
sur un diagramme en même temps. Cette application Web permet de dessiner divers types de
diagrammes ayant un lien dans un domaine d’affaires spécifique tel que des diagrammes UML,
diagramme de Gantt, diagrammes de ventes, etc.
Automne 2018 PFE - Rapport d’achèvement Page 19 / 77
PRODUIT - Description
Problématique
Une partie du métier d’avocat consiste à organiser et planifier les procès. Le protocole d’entente
entre les avocats impose une procédure qui rend la planification préprocès et l’acceptation d’une
date consentante extrêmement complexe. Les propositions de date, le remplissage de formulaire
avec des formats de dates non standard, les échanges de courriels, l’accès à l’information à un
endroit centralisé et la disponibilité des parties impliqués dans le procès ne sont pas toujours
faciles à coordonner. Ces difficultés engendrent de longs délais dans une planification qui avait
déjà des moments clés à respecter selon le protocole.
affecte les clients, les avocats et toutes les autres parties prenantes.
Le Front-End utilise la technologie Angular qui met l’accent sur la décomposition des pages Web
en petits morceaux réutilisables. Pour ce faire, cette plateforme permet la division des pages en
composants qui sont indépendants les uns des autres sauf si déclaré explicitement. Les
fonctionnalités communes sont placées dans des fichiers JavaScript fortement typés, soit en
TypeScript, et sont par la suite importées dans les composants qui en ont besoin. L’importation de
ces services ou de librairies JavaScript e st faite à travers les modules associés à chaque
composant. De cette manière, l’importation des libraires se fait de manière dynamique. Chaque
fichier est chargé et déchargé lorsque nécessaire seulement.
Le Back-End consiste d’un API REST découpé en microservices où chaque microservice est
indépendant. Cette décision a été prise par les prédécesseurs du projet et demeure une bonne
pratique au niveau applicatif. Les microservices sont modulaires, leur permettant d’être modifiés et
déployés sans avoir un effet direct sur les autres microservices.
Motivations
Le projet, ayant pour objectif de migrer vers le OpenSource, utilisait des ressources propriétaires
avec les technologies de ReactJS/Redux. Pour assurer une bonne conversion vers un projet non
propriétaire, l’équipe a opté pour une technologie plus complète et OpenSource que ReactJS, soit
Angular. L’avantage d’utiliser ReactJS comparé avec Angular e st sa légèreté. Par contre, cela
signifie aussi que ReactJS e st limité en termes de fonctionnalités fournies sans l’aide de librairies
externes.
De plus, l’hébergement et le déploiement continu se sont tournés vers AWS puisqu’il est un des
grands leaders du marché qui propulse les solutions infonuagiques. De plus, il est facile de trouver
la documentation nécessaire à sa compréhension.
L’équipe a choisi de rester avec la technologie Spring Boot p our le développement du Back-End
pour faciliter le développement. De plus, ce choix offrira l’opportunité aux développeurs d’acquérir
des connaissances sur cette technologie grandissante.
Spring Boot
Spring est un framework libre ayant pour objectifs : définir l’infrastructure d’une application Java,
facilité le développement ainsi que simplifier l’implémentation de tests. Spring e st fût créé en 2004,
mais son utilisation fût popularisé en 2009 lors de la publication de Spring 3.0.
L’utilisation de cette technologie au sein du projet se justifie par la facilité que procure le framework
Spring à développer un ensemble de microservices.
Apache Maven
Couramment appelé Maven, Apache Maven est un outil de gestion et d'automatisation de
production des projets logiciels Java en général. L'objectif recherché est de produire un logiciel à
partir de ses sources, en optimisant les tâches réalisées à cette fin et en garantissant le bon ordre
de fabrication. Maven utilise un paradigme connu sous le nom de Project Object Model (POM) afin
de décrire un projet logiciel, ses dépendances avec des modules externes et l'ordre à suivre pour
sa production. Il est livré avec un grand nombre de tâches prédéfinies, comme la compilation de
code Java ou encore sa modularisation.
Angular
Angular est un framework libre pour les interfaces Web utilisant le T
ypeScript, soit du JavaScript
fortement typé. Le framework s uit une architecture basée sur les composantes où chaque
composante est basée sur le patron de conception MVC.
Automne 2018 PFE - Rapport d’achèvement Page 23 / 77
Une application a toujours au moins un module racine qui active le démarrage et généralement
beaucoup plus de modules de fonctionnalités. Les composants définissent des vues, qui sont des
ensembles d'éléments d'écran parmi lesquels Angular peut choisir et modifier en fonction de la
logique et des données de l’application. Les composants utilisent des services, qui fournissent des
fonctionnalités spécifiques non directement liées aux vues. Les services peuvent être intégrés aux
composants en tant que dépendances, ce qui rend le code modulaire, réutilisable et efficace. Les
projets Angular sont généralement des applications à une page, aussi connues comme étant des
Single-Page Application. Dans ces applications, on y retrouve une combinaison des différentes
composantes créées par le développeur.
MySQL
MySQL est une marque déposée de MySQL AB. Dans le jargon informatique, MySQL e st un
système de gestion de bases de données relationnelles. Il est distribué sous une double licence
GNU GPL et propriétaire. Les utilisateurs peuvent choisir entre utiliser MySQL comme un Logiciel
libre, sous les termes de la licence GNU General Public License ou bien, ils peuvent acheter une
licence commerciale auprès de MySQL AB. Le nombre d’API dont il dispose MySQL l e rend très
intéressant aux développeurs d’application. En effet, il s’intègre très facilement dans des
applications écrites en : C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e
t Tcl.
Outils de développement
Swagger 2.0
Swagger est un logiciel libre offrant un large écosystème d’outils aidant la conception, le
développement, la documentation ainsi que la production de tests d’un API Web RESTful.
Swagger offre un éventail de fonctionnalités tel que la génération de documentation, la génération
de code ainsi que la génération de tests. En outre, il définit un standard qui permet aux
développeurs d’application de découvrir et comprendre les méthodes disponibles dans une
application ou un service sans avoir besoin d’accéder à son code ou consulter une documentation
supplémentaire. Lorsqu’une API a été correctement définie avec Swagger, les développeurs
peuvent comprendre et interagir avec le service avec beaucoup moins d’effort d’implémentation.
MySQL Workbench
MySQL Workbench est un logiciel de gestion et d'administration de bases de données MySQL
créé en 2004. Via une interface graphique intuitive, il permet, entre autres, de créer, modifier ou
supprimer des tables, des comptes utilisateurs, et d'effectuer toutes les opérations inhérentes à la
gestion d'une base de données. Pour ce faire, il doit être connecté à un serveur MySQL.
● NPM p ermet aux développeurs de télécharger depuis le serveur vers les packages tiers
écrits par d'autres pour une utilisation locale.
● Il permet aux développeurs de télécharger et d'installer le programme de ligne de
commande écrite par quelqu'un d'autre pour utiliser le serveur local à partir du NPM.
● Il permet aux développeurs d'écrire leur propre programme package ou ligne de commande
téléchargée sur le serveur pour les autres à utiliser NPM.
Cet outil est responsable d’installer, de mettre à jour et d’enlever les librairies désirées par
l’utilisateur.
Automne 2018 PFE - Rapport d’achèvement Page 25 / 77
Bootstrap
Bootstrap est une librairie open source qui permet de facilement concevoir une page Web avec du
HTML, CSS et du Javascript. Bootstrap est exclusivement utilisé pour le Front-End. Cet outil sert à
faciliter le design de l’interface utilisateur, le design d’un site Web adaptatif selon la taille de
l’écran. Cette librairie aide le développeur à économiser du temps en réduisant le temps
nécessaire pour éditer les fichiers CSS.
Lombok
Lombok est une librairie Java s’intégrant automatique à un environnement de développement et
autres outils de développement afin d’améliorer l’expérience de développement du programmeur
Java. Cet outil évite au programmeur de coder les différentes méthodes d’accès, de comparaison,
d’écrire et autres méthodes triviales.
Automne 2018 PFE - Rapport d’achèvement Page 26 / 77
Back-End
Afin de poursuivre les efforts de l’équipe précédente au sein de ce projet, il a été décidé de
conserver les technologies utilisées en Back-End. Par contre, afin que l’équipe de développement
du Back-End ait la possibilité d’acquérir de nouvelles connaissances, une nouvelle implémentation
des microservices fut élaborée. Résultat, une nouvelle structure de microservices fut développée,
une communication avec DTOs p our chaque opération à l’API fût implémentée, l’outil de
développement Swagger fut intégré, la librairie Lombok fut intégrée, ainsi qu’une nouvelle structure
pour chaque microservice a été choisie.
Architecture microservices
u React, puisse interagir avec le Back-End, il a été
Afin qu’un client Web, tel qu’un client Angular o
décidé de créer un RESTful API. Ainsi, toutes opérations exécutées par le client auront un point
d’accès à l’API.
Composant Description
Client Une instance d’un client Web, tel qu’un client Angular ou React.
Package Description
Également, afin de découpler les responsabilités des objets au sein d’un microservice, un service
(Spring Service) fut créé pour chaque microservice ayant comme responsabilité d’implémenter les
différentes règles d’affaires (par exemple, les interactions avec la base de données) et un
contrôleur (Spring Controller) ayant pour but de gérer toutes les interactions entre les clients Web
et les microservices.
Pour maximiser l’optimisation, le mécanisme d’injection de Spring Boot fut utilisé pour injecter
l’implémentation du service (Spring Service) au sein du contrôleur (Spring Controller) .
Classe Description
Premièrement, le client Web exécute l’opération POST /member/. Le microservice Spring Boot
détecte l’opération et passe l’événement au contrôleur du microservice. Celui-ci sauvegarde le
DTO passé en paramètre, envoie la requête de création au service. Le service convertit le DTO en
entité pour pouvoir le sauvegarder au sein de la base de données. Puis, pour compléter, celui-ci
reconvertit l’entité en DTO afin de pouvoir le retourner au client Web via le contrôleur.
Front-End
Dans la liste des améliorations proposées sur le premier prototype de l’application, la migration du
Front-End v ers un cadriciel libre a été identifiée comme une priorité. Pour faciliter la migration vu
les compétences disponibles pour la réalisation de l’interface utilisateur, le choix d’Angular et
Bootstrap a fait consensus et a été validé par le tuteur du projet.
Un composant Angular est un constituant indépendant qui forme la base d’une application Angular.
Plusieurs composantes permettent de former le Front-End. Chaque composante est constituée de
HTML, de CSS et d'une classe en Typescript.
Le tableau ci-dessous présente une description à très haut niveau de la structure globale de
l’application Web Angular Protogest.
Composant Description
Le diagramme des flots des écrans ci-dessous présente les interconnexions ou les liens existants
entre les affichages de l’application.
de réutiliser plus facilement du code Angular dans d'autres contextes. Un composant est un
élément indépendant, réutilisable et responsable d’une seule action métier.
Routage
Le routage est un peu particulier, car il déroge un peu de la structure standard proposée par
Angular. L’approche consiste à inclure un fichier de routage par composante de telle sorte que la
navigation interne est distribuée et gérée localement par les composants. Ainsi, un fichier de
routage racine est disponible et est associé à l’app qui est la composante racine de l’application.
Composants
Les composants correspondent aux différentes parties de l’application (page d'accueil, le
calendrier, la liste des événements, etc.), il va comprendre un controller, une vue, un scss et une
route. Comme dit plus haut, chaque composant est individuel, il ne dépend pas des autres et
fonctionne comme une petite application MVC. Chaque composant définit une classe contenant
des données d'application et une logique, associée à un modèle HTML définissant une vue à
afficher.
Services
Les services servent à faciliter le partage entre les composants. Une définition de classe de
service est immédiatement précédée d’un décorateur. Le décorateur fournit les métadonnées
permettant à votre service d'être injecté dans les composants du client en tant que dépendance.
Les services font la validation des entrées des membres et se connectent directement à la
console. Un dossier de services partagés est aussi disponible dans l’application afin de permettre
l’utilisation de certains services à plusieurs composants.
Modules
Un module déclare un contexte de compilation pour un ensemble de composants un flux de travail
ou un ensemble de fonctionnalités étroitement liées. Les modules exposent à l’extérieur tout ce qui
est nécessaire et qui peut être réutilisé dans d'autres applications ou d'autres composants. Un
Module peut associer ses composants à un code associé, tel que des services, pour former des
unités fonctionnelles. Protogest possède un module racine AppModule qui fournit le mécanisme
d’amorçage pour son lancement et plusieurs modules fonctionnels.
Un module est aussi utilisé en tant que flux de traitement (pipe) dans l’application pour filtrer le
contenu affiché dynamiquement. Ce type de module prend les entrées dynamiques et apporte les
changements aux données avant qu’elles soient affichées sur les navigateurs.
Automne 2018 PFE - Rapport d’achèvement Page 34 / 77
Composant Description
Tout d’abord, les champs nom de l’utilisateur et le mot de passe vont être
envoyé au service “user”. Cette requête POST va permettre la création d’un
utilisateur, mais ce n’est pas suffisant.
Une requête POST va être effectuée pour créer un membre. Les champs
suivants vont être envoyés au Back-End: le prénom de l’utilisateur, le nom
de famille de l’utilisateur, le courriel de l’utilisateur et ID de l’utilisateur.
La composante Task est une vue présentant tous les groupes de tâches
associées à un événement spécifique. Ces groupes de tâches sont affichés
dans une liste et permettent d’accéder à la vue contenant toutes les tâches
associées à un groupe sélectionné.
Task
En accédant à cette composante, celle-ci récupère l’identifiant de
l’événement dans les paramètres du URI qui est nécessaire pour la requête
HTTP GET vers le microservice Task Service pour récupérer les
TaskGroups associé à cet événement.
Service Description
Le service Member est le fichier service qui est responsable d’effectuer les
requêtes HTTP vers le microservice member-service du Back-End. Ce
member
fichier contient chacune des diverses méthodes HTTP pour la
communication avec le Back-End.
Infrastructure
Lors de ce projet, il a été décidé qu’une exploration des technologies d’hébergement devait être
effectuée afin de trouver le meilleur moyen d’héberger l’application. Lors de la planification initiale,
le promoteur de projet a suggéré l’utilisateur de la plateforme nuagique Amazon Web Service
(AWS) à cause de son grand potentiel et sa popularité. Avec ce choix en tête, il a été nécessaire
d’effectuer des recherches poussées afin de trouver par quel moyen transférer la base de données
et héberger les microservices.
Base de données
La première étape fut de trouver par quel moyen il serait possible de transposer la base de
données de la plateforme H2 à la plateforme MySQL. Cette recommandation avait été faite par
l’équipe de développement précédente. Afin d'accommoder le choix de langage pour la partie
Back-End, il a été nécessaire d’effectuer des recherches sur le moyen d’implémenter ce type de
base de données avec une application Spring Boot. De plus, puisque la technologie AWS a été
choisie pour l’hébergement, il a été également nécessaire de rechercher par quel moyen héberger
une base de données sur ce service. Le service Relational Database Service (RDS) a été choisi
pour héberger la base de données MySQL s ur AWS. Ce service était adapté pour faire la gestion
de base de données relationnelle et l’utilisation est simple. Une instance MySQL fut alors créée sur
le service afin de pouvoir prendre la place de la base de données H2. En utilisant cette instance, le
service database-service a été modifié afin d’utiliser l’instance et ainsi créer la structure de la base
de données. Cette structure est demeurée la même que la version précédente du logiciel. Ce
Automne 2018 PFE - Rapport d’achèvement Page 37 / 77
n’était pas l’objectif de l’équipe de modifier la structure de la base de données, mais plutôt
d’assurer sa conversion et son hébergement.
Table Description
Contient les informations de connexion d’un membre. Est la table qui sera
User
interrogée lors du processus de connexion.
Contient les différents états que peut avoir un événement. Est utilisé pour filtrer
Event_state
et désactiver des événements.
Contient les informations de base pour une tâche qui est associée à un
Task
groupe.
Contient les informations sur les plages horaires suggérées pour chaque
Suggestion
événement.
Automne 2018 PFE - Rapport d’achèvement Page 38 / 77
Hébergement
Au début de la phase de développement, le promoteur du projet à suggérer l’utilisation du service
Lambda de la plateforme AWS pour héberger le logiciel. Ce service qui a gagné en popularité
durant les dernières années à cause de son concept. Celui-ci permet l’exécution de logiciels dans
un environnement serverless c’est-à-dire sans serveurs. Cette méthode d’hébergement permet
une certaine flexibilité sur les coûts d’opération d’un logiciel. Les fonctionnalités Back-End d u
logiciel sont séparées en fonction et sont exécutées uniquement lorsqu’elles sont appelées. Le
restant du temps, ces fonctions restent en attente et n’utilisent pas de ressources. Le format
Lambda permet de charger les clients uniquement lorsque des ressources sont utilisées. La
division en microservice du logiciel est un avantage qui devait être exploité et qui était idéal pour
l’utilisation du service Lambda.
Tout d’abord, une classe intermédiaire doit être créée dans chaque microservice. Cette classe fait
usage des librairies de container pour le service AWS. Cette classe va s’occuper de transmettre
l’information entre le service Lambda e t le microservice. Dans cette classe, une déclaration est
faite pour pointer sur la classe principale du microservice qui sert à démarrer celui-ci. En plus
d’implémenter cette classe, un fichier de configuration [Link] d oit être créé afin d’établir les
propriétés de la fonction Lambda a insi que de l’API Gateway qui s’occupera de recevoir les
requêtes du Front-End et de lui retourner l’information.
Automne 2018 PFE - Rapport d’achèvement Page 40 / 77
Lors du déploiement du microservice sur Lambda, ce fichier sera utilisé afin de générer tous les
artefacts nécessaires à l’exécution du microservice. L’API sera créé et l’utilisation du bloc proxy
assure une détection automatique des différentes méthodes REST déclarées dans la classe
contrôleur du microservice. Ce fichier permet également de définir le nom de la fonction Lambda,
la méthode qui s’occupera du transfert des données entre l’architecture Lambda et le code Spring
Boot ainsi que l’adresse du gateway qui sera défini dans les routes du Front-End. En général, le
point d’entrée du logiciel sera à travers les API Gateway. Il est donc essentiel de définir cet
élément pour chacun des microservices.
Automne 2018 PFE - Rapport d’achèvement Page 41 / 77
Alternativement, il est possible d’héberger l’application en utilisant un autre service sur AWS. En
cas de problématique avec l'implémentation sur Lambda, le logiciel sera hébergé sur le service
Elastic Beanstalk. Ce service se rapproche plus des méthodes traditionnelles d’hébergement
d’application Web. Chaque service aura une instance associée qui s’exécute continuellement. Afin
d’héberger l’application de cette manière, chaque microservice sera mis dans un dossier
compressé généré avec les dépendances et téléversé sur son instance. Chaque instance a une
adresse HTTP qui devra être mise dans les routes du Front-End à la place de l’adresse des API
Gateway. Voici à quoi ressemblerait l’architecture si cette solution est utilisée.
DISCUSSION
Back-End
Architecture en microservices
La principale difficulté rencontrée lors du développement Back-End f ut de se familiariser avec la
structure d’un projet microservices Spring Boot. Il a été nécessaire d’apprendre les bonnes
pratiques relatives à cette implémentation dont l’usage d’un microservice pour gérer les
configurations (config-service), d’un microservice pour gérer les instances de microservices actifs
(registry-service) et d’un microservice agissant en tant que passerelle pour les autres
microservices (gateway-service) .
De plus, l’implémentation de microservice pouvant être déployé indépendant fut plus compliquée
que prévu. Afin de faciliter le déploiement du projet sur AWS, chaque microservice doit être
capable de communiquer avec la base de données, et ce, sans l’usage d’un package o u service
intermédiaire.
Ainsi, contrairement à la version précédente du projet qui tentait tout de même de conserver des
informations relatives à l’usager connecté, Protogest 2.0 ne conserve aucune information en cache
et requiert toutes les informations nécessaires lors des opérations à l’API.
Ainsi, pour chaque opération de l’API fut créée un DTO ayant les champs requis pour compléter
n entités pertinentes selon le contexte. De plus,
l’opération. La difficulté fut de convertir ces DTOs e
cette stratégie permet de découpler l’implémentation de la base de données avec l’implémentation
des opérations de l’API. Donc, si la structure de la base de données doit être modifiée,
l’implémentation ne nécessitera aucun changement. De plus, cette stratégie facilite les
modifications aux différentes opérations de l’API puisque chaque opération (ou presque) possède
son DTO.
Suppression de microservices
Après analyse, le microservice calendar-service créer au sein de la version précédente du
Back-End était fortement couplé avec le Front-End. Afin de découpler son utilisation, celui-ci fût
supprimé, car toutes les informations nécessaires à l'affichage des événements au sein du
calendrier peuvent être accédées avec le microservice event-service.
Front-End
Il est plus simple et pratique d’avoir un fichier module pour toute l’application, car il est plus facile
de savoir où regarder exactement. Cependant, il faut vérifier l’import, l’export et la déclaration des
composantes pour chaque composante.
Conversion du template
La conversion du template est une des causes d’une autre difficulté rencontrée. La copie des
fichiers HTML e t CSS a permis de faire la conversion du template plus rapidement. Cependant, le
code source n’a pas été conçu par l’équipe. Cela fait en sorte qu’il y a plus de difficultés à modifier
du code qui n’est pas fait par soi-même. Certains éléments de l’interface utilisateur étaient difficiles
à positionner à cause de certaines propriétés CSS qui ont été appliquées de façon globale à
l’application. Il y avait une difficulté d’appliquer ces changements à un élément graphique précis
sans modifier les propriétés CSS globales.
Automne 2018 PFE - Rapport d’achèvement Page 44 / 77
Implémentation de composant
Il fallait trouver une alternative à l’utilisation du Google Calendar qui a été intégré dans la version
de l’interface Web React pour l’affichage des événements d’un membre. Des solutions disponibles
en version d’essai ont été testées, mais n’offrent pas toutes la latitude et le résultat escorté.
Automne 2018 PFE - Rapport d’achèvement Page 45 / 77
Trouver la bonne version à utiliser pour le projet dans la liste des utilitaires (FullCalendar, DayPilot
et DHTMLX Scheduler) testés en dehors de l’application reste un vrai défi.
Infrastructure
cette difficulté, car les connexions se fermeraient avant d’atteindre le nombre maximal. Autrement,
après avoir utilisé l’application pendant quelques minutes, le nombre de connexions maximales
était atteint. Pour résoudre ce problème, une limite de temps fut définie au sein des propriétés de
la base de données.
service était essentiel pour l’hébergement sur Beanstalk. Après l’avoir réintégré dans la
compilation, les microservices étaient fonctionnels tels que planifiés. Cependant, les microservices
ont dû être séparés sur deux régions à cause de la limite du nombre d’adresses IP permis par
AWS. En rétrospective, les architectures d’hébergement ne sont pas tant différentes. À cause de
l’impossibilité d’utiliser le service Lambda, les microservices ont été mis sur Elastic Beanstalk. Au
lieu d’avoir un API Gateway et une fonction Lambda p ar microservice, ceux-ci sont assignés à une
instance Beanstalk chaque. Il serait plus avantageux de mettre les microservices sur Lambda
puisque chaque instance Beanstalk est facturée à l’heure. Celles-ci sont continuellement en
marche et il y a sept instances pour desservir tous les microservices. Les coûts d’opération de
l’application sont nettement supérieurs avec cette solution comparée au coût inférieur de Lambda.
PROCHAINE PHASE
Développement à continuer
ID Description Motivation
Fonctionnalités suggérées
ID Description Motivation
CONCLUSION
L’objectif du projet qui consistait à poursuivre le cycle de développement de la première phase de
l’application de gestion et planification des procès pour les avocats, connus sous le nom de
Protogest, a été entièrement atteint.
L’analyse des pistes d’amélioration laissées par la première équipe qui a développé la solution a
grandement orienté les décisions de démarrage de cette nouvelle phase ou tout simplement le
nouveau produit qu’est Protogest 2.0. Une analyse de risque a été réalisée afin de mettre en
perspective les menaces potentielles au projet ainsi que les moyens de contournements
nécessaires menant aux succès. Pour ce faire, une méthodologie de travail a été mise en place
incluant des processus de gestion des communications, gestions documentaires ou de fichiers et
gestion des versions de codes accompagnés de Scrum Meeting hebdomadaires dans le but de
produire des livrables de qualité dans les délais impartis.
Somme toute, nombreux ont été les défis à relever tout au long du développement. Compte tenu
des difficultés rencontrées au niveau de la mise en place des infrastructures AWS, la migration du
prototype vers Bootstrap d u côté Front-End, la migration de la base de données et toutes les
transformations dans la structure du Back-End, les participants se sont montrés productifs et le
produit final est à la hauteur des attentes.
Protogest 2.0 s’inscrit dans le cadre d’une version améliorée de la version antérieure, mais non
complète. Ceci laisse place à des améliorations au niveau des fonctionnalités existantes, l’ajout de
nouvelles fonctionnalités ou des changements de technologies. Des suggestions d’amélioration
sont documentées dans le rapport ainsi que leurs motivations afin de fournir une bonne base de
démarrage utile aux équipes qui poursuivront le développement de ce produit.
Automne 2018 PFE - Rapport d’achèvement Page 52 / 77
RÉFÉRENCES
[1] [Link]. (2018). Slack.
[En ligne] [Link] [Consulté le 30 Nov. 2018].
[En ligne]
[Link]
risques/ [Consulté le 07 déc. 2018].
[22] Amazon Web Services, Inc. (2018). Create and Connect to a MySQL Database.
[En ligne] [Link]
[23] Ryan Zhou (2018). Using Amazon Web Services Relational Database Service for your
Spring Boot App. [En ligne]
[Link]
[24] StackOverflow (2017). Changing embedded database in Spring Boot from H2 to MySQL.
[En ligne]
[Link]
ot-from-h2-to-mysql
[27] Stefano Buliani. (2018). Running APIs Written in Java on AWS Lambda
[En ligne] [Link]
[28] Amazon Web Services, Inc. (2018). Creating a .jar Deployment Package Using Maven
without any IDE (Java). [En ligne]
[Link]
[31] Pascal Alma. (2016). Making Spring Boot application run serverless with AWS. [En ligne]
[Link]
serverless-with-aws/
[32] Rowell Belen. (2017). Serverless Microservices with Spring Boot and Spring Data.
Automne 2018 PFE - Rapport d’achèvement Page 54 / 77
[En ligne]
[Link]
[33] Sergey Kryvets. (2018). A complete guide for running Spring Boot MVC in the cloud using
AWS Lambda.
[En ligne] [Link]
[35] Ryan Zhou. (2018). Running Spring Boot on Amazon Web Services for Free. [ En ligne]
[Link]
b0aeec809
[36] Juan Villa. (2016). Deploying a Spring Boot Application on AWS Using AWS Elastic
Beanstalk. [ En ligne]
[Link]
ws-elastic-beanstalk/
[37] Kittiphat Srilomsak. (2018). Deploy an Angular with S3 and CloudFront. [En ligne]
[Link]
page-app-as-a-static-website-using-s3-and-6aa446db38ef
ANNEXES
Degré 1 2 3 4 5
Degré 1 2 3 4 5
Degré 1 2 3 4 5
Degré 1 2 3 4 5
Degré 1 2 3 4 5
Catégorie Titre
Front-End,
Maîtriser l'application fonctionnelle en se référant au document de vision.
Back-End
Front-End,
Installer et tester la version actuelle de Protogest.
Back-End
Front-End, Tous les membres devraient être capable d’accéder aux répertoires GitHub
Back-End du Front-End et du Back-End.
Tous les membres devraient être en mesure d’accéder à Trello et avoir les
Gestion de projet
permissions suffisantes.
Gestion de projet Créer une feuille Excel pour prendre en note les heures au projet.
Infrastructure Chercher des tutoriels sur AWS Lambda et son intégration avec React
Infrastructure,
Remplacer le database-Service H2 par MySQL.
Back-End
Infrastructure,
Tester et partager la nouvelle base de données dans le Back-End.
Back-End
Back-End [BOGUE] EventStateId ne devrait pas être requis pour créer un event.
Back-End Mise à jour des contrôleurs afin de refléter la mise à jour de la BD.
Back-End Implémenter des tests unitaires pour chaque contrôleur des microservices.
Automne 2018 PFE - Rapport d’achèvement Page 70 / 77
Back-End Intégrer ModelMapper pour mapper les DTO avec les entités.
51.0 136.3
Philippe Ngo
# D F DESCRIPTION HRS NB CUM
-
Installation et configuration de l'environnement de développement. 2.0
2 14/09 21/09 3 3.0
- Scrum meeting 1.0
-
Installation et configuration de l'environnement de développement. 2.0
3 21/09 28/09 3 3.0
- Scrum meeting 1.0
-
Maîtriser l'application fonctionnel en se référant au document de vision. 2.0
4 28/09 05/10 - 3 9.0
Analyser les choix technologiques (Angular, React Native, ReactJS) 6.0
- Scrum meeting 1.0
-
Découper et préparer la conversion de REACT/REDUX vers Angular. 5.0
5 05/10 12/10 3 6.0
- Scrum meeting 1.0
-
Mise en place de l'environnement de développement en Angular 6 2.0
- Mise en place de la structure du projet dans l'environnement de
développement 3.0
6 12/10 19/10 5 10.0
- Scrum meeting 1.0
- Codage du routing de base 2.0
Automne 2018 PFE - Rapport d’achèvement Page 73 / 77
-
Découper et préparer la conversion de REACT/REDUX vers Angular. 2.0
50 115.5
Carl-Henri Codio
# D F DESCRIPTION HRS NB CUM
14 07/12 14/12
- Redaction du rapport 8
15 14/12 21/12 2
- Revision du rapport 4
Automne 2018 PFE - Rapport d’achèvement Page 75 / 77
40 110.5
Albert Dekermenjian
# D F DESCRIPTION HRS NB CUM
38 97.5
Emile Robinson
# D F DESCRIPTION HRS NB CUM
30 92.0