Interface SURL
Tests Automatisés
Pipeline GitLab
Docker Container
Symfony Architecture
Tests Unitaires
DevOps Workflow
SURL - Raccourcisseur URLs
CI/CD Performance
Tests E2E Panther
Coverage Reports
Code Quality
Entité ShortUrl
Frontend Validation
GitLab Merge Requests

SURL

Raccourcisseur URLs

//

Symfony

//

DevOps

//

Docker CI/CD

SURL est un projet d'application web développée avec Symfony dans un environnement DevOps complet. L'objectif était de créer un service de raccourcissement d'URLs robuste, déployé dans un conteneur Docker, avec une architecture orientée qualité logicielle et intégration continue.

Contexte du Projet

SURL est un projet d'application web développée avec Symfony dans un environnement DevOps complet. L'objectif était de créer un service de raccourcissement d'URLs robuste, déployé dans un conteneur Docker, avec une architecture orientée qualité logicielle et intégration continue.

Mission Principale

Développer une application web complète permettant de raccourcir des URLs en implémentant les bonnes pratiques DevOps : tests automatisés, intégration continue, conteneurisation, et déploiement automatisé sur GitLab CI/CD.

Missions Complémentaires

Le projet incluait la mise en place d'une architecture de tests complète (unitaires, d'intégration, end-to-end), la création d'images Docker personnalisées, l'implémentation d'une analyse statique du code, et le développement d'une interface front-end avec validation côté client.

Architecture Logicielle et Conception Technique

AC34.01 — Concevoir ou co-concevoir une réponse stratégique pertinente à une problématique complexe

Problématique posée : Comment créer un service de raccourcissement d'URLs fiable, scalable et maintenable en intégrant dès la conception les contraintes de production et de qualité logicielle ?

Solutions examinées : Plusieurs architectures ont été considérées : développement monolithique simple, architecture microservices, ou approche modulaire avec Symfony. L'analyse des besoins a révélé qu'une application Symfony bien structurée offrait le meilleur compromis entre robustesse et simplicité de déploiement.

Solution choisie : Architecture Symfony conteneurisée avec séparation claire des responsabilités : ShortenController pour la création d'URLs courtes, RedirectController pour la redirection, et un générateur de codes courts dédié. Cette approche garantissait maintenabilité, testabilité et évolutivité.

Innovation DevOps et Automatisation

AC34.02 — Concevoir un projet d'innovation numérique

Innovation apportée : Mise en place d'un pipeline DevOps complet intégrant tests automatisés, analyse statique de code, et déploiement containerisé. L'innovation résidait dans l'approche "testing-first" avec couverture de code complète et tests à tous les niveaux (unitaires, d'intégration, e2e).

Mise en pratique : Développement d'une suite de tests complète validant la génération de codes courts (chaînes de 8 caractères, aléatoires avec moins d'un doublon sur 10 000), l'intégration des contrôleurs, et les fonctionnalités front-end avec Panther pour les tests e2e.

Pilotage Projet et Méthodologie Agile

AC34.03 — Entreprendre dans le numérique

Démarche entrepreneuriale : Approche incrémentale suivant les principes DevOps avec livraisons continues. Chaque fonctionnalité était développée avec ses tests, puis intégrée dans le pipeline CI/CD avant déploiement.

Pilotage du projet : Gestion par branches Git individuelles, merge requests systématiques, et validation automatique par les pipelines GitLab. Cette méthodologie assurait la traçabilité et la qualité du code livré.

Assurance Qualité et Tests Automatisés

AC35.02 — Maîtriser la qualité en projet multimédia

Approche qualité : Implémentation d'une stratégie de tests multiniveaux incluant :

Tests unitaires : Validation du générateur de codes courts (génération de chaînes, taille de 8 caractères, caractère aléatoire)
Tests d'intégration : Validation des contrôleurs (ShortenController, RedirectController) avec base de données
Tests e2e : Validation complète des workflows utilisateur avec Panther
Analyse statique : Intégration d'outils d'analyse de code dans la CI
Coverage : Suivi du taux de couverture avec affichage dans les merge requests

Contrôle continu : Pipeline GitLab automatisant l'exécution des tests à chaque push, garantissant la non-régression et la qualité du code.

Infrastructure DevOps et Conteneurisation

AC35.04 — Maîtriser les technologies numériques

Stack technique DevOps :

Conteneurisation : Application Symfony packagée dans Docker
CI/CD : GitLab CI avec image personnalisée {prenom}/ci-php:latest
Base de données : Entité ShortUrl avec colonnes url et short_code (unique)
Tests : PHPUnit pour unitaires/intégration, Panther pour e2e
Front-end : Interface HTML avec validation JavaScript côté client

Infrastructure de tests : Configuration de pipelines GitLab exécutant automatiquement tous les tests à chaque modification, avec reporting de couverture intégré aux merge requests.

Gestion de Projet et Collaboration

AC35.05 — Gérer une équipe projet multimédia

Méthodologie collaborative : Mise en place d'un workflow Git rigoureux avec branches personnelles, merge requests obligatoires, et validation par les pairs. Chaque développement suivait le cycle : création de branche → développement avec tests → commit → push → merge request → validation CI.

Documentation et transmission : Documentation technique complète du projet, configuration des pipelines CI/CD, et procédures de déploiement. Communication régulière via le canal #devops pour le partage des bonnes pratiques.

Expertise Technique Mobilisée

Développement web avancé :

Symfony 6.4 : Création de contrôleurs, entités Doctrine, routes dynamiques
Doctrine ORM : Gestion des entités ShortUrl avec contraintes d'unicité
Tests PHP : PHPUnit pour tests unitaires et d'intégration
Frontend : HTML/JavaScript avec validation de formulaires côté client

DevOps et infrastructure :

Docker : Conteneurisation de l'application Symfony
GitLab CI/CD : Configuration de pipelines automatisés
Tests e2e : Symfony Panther pour tests navigateur automatisés
Analyse statique : Intégration d'outils de qualité de code

Méthodologies et bonnes pratiques :

Test-Driven Development : Développement guidé par les tests
Intégration continue : Validation automatique à chaque modification
Gestion de version : Workflow Git avec branches et merge requests

Impact et Performance

Robustesse technique : L'application génère des codes courts fiables avec gestion de l'unicité en base de données et mécanisme de résilience en cas de collision. La validation complète (unitaire, intégration, e2e) garantit la stabilité fonctionnelle.

Pipeline DevOps opérationnel : Infrastructure CI/CD complètement automatisée permettant déploiements rapides et sûrs. L'image Docker personnalisée optimise les temps d'exécution des pipelines.

Qualité logicielle : Couverture de tests élevée avec affichage dans les merge requests, analyse statique automatique, et respect des standards de développement Symfony.

Validation des Spécifications Techniques

Tests unitaires du générateur :

✅ Le générateur produit des chaînes de caractères
✅ Les chaînes générées font exactement 8 caractères
✅ Génération aléatoire avec moins d'un doublon sur 10 000 tests

Tests d'intégration des contrôleurs :

✅ Route /shorten retourne un JSON avec propriété short_code
✅ Route /shorten retourne erreur 400 pour URL invalide
✅ Route /shorten crée une entité ShortUrl en base
✅ Génération d'URLs courtes uniques avec résilience aux collisions
✅ Route /:short_code redirige vers l'URL correspondante
✅ Route /:short_code retourne 404 si code inexistant
✅ Raccourcissement multiple de la même URL produit des codes différents

Tests front-end e2e :

✅ Page HTML accessible sur route GET /
✅ Formulaire contient input avec name="url"
✅ Présence du bouton submit
✅ Validation côté client : champ vide ne soumet pas
✅ Validation côté client : texte non-URL ne soumet pas
✅ Soumission réussie avec URL valide

Bilan Critique et Perspectives

Points forts : L'approche DevOps complète a permis de livrer une application robuste avec une infrastructure de tests exemplaire. La conteneurisation facilite le déploiement et la scalabilité. La méthodologie "testing-first" garantit la qualité du code.

Limites identifiées : La complexité de l'infrastructure CI/CD peut sembler disproportionnée pour une application simple, mais constitue un excellent apprentissage des pratiques professionnelles. La gestion des performances à grande échelle nécessiterait des optimisations supplémentaires.

Améliorations possibles : Intégration de métriques de performance en production, mise en place de monitoring applicatif, et évolution vers une architecture microservices pour des besoins de très haute disponibilité. L'ajout de fonctionnalités avancées (analytics des clics, expiration des liens, API REST) pourrait enrichir la valeur métier.

Le projet SURL démontre parfaitement ma maîtrise des technologies web modernes, des pratiques DevOps, et de la qualité logicielle dans un contexte de développement professionnel.

Interface SURL
Pipeline CI/CD GitLab
Coverage Tests

Projets créatifs et collaborations techniques

Parlons Code