Epic 0 - Environnement Technique et Infrastructure
TS-100 : Configuration initiale du projet Spring Boot
Feature: Initialisation du projet Spring Boot backend
En tant qu'équipe technique
Nous devons configurer le projet Spring Boot avec tous les modules nécessaires
Afin de garantir une architecture hexagonale et testable
Scenario: Création du projet avec Spring Initializr
Given nous utilisons Spring Boot 3.2.x avec Java 17
When le projet est initialisé avec les dépendances suivantes :
| Dépendance |
| Spring Web |
| Spring Data JPA |
| Spring Security |
| Spring Boot Actuator |
| PostgreSQL Driver |
| Flyway |
| Lombok |
| Spring Boot Test |
Then le fichier pom.xml contient toutes les dépendances
And la structure de packages suit l'architecture hexagonale :
| Package |
| com.agile.domain |
| com.agile.application |
| com.agile.infrastructure |
| com.agile.adapters.rest |
| com.agile.adapters.persistence |
Scenario: Configuration des profils application.yml
Given le fichier application.yml est créé
When je définis les profils "dev", "test" et "prod"
Then chaque profil contient les configurations spécifiques :
| Profil | Database URL | Log Level |
| dev | jdbc:postgresql://localhost:5432/agile_dev | DEBUG |
| test | jdbc:h2:mem:testdb | INFO |
| prod | jdbc:postgresql://db:5432/agile_prod | WARN |
TS-101 : Configuration Angular 17 avec NGXS
Feature: Initialisation du projet Angular frontend
En tant qu'équipe technique
Nous devons configurer Angular 17 avec NGXS et Angular Material
Afin de garantir une architecture scalable et maintenable
Scenario: Création du projet Angular avec Angular CLI
Given Angular CLI 17 est installé
When je crée le projet avec "ng new agile-app --routing --style=scss"
And j'installe NGXS : "npm install @ngxs/store @ngxs/devtools-plugin"
And j'installe Angular Material : "ng add @angular/material"
Then la structure de fichiers suit les bonnes pratiques Angular :
| Répertoire |
| src/app/core |
| src/app/shared |
| src/app/features |
| src/app/store |
And les modules de base sont configurés (AppModule, CoreModule, SharedModule)
Scenario: Configuration NGXS Store
Given le projet Angular est créé
When je configure le store NGXS dans app.config.ts
And je crée les états suivants :
| État |
| AuthState |
| BacklogState |
| SprintState |
Then le store est fonctionnel
And les actions et sélecteurs sont typés avec TypeScript
TS-102 : Configuration Docker Compose pour environnement local
Feature: Environnement Dockerisé local
En tant qu'équipe DevOps
Nous devons configurer Docker Compose pour le développement local
Afin de standardiser l'environnement entre développeurs
Scenario: Création du fichier docker-compose.yml
Given le fichier docker-compose.yml est créé à la racine du projet
When je définis les services suivants :
| Service | Image | Ports |
| backend | agile-backend:dev | 8080:8080 |
| frontend | agile-frontend:dev | 4200:4200 |
| database | postgres:15 | 5432:5432 |
And j'ajoute les variables d'environnement via .env :
| Variable | Valeur |
| POSTGRES_USER | agile_user |
| POSTGRES_PASSWORD | agile_password |
| POSTGRES_DB | agile_db |
Then la commande "docker-compose up" démarre tous les services
And les services backend, frontend et database sont accessibles
Scenario: Configuration des volumes persistants
Given Docker Compose est configuré
When je définis les volumes suivants :
| Volume | Mapping |
| postgres-data | ./data/postgres:/var/lib/postgresql/data |
| backend-logs | ./logs:/app/logs |
Then les données PostgreSQL persistent entre redémarrages
And les logs backend sont accessibles localement
TS-103 : Migrations initiales Flyway
Feature: Migrations Flyway initiales
En tant qu'équipe DevOps
Nous devons créer les scripts de migration Flyway
Afin d'initialiser le schéma de base de données
Scenario: Création du script V1__init_schema.sql
Given le répertoire src/main/resources/db/migration existe
When je crée le fichier V1__init_schema.sql avec les tables :
| Table | Description |
| users | Utilisateurs et authentification|
| products | Produits agiles |
| backlog_items | Epics, Features, Stories |
| sprints | Sprints et releases |
| tasks | Tâches liées aux stories |
Then Flyway exécute le script au démarrage de l'application
And toutes les tables sont créées dans PostgreSQL
Scenario: Ajout de données de référence avec V2__seed_data.sql
Given le script V1 a été exécuté
When je crée V2__seed_data.sql avec :
| Données |
| Rôles par défaut (Admin, PO, SM, Dev) |
| Utilisateur admin initial |
| Statuts par défaut (To Do, In Progress, Done) |
Then les données de référence sont insérées
And l'application est fonctionnelle dès le premier démarrage
TS-104 : Configuration GitLab CI/CD Pipeline
Feature: Pipeline CI/CD GitLab complet
En tant qu'équipe DevOps
Nous devons configurer un pipeline automatisé
Afin d'automatiser build, tests et déploiements
Scenario: Création du fichier .gitlab-ci.yml
Given le fichier .gitlab-ci.yml est créé à la racine
When je définis les stages suivants :
| Stage | Jobs |
| build | build:backend, build:frontend |
| test | test:unit, test:integration |
| security | security:scan |
| deploy | deploy:staging, deploy:prod |
Then chaque stage s'exécute séquentiellement
And les artifacts (JARs, bundles) sont sauvegardés entre stages
Scenario: Déploiement automatique vers staging
Given la branche "develop" est poussée
When le pipeline atteint le stage "deploy:staging"
Then le backend et frontend sont déployés automatiquement sur staging
And les tests smoke (health checks) sont exécutés après déploiement
And une notification Slack confirme le succès du déploiement
TS-105 : Configuration Prometheus et Grafana
Feature: Monitoring avec Prometheus et Grafana
En tant qu'équipe DevOps
Nous devons configurer Prometheus et Grafana
Afin de superviser l'état de santé et les performances de l'application
Scenario: Configuration Prometheus pour collecter les métriques
Given Prometheus est déployé via Docker Compose
When je configure le fichier prometheus.yml avec :
| Target | Endpoint |
| backend-actuator | http://backend:8080/actuator/prometheus |
Then Prometheus collecte les métriques toutes les 15 secondes
And les métriques JVM, HTTP, et custom sont disponibles
Scenario: Création de dashboards Grafana
Given Grafana est connecté à Prometheus comme source de données
When je crée un dashboard "Application Health" avec :
| Panel | Métrique |
| CPU Usage | process_cpu_usage |
| Mémoire JVM | jvm_memory_used_bytes |
| Taux d'erreur HTTP | http_server_requests_seconds (status=5xx) |
| Nombre requêtes/sec | http_server_requests_seconds_count |
Then le dashboard affiche les métriques en temps réel
And des alertes Slack sont configurées pour CPU > 80%
Epic 1 - Administration et Sécurité
US-001 : Création de compte utilisateur avec attribution de rôles
Feature: Gestion des comptes utilisateurs
En tant qu'administrateur
Je veux créer un compte utilisateur avec attribution de rôles
Afin de donner accès à l'application de manière contrôlée
Background:
Given je suis connecté en tant qu'administrateur
And je suis sur la page de gestion des utilisateurs
Scenario: Création réussie d'un utilisateur avec rôle unique
Given aucun utilisateur avec l'email "alice@example.com" n'existe
When je clique sur le bouton "Créer un utilisateur"
And je remplis le formulaire avec les informations suivantes:
| Champ | Valeur |
| Prénom | Alice |
| Nom | Dupont |
| Email | alice@example.com |
| Rôle | Developer |
And je clique sur "Enregistrer"
Then un message de succès "Utilisateur créé avec succès" s'affiche
And l'utilisateur "Alice Dupont" apparaît dans la liste
And un email d'activation est envoyé à "alice@example.com"
Scenario: Tentative de création avec email déjà existant
Given un utilisateur avec l'email "bob@example.com" existe déjà
When je tente de créer un nouvel utilisateur avec l'email "bob@example.com"
Then un message d'erreur "Cet email est déjà utilisé" s'affiche
And le formulaire reste ouvert pour correction
Scenario: Création d'utilisateur avec plusieurs rôles
When je crée un utilisateur avec les rôles suivants:
| Rôle |
| Product Owner |
| Scrum Master |
Then l'utilisateur doit avoir les deux rôles assignés
And les permissions cumulées des deux rôles sont appliquées
Feature: Modification des utilisateurs existants
En tant qu'administrateur
Je veux modifier les informations et rôles d'un utilisateur existant
Afin de maintenir les données à jour
Background:
Given je suis connecté en tant qu'administrateur
And les utilisateurs suivants existent:
| Nom | Email | Rôle | Statut |
| Bob Smith | bob@example.com | Developer | Actif |
Scenario: Modification réussie du rôle d'un utilisateur
Given je consulte le profil de l'utilisateur "Bob Smith"
When je change le rôle de "Developer" à "Scrum Master"
And je sauvegarde les modifications
Then un message de confirmation "Utilisateur modifié avec succès" s'affiche
And le rôle de "Bob Smith" est "Scrum Master"
And l'utilisateur reçoit une notification de changement de rôle
Scenario: Modification des informations personnelles
Given je consulte le profil de l'utilisateur "Bob Smith"
When je modifie les informations suivantes:
| Champ | Nouvelle valeur |
| Email | bob.smith@example.com|
| Téléphone| +33 6 12 34 56 78 |
And je sauvegarde les modifications
Then les nouvelles informations sont enregistrées
And un email de confirmation est envoyé à la nouvelle adresse
US-003 : Désactivation temporaire d'un compte utilisateur
Feature: Désactivation temporaire de comptes
En tant qu'administrateur
Je veux désactiver temporairement un compte utilisateur sans le supprimer
Afin de gérer les départs temporaires (congés, arrêts maladie)
Background:
Given je suis connecté en tant qu'administrateur
And l'utilisateur "Charlie Martin" a le statut "Actif"
Scenario: Désactivation réussie d'un compte actif
Given je suis sur le profil de l'utilisateur "Charlie Martin"
When je clique sur "Désactiver le compte"
And je confirme l'action dans la modal de confirmation
Then le statut de l'utilisateur devient "Inactif"
And l'utilisateur ne peut plus se connecter
And les tâches assignées restent visibles mais marquées comme "En attente de réassignation"
Scenario: Réactivation d'un compte désactivé
Given l'utilisateur "Charlie Martin" a le statut "Inactif"
When je clique sur "Réactiver le compte"
Then le statut de l'utilisateur devient "Actif"
And l'utilisateur peut à nouveau se connecter
And un email de réactivation lui est envoyé
US-004 : Mise à jour du profil utilisateur
Feature: Gestion du profil utilisateur
En tant qu'utilisateur
Je veux mettre à jour mon profil (nom, email, avatar, préférences)
Afin de personnaliser mon expérience
Background:
Given je suis connecté en tant que "David Laurent"
And je suis sur la page "Mon profil"
Scenario: Modification de l'avatar
When je clique sur "Modifier l'avatar"
And je télécharge une image au format "JPG" de taille "2 MB"
And je sauvegarde les modifications
Then mon nouvel avatar s'affiche sur mon profil
And mon avatar est visible dans toute l'application
Scenario: Modification des préférences de notification
When je désactive les notifications email pour "Assignation de tâche"
And j'active les notifications in-app pour "Mention dans commentaire"
And je sauvegarde mes préférences
Then mes nouvelles préférences sont appliquées immédiatement
And je ne reçois plus d'emails pour les assignations de tâche
US-005 : Connexion utilisateur standard et OAuth2
Feature: Authentification multi-canaux
En tant qu'utilisateur
Je veux me connecter avec email/mot de passe ou via OAuth2 (Google, GitHub, GitLab)
Afin d'accéder à l'application de manière sécurisée et flexible
Background:
Given l'application supporte JWT et OAuth2
And la page de connexion affiche les options d'authentification
Scenario: Connexion réussie avec email et mot de passe
Given je suis sur la page de connexion
When je saisis "alice@example.com" dans le champ email
And je saisis "SecurePass123!" dans le champ mot de passe
And je clique sur "Se connecter"
Then je suis redirigé vers le dashboard principal
And un token JWT est généré et stocké en local storage
And mon profil utilisateur est chargé
Scenario: Connexion avec OAuth2 Google
Given je suis sur la page de connexion
When je clique sur "Se connecter avec Google"
And je m'authentifie avec mon compte Google "alice@gmail.com"
And j'autorise l'application à accéder à mon profil
Then je suis redirigé vers le dashboard
And mon compte est créé automatiquement si inexistant
And mes informations Google (nom, email, avatar) sont importées
Scenario: Connexion avec OAuth2 GitHub
Given je suis sur la page de connexion
When je clique sur "Se connecter avec GitHub"
And je m'authentifie avec mon compte GitHub
Then un token OAuth GitHub est échangé contre un JWT applicatif
And je suis connecté avec les droits Developer par défaut
Scenario: Échec de connexion avec mot de passe incorrect
Given je suis sur la page de connexion
When je saisis "alice@example.com" et un mot de passe incorrect
And je clique sur "Se connecter"
Then un message d'erreur "Email ou mot de passe incorrect" s'affiche
And aucun token n'est généré
And je reste sur la page de connexion
US-006 : Réinitialisation de mot de passe
Feature: Réinitialisation sécurisée de mot de passe
En tant qu'utilisateur
Je veux réinitialiser mon mot de passe par email
Afin de récupérer l'accès à mon compte en cas d'oubli
Scenario: Demande de réinitialisation réussie
Given je suis sur la page de connexion
When je clique sur "Mot de passe oublié ?"
And je saisis mon email "bob@example.com"
And je clique sur "Envoyer le lien de réinitialisation"
Then un message "Email envoyé, vérifiez votre boîte de réception" s'affiche
And je reçois un email avec un lien sécurisé valide 24h
And le lien contient un token unique à usage unique
Scenario: Création du nouveau mot de passe
Given j'ai reçu un email de réinitialisation
And je clique sur le lien dans l'email
When je saisis mon nouveau mot de passe "NewSecurePass456!"
And je confirme le mot de passe "NewSecurePass456!"
And je clique sur "Réinitialiser"
Then un message "Mot de passe réinitialisé avec succès" s'affiche
And je peux me connecter avec mon nouveau mot de passe
And l'ancien lien de réinitialisation est invalidé
US-007 : Déconnexion et invalidation de session
Feature: Déconnexion sécurisée
En tant qu'utilisateur
Je veux me déconnecter de l'application
Afin de sécuriser mon compte lorsque je quitte
Scenario: Déconnexion manuelle
Given je suis connecté à l'application
When je clique sur "Se déconnecter"
Then mon token JWT est supprimé du local storage
And mon Refresh Token est invalidé côté serveur
And je suis redirigé vers la page de connexion
Scenario: Expiration automatique de session après inactivité
Given je suis connecté depuis 30 minutes
And je n'ai effectué aucune action depuis 15 minutes
When le délai d'inactivité est dépassé (configurable)
Then ma session expire automatiquement
And je reçois une notification "Session expirée, veuillez vous reconnecter"
And je suis redirigé vers la page de connexion
US-008: Gestion Multi-Factor Authentication (MFA)
Feature: Authentification multi-facteur (MFA)
En tant qu'administrateur ou utilisateur
Je veux activer l'authentification à deux facteurs
Afin de renforcer la sécurité de mon compte
Scenario: Activation de MFA via TOTP (Google Authenticator)
Given je suis connecté à mon compte
And je suis sur la page "Sécurité"
When je clique sur "Activer l'authentification à deux facteurs"
Then un QR Code est généré
And je scanne le QR Code avec Google Authenticator
And je saisis le code OTP à 6 chiffres
And je clique sur "Valider"
Then MFA est activé sur mon compte
And des codes de secours sont générés et affichés
Scenario: Connexion avec MFA activé
Given MFA est activé sur mon compte
When je me connecte avec email et mot de passe
Then une page "Code de vérification" s'affiche
When je saisis le code OTP généré par mon application
And je clique sur "Valider"
Then je suis connecté avec succès
TS-001 : Implémentation de l'authentification JWT
Feature: Authentification JWT avec tokens
En tant qu'équipe technique
Nous devons implémenter l'authentification JWT avec access et refresh tokens
Afin de sécuriser l'API
Scenario: Génération de tokens JWT lors de la connexion
Given l'utilisateur est authentifié avec succès
When le système génère les tokens
Then un access token avec expiration de 30 minutes est créé
And un refresh token avec expiration de 7 jours est créé
And les tokens sont signés avec l'algorithme HS256
And le payload contient userId, roles, et permissions
Scenario: Rafraîchissement du token expiré
Given l'access token est expiré
And le refresh token est toujours valide
When le client envoie une requête avec le refresh token
Then un nouvel access token est généré
And le refresh token est renouvelé (rotation)
And l'ancien refresh token est invalidé
Scenario: Validation du token sur une requête API
Given une requête GET vers "/api/projects" est envoyée
And le header "Authorization: Bearer <token>" est présent
When le système valide le token
Then la signature est vérifiée
And l'expiration est contrôlée
And les permissions sont extraites du payload
And la requête est autorisée ou refusée selon les permissions
TS-002 : Configuration Spring Security avec RBAC
Feature: Gestion des autorisations RBAC
En tant qu'équipe technique
Nous devons configurer Spring Security avec RBAC
Afin de gérer les autorisations par rôle et ressource
Scenario: Configuration des rôles et permissions
Given les rôles suivants sont définis:
| Rôle | Permissions |
| Admin | MANAGE_USERS, MANAGE_PRODUCTS, VIEW_AUDIT_LOGS |
| Product Owner | MANAGE_BACKLOG, VIEW_REPORTS |
| Developer | VIEW_BACKLOG, UPDATE_TASKS |
When un utilisateur avec le rôle "Developer" tente d'accéder à "/api/users"
Then l'accès est refusé avec le code HTTP 403
And un message "Accès interdit" est retourné
Scenario: Validation des permissions au runtime
Given un utilisateur a le rôle "Product Owner"
And il tente de supprimer un backlog item
When le système vérifie les permissions
Then la permission "MANAGE_BACKLOG" est requise
And l'utilisateur possède cette permission
And l'action est autorisée
TS-003 : Migrations Flyway pour versionnement DB
Feature: Versionnement du schéma de base de données
En tant qu'équipe technique
Nous devons implémenter les migrations Flyway
Afin de versionner le schéma de base de données
Scenario: Exécution de migration initiale au démarrage
Given l'application démarre pour la première fois
And aucune table n'existe en base
When Flyway exécute les scripts de migration
Then les migrations sont exécutées dans l'ordre (V1, V2, V3...)
And la table "flyway_schema_history" est créée
And toutes les tables métier sont créées
And les données de référence sont insérées
Scenario: Application d'une nouvelle migration en production
Given l'application est en version V1.5
And une nouvelle migration V1.6 est déployée
When l'application redémarre
Then Flyway détecte la nouvelle migration
And exécute uniquement le script V1.6
And l'historique est mis à jour
And aucune régression n'est observée
TS-004 : Chiffrement des données sensibles
Feature: Chiffrement des données sensibles en base
En tant qu'équipe technique
Nous devons configurer le chiffrement des données sensibles
Afin de protéger les mots de passe et tokens
Scenario: Hachage des mots de passe avec BCrypt
Given un utilisateur crée un compte avec le mot de passe "MyPassword123!"
When le système enregistre le mot de passe
Then le mot de passe est haché avec BCrypt (cost factor 12)
And le hash est stocké dans la colonne "password_hash"
And le mot de passe en clair n'est jamais stocké
And le hash ne peut pas être déchiffré
Scenario: Chiffrement des refresh tokens en base
Given un refresh token est généré pour un utilisateur
When le token est enregistré en base
Then le token est chiffré avec AES-256
And seul le système peut déchiffrer le token
And le token chiffré est stocké dans la table "user_tokens"
Epic 2 - Gestion Produit et Équipe
US-010 : Création d'un nouveau produit agile
Feature: Création de produits agiles
En tant que Product Owner
Je veux créer un nouveau produit agile avec nom, description et vision
Afin d'initialiser le projet
Background:
Given je suis connecté en tant que Product Owner
And je suis sur la page "Mes produits"
Scenario: Création réussie d'un produit
When je clique sur "Créer un produit"
And je remplis le formulaire avec:
| Champ | Valeur |
| Nom | Application Mobile Banking |
| Description | Application bancaire pour clients particuliers |
| Vision | Devenir la banque mobile préférée en France |
| Date début | 01/11/2025 |
And je clique sur "Créer"
Then un message "Produit créé avec succès" s'affiche
And le produit "Application Mobile Banking" apparaît dans ma liste
And je suis automatiquement assigné comme Product Owner du produit
And un backlog vide est créé pour ce produit
Scenario: Tentative de création avec nom déjà existant
Given un produit nommé "CRM Enterprise" existe déjà
When je tente de créer un produit avec le nom "CRM Enterprise"
Then un message d'erreur "Ce nom de produit existe déjà" s'affiche
And le formulaire reste ouvert pour correction
US-011 : Constitution d'une équipe avec rôles
Feature: Constitution et gestion d'équipe
En tant que Product Owner
Je veux constituer une équipe en assignant des membres avec leurs rôles
Afin de structurer l'organisation du projet
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Équipe" du produit
And les utilisateurs suivants sont disponibles:
| Nom | Email |
| Sophie Martin | sophie@example.com |
| Marc Dubois | marc@example.com |
| Julie Petit | julie@example.com |
Scenario: Ajout de membres avec rôles multiples
When je clique sur "Ajouter un membre"
And je sélectionne "Sophie Martin"
And j'assigne le rôle "Scrum Master"
And je clique sur "Ajouter"
Then "Sophie Martin" apparaît dans la liste de l'équipe
And son rôle "Scrum Master" est affiché
And elle reçoit une notification d'ajout à l'équipe
Scenario: Constitution complète d'une équipe
When j'ajoute les membres suivants:
| Nom | Rôle |
| Sophie Martin | Scrum Master|
| Marc Dubois | Developer |
| Julie Petit | Developer |
Then l'équipe contient 4 membres (incluant le PO)
And tous les membres ont accès au produit
And le dashboard d'équipe affiche la composition complète
US-012 : Modification de la composition de l'équipe
Feature: Modification de la composition d'équipe
En tant que Scrum Master
Je veux modifier la composition de l'équipe (ajouter/retirer membres)
Afin de m'adapter aux évolutions du projet
Background:
Given je suis Scrum Master du produit "Application Mobile Banking"
And l'équipe actuelle contient:
| Nom | Rôle |
| Marc Dubois | Developer |
| Julie Petit | Developer |
Scenario: Retrait d'un membre de l'équipe
Given "Marc Dubois" a 3 tâches assignées
When je clique sur "Retirer de l'équipe" pour "Marc Dubois"
And une modal me propose de réassigner ses tâches
And je réassigne les tâches à "Julie Petit"
And je confirme le retrait
Then "Marc Dubois" n'apparaît plus dans l'équipe
And ses tâches sont maintenant assignées à "Julie Petit"
And il ne peut plus accéder au produit
And il reçoit une notification de retrait
Scenario: Changement de rôle d'un membre
Given "Julie Petit" a le rôle "Developer"
When je change son rôle en "Scrum Master"
And je sauvegarde la modification
Then le rôle de "Julie Petit" est mis à jour
And ses permissions changent en conséquence
And elle reçoit une notification du changement de rôle
US-013 : Consultation de la liste des produits affectés
Feature: Navigation entre les produits
En tant que membre d'équipe
Je veux consulter la liste des produits auxquels je suis affecté
Afin de naviguer rapidement entre mes projets
Background:
Given je suis connecté en tant que "Marc Dubois"
And je suis membre des produits suivants:
| Produit | Mon rôle |
| Application Mobile Banking| Developer |
| CRM Enterprise | Developer |
| Site E-commerce | Scrum Master |
Scenario: Affichage de la liste des produits
Given je suis sur le dashboard principal
Then je vois la liste de mes 3 produits
And chaque produit affiche:
| Informations affichées |
| Nom du produit |
| Mon rôle |
| Nombre de tâches actives|
| Dernier sprint actif |
Scenario: Navigation vers un produit spécifique
When je clique sur "Application Mobile Banking"
Then je suis redirigé vers le dashboard du produit
And je vois le backlog et les sprints du produit
And les actions disponibles correspondent à mon rôle "Developer"
US-014 : Archivage d'un produit terminé
Feature: Archivage de produits
En tant que Product Owner
Je veux archiver un produit terminé sans le supprimer
Afin de maintenir l'historique tout en désencombrant l'interface
Background:
Given je suis Product Owner du produit "Site E-commerce V1"
And le produit a le statut "Actif"
And tous les sprints sont terminés
Scenario: Archivage réussi d'un produit terminé
Given je suis sur la page du produit "Site E-commerce V1"
When je clique sur "Archiver le produit"
And je confirme l'action dans la modal
And je saisis une raison "Projet terminé et mis en production"
Then le produit passe au statut "Archivé"
And il n'apparaît plus dans ma liste de produits actifs
And je peux le retrouver dans "Produits archivés"
And toutes les données restent accessibles en lecture seule
Scenario: Désarchivage d'un produit
Given le produit "Site E-commerce V1" est archivé
When je vais dans "Produits archivés"
And je clique sur "Désarchiver" pour ce produit
Then le produit redevient actif
And il réapparaît dans ma liste de produits actifs
And l'équipe peut à nouveau y travailler
Epic 3 - Gestion du Backlog
US-020 : Création d'un Epic avec objectif business
Feature: Gestion des Epics
En tant que Product Owner
Je veux créer un Epic avec objectif business, priorité et description
Afin de structurer la vision long terme du produit
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Backlog"
Scenario: Création réussie d'un Epic
When je clique sur "Créer un Epic"
And je remplis le formulaire avec:
| Champ | Valeur |
| Titre | Gestion des comptes bancaires |
| Objectif business | Permettre la consultation et gestion des comptes |
| Priorité | Haute |
| Valeur business | 100 |
| Date cible | Q2 2026 |
And je clique sur "Créer"
Then l'Epic "Gestion des comptes bancaires" est créé
And il apparaît en haut du backlog (priorité haute)
And je peux maintenant y rattacher des Features
Scenario: Ajout d'un critère de succès à l'Epic
Given l'Epic "Gestion des comptes bancaires" existe
When j'ajoute les critères de succès suivants:
| Critère |
| 80% des clients utilisent la fonctionnalité |
| Temps de chargement < 2 secondes |
| Taux de satisfaction > 4/5 |
Then les critères sont enregistrés
And ils sont visibles sur la page de l'Epic
US-021 : Création de Features rattachées à un Epic
Feature: Gestion des Features
En tant que Product Owner
Je veux créer des Features rattachées à un Epic
Afin d'organiser le périmètre fonctionnel
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And l'Epic "Gestion des comptes bancaires" existe
And je suis sur la page de cet Epic
Scenario: Création d'une Feature rattachée à un Epic
When je clique sur "Ajouter une Feature"
And je remplis le formulaire avec:
| Champ | Valeur |
| Titre | Consultation du solde |
| Description | L'utilisateur peut voir son solde en temps réel |
| Valeur business | 80 |
| Effort estimé | 21 points |
And je clique sur "Créer"
Then la Feature "Consultation du solde" est créée
And elle est rattachée à l'Epic "Gestion des comptes bancaires"
And elle apparaît dans la liste des Features de l'Epic
Scenario: Déplacement d'une Feature vers un autre Epic
Given la Feature "Consultation du solde" est rattachée à l'Epic "Gestion des comptes"
And l'Epic "Opérations bancaires" existe
When je fais glisser la Feature vers l'Epic "Opérations bancaires"
Then la Feature change de parent
And elle apparaît sous le nouvel Epic
And l'historique enregistre le changement
Feature: Gestion des User Stories
En tant que Product Owner
Je veux créer des User Stories au format "En tant que... je veux... afin de..."
Afin d'exprimer les besoins utilisateurs de manière claire
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And la Feature "Consultation du solde" existe
And je suis sur la page de cette Feature
Scenario: Création d'une User Story avec format standard
When je clique sur "Créer une User Story"
And je remplis le formulaire structuré:
| Champ | Valeur |
| En tant que| client de la banque |
| Je veux | consulter le solde de mon compte courant |
| Afin de | connaître ma situation financière en temps réel |
| Priorité | Haute |
And j'ajoute les critères d'acceptation suivants:
| Critère |
| Le solde est affiché en euros avec 2 décimales |
| Le solde se met à jour automatiquement toutes les 30 sec |
| Un indicateur visuel indique si le compte est débiteur |
And je clique sur "Créer"
Then la User Story "Consulter le solde de mon compte courant" est créée
And elle est rattachée à la Feature "Consultation du solde"
And le format standard est respecté
Scenario: Validation automatique du format de User Story
When je crée une User Story sans remplir le champ "Afin de"
And je tente de sauvegarder
Then un message d'erreur "Le champ 'Afin de' est obligatoire" s'affiche
And la User Story n'est pas créée
And le formulaire reste ouvert pour correction
US-023 : Création de Technical Stories
Feature: Gestion des Technical Stories
En tant que développeur
Je veux créer des Technical Stories
Afin de documenter les besoins techniques non visibles par l'utilisateur
Background:
Given je suis Developer dans le produit "Application Mobile Banking"
And je suis sur la page "Backlog"
Scenario: Création d'une Technical Story
When je clique sur "Créer une Technical Story"
And je remplis le formulaire avec:
| Champ | Valeur |
| Titre | Migration base de données vers PostgreSQL 15 |
| Description technique | Migrer de PostgreSQL 13 vers 15 pour améliorer les performances |
| Impact architecture | Base de données, couche persistance |
| Complexité | Élevée |
| Points story | 13 |
And j'ajoute les critères techniques:
| Critère |
| Compatibilité backward assurée |
| Scripts de migration testés sur environnement staging |
| Rollback documenté |
And je clique sur "Créer"
Then la Technical Story est créée
And elle est identifiée visuellement comme "Technical" dans le backlog
And elle peut être planifiée dans un sprint
Scenario: Liaison d'une Technical Story à une User Story
Given la User Story "Consulter le solde" existe
And la Technical Story "Optimisation requêtes SQL" existe
When j'ouvre la Technical Story "Optimisation requêtes SQL"
And je lie cette story à "Consulter le solde"
Then la liaison est créée
And les deux stories affichent le lien dans leur détail
US-024 : Définition des critères d'acceptation
Feature: Critères d'acceptation des stories
En tant que membre d'équipe
Je veux définir des critères d'acceptation pour chaque User Story
Afin de clarifier la Definition of Done
Background:
Given la User Story "Consulter l'historique des transactions" existe
And je suis sur la page de détail de cette story
Scenario: Ajout de critères d'acceptation
When je clique sur "Ajouter un critère d'acceptation"
And je saisis les critères suivants:
| Critère |
| L'historique affiche les 50 dernières transactions |
| Chaque transaction indique: date, montant, libellé, catégorie|
| L'utilisateur peut filtrer par date (début et fin) |
| Les transactions sont paginées (20 par page) |
And je sauvegarde
Then les 4 critères sont enregistrés
And ils apparaissent dans la section "Critères d'acceptation"
And ils servent de checklist lors de la review
Scenario: Validation des critères lors de la review
Given la User Story "Consulter l'historique des transactions" a 4 critères
And la story est en status "En review"
When le Product Owner teste la fonctionnalité
And il coche les critères un par un:
| Critère | Validé |
| L'historique affiche les 50 dernières transactions | Oui |
| Chaque transaction indique les bonnes informations | Oui |
| Filtrage par date fonctionne | Oui |
| Pagination fonctionne correctement | Oui |
Then tous les critères sont validés
And la story peut être marquée "Done"
US-025 : Priorisation des éléments du backlog par drag \& drop
Feature: Priorisation du backlog
En tant que Product Owner
Je veux prioriser les éléments du backlog par drag & drop
Afin de refléter la valeur business
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Backlog"
And le backlog contient les User Stories suivantes (par ordre):
| Position | Titre | Priorité actuelle |
| 1 | Consulter le solde | Haute |
| 2 | Effectuer un virement | Moyenne |
| 3 | Consulter l'historique | Haute |
Scenario: Réorganisation par drag & drop
When je fais glisser "Consulter l'historique" de la position 3 vers la position 1
Then l'ordre du backlog devient:
| Position | Titre |
| 1 | Consulter l'historique |
| 2 | Consulter le solde |
| 3 | Effectuer un virement |
And les priorités sont recalculées automatiquement
And un message "Backlog mis à jour" s'affiche brièvement
And les changements sont enregistrés immédiatement
Scenario: Déplacement d'une story vers un sprint
Given le Sprint 5 est en cours
When je fais glisser "Effectuer un virement" depuis le backlog
And je la dépose dans la zone "Sprint 5"
Then la story est ajoutée au Sprint 5
And elle disparaît du product backlog
And les points du sprint sont recalculés automatiquement
US-026 : Visualisation du backlog en multiples vues
Feature: Vues multiples du backlog
En tant que Product Owner
Je veux visualiser le backlog en vue liste, Kanban et calendrier
Afin de m'adapter au contexte et aux besoins
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Backlog"
Scenario: Basculement en vue Liste
Given je suis en vue "Kanban"
When je clique sur l'icône "Vue Liste"
Then le backlog s'affiche sous forme de tableau avec colonnes:
| Colonnes affichées |
| Titre |
| Type (Epic/Feature/US/TS) |
| Priorité |
| Points |
| Assigné à |
| Statut |
And je peux trier par chaque colonne
And je peux filtrer par type, priorité, statut
Scenario: Basculement en vue Kanban
Given je suis en vue "Liste"
When je clique sur l'icône "Vue Kanban"
Then le backlog s'affiche en colonnes:
| Colonnes |
| To Do |
| In Progress |
| Review |
| Done |
And chaque carte affiche: titre, type, points, assigné
And je peux déplacer les cartes par drag & drop
Scenario: Basculement en vue Calendrier
Given je suis en vue "Liste"
When je clique sur l'icône "Vue Calendrier"
Then le backlog s'affiche dans un calendrier mensuel
And les stories avec date cible apparaissent aux dates correspondantes
And je peux déplacer une story en la faisant glisser vers une autre date
Feature: Collaboration sur les stories
En tant que membre d'équipe
Je veux ajouter des commentaires et pièces jointes sur les stories
Afin d'enrichir la documentation et faciliter la collaboration
Background:
Given la User Story "Effectuer un virement" existe
And je suis sur la page de détail de cette story
Scenario: Ajout d'un commentaire
When je clique dans la zone "Ajouter un commentaire"
And je saisis "Attention: bien vérifier le RIB avant validation"
And je clique sur "Publier"
Then mon commentaire apparaît dans le fil de discussion
And il affiche: mon nom, ma photo, date et heure
And tous les membres de l'équipe sont notifiés
Scenario: Mention d'un membre dans un commentaire
When je saisis le commentaire "@Sophie peux-tu clarifier le besoin sur les virements internationaux ?"
And je clique sur "Publier"
Then Sophie reçoit une notification spécifique de mention
And le commentaire affiche "@Sophie" en surbrillance
And Sophie peut cliquer sur la notification pour accéder directement à la story
Scenario: Ajout d'une pièce jointe
When je clique sur "Joindre un fichier"
And je sélectionne le fichier "mockup-virement.pdf" (2 MB)
And je clique sur "Télécharger"
Then le fichier est uploadé sur le serveur
And il apparaît dans la section "Pièces jointes"
And je peux le télécharger en cliquant dessus
And les formats acceptés sont: PDF, PNG, JPG, DOC, XLS (max 10 MB)
US-028 : Filtrage et recherche dans le backlog
Feature: Recherche et filtrage du backlog
En tant que Product Owner
Je veux filtrer et rechercher dans le backlog
Afin de naviguer efficacement dans un backlog volumineux
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And le backlog contient 150 items
And je suis sur la page "Backlog"
Scenario: Recherche textuelle
When je saisis "virement" dans la barre de recherche
And j'appuie sur Entrée
Then seules les stories contenant "virement" dans le titre ou description s'affichent
And le compteur indique "8 résultats sur 150"
And les termes recherchés sont surlignés dans les résultats
Scenario: Filtrage par statut et priorité
When je sélectionne les filtres suivants:
| Filtre | Valeur |
| Statut | To Do, In Progress|
| Priorité | Haute |
And je clique sur "Appliquer les filtres"
Then seules les stories correspondantes s'affichent
And le compteur indique "12 résultats sur 150"
And les filtres actifs sont affichés en haut avec possibilité de les retirer
Scenario: Filtrage par assignation
When je filtre par "Assigné à: Marc Dubois"
Then seules les stories assignées à Marc s'affichent
And je vois 15 résultats
And je peux combiner ce filtre avec d'autres
US-029 : Création de Defects (bugs)
Feature: Gestion des bugs
En tant que membre d'équipe
Je veux créer des Defects (bugs) avec sévérité et priorité
Afin de suivre les anomalies
Background:
Given je suis Developer dans le produit "Application Mobile Banking"
And je suis sur la page "Backlog"
Scenario: Création d'un bug avec sévérité haute
When je clique sur "Créer un Defect"
And je remplis le formulaire avec:
| Champ | Valeur |
| Titre | Crash lors du virement avec montant > 10000€ |
| Sévérité | Critique |
| Priorité | Haute |
| Environnement | Production, iOS 17.1 |
| Steps reproduction | 1. Se connecter\n2. Aller sur Virement\n3. Saisir montant > 10000€\n4. Cliquer Valider |
| Résultat attendu | Le virement est validé |
| Résultat observé | L'application crash |
And je joins une capture d'écran "crash-screenshot.png"
And je clique sur "Créer"
Then le Defect est créé
And il est marqué comme "Bug" avec icône spécifique
And il apparaît en haut du backlog (priorité haute + sévérité critique)
And le Product Owner reçoit une notification immédiate
Scenario: Liaison d'un bug à une User Story
Given la User Story "Effectuer un virement" existe
And le bug "Crash lors du virement" existe
When j'ouvre le bug
And je le lie à la User Story "Effectuer un virement"
Then la liaison est créée
And le bug apparaît dans la section "Bugs associés" de la User Story
US-030 : Création de Spikes
Feature: Gestion des Spikes (investigations)
En tant que Product Owner
Je veux créer des Spikes
Afin de documenter les investigations et recherches nécessaires
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Backlog"
Scenario: Création d'un Spike pour investigation technique
When je clique sur "Créer un Spike"
And je remplis le formulaire avec:
| Champ | Valeur |
| Titre | Investigation API bancaire PSD2 |
| Question recherche | Quelle API PSD2 utiliser pour connexion multi-banques? |
| Objectif | Comparer 3 providers et recommander le meilleur |
| Timebox | 16 heures (2 jours) |
| Assigné à | Marc Dubois |
And je définis les livrables attendus:
| Livrable |
| Document de comparaison des 3 providers |
| POC avec l'API sélectionnée |
| Recommandation argumentée |
And je clique sur "Créer"
Then le Spike est créé
And il est identifié visuellement comme "Spike" dans le backlog
And la timebox de 16h est affichée
And le Spike peut être planifié dans un sprint
Scenario: Clôture d'un Spike avec résultats
Given le Spike "Investigation API bancaire PSD2" est terminé
When Marc clique sur "Clôturer le Spike"
And il ajoute un résumé des conclusions:
"""
Après comparaison, nous recommandons l'API "BankConnect" car:
- Meilleure couverture (95% des banques FR)
- Documentation complète
- Support réactif
- Coût compétitif
"""
And il joint le document "comparatif-api-psd2.pdf"
And il clique sur "Clôturer"
Then le Spike passe au statut "Done"
And les résultats sont enregistrés
And le PO peut créer les User Stories basées sur ces résultats
Epic 4 - Estimation et Planning Poker
US-040 : Création d'une session de Planning Poker
Feature: Planning Poker pour estimation collaborative
En tant que Scrum Master
Je veux créer une session de Planning Poker pour un ensemble de stories
Afin d'obtenir des estimations collaboratives
Background:
Given je suis Scrum Master du produit "Application Mobile Banking"
And 10 User Stories n'ont pas encore été estimées
And je suis sur la page "Planning Poker"
Scenario: Création et configuration d'une session
When je clique sur "Nouvelle session"
And je sélectionne l'échelle "Fibonacci (0, 1, 2, 3, 5, 8, 13, 21)"
And je sélectionne les stories à estimer:
| Story |
| Consulter le solde |
| Effectuer un virement |
| Consulter l'historique |
And j'invite les participants:
| Nom |
| Sophie Martin |
| Marc Dubois |
| Julie Petit |
And je clique sur "Démarrer la session"
Then la session est créée
And tous les participants reçoivent une notification
And un lien vers la session leur est envoyé
Scenario: Partage de session en temps réel
Given une session Planning Poker est en cours
When un participant clique sur le lien de la session
Then il rejoint la session en temps réel
And il voit la première story à estimer
And il voit la liste des participants connectés
US-041 : Vote anonyme dans une session Planning Poker
Feature: Vote collaboratif en Planning Poker
En tant que membre d'équipe
Je veux rejoindre une session de Planning Poker et voter de manière anonyme
Afin de contribuer à l'estimation sans biais
Background:
Given une session Planning Poker est en cours
And je suis participant à cette session
And la story "Consulter le solde" est en cours d'estimation
Scenario: Déroulement d'un vote
Given tous les participants sont connectés
And la story à estimer s'affiche pour tous
When chaque participant sélectionne sa carte (5, 8, 5, 8, 5)
Then les votes restent cachés tant que tous n'ont pas voté
And un indicateur montre qui a voté et qui n'a pas encore voté
Scenario: Révélation des votes
Given tous les participants ont voté
When le Scrum Master clique sur "Révéler les votes"
Then tous les votes sont affichés simultanément:
| Participant | Vote |
| Sophie Martin | 5 |
| Marc Dubois | 8 |
| Julie Petit | 5 |
| Moi-même | 5 |
And la médiane (5) et la moyenne (5.75) sont calculées
And les écarts importants sont mis en évidence
Scenario: Discussion et nouveau vote en cas d'écart
Given les votes révélés montrent un écart (5, 8, 13)
When le Scrum Master lance une discussion
And Marc (qui a voté 13) explique sa vision
And l'équipe discute pendant 5 minutes
And le Scrum Master lance un nouveau vote
Then un nouveau round commence
And les participants peuvent changer leur estimation
US-042 : Configuration de l'échelle d'estimation
Feature: Configuration de l'échelle d'estimation
En tant que Scrum Master
Je veux configurer l'échelle d'estimation
Afin d'adapter aux préférences de l'équipe
Background:
Given je suis sur la page de création d'une session Planning Poker
Scenario: Sélection de l'échelle Fibonacci
When je sélectionne l'échelle "Fibonacci"
Then les cartes disponibles sont: 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
And une carte "?" est disponible pour "Je ne sais pas"
And une carte "☕" est disponible pour "Pause nécessaire"
Scenario: Sélection de l'échelle T-shirt
When je sélectionne l'échelle "T-shirt sizes"
Then les cartes disponibles sont: XS, S, M, L, XL, XXL
And ces tailles sont converties en points: XS=1, S=2, M=3, L=5, XL=8, XXL=13
Scenario: Création d'une échelle personnalisée
When je sélectionne "Échelle personnalisée"
And je définis les valeurs: 1, 2, 4, 8, 16
And je sauvegarde cette échelle sous le nom "Échelle équipe mobile"
Then l'échelle est enregistrée
And elle est disponible pour les prochaines sessions
And seules ces valeurs sont proposées lors des votes
US-043 : Révélation simultanée des votes
Feature: Révélation synchronisée des votes
En tant que participant
Je veux voir les résultats révélés simultanément après que tous aient voté
Afin de garantir l'indépendance des estimations
Background:
Given une session Planning Poker est en cours
And 5 participants sont connectés
And la story "Effectuer un virement" est en cours d'estimation
Scenario: Attente de tous les votes
Given 4 participants sur 5 ont voté
When je suis le 5ème participant et je n'ai pas encore voté
Then je vois un message "En attente de votre vote"
And je vois les avatars des participants avec indicateur "a voté" / "en attente"
And je ne peux pas voir les votes des autres
And le bouton "Révéler" est désactivé pour le Scrum Master
Scenario: Révélation automatique quand tous ont voté
Given tous les participants ont voté
When le dernier participant valide son vote
Then les votes sont automatiquement révélés pour tous en même temps
And une animation affiche les cartes qui se retournent simultanément
And les statistiques s'affichent: min, max, moyenne, médiane, mode
US-044 : Chat intégré pour discussion
Feature: Discussion collaborative pendant l'estimation
En tant qu'équipe
Nous voulons discuter via chat intégré
Afin de converger vers un consensus d'estimation
Background:
Given une session Planning Poker est en cours
And les votes viennent d'être révélés avec un écart important
And je suis dans la vue de la session
Scenario: Envoi de messages dans le chat
When je clique dans la zone de chat
And je saisis "Je pense que la connexion à l'API externe ajoute de la complexité"
And j'appuie sur Entrée
Then mon message apparaît immédiatement dans le chat pour tous les participants
And il affiche mon nom et l'heure d'envoi
And une notification sonore discrète alerte les autres participants
Scenario: Demande de parole pour explication
Given Marc a voté 13 alors que les autres ont voté 5
When Sophie clique sur "Demander explication" à côté du vote de Marc
Then Marc reçoit une notification
And le Scrum Master voit la demande
And Marc peut prendre la parole pour expliquer son estimation
Scenario: Utilisation du chat pour argumenter
When plusieurs participants échangent dans le chat:
| Participant | Message |
| Marc | Il faut gérer les erreurs réseau et les timeouts |
| Sophie | Oui mais on a déjà un composant réutilisable |
| Julie | Le composant couvre 70% du besoin |
Then l'équipe converge vers une compréhension commune
And le Scrum Master peut lancer un nouveau vote
US-045 : Consultation de l'historique des sessions
Feature: Historique des sessions d'estimation
En tant que Product Owner
Je veux consulter l'historique des sessions d'estimation
Afin d'analyser la fiabilité et la cohérence des estimations
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And 15 sessions Planning Poker ont été réalisées
And je suis sur la page "Historique Planning Poker"
Scenario: Consultation de l'historique
When j'ouvre la liste des sessions
Then je vois toutes les sessions avec:
| Informations affichées |
| Date de la session |
| Nombre de stories |
| Participants |
| Durée totale |
| Statut (Terminée/En cours)|
And je peux filtrer par date, participants, statut
Scenario: Analyse d'une session spécifique
When je clique sur la session du "15/10/2025"
Then je vois le détail de toutes les stories estimées
And pour chaque story, je vois:
| Détails affichés |
| Titre de la story |
| Votes de chaque participant |
| Nombre de rounds de vote |
| Estimation finale retenue|
| Temps passé sur cette story|
And je peux exporter les données au format CSV
Scenario: Comparaison estimation vs réalité
Given des stories estimées ont été réalisées
When je consulte le rapport "Estimation vs Réalité"
Then je vois un tableau comparatif:
| Story | Estimation | Temps réel | Écart |
| Consulter le solde | 5 points | 6 points | +20% |
| Effectuer un virement| 8 points | 8 points | 0% |
And je vois un graphique de tendance des écarts
And je peux identifier les patterns d'écart pour améliorer
Epic 5 - Sprints et Releases
US-050 : Création d'une Release avec roadmap
Feature: Planification des Releases
En tant que Product Owner
Je veux créer une Release avec nom, objectif, dates et roadmap
Afin de planifier à moyen terme
Background:
Given je suis Product Owner du produit "Application Mobile Banking"
And je suis sur la page "Releases"
Scenario: Création d'une Release
When je clique sur "Créer une Release"
And je remplis le formulaire avec:
| Champ | Valeur |
| Nom | Release 1.0 - MVP |
| Objectif | Livrer les fonctionnalités bancaires de base|
| Date début | 01/11/2025 |
| Date fin | 31/12/2025 |
| Nombre sprints | 4 |
And je sélectionne les Epics inclus:
| Epic |
| Gestion des comptes bancaires |
| Virements et paiements |
And je clique sur "Créer"
Then la Release "Release 1.0 - MVP" est créée
And elle apparaît dans la roadmap produit
And 4 sprints de 2 semaines sont générés automatiquement
And je peux maintenant assigner des stories aux sprints de cette release
Scenario: Visualisation de la roadmap visuelle
Given 3 Releases sont planifiées
When j'ouvre la vue "Roadmap"
Then je vois une timeline avec les 3 releases
And chaque release affiche: nom, dates, progression (%)
And les Epics inclus dans chaque release sont visibles
And je peux zoomer sur une release pour voir les sprints
US-051 : Création d'un Sprint
Feature: Gestion des Sprints
En tant que Scrum Master
Je veux créer un Sprint avec durée, dates et capacité équipe
Afin de cadrer l'itération
Background:
Given je suis Scrum Master du produit "Application Mobile Banking"
And la "Release 1.0 - MVP" existe
And je suis sur la page "Sprints"
Scenario: Création d'un Sprint dans une Release
When je clique sur "Créer un Sprint"
And je remplis le formulaire avec:
| Champ | Valeur |
| Nom | Sprint 1 |
| Release | Release 1.0 - MVP|
| Date début | 01/11/2025 |
| Date fin | 14/11/2025 |
| Durée | 2 semaines |
| Capacité équipe | 40 points |
And je clique sur "Créer"
Then le "Sprint 1" est créé
And il est rattaché à la "Release 1.0 - MVP"
And la capacité de 40 points est définie
And je peux maintenant planifier les stories dans ce sprint
Scenario: Calcul automatique de la capacité
Given l'équipe contient:
| Membre | Disponibilité | Points/jour |
| Marc Dubois | 100% | 2 |
| Julie Petit | 100% | 2 |
| Sophie Martin | 80% (SM) | 1.6 |
And le sprint dure 10 jours ouvrés
When je clique sur "Calculer la capacité automatiquement"
Then la capacité suggérée est (2+2+1.6) * 10 = 56 points
And je peux ajuster manuellement si nécessaire
US-052 : Définition d'un Sprint Goal
Feature: Sprint Goal (Objectif de Sprint)
En tant que Product Owner
Je veux définir un Sprint Goal clair et mesurable
Afin d'aligner l'équipe sur l'objectif de l'itération
Background:
Given le "Sprint 1" est créé
And je suis dans la vue de planification du Sprint 1
Scenario: Définition du Sprint Goal
When je clique sur "Définir le Sprint Goal"
And je saisis l'objectif "Les utilisateurs peuvent consulter leurs comptes et effectuer des virements simples"
And j'ajoute les critères de succès:
| Critère |
| Consultation du solde fonctionnelle |
| Virement entre comptes propres fonctionnel |
| Tests d'acceptation passés à 100% |
| Démonstration réussie au Product Owner |
And je clique sur "Enregistrer"
Then le Sprint Goal est défini
And il est affiché en haut du board Sprint
And il est visible par tous les membres de l'équipe
And il sert de référence pour le Sprint Planning et la Review
Scenario: Validation du Sprint Goal en Daily
Given le Sprint Goal est "Les utilisateurs peuvent consulter leurs comptes"
And nous sommes au jour 5 du sprint
When l'équipe fait le daily stand-up
Then chaque membre indique si son travail contribue au Sprint Goal
And les blocages sont priorisés selon leur impact sur le Sprint Goal
US-053 : Sélection des stories pour le sprint backlog
Feature: Planning du Sprint Backlog
En tant que membre d'équipe
Je veux sélectionner des stories du product backlog vers le sprint backlog
Afin de définir le périmètre du sprint lors du planning
Background:
Given nous sommes en Sprint Planning pour le "Sprint 1"
And la capacité du sprint est 40 points
And le product backlog contient des stories estimées
And je suis sur la vue "Sprint Planning"
Scenario: Ajout de stories au sprint backlog
Given le sprint backlog est vide (0 points)
When je sélectionne les stories suivantes depuis le product backlog:
| Story | Points |
| Consulter le solde | 5 |
| Effectuer un virement simple | 8 |
| Consulter l'historique | 5 |
| Notifications push | 8 |
And je les glisse dans la zone "Sprint Backlog"
Then les 4 stories sont ajoutées au sprint
And le total des points est 26/40
And un indicateur visuel montre qu'il reste 14 points de capacité
Scenario: Avertissement de sur-engagement
Given le sprint backlog contient 38 points
When je tente d'ajouter une story de 8 points
Then un avertissement "Attention: capacité dépassée (46/40)" s'affiche
And je peux quand même ajouter la story si l'équipe est d'accord
And une note est enregistrée pour analyse en rétrospective
Scenario: Engagement de l'équipe sur le périmètre
Given le sprint backlog contient 38 points
And toutes les stories sont clairement comprises
When le Scrum Master demande "L'équipe s'engage-t-elle sur ce périmètre ?"
And tous les membres votent "Oui"
And je clique sur "Valider et démarrer le sprint"
Then le sprint passe au statut "En cours"
And les stories du sprint backlog deviennent disponibles sur le board
And la date de début officielle est enregistrée
US-054 : Décomposition des User Stories en tâches
Feature: Décomposition en tâches techniques
En tant que développeur
Je veux décomposer une User Story en tâches techniques
Afin de faciliter l'exécution et le suivi
Background:
Given la User Story "Consulter le solde" (5 points) est dans le sprint backlog
And je suis sur la page de détail de cette story
Scenario: Création de tâches techniques
When je clique sur "Décomposer en tâches"
And je crée les tâches suivantes:
| Titre de la tâche | Estimation | Assigné à |
| Créer l'endpoint GET /accounts/:id/balance | 4h | Marc Dubois |
| Implémenter le service de récupération | 3h | Marc Dubois |
| Créer le composant Angular d'affichage | 4h | Julie Petit |
| Ajouter les tests unitaires backend | 2h | Marc Dubois |
| Ajouter les tests E2E | 3h | Julie Petit |
And je clique sur "Enregistrer les tâches"
Then les 5 tâches sont créées et rattachées à la story
And le total estimé est 16 heures
And chaque tâche apparaît sur le board avec la story parente
And les développeurs peuvent mettre à jour le statut de chaque tâche
Scenario: Suivi de la progression via les tâches
Given la story "Consulter le solde" a 5 tâches
And 3 tâches sont "Done", 1 est "In Progress", 1 est "To Do"
When je consulte la story
Then un indicateur de progression affiche "3/5 tâches terminées (60%)"
And la story reste "In Progress" tant que toutes les tâches ne sont pas terminées
US-055 : Mise à jour du statut des tâches sur le board Kanban
Feature: Board Kanban du Sprint
En tant que membre d'équipe
Je veux mettre à jour le statut des tâches et stories sur le board Kanban par drag & drop
Afin de refléter l'avancement en temps réel
Background:
Given le "Sprint 1" est en cours
And je suis sur le board Kanban du sprint
And le board contient les colonnes: To Do | In Progress | Review | Done
Scenario: Démarrage d'une tâche
Given la tâche "Créer l'endpoint GET /accounts/:id/balance" est dans "To Do"
When je fais glisser cette tâche vers "In Progress"
Then la tâche change de colonne
And elle est automatiquement assignée à moi si elle ne l'était pas
And un timestamp "Démarré le XX/XX à XXh" est enregistré
And les autres membres voient le changement en temps réel
Scenario: Respect des WIP limits
Given la colonne "In Progress" a un WIP limit de 3
And elle contient déjà 3 tâches
When je tente de glisser une 4ème tâche vers "In Progress"
Then un avertissement "WIP limit atteint (3/3)" s'affiche
And le déplacement est bloqué
And un message me suggère "Terminez une tâche avant d'en démarrer une nouvelle"
Scenario: Passage en review
Given la tâche "Créer le composant Angular" est dans "In Progress"
And j'ai terminé le développement
When je la glisse vers "Review"
Then la tâche change de colonne
And une notification est envoyée au reviewer désigné (ou au PO)
And un commentaire automatique "Prêt pour review - @Sophie" est ajouté
Scenario: Validation et passage en Done
Given la tâche est dans "Review"
And Sophie a validé le code review
When Sophie glisse la tâche vers "Done"
Then la tâche est marquée comme terminée
And un timestamp "Terminé le XX/XX à XXh" est enregistré
And si toutes les tâches de la story sont "Done", la story passe aussi "Done"
US-056 : Consultation du burndown chart
Feature: Burndown Chart du Sprint
En tant que Product Owner
Je veux consulter le burndown chart du sprint en cours
Afin de suivre la progression et détecter les risques
Background:
Given le "Sprint 1" est en cours (jour 7/10)
And le sprint contenait 40 points initialement
And je suis sur la page du "Sprint 1"
Scenario: Affichage du burndown chart
When je clique sur l'onglet "Burndown"
Then je vois un graphique avec:
| Éléments affichés |
| Axe X: Jours du sprint (1 à 10)|
| Axe Y: Points restants |
| Ligne idéale (droite descendante de 40 à 0)|
| Ligne réelle (points restants par jour) |
And le graphique montre qu'au jour 7, il reste 18 points
And la ligne idéale indique qu'il devrait rester 12 points
And un écart de +6 points est identifié
Scenario: Interprétation des tendances
Given le burndown montre un écart de +6 points au jour 7
When je consulte l'analyse de tendance
Then une alerte "Risque de non-atteinte du Sprint Goal" s'affiche
And une projection indique "À ce rythme, 8 points resteront en fin de sprint"
And des suggestions sont proposées:
| Suggestion |
| Reporter une story de 8 points au prochain sprint|
| Identifier et lever les blocages |
| Augmenter la capacité (heures sup, aide externe) |
Scenario: Zoom sur une journée spécifique
When je clique sur le point du jour 5
Then je vois le détail de ce jour:
| Détails affichés |
| Points brûlés: 3 |
| Stories terminées: 1 |
| Événements: Daily stand-up|
And je peux voir les stories terminées ce jour-là
US-057 : Clôture du sprint et génération du rapport
Feature: Clôture de Sprint
En tant que Scrum Master
Je veux clôturer un sprint et générer automatiquement le rapport
Afin de documenter les résultats et la vélocité
Background:
Given le "Sprint 1" est en cours
And nous sommes au dernier jour du sprint (jour 10/10)
And la Sprint Review a eu lieu
And je suis sur la page du "Sprint 1"
Scenario: Clôture d'un sprint réussi
Given 38 points sur 40 ont été complétés
And 2 stories restent "In Progress"
When je clique sur "Clôturer le sprint"
And une modal me demande ce que je veux faire des stories non terminées
And je sélectionne "Reporter au Sprint 2" pour les 2 stories restantes
And je clique sur "Confirmer la clôture"
Then le sprint passe au statut "Terminé"
And les 2 stories non terminées sont déplacées vers le Sprint 2
And un rapport de sprint est généré automatiquement
Scenario: Génération automatique du rapport de sprint
Given le sprint vient d'être clôturé
When j'ouvre le "Rapport du Sprint 1"
Then je vois les métriques suivantes:
| Métrique | Valeur |
| Points planifiés | 40 |
| Points complétés | 38 |
| Taux de complétion | 95% |
| Vélocité | 38 points |
| Nombre de stories | 5 planifiées, 4 Done |
| Bugs créés pendant le sprint | 2 |
| Bugs résolus | 2 |
And je vois un burndown chart final
And je vois la liste des stories complétées avec lien vers les démos
And je peux exporter le rapport en PDF
Scenario: Calcul de la vélocité moyenne
Given les 3 derniers sprints ont les vélocités suivantes:
| Sprint | Vélocité |
| Sprint 1 | 38 |
| Sprint 2 | 42 |
| Sprint 3 | 40 |
When je consulte les statistiques d'équipe
Then la vélocité moyenne affichée est 40 points
And cette vélocité est suggérée pour le prochain sprint planning
US-058 : Report des stories non terminées
Feature: Gestion des stories non terminées
En tant que Product Owner
Je veux reporter les stories non terminées vers le prochain sprint ou le backlog
Afin de gérer proprement la fin de sprint
Background:
Given le "Sprint 1" se termine
And 2 stories sont restées "In Progress":
| Story | Points | Progression |
| Notifications push | 8 | 70% |
| Export des transactions | 5 | 30% |
Scenario: Report au prochain sprint
Given je suis en train de clôturer le "Sprint 1"
When la modal de clôture s'affiche
And je sélectionne "Reporter au Sprint 2" pour "Notifications push"
And je sélectionne "Reporter au Sprint 2" pour "Export des transactions"
And je confirme
Then les 2 stories sont déplacées dans le "Sprint 2"
And elles conservent leur estimation (8 et 5 points)
And elles conservent leurs tâches et commentaires
And un commentaire automatique indique "Reporté depuis Sprint 1"
Scenario: Report au product backlog
Given je suis en train de clôturer le "Sprint 1"
When la modal de clôture s'affiche
And je sélectionne "Renvoyer au product backlog" pour "Export des transactions"
And je saisis la raison "Priorité réévaluée à la baisse"
And je confirme
Then la story est retirée du sprint
And elle retourne dans le product backlog
And elle est repositionnée selon sa priorité
And un commentaire enregistre la raison du report
Scenario: Analyse des reports récurrents
Given "Export des transactions" a été reportée 2 fois
When je consulte l'historique de cette story
Then je vois un avertissement "Story reportée 2 fois"
And une analyse suggère:
| Suggestion |
| Story trop grosse ? Envisager de la découper |
| Dépendances bloquantes ? Identifier et résoudre |
| Estimation incorrecte ? Ré-estimer en équipe |
Epic 6 - Ceremonies Agile
US-070 : Organisation d’un Sprint Planning
Feature: Sprint Planning
En tant que Scrum Master
Je veux organiser un Sprint Planning avec ordre du jour et participants
Afin de structurer la cérémonie et définir le périmètre du sprint
Background:
Given le "Sprint 2" démarre demain
And je suis Scrum Master du produit "Application Mobile Banking"
And les stories du backlog sont prêtes (refinement terminé)
And l’équipe est au complet (PO, SM, Devs)
Scenario: Planification d’un Sprint réussie
When je planifie la réunion "Sprint Planning"
And j’invite tous les membres de l’équipe
And je partage l’ordre du jour suivant:
| Étape | Objectif |
| 1 | Rappel du Sprint Goal précédent |
| 2 | Sélection des stories |
| 3 | Estimation de la capacité équipe |
| 4 | Définition du Sprint Goal |
Then la réunion est enregistrée dans le calendrier d’équipe
And tous les participants reçoivent une invitation automatique
And la salle virtuelle de réunion est configurée (Teams/Zoom)
Scenario: Sélection des stories adaptées à la capacité
Given le backlog contient 15 stories prêtes
And la capacité estimée de l’équipe est de 40 points
When l’équipe sélectionne les stories les plus prioritaires jusqu’à 38 points
Then le "Sprint Goal" est défini autour de ces stories
And le backlog du sprint est validé et publié
US-071 : Daily Stand-up (Mêlée quotidienne)
Feature: Daily Stand-up
En tant que membre d’équipe
Je veux enregistrer mon compte-rendu daily
Afin de maintenir la transparence et identifier les blocages rapidement
Background:
Given le "Sprint 2" est en cours (jour 5/10)
And la réunion daily est planifiée chaque jour à 9h30
And je suis connecté à la plateforme de l’équipe
Scenario: Conduite d’un Daily structuré
When le Scrum Master démarre la réunion
And chaque membre répond aux trois questions :
| Question |
| Que faisais-tu hier ? |
| Que feras-tu aujourd’hui ? |
| As-tu des blocages ? |
Then chaque réponse est enregistrée dans le journal du sprint
And le tableau Kanban est mis à jour avec les tâches concernées
And les blocages identifiés sont notifiés au Scrum Master
Scenario: Dépassement de la durée maximale
Given la réunion dure depuis 20 minutes
When le Scrum Master constate un hors-sujet
Then il clôture le daily à 15 minutes
And les discussions annexes sont planifiées dans une autre réunion
US-072 : Historique des Daily Stand-ups
Feature: Historique des Daily Meetings
En tant que Scrum Master
Je veux consulter l’historique des Daily
Afin d’identifier les tendances et blocages récurrents
Background:
Given l’équipe a complété 7 Dailies sur 10 jours de sprint
And un journal de daily est enregistré automatiquement
Scenario: Consultation de l’historique
When je consulte la section "Historique des Dailies"
Then je vois les entrées suivantes :
| Date | Points bloquants | Stories impactées |
| 12/10/2025 | API lente | Virement bancaire |
| 13/10/2025 | Blocage QA | Authentification |
And je peux filtrer par membre ou par story
Scenario: Détection de blocages récurrents
When je lance l’analyse des blocages
Then le système me signale une récurrence sur le module "API Comptes"
And propose une action corrective "Pair Programming ou revue technique"
US-073 : Organisation d’une Sprint Review
Feature: Sprint Review
En tant que Product Owner
Je veux organiser une Sprint Review à la fin du sprint
Afin de présenter les incréments livrés et recueillir les feedbacks
Background:
Given le "Sprint 2" se termine demain
And les stories suivantes sont terminées :
| Story | Points | Statut |
| Consultation solde | 5 | Done |
| Historique transactions | 8 | Done |
Scenario: Planification de la Sprint Review
When je crée une réunion "Sprint Review"
And j’invite le client et les parties prenantes
And j’ajoute les stories Done à l’ordre du jour
Then la réunion est enregistrée avec ordre du jour clair
And tous les participants reçoivent les invitations
Scenario: Déroulement réussi de la Review
Given la review débute avec PO, SM, Devs et stakeholders
When le Scrum Master anime la démonstration des incréments
And le Product Owner recueille les retours clients
Then chaque feedback est enregistré dans la section "Actions à suivre"
And la satisfaction client est notée en fin de réunion
US-074 : Réalisation de la Rétrospective
Feature: Sprint Retrospective
En tant que Scrum Master
Je veux animer une rétrospective de sprint
Afin d’améliorer le processus par l’analyse collective des améliorations
Background:
Given le "Sprint 2" est terminé
And la Sprint Review a été réalisée
And je suis sur la page "Rétrospective"
Scenario: Animation d’une rétrospective Start/Stop/Continue
When je sélectionne le format "Start / Stop / Continue"
And chaque membre ajoute ses notes :
| Type | Note |
| Start | Faire des tests pairés |
| Stop | Lancer trop de stories à la fois|
| Continue| Daily concis |
Then les notes sont visibles par tous
And le Scrum Master anime le regroupement par thèmes
And les membres votent sur les points prioritaires à traiter
Scenario: Définition d’actions d’amélioration
Given les votes sont terminés
When je clique sur "Créer actions d’amélioration"
Then les actions suivantes sont créées :
| Action | Responsable | Sprint cible |
| Réduire WIP à 2 par dev | Sophie Martin | Sprint 3 |
| Ajouter tests unitaires | Marc Dubois | Sprint 3 |
And ces actions sont suivies comme stories techniques
US-075 : Suivi des actions d’amélioration
Feature: Suivi des actions rétrospectives
En tant que Scrum Master
Je veux suivre les actions décidées en rétrospective
Afin de vérifier qu’elles sont mises en œuvre dans les prochains sprints
Background:
Given 3 actions ont été décidées à la rétrospective du Sprint 2
And chacune a un responsable
And le "Sprint 3" a commencé
Scenario: Suivi d’avancement des actions
When j’ouvre le tableau "Actions d’amélioration"
Then je vois les statuts suivants :
| Action | Responsable | Statut |
| Réduire WIP à 2 par dev | Sophie Martin | En cours |
| Ajouter tests unitaires | Marc Dubois | Done |
And le pourcentage global d’avancement est calculé
Scenario: Clôture d’une action
Given l’action "Ajouter tests unitaires" est Done
When je clique sur "Clôturer"
Then l’action est archivée avec sa date de réalisation
And elle apparaît dans l’historique des rétrospectives
US-076 : Historique et récurrence des rétrospectives
Feature: Historique des rétrospectives
En tant que Scrum Master
Je veux conserver l’historique des rétrospectives
Afin d’analyser l’évolution continue de l’équipe
Background:
Given les rétrospectives des 5 derniers sprints sont archivées
And chaque rétrospective contient les actions et votes associés
Scenario: Consultation de l’historique complet
When je clique sur "Historique des rétrospectives"
Then je vois la liste des rétrospectives passées
And pour chacune :
| Sprint | Nombre d’actions | Taux réalisées |
| 1 | 3 | 100% |
| 2 | 3 | 66% |
| 3 | 4 | En cours |
And les thèmes récurrents sont identifiés automatiquement
Scenario: Détection de récurrences négatives
Given plusieurs rétrospectives mentionnent "Manque de tests"
When j’exécute l’analyse d’historiques
Then une alerte "Problème persistant identifié" s’affiche
And une story technique est suggérée : "Renforcer couverture de tests"
US-077 : Synchronisation automatique du calendrier Agile
Feature: Synchronisation du calendrier agile
En tant qu’équipe
Nous voulons synchroniser automatiquement les cérémonies
Afin d’assurer une visibilité complète sur le planning des sprints
Background:
Given le produit "Application Mobile Banking" suit une cadence de sprints de 2 semaines
And les cérémonies suivantes sont planifiées pour chaque sprint :
| Type | Fréquence |
| Sprint Planning | 1 fois par sprint |
| Daily | Tous les jours |
| Review | Fin de sprint |
| Rétrospective | Fin de sprint |
Scenario: Synchronisation avec l’agenda externe
When je configure l’intégration Google Calendar
And j’autorise la connexion
Then toutes les cérémonies futures apparaissent dans mon agenda
And les invitations sont envoyées aux membres concernés
Scenario: Mise à jour automatique des décalages
Given la date du sprint a été modifiée
When je décale la date de fin de 2 jours
Then toutes les cérémonies (Review et Rétrospective) sont automatiquement ajustées
And les invitations mises à jour sont renvoyées
Epic 7 – Dashboard et Reporting
US-080 : Tableau de bord produit
Feature: Tableau de bord produit
En tant que Product Owner
Je veux visualiser le dashboard produit avec les métriques clés
Afin de suivre la progression et la qualité du projet
Background:
Given le produit "Application Mobile Banking" contient 4 sprints terminés
And la vélocité moyenne est 40 points/sprint
And je suis sur la page "Dashboard Produit"
Scenario: Affichage des métriques globales
When je consulte le dashboard
Then je vois les indicateurs clés :
| Indicateur | Valeur |
| Stories terminées | 52 |
| Défauts ouverts | 8 |
| Vélocité moyenne | 40 pts |
| Satisfaction client moyenne | 4.6/5 |
And les graphiques burndown et burnup sont à jour
And le sprint actuel est mis en surbrillance
Scenario: Navigation vers les détails
Given je clique sur la partie "Défauts ouverts"
Then je suis redirigé vers la liste des bugs actifs
And le filtre "Statut: Ouvert" est appliqué automatiquement
US-081 : Calendrier des événements d’équipe
Feature: Calendrier des événements d’équipe
En tant que membre d’équipe
Je veux consulter le calendrier des événements équipe
Afin d’avoir une visibilité claire sur le planning des réunions et échéances
Background:
Given l’équipe "Mobile Banking" a planifié ses sprints, reviews et rétrospectives
And le calendrier est synchronisé avec Google Calendar
Scenario: Affichage du calendrier mensuel
When je clique sur l’onglet "Calendrier"
Then je vois tous les événements du sprint courant
| Type | Date |
| Daily stand-up | Tous les jours|
| Sprint Review | 31/10/2025 |
| Rétrospective | 31/10/2025 |
And chaque événement affiche l’heure, le lien visio, et les participants
Scenario: Notification d’un changement de planning
Given la Sprint Review est prévue pour le 31/10/2025
When le Scrum Master décale la réunion au 1/11/2025
Then tous les membres reçoivent une notification automatique
And le calendrier est mis à jour pour l’ensemble de l’équipe
US-082 : Export des rapports de sprint
Feature: Exportation de rapports
En tant que Product Owner
Je veux exporter les rapports de sprint au format PDF ou Excel
Afin de partager les résultats avec les parties prenantes externes
Background:
Given le "Sprint 5" est terminé
And je suis sur la page "Rapports de Sprint"
Scenario: Export d’un rapport PDF
When je clique sur "Exporter Rapport PDF"
Then le document est généré avec :
| Section |
| Objectif du Sprint |
| Stories terminées / en cours |
| Vélocité |
| Actions rétrospectives |
And le fichier "Sprint_5_Report.pdf" est téléchargé
And la date d’export est enregistrée dans l’historique
Scenario: Export Excel avec graphiques
When je sélectionne "Exporter en Excel"
Then un fichier ".xlsx" contenant les mêmes données est généré
And les graphiques burndown et vélocité sont intégrés dans les onglets
Epic 8 – Notifications et Collaboration
US-090 : Notifications en temps réel
Feature: Notifications en temps réel
En tant qu’utilisateur
Je veux recevoir des notifications instantanées
Afin d’être informé des changements importants dans les stories et tâches
Background:
Given le backend supporte WebSocket pour les notifications
And je suis connecté sur l’interface web
Scenario: Notification d’assignation de story
When le Scrum Master m’assigne la story "Optimiser le tableau de bord"
Then une notification "Vous avez été assigné à une story" s’affiche dans l’application
And un badge rouge s’affiche sur l’icône des notifications
And je peux cliquer dessus pour accéder directement à la story
Scenario: Notification de mention dans un commentaire
Given Sophie écrit "@Marc merci de vérifier les validations"
Then je reçois une notification "Sophie vous a mentionné dans un commentaire"
And la notification contient un lien vers la story concernée
US-091 : Configuration des préférences de notifications
Feature: Gestion des préférences de notification
En tant qu’utilisateur
Je veux configurer mes préférences de notification
Afin de choisir les canaux et types d’alertes que je reçois
Scenario: Modification des alertes reçues
Given je suis dans "Mes préférences → Notifications"
When je décoche "Emails de Daily Report"
And je coche "Notifications push pour mentions"
And je clique sur "Sauvegarder"
Then mes nouvelles préférences sont appliquées
And un message "Vos paramètres ont été enregistrés" s’affiche
Scenario: Activation des notifications Slack
Given une intégration Slack est configurée
When j’ajoute mon identifiant "@marc.dev"
And je clique "Activer"
Then les alertes "Sprint Review" et "Rétrospective" me sont envoyées sur Slack
Epic 9 – Intégrations Externes
US-100 : Synchronisation des commits Git avec stories
Feature: Synchronisation Git
En tant que développeur
Je veux synchroniser mes commits avec les stories
Afin de tracer le code source lié à chaque fonctionnalité
Scenario: Lien automatique via commit message
Given je pousse un commit avec le message "US-304: Ajout API solde compte"
When le pipeline CI/CD analyse le commit
Then le commit est lié automatiquement à la User Story US-304
And un lien "Voir commits" apparaît dans la story
US-101 : Import/export du backlog produit
Feature: Import/export backlog
En tant que Product Owner
Je veux exporter ou importer le backlog au format CSV/JSON
Afin de faciliter la migration ou la sauvegarde
Scenario: Exportation du backlog vers CSV
Given le backlog contient 25 stories
When je clique sur "Exporter CSV"
Then un fichier "backlog_2025-10.csv" est téléchargé
And le fichier contient les colonnes : ID, Titre, Type, Priorité, Points
Epic 10 – DevOps, Monitoring et Maintenance
US-120 : Monitoring applicatif avec Prometheus
Feature: Monitoring applicatif
En tant que DevOps
Je veux surveiller les performances via Prometheus
Afin de détecter les anomalies système
Scenario: Vérification des endpoints de health check
Given le service backend expose /actuator/health
When Prometheus collecte les données toutes les 15 secondes
Then les indicateurs up/down sont mis à jour
And des alertes Slack sont envoyées en cas de code HTTP 500
US-121 : Sauvegarde automatisée des bases
Feature: Sauvegarde quotidienne
En tant que DevOps
Je veux planifier des sauvegardes automatiques des bases
Afin de garantir la restauration en cas d’incident
Scenario: Exécution automatique de sauvegarde nocturne
Given la tâche cron "backup-db" s’exécute à 03h00 chaque jour
When la sauvegarde est terminée
Then un fichier backup_postgres_<date>.dump est stocké dans le dossier /backups
And une notification de succès est envoyée
And un test de restauration aléatoire est programmé chaque semaine
Epic 11 – Accessibilité et UX (Compléments)
US-110 : Navigation au clavier (Accessibilité WCAG)
Feature: Navigation clavier (WCAG 2.1)
En tant qu’utilisateur en situation de handicap
Je veux naviguer dans l’interface uniquement au clavier
Afin d’accéder à toutes les fonctionnalités sans souris
Scenario: Focus visible et clavier
Given je navigue dans l’application avec la touche "Tab"
When je passe d’un champ à un autre
Then le focus est visible (bordure bleue)
And aucun élément interactif n’est inaccessible au clavier
US-111 : Thème clair/sombre (Dark Mode)
Feature: Mode clair/sombre
En tant qu’utilisateur
Je veux basculer entre le thème clair et sombre
Afin d’améliorer mon confort visuel selon la luminosité
Scenario: Basculement en mode sombre
Given l’application est en thème clair
When je clique sur "Activer mode sombre"
Then tous les composants UI passent en teinte sombre
And le paramètre est enregistré dans mes préférences
Scenario: Retour automatique au thème clair
Given il est 08h00
When "Changement automatique jour/nuit" est activé
Then le thème clair est réactivé sans intervention manuelle
US-112 : Design responsive mobile
Feature: Responsive Design mobile
En tant qu’utilisateur
Je veux accéder aux principales fonctionnalités sur smartphone
Afin d’utiliser l’application en déplacement
Scenario: Chargement sur écran ≤ 768px
Given je me connecte depuis un mobile
When j’ouvre le tableau de bord
Then la structure passe en une seule colonne
And les menus latéraux deviennent des icônes dans la barre inférieure
US-113 : Onboarding interactif
Feature: Onboarding interactif
En tant que nouvel utilisateur
Je veux suivre un parcours d’accueil pour découvrir l’application
Afin de comprendre les fonctionnalités principales rapidement
Scenario: Affichage du tutoriel pas-à-pas
Given je me connecte pour la première fois
When l’onboarding démarre
Then je vois une série de 5 étapes :
| Étape | Message |
| 1 | Bienvenue dans AgileManage ! |
| 2 | Voici le tableau de bord |
| 3 | Gérons ensemble ton premier backlog |
| 4 | Découvre ton profil et préférences |
| 5 | Commence ton premier sprint ! |
Scenario: Relance de l’onboarding
Given j’ai déjà terminé le tutoriel
When je clique sur "Aide → Revoir le tutoriel"
Then le tutoriel recommence depuis l’étape 1
And mes anciennes préférences ne sont pas réinitialisées