
PROJET ETUDIANT : Améliorer une app Flask par le test et le déboguage
Ce projet consiste en le développement et l’amélioration d’une application web de réservation de places pour des compétitions d’haltérophilie, réalisée avec le framework Flask.
L’objectif principal était de fiabiliser l’application existante en corrigeant plusieurs anomalies fonctionnelles, en renforçant la qualité du code et en mettant en place une stratégie de tests complète.
Une attention particulière a été portée à plusieurs aspects :
- la validation des règles métier (gestion des points, limites de réservation, compétitions expirées ou complètes) ;
- la sécurisation de l’authentification avec le hachage des mots de passe ;
- l’amélioration de la maintenabilité grâce au refactor du code et à l’introduction d’exceptions personnalisées ;
- la mise en place de différents niveaux de tests (unitaires, intégration, fonctionnels et performance) ;
- l’amélioration de la couverture de tests, portée à 85% pour garantir la stabilité de l’application ;
- la gestion des données via des fichiers JSON tout en prenant en compte les limites liées à la concurrence et à la persistance.
Ce projet m’a permis de renforcer mes compétences en architecture web, qualité logicielle, automatisation des tests et refactorisation d’une application existante dans une logique proche d’un contexte professionnel.
Problématiques rencontrées :
1. Gestion des validations métier
Problème : La logique de validation était dispersée dans les routes Flask, ce qui rendait le code difficile à maintenir et à tester.
Solution : J’ai extrait les règles métier dans des fonctions dédiées puis introduit des exceptions personnalisées pour centraliser les erreurs de validation.
Ce que j’ai appris : J’ai appris à mieux séparer la logique métier de la logique applicative afin d’obtenir un code plus lisible, modulaire et maintenable.
2. Gestion des données concurrentes avec les fichiers JSON
Problème : Lors des tests de performance, plusieurs utilisateurs pouvaient modifier simultanément les mêmes fichiers JSON, provoquant des incohérences dans les données.
Solution : J’ai isolé les données de test en utilisant des fichiers temporaires dédiés aux tests de performance afin d’éviter l’écriture sur les fichiers réels de l’application.
Ce que j’ai appris : J’ai découvert les limites des fichiers JSON dans un contexte multi-utilisateur et compris l’importance des mécanismes de concurrence et des transactions dans les bases de données.
3. Mise en place des tests automatisés
Problème : L’application possédait peu de garanties de stabilité et certaines corrections introduisaient des régressions.
Solution : J’ai construit une stratégie de tests de non-regression complète avec :
- des tests unitaires ;
- des tests d’intégration ;
- des tests fonctionnels avec navigateur ;
- des tests de performance avec Locust.
4. Gestion des sessions et de l’authentification
Problème : Certaines routes restaient accessibles sans contrôle suffisant de la session utilisateur.
Solution : J’ai ajouté des vérifications de session et sécurisé l’authentification avec le hachage des mots de passe via les outils de Werkzeug.
Ce que j’ai appris : J’ai renforcé ma compréhension du fonctionnement des sessions web, de l’authentification et des bonnes pratiques de sécurité côté serveur.
5. Refactorisation et maintenabilité du code
Problème : Le code contenait de nombreuses répétitions et certaines fonctions mélangeaient plusieurs responsabilités.
Solution : J’ai progressivement restructuré le projet :
- extraction de fonctions utilitaires ;
- factorisation de logique répétée ;
- clarification des responsabilités ;
- amélioration du typage et de la lisibilité.
Ce que j’ai appris : J’ai appris à refactoriser une application existante sans casser les fonctionnalités grâce à l’appui des tests automatisés et à adopter une approche plus professionnelle de la qualité logicielle.
En quelques mots-clés :
- Python
- Flask
- Pytest
- Locust
- Selenium
- Tests unitaires
- Tests d’intégration
- Tests fonctionnels
- Tests de performance
- Refactorisation
- Exceptions personnalisées
- Validation métier
- Authentification
- Hachage des mots de passe
- JSON
- Couverture de tests
- Qualité logicielle
- Debugging
- Web development
- CI/CD
- Maintainability
- Clean code
V01
Le code source : repository GitHub
Exemple d’exécution :

A bientôt ! 😉
