Skip to content

Amélioration du projet

Thomas Claireau edited this page Mar 24, 2020 · 7 revisions

Amélioration du projet

Des améliorations ont été apportées au projet initial.

Correction d'anomalies

Une tâche doit être rattaché à un utilisateur

Initialement, lors de la création d'une tâche, cette dernière n'était pas rattachée à un utilisateur.

Nous avons donc modifié le projet pour introduire une relation ManyToOne entre les tâches et les utilisateurs. Pour réaliser cela il a fallu modifier l'entité Task pour introduire cette nouvelle relation. De cette manière, chaque tâche est relié à un utilisateur.

Les tâches déja créés sont, elles, rattachées à un utilisateur anonyme qui existe en base de données. Des vérifications sont appliquées dans le code pour lier l'utilisateur anonyme avec les tâches qui n'ont pas d'utilisateur.

Enfin, a la modification d'une tâche, il n'est pas possible de changer l'utilisateur qui a initialement créé la tâche.

Ajout / edition user : choix d'un role admin / user

Par défaut, il n'y avais pas de gestion des rôles entre les utilisateurs sur le projet.

Pour corriger cela, nous avons implémenté deux rôles ROLE_ADMIN et ROLE_USER pour gérer les utilisateurs de l'application.

A la création d'un nouvel utilisateur, il est automatiquement demandé de choisir entre le role administrateur et le role utilisateur. A l'édition d'un utilisateur, il est aussi possible de changer le rôle de ce dernier.

Pour rappel, seulement les administrateurs peuvent avoir accès à l'administration des utilisateurs.

Montée de version majeure de Symfony

La 3ème et dernière anomalie que nous avons corrigée est l'erreur de sécurité remontée par GitHub concernant la version de Symfony, initialement utilisée sur ce projet (3.1).

Comme le montre la capture suivante, nous étions confronté à une erreur de sécurité critique, qui exposait notre projet à des dangers.

Nous avons donc décidé d'effectuer une montée de version majeure de Symfony pour passer de la version 3.1 à 4.2, une des dernières versions LTS (Long Time Support). Nous n'avons pas voulu passer sur Symfony 5 car cette version n'est pas LTS et peut donc contenir des bugs.

Indirectement, nous avons du aussi réaliser une montée de version de PHP pour passer de la version 5.4 à la version 7.2.

Nouvelles fonctionnalités

Pour améliorer l'application existante, nous avons aussi mis en place de nouvelles fonctionnalités.

Gestion des autorisations par rapport aux roles

Nous avons restreins l'accès à la gestion des utilisateurs seulement aux utilisateurs ayant le role administrateur. Tous les autres utilisateurs tentant d'accéder à ce type de page seront redirigés vers la page d'accueil avec un message d'erreur. Les modifications ont été réalisées côté backend mais aussi côté frontend avec la suppression du menu utilisateurs dans la navbar pour les utilisateurs non concernés.

Nous avons aussi permis la suppression des tâches seulement par les utilisateurs qui les ont créées. Un utilisateur tentant de supprimer une tâche qu'il n'a pas créée se verra rediriger vers la liste des tâches avec un message d'erreur. Les modifications ont été réalisées côté backend mais aussi côté frontend avec la suppression du bouton supprimer sur les tâches non concernées.

Enfin, nous avons mis en place le système de voters symfony pour pouvoir nous permettre de gérer et de controler plus facilement les droits d'accès des utilisateurs à certaines pages de l'application (gestion utilisateur / suppression des tâches).

Implémentation de tests automatisés

Nous avons aussi implémenté les tests automatisés (unitaires et fonctionnels) nous permettant d'assurer que l'application fonctionne correctement.

Nous utilisons PHPUnit pour effectuer les tests unitaires et fonctionnels. Le rapport de couverture du code nous indique que le taux de couverture est supérieur à 85%. Nous avons testé principalement les entités et les controlleurs, où sont situées en général toutes les fonctionnalités critiques de l'application.

Enfin, nous avons mis en place des fixtures pour générer des données "neuves" pour l'application avant de lancer les tests.

Amélioration du code

Suite à la montée de version de Symfony et de PHP, le code et la performance de ce dernier s'est amélioré. Vous pouvez le constater sur les audits de performance réalisés, surtout au niveau des résultats de l'audit Google.

Grâce à la montée de version, nous avons d'ailleurs pu profité de l'autowiring permis par Symfony depuis la version 4 et qui permet une injection des bundles simplifié et performante.

Nous avons aussi amélioré l'authentification en supprimant les méthodes "vides" loginCheck() et logoutCheck() par deux méthodes login() et logout() (toujours vide mais qui renvoit une exception).

Enfin, dans l'optique d'améliorer un peu plus l'application, nous avons aussi rajouté une documentation au niveau du code en suivant les réglementations et les standards de la PHPDoc.

Refacto design

Nous avons aussi modifié légèrement le design de l'application pour améliorer l'expérience utilisateur.

Formulaires

L'application initiale utilisait Bootstrap mais n'en profitait pas pour générer des formulaires avec un style Bootstrap.

Dans le fichier twig.yaml, nous avons configuré un form_theme qui nous permet d'utiliser la librairie bootstrap pour générer le style des formulaires.

Vue liste des tâches

La design des cartes dans la vue liste des tâches a été amélioré et des informations au niveau de chaque tâches ont été rajoutées (date et auteur).

Mise en place de Webpack Encore

Nous avons aussi ajouté au projet Webpack Encore qui est un bundle symfony nous permettant de profiter de la gestion performante des assets de Webpack. Nous avons pu aussi minifier le code javascript et css en production pour gagner en performance.

Les tests Google réalisés lors de notre audit nous permettent de montrer que c'était un choix judicieux.

Ce qui peut être mis en place

Parce qu'une application n'est jamais parfaite, nous avons pensé à quelques améliorations que nous pourrions mettre en place par la suite :

Intégration continue

L'intégration continue simplifie le "pont" qu'il y a entre environnement de développement et environnement de production. Grâce à des outils (travis yml, gitlab ci...) et de bonnes configurations, il est simple d'implémenter de nouvelles fonctionnalités en environnement de développement pour ensuite les passer simplement en production sans pour autant rendre le site inaccessible aux visiteurs.

Outils SensioLabs

Pour surveiller encore un peu mieux notre application, il est possible d'utiliser les outils proposés par SensioLabs (payants) et notamment Symfony Insight qui exécute des controles quotidiens et continus du développement de l'application.

Utiliser ce type d'outil permet de réduire sur le long terme la dette technique d'une application et de rendre la détection d'erreurs potentielles beaucoup plus efficace.

Repenser entièrement le design

Enfin, il serait judicieux de pousser la refactorisation du design un peu plus loin pour se rapprocher d'applications concurrentes tel que TodoMVC