2017-02-20 11 views
2

Gherkin/ATDD/BDDの新機能です。代わりに、特定のペルソナを引用して、インスタンスのために、私の受け入れテストの例はどのくらい具体的であるべきですか?

Given a user is waiting for an operation to complete 
    And the operation is <percent>% complete 
When <threshold> seconds elapse 
Then a progress indicator should be displayed 
    And the progress indicator should display "<percent>%" 

この特定十分ですか私は(SBE用語で考える)より具体的な例を表すに与えられた句を変更する必要があります:私は、次の受け入れテストを起草しています進行中の正確な「操作」を引用しているだけです(顧客リストを取得するなど)。

おかげで、 トニー

答えて

0

BDD

ビヘイビア駆動開発は、すべての開発チームとビジネスの間の会話についてです。フィーチャファイルとその中のシナリオは、ビジネスと開発チームの両方が明確に概説されていることを明確にしていることを意味する、特定のビジネスニーズ、機能、または能力に常に関連している必要があります。

Feature: Rewards for frequent flyers 
    As a frequent flyer 
    I should receive points to my account 
    So that I am more likely to book with BDD Airlines again in the future 

Scenario: I get flyer miles 
    Given I book a flight 
    And this flight earns 100 miles 
    When I land 
    Then my account should have 100 miles added to it 

質問は、これは全体の問題の概要を説明しない場合、または必要に応じてより多くの情報がある。一例として、

? 開発チームはこの会話を使用して何かを構築することができますか(SBEについて)

これは良いだろう?:

Feature: Rewards for frequent flyers 
    As a frequent flyer 
    I should receive points to my account 
    So that I am more likely to book with BDD Airlines again in the future 

Scenario: Passenger gets flyer miles 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is scanned at "LGW" 
    When the flight lands at "MAN" 
    Then the account 12341234 is rewarded 100 miles 

Scenario: Passenger missed their flight 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is not scanned at "LGW" 
    When the flight lands at "MAN" 
    Then the account 12341234 is not rewarded any miles 

Scenario: Passenger gets kicked off the plane 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is scanned at "LGW" 
    But the ticket is removed from the flight 
    When the flight lands at "MAN" 
    Then the account 12341234 is not rewarded any miles 

それはすべての明快さについてですが、通常システムの振る舞いは、ビジネスに関連して説明されている方法の詳細についてです。

あなたの例

ビジネスが使用されるすべてのコンポーネントの実装に興味があってはならないと私は個人的に(彼らは気にしない、プログレスバーをテストする目的のためにシナリオを書きませんローディングバーについては、実際に情報が実際にロードされることに注意してください)。

これは私の意見では単体テストとしては良いでしょう。

+0

こんにちはカイル、あなたの例は参考になり、私のシナリオは本当にビジネス上のものではないことを理解しています。 @Lunivoreが示唆しているように、私はおそらくこれをより低いレベルのテストにし、GWTをコメントに変換します。あなたの例についての1つの質問: '' And 'の代わりに' 'But ''で始まる' 'LGWで' 'チケットをスキャンしないといけませんか? –

+0

このシナリオでは、「And」または「But」のどちらでも意味があります。あなたがそれを言った後、私の本能は、それが正のものよりむしろ負の前提条件を参照しているので、それを「But」に変更するように私に指示しています。 「And」と「But」を使用するのは本当に優先します。 –

0

はい、あなたはより具体的にする必要があります。ユーザーのタイプが1つだけの場合、またはこのテストケースがすべてのユーザーグループに適用される場合、「ユーザー」はおそらくテストに適しています。しかし、私はあなたが待たなければならない操作を指定するべきだと思います。なぜなら、TDDはあなたのコードを安全に感じることができるからです。また、すべての操作をテストしていないと、遅れ?

1

プログレスバーはアセスメントです。

美学をテストする唯一の本当の方法は、それを人々に見せて、彼らの考えを見ることです。 A/Bテストは本当に良いことです。美学は実際にシステムの所望の動作に関するものではなく、ユーザの所望の挙動についてのものであるので、BDDは美学に特に適していない。

私たちはまだ人々を効果的にプログラムする方法を学んでいます。それまでは、スクリプトではなく、人間との美学をテストしてください。

プログレスバーの動作の側面に適したアルゴリズムがある場合は、それはテストする価値がありますが...他の人も触れたように、これはクラスレベルのBDDにとって最も残念なことですより直接的にコードに結びついています。

このレベルでは、"Given, When, Then" statements in commentsを置くだけで十分です。クラスレベルのステップは、システムレベルのステップと同じ方法で再利用されないため、再利用可能な抽象クラスにすることは、変更を容易にするほど重要ではありません。 J/N/WhateverUnitに固執し、残りを嘲笑してください。

+0

あなたの洞察に感謝します。実際には私がここにいるアルゴリズムです。つまり、機内非同期操作中にx秒後に進捗インジケータが表示されます。文法が技術的な単体テストにさえも表現力とはっきりしているから、私はGWTのコメントアプローチが好きです。 "[BDD] ...システムの望ましい動作に関するものではなく、ユーザーの希望する動作に関するものです。" ダンの定義WRTの "動作"(システム対ユーザー)と矛盾するように見えるので、私はこの声明で少し混乱しています:https://youtu.be/qWsnmx45734?t=51s –

+0

@TonyDユニットレベルのBDD 、ユーザーは別のクラスです。あなたがそのクラスであると想像してください。あなたが書こうとしているクラスをどのように使いたいかを考えてください。あなたは例を考え出すことができますか?もしそうなら、これはBDDです!内部的な振る舞いを心配するのではなく、クラスの振る舞いがユーザー(他のクラス)に価値をもたらす方法について考えています。私のコメントは「システムの望ましい動作に関するものではない」というのは、BDDについてではなく、美学についてのものだったので、私はより明確になるように編集します。 – Lunivore

+0

ああ。はい、それは私を捨てていた "それ"の主題の私の誤解でした。あなたの編集はそれをクリアします。ありがとう! –

関連する問題