\chapter{Résultats obtenus}

Au terme de la période de la réalisation de ce travail de bachelor, le résultat obtenu répond à l'ensemble des besoins exprimés dans le cahier des charges de la pré-étude. Le mandant du projet pour le CHUV ainsi que les membres de son équipe ont pu tester et utiliser l'application au cours de sa création et ainsi participer activement à son développement en donnant des retours réguliers.

\chapter{Synthèse personnelle}

En tant que premier projet de développement \emph{professionnel}, je suis non seulement satisfait du résultat mais surtout du chemin parcouru pour y arriver. Trouver des solutions pertinentes et savoir s'adapter à la situation sont pour moi deux des trais les plus importants d'un ingénieur. La problématique présentée dans ce projet est propre à la sécurité des réseaux informatiques, et sa parfaite compréhension m'a permis d'imaginer des solutions adéquates.

Les différents modules suivi au cours de ma formation à la \acrshort{heig} m'ont amené certains outils qui ont été utiles durant la réalisation de ce projet. Les différents cours de programmation (bien que plus orienté pour des équipements embarqués) ont probablement contribué à améliorer ma logique et ma créativité lorsqu'il s'agit d'imaginer des algorithmes efficaces pour résoudre des problèmes. Le fait de mettre en pratique ces connaissances acquises est encore bien différent et je me suis rendu compte durant ce projet, que des idées qui semblent pertinentes au début, ne le sont plus par la suite. Savoir donc adapter le travail existants et continuellement l'améliorer et quelque chose que je me suis efforcé de faire pendant la phase de développement.

La mise en pratique du \gls{tdd} comme méthode de développement m'a également beaucoup apporté. Il est vite devenu très naturel de décrire le comportement attendu par un objet ou une méthode et d'écrire ensuite le code nécessaire à sa mise en place. Cela m'a permis de m'assurer que ce qui était fonctionnel l'est toujours après l'ajout de nouvelles fonctionnalités. Ces tests sont également la base qui rend possible la mise en place des mécanismes d'intégration continue. Grâce à Gitlab, il va facilement pouvoir exécuter les taches de vérification et ne déployer le code que si l'ensembles des tests est validé.

Bien que le réalisation de la partie métier en Ruby est vite devenue intuitive, la partie frontend, elle, m'a posé beaucoup plus de problèmes. N'ayant jamais abordés cette partie là dans le cadre de ma formation, j'ai donc découvert ce milieu au cours du projet. La logique requise pour ce genre développement est vraiment différente et les langages utilisés également. J'ai aussi eu beaucoup plus de peine à réellement tester l'interface et à simuler les actions d'un utilisateur.

L'utilisation d'analyseur de code dès le début du projet m'a permis d'apprendre énormément sur les bonnes pratiques à utiliser en Ruby et avec le Javascript. Ces langages interprétés ont des syntaxes qui ont tendances à évoluer et à changer plus rapidement avec le temps. Ceci a pour effet de rendre plus rapidement obsolète la littérature à leur sujet. Grâce à ces analyseurs, j'ai pu m'assurer d'utiliser les syntaxes les plus a jour et de supprimer toutes utilisations de méthodes dépréciées. N'étant pas un développeur professionnel ni en Ruby ni en Javascript, suivre les recommandations validées par la communauté me semble être le meilleur choix pour avoir un code lisible et maintenable.

L'utilisation de Gitlab tout au long du projet s'est trouvé être une bien meilleure idée que ce que j'imaginais au départ. Il m'a en effet permis de mettre en place des dépôts Git et d'appliquer la méthode Git Flow grâce notamment au \emph{merge request} intégrées. Mais il s'est avéré être un outil de qualité pour le suivi du projet de façon plus global. Définir les sprints (grâce aux \emph{milestones}) et ensuite y attribuer des taches (sous forme d'\emph{issues}) m'a permis de d'avoir en tout temps une vue globale sur l'avancement du projet. De plus, il est possible d'estimer le temps nécessaire à chaque tache et ensuite d'entrer le temps effectivement utilisé, ce qui permet ensuite d'avoir une vision précise du temps de travail. Enfin, les mécanismes intégré pour mettre facilement en place de l'intégration continue et du déploiement m'a permis de gagner beaucoup de temps tout au long du projet en mettant automatiquement à jour l'application.

Pour finir, j'ai eu du plaisir à mettre en place quelques éléments des méthodes Agile au cours du projet. Le contact régulier avec les utilisateurs permet vraiment de mieux comprendre la problématique et d'adapter le code au fur et à mesure. C'est surtout vrai pour l'interface web, car c'est ce que le client va utiliser au final et donc personne n'est mieux placé pour donner un avis à ce niveau-là. D'un point de vue personnel, c'est aussi encourageant de savoir que le travail effectué est apprécié et avoir des retours de qualité permet d'améliorer encore un peu cela. Aux cours des diverses discussions, plusieurs idées d'améliorations sont venues et il est maintenant certain que le projet continuera.
