Comment le développement axé sur le comportement améliore-t-il la clarté lorsque les langues naturelles sont ambiguës?

9

J'explore actuellement des frameworks de test BDD comme le concombre et je trouve ça curieux quand les gens disent

puisque les fichiers de fonctionnalités sont en langage naturel simple, cela améliore la clarté et donne une vision claire

mais le langage naturel n'est-il pas la cause de la plupart des problèmes que nous avons en génie logiciel?

Le langage naturel est ambigu et c'est la raison pour laquelle de nombreux projets logiciels échouent en raison d'une mauvaise interprétation des exigences des clients et de la compréhension du développeur. Je n'ai pas la niche ici.

Oui, décomposer les tests en petites actions simples réalisables est logique et donne un certain niveau de clarté, mais cela améliore-t-il la productivité dans son ensemble?

PS: je ne suis pas un expert et je ne fais pas d'opinion ici. Je suis simplement curieux de comprendre le concept.

Raghuram8892
la source
1
Très bonne question. Je dois dire que je n'ai jamais vu des choses comme ce que propose le concombre dans la pratique. Le langage naturel n'est pas adapté à des tâches techniques précises, telles que la spécification de tests.
Andres F.
L'utilisation de la langue par BDD vise à refléter la langue existante du domaine commercial, qui devrait déjà être sans ambiguïté pour l'entreprise. L'article de Wikipédia l'indique au début du texte.
Martin Spamer

Réponses:

8

Vous avez raison. BDD n'élimine pas les problèmes d'ambiguïté linguistique - pas du tout. Comme d'autres l'ont souligné, les extraits qui sont traduits doivent être mis en correspondance en les définissant correctement, mais cela ne résout pas non plus le problème d'ambiguïté sous-jacent.

Maintenant, pourquoi BDD vaut-il vraiment la peine malgré le fait de ne pas résoudre ce problème? Il y a quelques raisons et cette liste n'est certainement pas complète.

L'ambiguïté n'est pas résolue

Ce n'est ni une raison pour ni pour le BDD. Mais lorsque vous le comparez à d'autres approches comme les user stories ou les exigences, toutes les approches de développement SW souffrent d'une ambiguïté linguistique car elles commencent toutes d'une manière ou d'une autre avec une formulation en langage naturel.

Techniquement, le problème de l'ambiguïté des langues a été résolu avec des langues artificielles comme le lojban , mais là encore, vos clients et développeurs ne connaîtront probablement pas cette langue.

Langage omniprésent

BDD va de pair avec l'idée d'une langue omniprésente. Être en mesure de spécifier des scénarios avec tous les clients, testeurs et développeurs donne à BDD un avantage sur les autres approches.

Considérez un ingénieur des exigences traditionnel notant toutes les exigences. Une fois que vous, en tant que testeur ou client, obtiendrez ce document de 300 pages rempli d'exigences à examiner, vous aurez beaucoup plus de problèmes urgents que la terminologie qui y était utilisée.

Les histoires d'utilisateurs font un peu mieux à cet égard, car elles incluent également tous les acteurs dans leur création. En termes de langage omniprésent, je ne dirais pas que le BDD ou les histoires d'utilisateurs sont meilleurs - bien qu'ils diffèrent considérablement au point suivant.

Testabilité

Un aspect majeur de BDD est que vos spécifications sont réellement exécutables (via Cucumber ou similaire). Ni les exigences ni les user stories n'offrent cette fonctionnalité. Pour moi personnellement, c'est le principal argument de vente du BDD.

Cela contraste avec les exigences traditionnelles - nous disons aux ingénieurs des exigences depuis des siècles que leurs exigences doivent être testables. Pourtant, chaque projet voit un cas où quelque part en aval, les testeurs se rendent compte qu'ils n'ont aucune idée de comment tester une certaine exigence.

Les user stories, si elles sont bien faites, incluent des testeurs dans leur première phase de création pour s'en assurer. Malheureusement, il s'agit d'un cas de théorie en conflit avec le monde réel, où j'ai vu de nombreuses histoires qu'aucun testeur n'a jamais vues auparavant.

BDD d'autre part vous donne automatiquement un scénario de test exécutable. Il n'y a aucune excuse et aucun moyen de contourner cela (enfin à moins que vous ignoriez complètement les couches d'automatisation et que vous écriviez simplement des scénarios pour la poésie de fantaisie).

Plus généralement, Test First est un principe qui a été très enrichissant à toutes les étapes du développement logiciel et BDD est son application à la couche la plus externe du développement (par rapport à f.ex. TDD au niveau de l'unité).

Sommaire

En résumé, BDD ne vous élève pas des problèmes d'ambiguïté du langage naturel. Cependant, cela vous aide à résoudre ce problème via deux points importants: se concentrer sur un langage omniprésent afin de réduire les ambiguïtés (cela ne les éliminera pas complètement, mais cela aide une tonne!) Et en vous forçant à écrire un exécutable Caractéristiques. Ce dernier point aide à résoudre les problèmes d'ambiguïté, principalement parce que c'est le point où les ambiguïtés commencent à apparaître comme des problèmes autrement.

Franc
la source
c'est une réponse impressionnante. J'ai fait un peu de recherche à ce sujet après avoir posé cette question et je devrais être d'accord avec la plupart de vos points.Un problème majeur avec l'utilisation d'outils comme le concombre ou tout autre outil BDD est que le développeur ne comprend pas l'idée du BDD au niveau zen . Voici un article intéressant à ce sujet par Elizabeth Keogh.
Raghuram8892
4

Quand quelque chose est écrit en «langage naturel», cela peut signifier un certain nombre de choses:

  • C'est littéralement anglais. L'anglais étant une langue très ambiguë et imprécise, ce mode de saisie n'est pas satisfaisant dans le contexte du développement logiciel.

  • Il s'agit de l'anglais, mais les termes pertinents sont définis avec précision. Ce langage est utilisé dans les documents juridiques ou les textes mathématiques.

  • Il s'agit d'un langage formel, mais le langage est calqué de très près sur les conventions du langage naturel. Cela décrit tous les langages de programmation, dans une certaine mesure. Plus la langue officielle ressemble à l'anglais, plus elle est facile à comprendre pour les lecteurs inexpérimentés. COBOL et SQL select id, name from persons where age > 18sont des exemples notables de langages de programmation avec cet objectif: c'est immédiatement évident. L'inconvénient de ces langages est que vous devez comprendre le langage formel pour écrire du code de travail. De plus, ces langues sont souvent très verbeuses.

DDD suggère que le projet utilise un langage omniprésent pour décrire le domaine. C'est essentiellement le cas 2: définissez les termes pertinents afin de pouvoir communiquer précisément dans le langage naturel.

Le concombre lui-même est le cas 3: une langue formelle qui a l'intention de lire très proche de l'anglais normal. Plus précisément: Cucumber est un framework qui vous permet de définir un langage formel simple qui peut être utilisé pour exprimer des exigences / tests. Le point ici est que le même document représente les exigences en langage naturel et les tests automatiquement exécutables, donc les deux seront toujours synchronisés. Vous pouvez lire un scénario de concombre et vérifier qu'il exprime correctement votre besoin sans avoir à comprendre comment tout cela fonctionne.

Le concombre fonctionne en comparant le document avec des extraits connus du langage naturel. Ces extraits doivent être définis en premier. Pour écrire un scénario dans Cucumber, vous devez être conscient des extraits disponibles - le logiciel ne lira pas votre esprit. Ces extraits sont également une source de problèmes possibles: lorsque vous implémentez le comportement d'un extrait de texte, votre code peut faire quelque chose de légèrement différent de ce que le texte d'extrait suggère. Il est peu probable que cela soit un problème si le même extrait est utilisé plusieurs fois. Le concombre est donc bien adapté pour décrire des règles métier qui consistent en un ensemble plus restreint de conditions, d'actions et de résultats. D'autres cadres de test pourraient être meilleurs si chaque extrait de code n'était utilisé qu'une ou deux fois, par exemple parce que la configuration de chaque scénario de test est unique.

amon
la source
merci pour les informations détaillées. Je pense que le concombre est un peu dans la zone grise entre le cas 2 et le cas 3. c'est différent de SQL où vous ne pouvez pas réellement avoir une sorte de "libre arbitre" et vous en tenir à une syntaxe formelle stricte. À ma connaissance limitée, le concombre n'autorise-t-il aucune forme de texte après les mots-clés "Donné", "Quand" pour son scénario? C'est peut-être aussi simple que cela, mais je viens d'un pays non anglais et il est très difficile de faire donner des extraits précis aux gens.
Raghuram8892
1
Oui, vous pouvez mettre tout ce que vous voulez après le Given/ When/ Then, mais a) vous et votre équipe définissez précisément ce que cela signifie, et b) vous définissez la signification dans les correspondants dans le code , c'est-à-dire un langage formel.
Jörg W Mittag
0

@ Raghuram8892, le texte après les mots-clés Given / When / Then / And doit correspondre à "l'extrait", sinon l'étape échoue comme indéfinie ou "en attente". En tant que tel, il tombe carrément dans le cas 3.

En ce qui concerne «l'anglais», le concombre et sa langue, le cornichon est conçu pour une utilisation internationale. Vous pouvez appeler la commande, cucumber --i18n helppour voir la liste des langues actuellement prises en charge et cucumber --i18n $CODEpour voir les mots clés d'un code de langue particulier. Par exemple, cucumber --i18n eodonne les mots-clés pour l'espéranto.

Croustillant
la source