Lors de la rédaction d'une fonctionnalité BDD, dois-je mettre l'interaction utilisateur précédente dans une étape donnée ou une étape?

StackOverflow https://stackoverflow.com/questions/9472062

  •  13-11-2019
  •  | 
  •  

Question

J'essaie d'écrire des exigences pour un processus métier en plusieurs étapes (via un assistant). J'ai de nombreux scénarios où les interactions utilisateur avec un écran changent si vous êtes autorisé à choisir des options sur un autre écran.

Par exemple (j'ai obscurci l'entreprise réelle, mais le processus et la forme des étapes sont presque identiques):

Feature: Personal Diagnostic Search Filter
  In order to select a Technician who offers Personal Diagnostics,
    when I've asked for a Personal Diagnostic
  As a Business Customer
  I want to limit my search to Technicians who offer Personal Diagnostics

  Background:
    Given a Business named "Big Al's Auto Supply"
      And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business
      And an Account named "bobtest@testbusiness.com" owned by "Bob Test"
      And the "bobtest@testbusiness.com" Account has the "Repair Order Creator"
        permission
      And you log in as "bobtest@testbusiness.com"
      And you start scheduling a new Repair Order

  Scenario: Enter the Select Technician page when Use PD is selected
    Given you select Use PD
    When you enter the Select Technician page
    Then the PD Filter should be visible
      And the PD Filter should be selected

  Scenario: Basic Search for Technicians when PD Filter is selected
    Given a Technician named "PD Technician"
      And the Technician named "PD Technician" supports PD
      And a Technician named "Non-PD Technician"
      And the Technician named "Non-PD Technician" does not support PD
      And you select Use PD
      And you enter the Select Technician page
      And you select the PD Filter
      And you select Basic Search
    When you search for Technicians with the name "Technician"
    Then your search results should contain "PD Technician"
      And your search results should not contain "Non-PD Technician"

Mais sur le wiki gherkin, il est recommandé de vous:

Évitez de parler de l'interaction des utilisateurs dans Givens

Ils continuent à faire une exception, cependant:

Connectez-vous à un utilisateur (une exception à la recommandation sans interaction. Les choses qui se sont produites plus tôt "sont OK).

Il est également dit sur cette page que:

Le but du moment où les étapes sont de décrire l'action clé que l'utilisateur effectue

Qu'est-ce qui appartient à une donnée et qu'est-ce qui appartient à un quand vous avez beaucoup d'interaction d'interface utilisateur?

Dans mon premier scénario, select Use PD nécessite une interaction d'interface utilisateur, car elle fait partie de l'assistant pour créer un nouvel ordre de réparation. Cependant, il s'agit d'une condition préalable à la visible du filtre PD et est déclenchée lorsque l'utilisateur entre dans la page Technicien Select.

Le premier scénario n'est peut-être pas si mauvais, mais le deuxième scénario exacerbe le problème. La recherche est déclenchée lorsque vous frappez Chercher Mais il y a beaucoup d'interactions d'interface utilisateur qui doivent être faites pour naviguer vers cette page. Certaines de ces interactions ne peuvent pas non plus être malheureuses Use PD Doit être sélectionné pour que le filtre de recherche apparaisse même. Mais ces interactions d'interface utilisateur ne sont pas les action clé du scénario.

Était-ce utile?

La solution

En règle générale, essayez autant que possible pour formuler le scénario comme si vous aviez une conversation à ce sujet et exclure autant d'informations non pertinentes que possible.

Par exemple, j'aimerais vos scénarios ci-dessus pour lire quelque chose comme:

Given our customer Bob Test is scheduling a repair order
And we have two technicians: "Fred Technician" and "George Nontechnician"
When Bob Test decides he wants a Personal Diagnostic
And he selects a technician
Then the search results should only contain "Fred Technician"

Faites alors tout ce qui est nécessaire pour faire fonctionner ces étapes - soyez qu'ils se connectent ou autrement. Remarquez que je n'ai pas parlé de "pages", ni pris les mesures réelles - elles devraient être intuites pour l'utilisateur. BDD ne concerne pas les tests. Il s'agit de proposer des exemples de la façon dont les gens vont utiliser le système, afin que vous puissiez avoir des conversations autour de ces exemples et les explorer, trouver des exceptions et différents scénarios, etc.

Vérifier que le filtre est visible n'est pas précieux. L'utilisateur ne se soucie pas que le filtre soit visible. Il se soucie qu'il puisse utiliser le filtre pour obtenir ses résultats, alors faites-le.

Dans le code, je passe généralement un objet "monde" entre mes étapes. Cela peut éloigner beaucoup de Gubbins. Je n'ai pas beaucoup utilisé Gherkin mais j'imagine qu'il offre une capacité similaire. Vous pouvez y stocker tous les détails de l'utilisateur, quels techniciens que vous avez créés afin que vous puissiez vérifier qu'il ne ramène pas "George nonchnicien" dans les résultats, etc.

Utiliser des noms amicaux pour les rôles est également utile, car les gens peuvent alors imaginer à quoi ressemble Fred et George.

Débarrassez-vous de tout ce qui ne fera pas de différence dans le scénario et ne va pas aider les gens à l'imaginer. Vous savez que Bob a la permission de planifier une commande parce que c'est ce qu'il fait - ajoutez simplement les choses nécessaires à cette étape.

Le "quand" est le comportement que vous souhaitez décrire. Dans ce cas, vous êtes intéressé par la capacité de filtrer les diagnostics personnels, de sorte que toute l'interaction utilisateur associée au comportement devrait être dans le "quand", et toute interaction précédente doit être dans le "Givens". Je trouve utile d'essayer de penser à un contexte dans lequel le résultat est différent - par exemple, que se passe-t-il s'il n'y a pas de techniciens PD disponibles? Cela me dit quelle est la différence; Nous installerons un autre le contexte Mais effectuer la même chose un événement. Le contexte va dans la donnée, les événements vont dans le moment. (Cela était auparavant beaucoup plus simple avant l'introduction du "fond").

En général, si vos yeux glaçaient lorsque vous regardez un scénario, vous faites quelque chose de mal.

J'espère que cela t'aides.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top