5

マルチステップのビジネスプロセスの要件を(ウィザードを介して)作成しようとしています。ある画面でのユーザーの操作によって、別の画面でオプションを選択できるかどうかが変わるシナリオはたくさんあります。

たとえば(私は実際のビジネスを覆い隠しましたが、ステップのプロセスと形式はほぼ同じです):

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"

ただし、Gherkin wikiでは、次のことをお勧めします。

与えられたものでのユーザーインタラクションについて話すことは避けてください

しかし、彼らは例外を作り続けます:

ユーザーにログインします(対話なしの推奨事項の例外。「以前に発生した」ことは問題ありません)。

また、そのページには次のように書かれています。

Whenステップの目的は、ユーザーが実行する主要なアクションを説明することです

UIインタラクションが多い場合、Givenに属するものと、Whenに属するものは何ですか?

私の最初のシナリオでは、 select Use PDUIの操作が必要です。これは、新しい修理注文を作成するためのウィザードの一部であるためです。ただし、PDフィルタが表示されるための前提条件であり、ユーザーが[技術者の選択]ページに入るとトリガーされます。

最初のシナリオはそれほど悪くないかもしれませんが、2番目のシナリオは問題を悪化させます。[検索]をクリックすると検索がトリガーされますが、そのページに移動するには、多くのUI操作を実行する必要があります。これらのインタラクションの一部はUse PD、検索フィルターを表示するために選択する必要があるため、グロスオーバーすることもできません。ただし、これらのUIインタラクションは、シナリオの主要なアクションではありません。

4

1 に答える 1

9

原則として、シナリオについて話し合っているかのように、できるだけシナリオを表現し、無関係な情報をできるだけ除外するようにしてください。

たとえば、上記のシナリオで次のようなものを読んでください。

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"

次に、ログインするかどうかにかかわらず、これらの手順を機能させるために必要なことをすべて実行します。「ページ」について話したり、実際の手順を実行したりしていないことに注意してください。ユーザーにとって直感的である必要があります。BDDはテストではありません。それは、人々がシステムをどのように使用するかについての例を考え出すことです。これにより、それらの例について話し合い、調査したり、例外やさまざまなシナリオを見つけたりすることができます。

フィルタが表示されていることを確認することは重要ではありません。ユーザーは、フィルターが表示されていることを気にしません。彼はフィルターを使用して結果を取得できることを気にかけているので、それを実行してください。

コードでは、通常、ステップ間に「World」オブジェクトを渡します。それは邪魔にならない多くのガビンを得ることができます。私はガーキンをあまり使用していませんが、同様の能力を提供すると思います。そこにすべてのユーザーの詳細を保存して、作成した技術者が結果に「GeorgeNontechnician」を返さないことを確認できるようにすることができます。

役割にわかりやすい名前を使用することも役立ちます。これは、フレッドとジョージがどのように見えるかを人々が想像できるためです。

シナリオに違いをもたらさず、人々がそれが起こっていることを想像するのに役立たないものはすべて取り除きます。ボブが注文をスケジュールする権限を持っていることはご存知でしょう。それは彼が行っていることだからです。必要なものをそのステップに追加するだけです。

「いつ」はあなたが説明したい行動です。この場合、個人診断をフィルタリングする機能に関心があるため、行動に関連するすべてのユーザーインタラクションは「いつ」にあり、以前のすべてのインタラクションは「ギブンズ」にある必要があります。結果が異なる状況を考えてみると便利だと思います。たとえば、PD技術者がいない場合はどうなりますか?それは私に違いが何であるかを教えてくれます。別のコンテキストを設定しますが、同じイベントを実行します。コンテキストはGivenになり、イベントはWhenになります。(これは、「背景」が導入される前ははるかに単純でした)。

一般に、シナリオを見るときに目が釉薬をかけている場合は、何か間違ったことをしていることになります。

お役に立てれば。

于 2012-03-01T12:58:02.870 に答える