Pourquoi « je n'arrive pas à reproduire » est presque toujours un problème d'étapes
De bonnes étapes de reproduction = un point de départ clair + une action par étape + des données réelles + ce que vous avez observé à chaque étape. Si quelqu'un peut les lire à voix haute et arriver sur le même écran, elles sont assez bonnes. Ci-dessous : 5 règles, un test de niveau de détail, 5 exemples complets (dont la rédaction d'un bug intermittent) et une checklist avant envoi.
Quand un développeur répond « je n'arrive pas à reproduire », c'est rarement de la mauvaise volonté. Il manque quelque chose dans les étapes, et c'est le plus souvent l'un de ces trois points :
+.En une phrase : les étapes ne sont pas un compte rendu pour vous, mais un itinéraire pour les autres.
5 règles pour des étapes qui fonctionnent
user+test@x.com, pas « une adresse e-mail ».Quel niveau de détail pour les étapes ?
| Niveau | Exemple | Problème |
|---|---|---|
| Trop grossier | « Ouvrir le paiement, supprimer un article, le compteur est faux » | Trois actions dans une phrase — impossible de savoir où ça casse |
| Juste | « 1. Aller sur /cart 2. Cliquer sur Supprimer à côté du produit 3. Regarder le badge en haut de page » |
Une action par étape, chacune vérifiable |
| Trop fin | « 1. Déplacer le pointeur sur le bouton 2. Appuyer sur le bouton gauche 3. Relâcher » | Des actions physiques découpées : plus difficile à lire, pas plus simple |
Le test : après rédaction, posez-vous deux questions. ① Quelqu'un d'autre peut-il arriver au même écran sans ma capture ? ② Un développeur peut-il dire en deux minutes s'il s'agit du front, de l'API ou des données ? Deux « oui » signifient que le niveau de détail est bon.
5 exemples complets
Exemple 1 : connexion et authentification (5 étapes)
Prérequis : compte test@example.com déjà inscrit et actif.
Environnement : Chrome 120 / macOS 14 / ordinateur / 1920×1080 / fenêtre de navigation privée.
https://app.example.com/logintest@example.com avec le mot de passe correctAttendu : un message « Captcha incorrect, veuillez réessayer », le compte restant déverrouillé. Obtenu : le message « Compte verrouillé, réessayez dans 24 heures » — alors que le captcha était correct.
Exemple 2 : paiement et codes promo (6 étapes)
Prérequis : 2 articles dans le panier pour un total de 1 299 € ; compte de type entreprise. Environnement : Chrome 120 / Windows 11 / ordinateur / 1440×900 / compte entreprise.
/cart et vérifier que le total est de 1 299 €SAVE100 dans le champ dédié (expiré depuis trois jours)Attendu : un message « code promo expiré », panier inchangé. Obtenu : le message « code appliqué » et 100 € sont déduits ; au clic sur « Appliquer », les deux articles disparaissent du panier.
Exemple 3 : tactile sur mobile (5 étapes)
Prérequis : connecté, 1 article dans le panier. Environnement : iPhone 14 / iOS 17.2 / Safari / viewport 390×844.
https://shop.example.com/cartAttendu : le bouton remonte au-dessus du clavier et reste cliquable. Obtenu : le clavier masque environ 60 % du bouton, et les appuis dans cette zone restent sans effet.
Exemple 4 : API et données (4 étapes)
Prérequis : jeton d'environnement de test disponible ; la base contient 12 400 commandes, dont 12 correspondent au mot-clé.
Environnement : https://api-test.example.com / curl 8.x.
GET /api/orders/export?month=2026-08 avec l'en-tête Authorization: Bearer <token>month=2026-08-01~2026-08-07Attendu : 200 avec un identifiant de tâche d'export, ou 202 si la tâche est mise en file. Obtenu : 504 (timeout de passerelle) ; avec une plage réduite, 200 est renvoyé — le seuil dépend donc du volume de données.
Exemple 5 : bug intermittent (avec probabilité et timing)
Prérequis : compte sans solde ; carte de test associée à l'utilisateur de test. Environnement : Chrome 120 / macOS 14 / réseau bridé en 3G.
/checkout et renseigner les informations de paiementAttendu : une seule commande créée ; les clics répétés doivent être dédupliqués côté client ou bloqués par l'idempotence de l'API.
Obtenu : 3 fois sur 10, deux commandes ont été créées (conditions : intervalle <500ms et latence réseau >1s). L'enregistrement du panneau Network et les identifiants des deux appels POST /api/orders sont joints.
Comment rédiger un bug intermittent :
- Donnez une probabilité, pas le mot « intermittent » : « 3 fois sur 10 » est cent fois plus utile.
- Donnez le timing ou le seuil : « intervalle <500ms », « latence >1s » — ces conditions sont souvent l'indice de la cause.
- Donnez le type de preuve : l'enregistrement d'écran et les logs console sont les seules preuves durables qu'un bug intermittent peut emporter.
7 erreurs qui rendent vos étapes inutilisables
Checklist avant envoi
- Prérequis écrits (état de connexion + état des données) ?
- La première étape est une action métier, pas « ouvrir un navigateur » ?
- Exactement une action par numéro ?
- Des valeurs réelles plutôt que des génériques ?
- Observations notées après les étapes clés ?
- Résultat attendu et résultat obtenu séparés ?
- Pour un bug intermittent : probabilité et timing indiqués ?
FAQ
Combien d'étapes doit comporter une reproduction ?
En général 3 à 8. Moins de 3 signifie souvent des prérequis manquants ; plus de 8 peut presque toujours être raccourci — déplacez la navigation dans les prérequis et ne gardez que les actions qui déclenchent le problème.
L'environnement va-t-il dans les étapes ou dans un champ dédié ?
Dans un champ dédié. Placé dans les étapes, il casse le rythme de lecture et devient infiltrable. Si le format n'a pas de champ environnement (un e-mail, par exemple), déclarez-le sur une ligne en tête des étapes : « Environnement : Chrome 120 / macOS 14 / 1920×1080 ».
Faut-il inclure des actions inutiles comme « cliquer sur Retour » ou « fermer la popup » ?
Uniquement si elles font partie des conditions de reproduction. Testez : supprimez l'étape — le bug se produit-il toujours ? Si oui, retirez-la ; si non, elle doit rester.
Comment rédiger les étapes d'un bug que je n'arrive pas à reproduire moi-même ?
Écrivez honnêtement trois choses : ① les conditions essayées (quelles tentatives ont marché, lesquelles non) ; ② la meilleure preuve disponible (enregistrement, logs console, requêtes réseau) ; ③ les corrélations observées (« seulement quand le réseau est lent »). Marquez « conditions de reproduction non confirmées » dans le titre ou les notes, plutôt que de faire passer le bug pour systématique.
Quelle différence entre étapes de reproduction et cas de test ?
Un cas de test est une checklist conçue à l'avance — couvrant chemins nominaux, limites et exceptions, dans une logique de couverture. Les étapes de reproduction sont un chemin consigné après coup, dont le seul but est de rejouer le problème de façon fiable. Les deux s'enrichissent mutuellement, mais les objectifs diffèrent — pour la rédaction des cas de test, voir modèle de cas de test avec exemples.
Les étapes, c'est vous. Les preuves peuvent être automatiques.
Les étapes doivent venir de la personne qui a cliqué — vous seul savez ce que vous avez fait. En revanche, l'environnement et les preuves qui les accompagnent peuvent se remplir seuls :
- Enregistrement d'écran : capture de l'onglet courant en un clic, avec découpe, pour que même les bugs intermittents emportent une preuve rejouable.
- Données de diagnostic : les logs console de niveau erreur et les requêtes réseau en échec (HTTP ≥ 400) sont collectés, avec anonymisation des paramètres sensibles.
- Contexte technique automatique : URL, navigateur, OS, résolution et viewport sont renseignés pour vous.
- Captures annotées : sélectionnez une zone et ajoutez flèches, cadres et texte pour figer le problème.
- Partager ou synchroniser : générez un lien de partage ouvrable sans inscription, ou poussez le rapport vers Feishu Bitable ou un webhook générique.
Pour aller plus loin
- Format de rapport de bug : la spécification des 10 champs
- Modèle de rapport de bug : un squelette à copier avec un exemple rempli
- Exemples de titres de bug : 40 bons et mauvais titres comparés
- Modèle de cas de test avec exemples
- Signaler les bugs efficacement