Blog Metlivi

Comment maintenir testables les histoires de jeux à embranchements

Lorsqu'une histoire à embranchements s'étoffe, testez les décisions et les changements d'état qui modifient le comportement des parcours, plutôt que chaque itinéraire possible sous la forme d'un script de bout en bout distinct. Modélisez la narration sous forme de graphe, définissez les conditions et les résultats de chaque décision, et concevez une suite de tests restreinte couvrant les transitions critiques, les points de convergence et les échecs. Utilisez ensuite un échantillonnage d'itinéraires basé sur les risques ainsi que des tests de jeu humains pour repérer les anomalies que les vérifications structurées ne peuvent évaluer. Cela offre aux concepteurs narratifs et aux équipes d'AQ une méthode reproductible pour détecter les défauts sans prétendre à une couverture exhaustive de tous les chemins.

27 septembre 20267 min de lectureLecture, arts et culturePar Metlivi Editorial Team
Section 1

Commencer par un graphe qui enregistre les comportements

Représentez chaque passage ou scène jouable sous la forme d'un nœud et chaque choix comme une arête orientée. Annotez les arêtes avec leurs conditions et leurs effets : par exemple, `has_key = true` active « Déverrouiller la grille », ce qui applique `gate_open = true`. Indiquez explicitement les fins, les boucles et les points de convergence. Un point de convergence correspond à l'endroit où des embranchements distincts se rejoignent ; c'est un point de contrôle précieux pour vérifier que l'histoire peut se poursuivre à partir d'historiques multiples sans conserver d'états indésirables.

Le graphe doit refléter ce que le jeu évalue réellement, et pas seulement la structure du texte. Notez quelles variables un choix lit, lesquelles il modifie, et quels nœuds ultérieurs en dépendent. Incluez les valeurs par défaut, les règles de réinitialisation et les effets à usage unique. Si un indicateur (flag) est activé dans une branche et n'est jamais effacé, cela peut être intentionnel ; le documenter rend cette conséquence visible pour la révision et les tests.

Cette structure aide également à repérer les points de décision faciles à négliger dans un script volumineux. Un article de 2024 d'Alexey Tikhonov étudie la détection des points de décision des personnages dans les récits à embranchements et propose un ensemble de données basé sur les graphes de jeux de type Livres dont vous êtes le héros. Ses travaux portent sur l'identification des points de décision narrative et non sur la validation d'une méthode d'assurance qualité ; ils peuvent guider les équipes dans l'inventaire des choix, mais ne démontrent pas l'efficacité de l'approche de test présentée ici. [Tikhonov, « Branching Narratives: Character Decision Points Detection »](https://aclanthology.org/2024.games-1.8/)

Section 2

Tester les transitions d'état, pas seulement les visites de scènes

Un test qui confirme simplement l'affichage d'un nœud peut passer à côté d'un choix dysfonctionnel. Pour chaque choix important, vérifiez trois éléments : si le choix est accessible sous la condition prévue, si sa sélection applique le changement d'état attendu, et si le nœud suivant ainsi que le résultat visible correspondent à cet état. Ces vérifications traitent l'histoire comme un système de transition d'états : à partir d'un état initial et d'une action, validez l'état obtenu et la destination.

Par exemple, un test pour le choix « Montrer la carte » peut affirmer que la carte est montrée, que `trust` reste inchangé, et que l'itinéraire atteint la scène partagée de l'observatoire. Un test associé commence avec `has_map = false` et vérifie que ce choix est indisponible ou qu'il suit l'alternative spécifiée. Le comportement exact attendu dépend du cahier des charges narratif ; l'essentiel est de l'affirmer de manière explicite plutôt que de déduire son bon fonctionnement à partir du titre d'un passage.

Aux points de convergence, testez davantage que la simple arrivée. Comparez l'état que chaque itinéraire est censé préserver, modifier ou abandonner. Un garde convaincu dans une branche donnée peut rester un allié après la convergence, tandis qu'un déguisement temporaire doit expirer. Intégrez ces règles à l'état attendu après la convergence. Si les chemins doivent converger complètement, affirmez l'état commun partagé ; s'ils doivent conserver des différences significatives, affirmez également ces différences.

Section 3

Utiliser un exemple fictif pour rendre la couverture visible

Imaginons un court récit à suspense comportant une décision dans les archives. Le joueur peut demander de l'aide, se faufiler discrètement ou utiliser une clé empruntée ; chaque option mène au même couloir, puis un choix ultérieur détermine si le joueur prend une lettre scellée. La matrice fictive suivante recense un ensemble compact d'obligations de test. La mention « Couvert » signifie qu'un test est prévu pour cette obligation précise, et non que l'itinéraire complet ou chaque combinaison a été testé.

**A :** `trust = high` ; demander de l'aide à l'archiviste. L'option d'aide apparaît ; `trust` reste élevé ; l'itinéraire atteint le couloir. Disponibilité du choix et transition

**B :** `trust = low` ; demander de l'aide. L'option d'aide est masquée ou un refus est essuyé, selon les spécifications. Condition négative

**C :** `has_key = true` ; déverrouiller la porte latérale. La porte s'ouvre ; l'itinéraire atteint le couloir ; la clé n'est consommée que si cela est prévu. Effet d'état et convergence

**D :** `has_key = false` ; tenter d'ouvrir la porte latérale. La porte ne peut pas être ouverte ; aucun indicateur de succès n'est activé. Assertion négative

**E :** Depuis le couloir, prendre la lettre scellée. `has_letter = true` ; la scène de preuve ultérieure propose la réplique liée à la lettre. Résultat en aval

**F :** Depuis le couloir, laisser la lettre. `has_letter = false` ; la réplique liée à la lettre est absente. Contraste de résultat et assertion négative

Il s'agit d'un outil d'aide à la décision, non d'un pourcentage de couverture ou d'une suite minimale universelle. Il met en lumière les omissions : ici, le cas d'une faible confiance et l'absence de la lettre justifient des vérifications spécifiques, car un parcours idéal (happy path) ne les testerait pas. Chaque ligne doit renvoyer au nœud ou à la transition correspondante dans le graphe, afin de relier toute condition modifiée aux tests concernés.

Section 4

Hiérarchiser la couverture des embranchements lors de l'explosion combinatoire

Lorsqu'un récit contient de nombreux indicateurs indépendants, le nombre de combinaisons possibles peut croître de manière exponentielle. N'essayez pas d'y répondre en listant chaque parcours théorique comme une partie complète obligatoire. Identifiez d'abord les arêtes à haut risque : les choix qui conditionnent les fins, consomment des objets, établissent des relations durables ou fusionnent des historiques. Testez directement ces transitions et leurs conséquences majeures en aval.

Échantillonnez ensuite les combinaisons de manière ciblée. Intégrez les valeurs limites (la valeur minimale déclenchant un choix), les deux versants de chaque condition critique, des combinaisons représentatives d'indicateurs susceptibles d'interagir, et des itinéraires qui atteignent un point de convergence via des historiques distincts. Donnez la priorité aux modifications récentes et aux parcours dotés de prérequis complexes. Lorsque deux variables sont susceptibles d'interagir, ajoutez un test dédié à ce binôme au lieu de supposer que des vérifications isolées suffisent à valider leur interaction.

Documentez l'unité de couverture et ses limites. Une équipe peut contrôler si chaque arête de choix critique a été exécutée, si chaque condition a été testée comme vraie et fausse là où c'est pertinent, et si chaque déclencheur de fin a été atteint par au moins un test conçu à cet effet. Ce sont des rapports utiles sur ce qui a été échantillonné ; aucun ne garantit que chaque historique possible, combinaison d'états ou nuance de formulation a été exploré.

La recherche sur les tests de jeux peut apporter un éclairage connexe mais circonscrit. L'article de Gordillo et ses collaborateurs (arXiv, 2021) décrit des agents d'apprentissage par renforcement récompensés pour des actions inédites afin d'explorer la couverture d'états dans un scénario 3D complexe. Ces travaux concernent l'exploration au sein d'un environnement de jeu 3D, et non les choix narratifs à embranchements ou la méthode de test de transition présentée ici. Ils suggèrent que l'exploration automatisée peut constituer un complément envisageable, mais ni cette étude ni celle de Tikhonov ne valident formellement la méthode de test narratif exposée ici. [Gordillo et al., « Improving Playtesting Coverage via Curiosity Driven Reinforcement Learning Agents »](https://arxiv.org/abs/2103.13798)

Section 5

Ajouter des assertions négatives et des tests de jeu humains

Les assertions positives confirment qu'un choix ou un résultat attendu est bien présent. Les assertions négatives vérifient qu'un comportement interdit ne se produit pas : une option verrouillée n'apparaît pas, un indice consommé n'est pas accordé deux fois, une lettre absente ne déclenche pas sa réplique, ou une tentative infructueuse n'active pas d'indicateur de succès. Les vérifications négatives s'avèrent particulièrement utiles autour des nœuds partagés, où un état résiduel provenant d'un autre embranchement pourrait parasiter la scène courante.

Les contrôles automatisés peuvent valider la logique des itinéraires et les modifications précises d'état, mais ils ne peuvent pas juger de manière fiable si une transition semble cohérente, si une réplique contredit ce dont le joueur se souvient, ou si un choix est compréhensible en contexte. Les sessions de test humain doivent donc exploiter des itinéraires ciblés : demandez aux testeurs de suivre une branche moins commune, d'arriver à un point de convergence avec un historique précis, ou de tenter d'atteindre une fin sans posséder une clé. Observez à la fois l'état final obtenu et l'interprétation qu'en fait le joueur.

Associez les notes de test aux identifiants de nœuds et de choix, en précisant l'état initial et les actions effectuées. Cela garantit la reproductibilité des anomalies signalées et aide à faire la distinction entre un problème d'écriture et un défaut logique. Après une correction, relancez les tests de transition affectés et parcourez au moins un itinéraire représentatif traversant la convergence ou le dénouement modifié.

Section 6

Un cycle de test pratique pour un récit en évolution

À chaque mise à jour narrative, exportez ou examinez le graphe, identifiez les nœuds, conditions, effets et points de convergence modifiés, puis actualisez la matrice de couverture. Exécutez d'abord des tests ciblés sur les transitions d'état ; poursuivez avec un échantillon d'itinéraires sélectionnés et des tests humains sur les sections à fort impact ou récemment remaniées. Lorsqu'un échec survient, relevez l'état initial et la séquence de choix pour permettre à l'équipe de le reproduire, de corriger la règle ou le passage en cause, et d'intégrer le cas en tant que test de non-régression.

L'objectif est d'obtenir un état des lieux testable de ce qui a été vérifié et pour quelles raisons. Le graphe rend la structure vérifiable, les tests de transition explicitent la logique, l'échantillonnage d'embranchements concentre les efforts sur les variations significatives, les assertions négatives traquent les fuites d'états, et les tests de jeu humains évaluent la réception du récit. Ensemble, ils offrent une couverture efficace à mesure que les voies se multiplient, tout en délimitant clairement ce qui reste non testé.

À lire aussi

Continuer sur ce thème