私は開発へのBDDアプローチが大好きですが、どこまで進むのかという懸念にぶつかりました。ThoughtWorksの最新のレーダーからのこのコメントは私に一時停止を与えます:
「Cucumberのようなビヘイビア駆動設計(BDD)テストフレームワークの出現と、Seleniumのようなブラウザー自動化ツールの組み合わせにより、ブラウザーレベルでの受け入れテストの広範な使用が促進されました。テストは最高です。代わりに、テストを最大限の効率で実行できるように、コードにできるだけ近い適切なレベルでテストする必要があります。ブラウザレベルのテストは、受け入れとユニットによってサポートされるケーキのアイシングである必要があります。適切なレイヤーで実行されたテスト。」
だからここに私のシナリオがあります(しゃれが意図されています):
エンドユーザーが選択できる基準に基づいて表示されるデータをフィルタリングするというビジネス要件を備えた基本的なCRUDアプリがあります。説明を簡単にするために、これが電力会社向けのアプリであるとしましょう。各顧客の現在の月ごとの電力使用量を表示しています。このアプリのユーザーは、単一の顧客、複数の顧客、顧客なし、または「すべての顧客」を選択することにより、データを絞り込むことができます。表示されるデータは、選択した内容に基づいて変化します。
製品の利害関係者にとって、これらは実際には4つの別々のシナリオを表しています。ただし、開発者の観点からは、これらは実質的に同一であり、唯一の違いはDBに渡されるパラメーターです。したがって、問題は次のようになります。各順列を詳しく説明することの利点は、それらを実行および維持するコストを上回りますか?
期待される振る舞いの伝達がより明確であるため、BDDの原則はおそらく「はい」と言うだろうと思いますが、私にはわかりません。それは確かに私にはやり過ぎの感覚があります。シナリオは、マイナーな変更を加えた大量のコピー&ペーストになる可能性があります。
私の傾向は、コアビジネスの価値を捉える単一のシナリオでこの機能をカバーし(「顧客を選択すると電力使用量データが表示される」)、UIベースではない統合テストのセットで他の順列をカバーすることです。サービス/クエリが正しいデータを返すことを検証します。これは間違った考えですか?BDDの利点を放棄することなく、これらのシナリオがカバーされていることを確認するための最良の答えは何ですか?