彼の記事What's in a Story? で ダン・ノースは多くの優れた点を挙げています。特に次の 3 つです。
シナリオのタイトルは、何が違うのかを示す必要があります
シナリオを並べて並べ、タイトルのみを使用してそれらの違いを説明できる必要があります。
シナリオは、ギブンス、イベント、および結果の観点から説明する必要があります
これは、BDD を採用しているチームで私が見た最も強力な行動の変化です。ビジネス ユーザー、アナリスト、テスター、および開発者に、この「与えられた/いつ/その時」という語彙を採用させるだけで、あいまいな世界がなくなることがわかります。
すべてのシナリオがこれほど単純なわけではありません。いくつかは一連の出来事として表現するのが最もよく、次のように表現されます: [ある文脈] が与えられたとき [私が何かをする] のとき [これが起こる] [私が別のことをする] のとき [この新しいことが起こる]など。例として、一連の画面をステップ実行して複雑なデータ モデルを構築するウィザード スタイルの Web サイトがあります。これらの用語で考える習慣を身につけている限り、一連の出来事と結果を混ぜ合わせることは完全に適切です.
ストーリーは、イテレーションに収まる程度に小さくする必要があります
実証可能なチャンクに分割する限り、これを行う方法について厳格な規則はありません。一般に、シナリオが 5 つまたは 6 つ以上ある場合は、同様のシナリオをグループ化することで、ストーリーを分割できる可能性があります。
ここで、あるウィザード スタイルの機能のエンド ツー エンドの受け入れテストを記述しようとしているとします (上記で検討したように)。
ウィザード機能の使用開始時に状態がどのように異なるかによって「シナリオ」を定義するのは当然のことです (実際、これは上記のポイント 1 と 2 に適合するように思われます)。そのような独立したシナリオを作成するために、完全にシリアル化された形式で (最初から最後まで)? これにより、非常に多くのシナリオが生成されるだけでなく、それぞれが非常に多くのステップで構成されます (Dan のポイント 3 に反して)。これらのステップの多くは、シナリオが分岐する状態に到達するためだけにシナリオ間で繰り返されます。
Scenario: Make a successful booking Given that I am at the booking form When I do A Then I see B When I do C Then I see D When I try to book Then I see a successful message Scenario: Attempt to book, no availability Given that I am at the booking form When I do A Then I see B When I do C Then I see D When I try to book Then I see no availability
一方、ウィザード機能内の各決定分岐の開始時に、考えられる状態ごとに1 つのシナリオを定義する方が効率的です。 「イベント」は、単に機能を次のステップに進める単一のステップになります。決定分岐。しかし、これは SUT をスタックの下に移動しないので、エンドツーエンドの受け入れテストを定義するのではなく、より低い順序のものを定義することになりますか? さらに、テスト基準に従って理解することは、はるかに自然なことではありません。これは、BDD の要点全体を確実に無効にしますか?
When
Scenario: Do first step Given that I am at the booking form When I do A Then I see B Scenario: Do second step Given that I see B When I do C Then I see D Scenario: Make a successful booking Given that I see D When I try to book Then I see a successful message Scenario: Attempt to book, no availability Given that I see D When I try to book Then I see no availability
このルートに進む場合、各決定ブランチを個別の機能に分割する方が正しいように思えます。そして、各ブランチのシナリオのみが 1 つの機能内で考慮されます。これは、SUT がスタックを下に移動したという私の主張を強調するだけです。
おそらく、これらのエンド ツー エンドの受け入れテストは詳細すぎるため、ウィザード全体を (この段階では) ブラック ボックスとして扱う必要がありますか? ただし、これが顧客が何を試運転しているのかを理解するのにどのように役立つかはわかりません。特に、この機能の詳細な手順がシステム全体の受け入れ可能性の鍵となるためです。
そのような機能をシナリオに分割する最も適切な方法は何ですか?