Behavior Driven Develoment : passer de Specflow à Reqnroll

Behavior Driven Development (BDD) : Reqnroll comme successeur de Specflow

07 Avril 2025

Dans le monde du développement logiciel en constante évolution, les méthodologies qui favorisent la collaboration et la compréhension commune entre les équipes techniques et métier gagnent en importance. Le Behavior Driven Development (BDD) est l'une de ces approches qui a transformé la façon dont nous concevons et développons des logiciels. Avec l'émergence de Reqnroll comme successeur de SpecFlow, il est temps d'explorer cette évolution et de comprendre comment implémenter efficacement le BDD dans vos projets .NET.


Qu'est-ce que le BDD ?

Le Behavior Driven Development, ou développement piloté par le comportement, est une méthodologie de développement logiciel qui étend les principes du Test-Driven Development (TDD) en mettant l'accent sur le comportement attendu du système du point de vue de l'utilisateur final. Contrairement au TDD qui se concentre principalement sur la validation technique, le BDD place les besoins métier au cœur du processus de développement.

Le BDD a été introduit par Dan North en 2006 comme une réponse aux défis rencontrés avec le TDD, notamment la difficulté à traduire les exigences métier en tests techniques et le manque de compréhension commune entre les différentes parties prenantes d'un projet.

Le BDD repose sur trois piliers essentiels :

  1. Une langue commune : Le BDD encourage l'utilisation d'un langage ubiquitaire compréhensible par toutes les parties prenantes, qu'il s'agisse de développeurs, de testeurs ou d'experts métier.
  2. La collaboration : Le BDD favorise la collaboration entre les équipes techniques et métier pour définir ensemble les comportements attendus du système.
  3. La valeur métier : Le BDD se concentre sur la valeur métier de chaque fonctionnalité plutôt que sur les détails d'implémentation technique.

Le processus BDD typique suit généralement les étapes suivantes :

  1. Discovery : Des ateliers collaboratifs (souvent appelés "Three Amigos") réunissent développeurs, testeurs et experts métier pour discuter et définir les comportements attendus du système.
  2. Formulation : Les comportements sont formulés sous forme de scénarios utilisant un format structuré appelé Gherkin, qui utilise un langage naturel avec une syntaxe spécifique.
  3. Automatisation : Les scénarios sont automatisés à l'aide d'outils spécifiques qui traduisent le langage Gherkin en tests exécutables.
  4. Implémentation : Le code est développé pour satisfaire les comportements définis dans les scénarios.

Le BDD offre de nombreux avantages pour les équipes de développement :

  1. Meilleure communication : Le BDD établit un langage commun entre les équipes techniques et métier, réduisant ainsi les malentendus et les incompréhensions.
  2. Documentation vivante : Les scénarios BDD servent à la fois de spécifications et de tests, créant ainsi une documentation toujours à jour avec le code.
  3. Focus sur la valeur métier : Le BDD oriente le développement vers les fonctionnalités qui apportent réellement de la valeur aux utilisateurs.
  4. Réduction des bugs : En définissant clairement les comportements attendus avant le développement, le BDD aide à prévenir les bugs et les régressions.
  5. Couverture de test pertinente : Les tests BDD couvrent les scénarios d'utilisation réels plutôt que des aspects techniques isolés.


Le langage Gherkin

Gherkin est le langage utilisé pour décrire les comportements dans le BDD. Il utilise une syntaxe simple et naturelle, structurée autour de mots-clés spécifiques :

  • Feature : Décrit une fonctionnalité ou une capacité du système
  • Scenario : Décrit un cas d'utilisation spécifique de la fonctionnalité
  • Given : Définit le contexte initial du scénario
  • When : Décrit l'action ou l'événement déclencheur
  • Then : Spécifie le résultat attendu
  • And, But : Permettent d'étendre les clauses Given, When et Then

Une bonne pratique est d’écrire les Critères d’Acceptation d’une User Story avec le langage Gherkin

Voici un exemple simple de scénario en Gherkin :



BDD vs TDD : complémentarité plutôt que concurrence

Il est important de souligner que le BDD n'est pas en concurrence avec le TDD, mais plutôt une extension de celui-ci. Alors que le TDD se concentre sur la validation technique à l'échelle unitaire, le BDD élève la perspective au niveau des comportements métier.

5 éléments de comparaison entre le BDD et le TDD

Les deux approches peuvent coexister harmonieusement au sein d'un même projet, le BDD guidant les fonctionnalités à un niveau macro tandis que le TDD aide à concevoir des composants techniques solides à un niveau micro.


La transition de SpecFlow vers Reqnroll

SpecFlow a longtemps été l'outil de référence pour le BDD dans l'écosystème .NET. Lancé en 2009, il a permis à des milliers de développeurs d'implémenter le BDD en traduisant les scénarios Gherkin en tests C# exécutables. Grâce à son intégration parfaite avec Visual Studio et sa compatibilité avec les frameworks de test populaires comme NUnit, MSTest et xUnit, SpecFlow est devenu un outil incontournable.

Malheureusement, l'avenir de SpecFlow est devenu incertain suite à plusieurs changements significatifs :

  1. Changement de licence : En 2021, TechTalk, la société derrière SpecFlow, a été acquise par Tricentis. Suite à cette acquisition, la politique de licence a été modifiée, limitant certaines fonctionnalités à la version commerciale SpecFlow+.
  2. Restrictions d'utilisation : Les nouvelles licences ont introduit des restrictions sur l'utilisation de SpecFlow dans certains contextes d'entreprise, créant une incertitude juridique pour de nombreuses organisations.
  3. Évolution technologique limitée : Le développement de nouvelles fonctionnalités pour la version open source a considérablement ralenti, laissant SpecFlow à la traîne par rapport aux évolutions rapides de l'écosystème .NET.
  4. Support limité pour .NET moderne : Bien que SpecFlow ait fini par s'adapter à .NET Core puis à .NET 5+, cette adaptation a été lente et parfois problématique, créant des difficultés pour les projets modernes.

Face à ces défis, Reqnroll est né en tant que fork communautaire de SpecFlow, maintenant l'esprit open source et le développement actif que la communauté .NET attendait. Reqnroll a été créé par des membres actifs de la communauté SpecFlow, dont certains avaient contribué au projet original.

Les principaux avantages de Reqnroll par rapport à SpecFlow sont :

  1. Licence véritablement open source : Reqnroll est distribué sous la licence MIT, garantissant la liberté d'utilisation sans restrictions dans tous les contextes.
  2. Support natif pour .NET moderne : Reqnroll a été conçu dès le départ pour fonctionner parfaitement avec .NET 5+ et les versions ultérieures.
  3. Développement actif : Reqnroll bénéficie d'un développement actif et d'une communauté engagée, assurant des mises à jour régulières et l'intégration de nouvelles fonctionnalités.
  4. Migration facile : Reqnroll a été conçu pour permettre une migration simple depuis SpecFlow, avec une compatibilité presque totale au niveau de la syntaxe et de l'API.
  5. Performances améliorées : Des optimisations internes ont permis d'améliorer significativement les performances par rapport à SpecFlow.
Passage de Specflow à Reqnroll pour les projets .NET

La migration de SpecFlow vers Reqnroll est relativement simple, ce qui est l'un des grands avantages de ce fork. Voici les étapes générales pour migrer un projet existant :

  1. Mise à jour des packages NuGet : Remplacer les packages SpecFlow par leurs équivalents Reqnroll

  2. Mise à jour des fichiers de configuration : Renommer specflow.json en reqnroll.json si vous utilisez un fichier de configuration
  3. Mise à jour des références dans le code : Remplacer les using statements de SpecFlow par leurs équivalents Reqnroll

  4. Tests de compatibilité : Exécuter les tests pour vérifier que tout fonctionne correctement après la migration

Dans la plupart des cas, ces étapes suffisent pour effectuer la migration sans problème, car Reqnroll maintient une compatibilité API presque totale avec SpecFlow.


Implémentation du BDD avec Reqnroll - Un exemple concret

Pour illustrer concrètement l'utilisation de Reqnroll, nous allons développer un exemple complet d'une application de gestion de panier d'achat en ligne. Cette application permettra aux utilisateurs d'ajouter des produits à leur panier, de modifier les quantités et de calculer le total.

Commençons par créer une solution .NET contenant les projets nécessaires :

  1. Un projet de bibliothèque classique pour notre domaine métier (ShoppingCart)
  2. Un projet de test utilisant Reqnroll (ShoppingCart.Specs)

Voici les commandes à exécuter dans un terminal :



Ensuite, installons Reqnroll dans notre projet de test :



Exemple de test avec Reqnroll : structure du projet ShoppingCart

Maintenant, créons nos spécifications BDD pour le panier d'achat. Nous allons créer un fichier de feature dans un dossier Features de notre projet de test.

Créons le fichier ShoppingCart.feature :



Avant d'implémenter les steps de test, créons notre modèle de domaine dans le projet ShoppingCart.

Créons d'abord la classe Product.cs :



Puis la classe CartItem.cs :



Et enfin la classe principale Cart.cs :



Maintenant, implémentons les step definitions qui vont faire le lien entre nos scénarios Gherkin et notre code C#. Dans le projet ShoppingCart.Specs, créons un dossier StepDefinitions et un fichier ShoppingCartSteps.cs :



Créons un fichier de configuration reqnroll.json à la racine du projet de test :



Cette configuration permet notamment d'utiliser le français pour nos scénarios Gherkin. Pour exécuter les tests, nous pouvons utiliser la commande suivante :



Si tout est correctement configuré, nous devrions voir les résultats suivants :

Fenêtre d’exécution des tests Reqnroll avec affichage des résultats

L'un des grands avantages de l'utilisation de Reqnroll dans un projet de développement est son intégration facile dans un pipeline d'intégration continue (CI/CD). Voici comment vous pourriez configurer un workflow GitHub Actions pour exécuter vos tests BDD automatiquement :



Ce workflow exécutera automatiquement vos tests BDD à chaque push ou pull request, et générera une documentation vivante à partir de vos scénarios.


Fonctionnalités avancées de Reqnroll

Reqnroll offre plusieurs fonctionnalités avancées qui peuvent améliorer significativement votre expérience BDD :

Les tables de données permettent de tester plusieurs jeux de données dans un seul scénario :

  1. Tables de données

    Les tables de données permettent de tester plusieurs jeux de données dans un seul scénario :



    Et le step definition correspondant :




  2. Scénarios Outline

    Les scénarios outline permettent d'exécuter le même scénario avec différentes valeurs :




  3. Hooks

    Les hooks permettent d'exécuter du code avant ou après certaines étapes du cycle de vie des tests :




  4. Tags

    Les tags permettent de catégoriser vos scénarios et de filtrer l'exécution des tests :



    Vous pouvez ensuite exécuter uniquement les tests avec un tag spécifique :




  5. Living Documentation

    Reqnroll peut générer une documentation HTML basée sur vos scénarios, créant ainsi une "documentation vivante" qui reste toujours en phase avec votre code :




    Génération par Reqnroll d’une documentation HTML basée sur les scénarios

Conclusion : Le BDD avec Reqnroll - Une approche moderne et efficace

Le Behavior Driven Development représente une approche puissante pour aligner le développement logiciel avec les besoins métier. Avec la transition de SpecFlow vers Reqnroll, la communauté .NET dispose désormais d'un outil moderne, performant et véritablement open source pour implémenter le BDD. Les principaux avantages du BDD avec Reqnroll sont :

  1. Une meilleure collaboration entre les équipes techniques et métier grâce à l'utilisation d'un langage commun.
  2. Une documentation vivante qui reste toujours synchronisée avec le code, réduisant ainsi la dette technique documentaire.
  3. Une approche pilotée par les comportements qui garantit que le développement se concentre sur les fonctionnalités qui apportent réellement de la valeur aux utilisateurs.
  4. Des tests automatisés robustes qui vérifient non seulement que le code fonctionne techniquement, mais qu'il répond aux besoins métier.
  5. Une intégration facile avec les outils modernes de CI/CD pour une automatisation complète du processus de test.

Pour les projets qui utilisaient précédemment SpecFlow, la migration vers Reqnroll est généralement simple et directe, offrant une continuité dans l'approche BDD tout en bénéficiant des avantages d'un outil moderne et activement maintenu. Pour les nouveaux projets, Reqnroll offre une solution complète et mature pour implémenter le BDD dans l'écosystème .NET, permettant aux équipes de développement de créer des logiciels qui répondent véritablement aux besoins des utilisateurs. En adoptant le BDD avec Reqnroll, les équipes de développement peuvent non seulement améliorer la qualité de leur code, mais aussi renforcer la communication et la collaboration au sein de l'organisation, conduisant à des produits plus alignés avec les besoins des utilisateurs et, en fin de compte, à une plus grande satisfaction client.

Pour approfondir vos connaissances sur le BDD avec Reqnroll, voici quelques ressources utiles :

En suivant ces ressources et en mettant en pratique les concepts présentés dans cet article, vous serez bien équipé pour implémenter avec succès le BDD dans vos projets .NET avec Reqnroll.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *