うまく行われたBDDは、「完全な」モデルを生成しません。BDDを思いついたDanNorthが、自分のブログを「不確実性を受け入れる」と呼んでいるのには理由があります。
最近では、分析できる3種類のこと、つまり、既知、既知、および未知のことを考えると便利だと思います。
既知のものは単純です-たとえば、ログインします。それはよく理解されています。シナリオについて話す必要はありません。
知っていることは通常、ドメイン、または以前に行われたことと関連しています。これは、BDDを実行するのに最適な場所です。これは、ドメインモデルを含む知識をビジネスから開発者に転送するのに役立つためです。シナリオを通して話すことは、物語をよりよく理解するための素晴らしい方法です。また、見逃したシナリオを見つけるのにも役立ちます。「Given」を「Given、When、Then」に入れるのを手伝ったアナリストのChris Mattsは、これを「モデルを壊す」と呼んでいます。彼は実際に、彼のモデルでカバーされていないシナリオを思い付くことができる人に賞品を提供しました。彼はシナリオを使用して定義し、改良します。
知らないものもあります。これは、私たちが何か新しいことに取り組んでいるとき、またはこれまでに行ったことのないこと、または誰も専門知識を持っていない何かに取り組んでいるときに発生します。あなたがこの場所にいるかどうかは、ビジネスマンが思いもよらなかったシナリオを思いついたときに驚きに反応し始めるのでわかります。BDDは、これらの場所を見つけるための非常に優れた方法ですが、この時点で、シナリオを特定するのをやめ、代わりに何かを試してフィードバックを得ることができます。ドメインモデル、ユーザーストーリー、およびシナリオはすべて徐々に出現します(Cynefinモデルの複雑なドメインを参照してください)。
多くのチームがこの不確実性を明らかに排除する方法としてBDDを使用していることを私は知っています。あなたはそれを排除することはできません。後で、配信からのフィードバックが戻ってきてあなたを噛むまで、それを隠すことができます。
DDDに関しては、BDDを使用して行う場合、作業中のシナリオに関連するドメインモデルの部分に焦点を当てる傾向がありますが、全体としてより大きなドメインモデルのアイデアがあるかもしれません。機能インジェクションをBDDと一緒に使用している場合は、システムのほとんどの機能、特に新しい機能についてすでに説明しているので、ドメイン内にどのようなものがあるかがわかります。進化と他のすべてのルールは引き続き適用されます。BDDとDDDは、ドメイン言語を引き出すのに役立つシナリオに関する会話とともに、非常にうまく連携します。それらは根本的に違いはありませんが、完全にサポート的で互換性があります。
ダン・ノースと私自身がこのトピックについて話しているビデオを特集した、この同様の質問に対する私が与えた回答も読んでください。