Retour au blog
Technical Specs

📋 User Stories Gherkin: Pourquoi 90% Échouent

18 janvier 2025
7 min de lecture
Partager:
📋

Les user stories vagues frustrent tout le monde. Découvre comment le format Gherkin + test scenarios + edge cases change la donne.

La user story qui a tout cassé

Il y a 3 ans, je travaillais sur un SaaS de gestion de stock. Le PM avait écrit cette user story :

US-42: "En tant qu'utilisateur, je veux filtrer mes produits pour trouver facilement ce que je cherche."

Le dev a passé 2 semaines à build une feature magnifique : filtres par catégorie, prix, date, couleur...

Le jour du review, le PM :

"Euh... je voulais juste une search bar. Pas tout ça."

Résultat :

  • ✗ 2 semaines perdues
  • ✗ Dev frustré ("pourquoi tu m'as pas dit clairement ?")
  • ✗ PM frustré ("j'ai écrit une user story, t'avais qu'à lire !")
  • ✗ Feature à refaire from scratch

Le problème : Les user stories sont trop vagues

La structure standard des user stories, c'est ça :

En tant que [rôle],

Je veux [action],

Afin de [bénéfice].

C'est joli sur le papier, mais ça laisse 1000 questions sans réponse :

  • 🤔 Comment ça marche exactement ?
  • 🤔 Qu'est-ce qui se passe si l'utilisateur fait X ?
  • 🤔 Quels sont les edge cases ?
  • 🤔 Comment je teste ça ?

La solution : Format Gherkin + 5 sections révolutionnaires

Voici la structure qu'on utilise chez CharliA (inspirée de ce que j'ai vu chez Google/Spotify) :

Structure User Story v2.2 (RÉVOLUTIONNAIRE)

1. User Story classique

US-42: Filtrer produits par catégorie

En tant que gérant de boutique,

Je veux filtrer mes produits par catégorie,

Afin de retrouver rapidement un produit spécifique.

2. Gherkin (Given/When/Then)

Given je suis sur la page "Produits"

When je sélectionne la catégorie "Électronique"

Then seuls les produits de catégorie "Électronique" sont affichés

And le compteur affiche "23 produits trouvés"

3. Test Scenarios (3-5 tests)

Test 1: Filtrer par 1 catégorie → affiche uniquement cette catégorie

Test 2: Filtrer par catégorie vide → message "Aucun produit dans cette catégorie"

Test 3: Combiner filtres catégorie + prix → intersection des 2 filtres

Test 4: Reset filtres → retour liste complète

4. Edge Cases (4-6 cas limites)

⚠️ Edge 1: Catégorie supprimée pendant que filtre actif → afficher erreur graceful

⚠️ Edge 2: 10,000+ produits dans catégorie → pagination automatique (50/page)

⚠️ Edge 3: Caractères spéciaux dans nom catégorie → sanitize input

⚠️ Edge 4: Offline mode → cache derniers filtres, sync au retour online

5. Tech Hints (Indices implémentation)

💡 Frontend: React Query pour cache + URL params pour persistance filtres

💡 Backend: Indexed DB query sur category_id (already indexed)

💡 Performance: Debounce 300ms si filtres multiples

💡 Accessibility: aria-label sur dropdowns, keyboard navigation (Tab + Enter)

Avant/Après : La différence qui change tout

❌ User Story AVANT (classique)

US-42: Filtrer produits

"En tant qu'utilisateur, je veux filtrer mes produits pour retrouver ce que je cherche."

Problèmes :

  • • Quels filtres exactement ?
  • • Comment ça marche si catégorie vide ?
  • • Comment je teste ?
  • • Quid de la perf si 10K produits ?

✅ User Story APRÈS (v2.2)

US-42: Filtrer produits par catégorie

Structure complète : Gherkin + 4 test scenarios + 4 edge cases + tech hints (React Query, indexed DB)

Résultats :

  • ✓ Dev sait exactement quoi build
  • ✓ Test scenarios = tests auto prêts
  • ✓ Edge cases couverts dès le début
  • ✓ Tech hints = pas de mauvaises décisions archi

Impact réel : -50% bugs, -30% dev time

Depuis qu'on utilise ce format chez mes clients, voici les métriques :

  • 📉 -50% de bugs en prod (edge cases anticipés dès les specs)
  • -30% de dev time (dev ne perd pas de temps à deviner)
  • 🎯 100% d'alignement PM/Dev/QA (tout le monde lit la même chose)
  • 🧪 Tests auto écrits en 10 min (scenarios = tests Cypress direct)

Comment CharliA génère ces user stories

CharliA ne génère pas des user stories vagues. Chaque user story suit ce format v2.2 :

  • Gherkin automatique (Given/When/Then/And)
  • 3-5 test scenarios par user story
  • 4-6 edge cases anticipés (offline, perf, erreurs...)
  • Tech hints adaptés à ton stack (React, Vue, Angular...)
  • Acceptance criteria mesurables

Template : Copie-colle ce format maintenant

US-[ID]: [Titre court de la feature]

📝 User Story
En tant que [rôle],
Je veux [action],
Afin de [bénéfice mesurable].

🥒 Gherkin
Given [contexte initial]
When [action utilisateur]
Then [résultat attendu]
And [résultat secondaire]

🧪 Test Scenarios
1. [Scénario nominal - happy path]
2. [Scénario avec données manquantes]
3. [Scénario avec données invalides]
4. [Scénario de performance (1000+ items)]

⚠️ Edge Cases
1. [Cas limite réseau/offline]
2. [Cas limite données (null, empty, huge)]
3. [Cas limite permissions]
4. [Cas limite concurrence/race conditions]

💡 Tech Hints
- Frontend: [Lib/pattern recommandé]
- Backend: [API endpoint + méthode]
- DB: [Query optimization]
- Perf: [Cache, debounce, lazy load...]
- A11y: [ARIA labels, keyboard nav]

✅ Acceptance Criteria
- [ ] Tous les test scenarios passent
- [ ] Edge cases couverts
- [ ] Tests E2E écrits (Cypress/Playwright)
- [ ] Performance <200ms (p95)
- [ ] Accessibility score >90 (Lighthouse)
        

Acceptance Criteria : La Clé de Voûte des User Stories

Les acceptance criteria (ou critères d'acceptation) sont ce qui transforme une user story vague en spécification testable. Sans eux, impossible de savoir quand une feature est "finie".

Qu'est-ce que les Acceptance Criteria ?

Les acceptance criteria définissent les conditions minimales qu'une feature doit remplir pour être considérée comme terminée. Ils répondent à la question : "Comment je sais que c'est fini ?"

💡 Acceptance Criteria vs Test Scenarios

Les acceptance criteria sont des règles métier ("Le panier doit afficher le total TTC"). Les test scenarios sont des cas de test ("Ajouter 3 produits → vérifier total = somme des prix").

Les 3 Types d'Acceptance Criteria

📋 Fonctionnels

Comportements attendus du système.

Ex: "Le filtre affiche uniquement les produits de la catégorie sélectionnée"

⚡ Non-fonctionnels

Performance, sécurité, accessibilité.

Ex: "Temps de réponse < 200ms (p95)"

🔒 Règles métier

Contraintes business.

Ex: "Un utilisateur gratuit ne peut créer que 3 projets"

Format INVEST pour des Acceptance Criteria de Qualité

Tes acceptance criteria doivent être INVEST :

I Independent Testable isolément
N Negotiable Peut être discuté avec le dev
V Valuable Apporte de la valeur utilisateur
E Estimable Peut être chiffré en temps/effort
S Small Assez petit pour être testé rapidement
T Testable Peut être vérifié objectivement

Exemple Complet : Acceptance Criteria en Gherkin

US-42: Filtrer produits par catégorie

✅ Acceptance Criteria :

AC1: Quand l'utilisateur sélectionne une catégorie, seuls les produits de cette catégorie sont affichés

AC2: Le compteur affiche le nombre de produits correspondant ("X produits")

AC3: Si aucun produit dans la catégorie, afficher "Aucun produit trouvé" avec lien vers toutes les catégories

AC4: Le filtre peut être combiné avec la recherche texte (intersection)

AC5: Temps de réponse < 200ms pour 1000 produits

AC6: Accessible au clavier (Tab + Enter pour sélectionner)

🚨 Acceptance Criteria ANTI-PATTERNS

  • Trop vague : "Le filtre doit bien fonctionner" → Pas testable
  • Trop technique : "Utiliser Redux pour state management" → C'est un détail d'implémentation
  • Non mesurable : "Le filtre doit être rapide" → Rapide = combien exactement ?
  • Scope creep : "Le filtre doit aussi gérer les favoris" → Nouvelle user story

Definition of Done vs Acceptance Criteria

Acceptance Criteria

Spécifiques à cette user story

  • • Le filtre affiche les bons produits
  • • Le compteur est à jour
  • • Performance < 200ms

Definition of Done (DoD)

Applicables à toutes les stories

  • • Code review passée
  • • Tests unitaires écrits
  • • Documentation mise à jour
  • • Déployé en staging

Action item : Réécris 1 user story maintenant

Choisis la user story la plus vague de ton backlog. Celle qui fait dire "WTF" à ton dev.

Réécris-la avec ce format. Ajoute Gherkin, test scenarios, edge cases, tech hints.

Montre-la à ton dev. Il va t'aimer. Promis.

Charlia

Prêt à appliquer ces conseils ?

CharliA génère tout ce dont tu as besoin en 180 secondes

Essayer gratuitement