私はTDDでもBDDでも経験がありません。はい、既存のコードの単体テストをたくさん作成しましたが、ここでは関係ありません。また、仕事でTDD / BDDを使用することはできませんが、趣味のプロジェクトに挑戦したいと思っています。
現在、TDDとBDDの違いを正しく把握しているかどうかはわかりません。今のところ、BDDは進化したTDDであり、最も特徴的な機能は、TDDよりも高いレベルの抽象化(ユーザーストーリー)で作業できることです。TDDでは、基本的に同じユーザーストーリーを取得しますが、BDDほど明確ではありません。それが正しいか?
ツールに関しては、上記のステートメントが正しいと仮定すると、TDDの場合はTestNGやJUnitのようなものを使用する必要があり、BDDの場合はJBehaveのようなツールの恩恵を受けます。
ここで問題となるのは、最初にTestNGとTDDから始めて、それをある程度成功させてからJBehaveとBDDに移行する必要があるかどうかです。または、これは時間の無駄であり、最初からJbehaveとBDDを使用しようとすることを妨げる理由はまったくありませんか?
アップデート:
私の質問に対する2つの素晴らしい回答を受け取り、そのトピックに関する追加の読書に時間を費やした後、私は見つけた素晴らしい記事へのリンクを追加しないように自分自身を助けることができませんでした。以下のこの質問に対する2つの回答と同じ考えを繰り返しますが、より詳細な情報が含まれている可能性があります。記事の私のお気に入りの部分:
The best way to do that is to leverage BDD and TDD. Here is an approach: 1. Write requirements as user stories using the BDD grammar/structure. Do this collaboratively with the key stakeholders. 2. Enter the User Stories (feature + scenarios) in a BDD tool. 3. Write code to map the User Stories to tests. 4. Write production code using TDD to make the tests pass.
ご覧のとおり、BDDはTDDが正しく行われているだけではありません。BDDの語彙だけを使用してTDDを改善することもできますが、それはBDDが提供する利点の一部のみを使用するようなものです。これらの両方の手法の長所を使用すると、「重要なソフトウェア」と「機能するソフトウェア」が得られます。