正直なところ、BDDとTDDの違いはわかりません。つまり、どちらも期待されることが起こった場合の単なるテストです。私は実際にTDDテストとして数えられるほど具体化されたBDDテストを見てきました。また、非常に曖昧で多くのコードをブラックボックス化するTDDテストを見てきました。両方を持っている方が良いと確信しているとしましょう。
ここで面白い質問があります。どこから始めますか?高レベルのBDDテストから始めますか?低レベルのTDDテストから始めますか?
正直なところ、BDDとTDDの違いはわかりません。
何もないからです。
つまり、どちらも期待されることが起こった場合の単なるテストです。
それは間違っている。 BDDとTDDは、テストとはまったく関係がありません。なし。なだ。ジルチ。ジップ。ニックス。少しではありません。
残念ながら、TDDはほとんどすべての単語に「テスト」という単語を含んでいます(名前だけでなく、テストフレームワーク、単体テスト、TestCase
(タイピカルに継承したクラス)、FooTest
にも含まれています。 (通常はテストを保持するクラス)、testBar
(テストメソッドの一般的な命名パターン)、および「アサーション」や「検証」などのテストに関連する多くの用語)実際にはdoesはテストと関係があります。そのため、一部の賢い人々は、混乱の可能性を排除するために「ねえ、名前を変えましょう」と言いました。
それがBDDです。これはTDDであり、テスト関連の用語は、動作関連の用語の例に置き換えられています。
assert
→should
BDDは、異なる単語を含むTDDです。 TDDを正しく行うと、BDDを行うことになります。違いは、少なくともSapir-Whorf仮説の弱い形式を信じている場合、異なる単語を使用すると、正しく実行することが容易になるということです。
BDDはお客様の視点からのものであり、システム全体の予期された動作に焦点を当てています。
TDDは開発者の視点からのものであり、1つのユニット/クラス/機能の実装に焦点を当てています。とりわけ、より優れたアーキテクチャ(テスト容易性の設計、モジュール間の結合の減少)から恩恵を受けます。
技術的な観点(「テスト」の書き方)と似ています。
(アジャイルの観点から)1つのbdd-userstoryから始め、TDDを使用してそれを実装します。
私がWikipediaで収集したものから、BDDには、利害関係者/ユーザーの入力なしでは実行できない受け入れとQAテストが含まれています。また、BDDは自然言語を使用してテストを指定しますが、TDDは通常プログラミング言語を使用します。この2つは多少重複しているかもしれませんが、あいまいさではなく、BDDの言語が主な違いだと思います。
どこから始めればいいのか、それは本当にあなたの開発プロセスに依存しますね。ボトムアップで行う場合は、最初にTDDを作成し、より高いレベルに達したら、BDDを使用してこれらの機能が期待どおりに動作するかどうかをテストすることを想定しています。
K3bが指摘したように:主な違いは、TDDがよりソリューションドメインであるのに対し、BDDは問題ドメイン指向であるということです。
Matthew Flynn から回答をコピーするだけで、「TDDとBDDはテストとは何の関係もない」と私は同意します。
Behavior Driven Developmentは、テスト駆動開発の拡張/改訂です。その目的は、システムを考案している人々(つまり、開発者)が適切なテスト(つまり、利害関係者が望む動作を反映するテスト)を特定できるようにすることです。結果は同じになります-テストを開発してから、テストに合格するコード/システムを開発します。 BDDでの期待は、テストが実際にシステムが要件を満たしていることを示すのに役立つことです。
[〜#〜]更新[〜#〜]
コードの単位(個々のメソッド)は、動作テストで表される動作を表現するには細かすぎる可能性がありますが、それらが適切に機能することを保証するために、単体テストでテストする必要があります。これが「TDD」テストの意味するところであれば、はい、まだ必要です。
TDDとBDDの違いに関する素晴らしい記事:
両方の問題と例を含む、あなたが知る必要があるすべてを与えるべきです。
BDDはTDDを正しくすることです。それはあなたのTDDに「構造とdiciplene」を提供します。これは、正しいことをテストし、適切な量のテストを実行するためのガイドです。ここにBDDとTDDに関する素晴らしい小さな記事があります。
http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/
用語は異なりますが、私の仕事では、主に単体テストのためにTDDを使用して詳細を開発します。BDDは、顧客、QA、または技術者でない人のためのより高いレベルです。
TDDまたはその他のアプローチに対するBDDの最大の貢献は、非技術者(製品の所有者/顧客)をすべてのレベルのソフトウェア開発プロセスに参加させることだと思います。
自然言語で実行可能なシナリオを作成することで、要件と提供のギャップをほとんど埋めることができました。
開発者が作成したコードの動作を試したい場合は、製品所有者が自分で作成したシナリオを実行し、さまざまなデータセットでテストできます。
すごい!顧客は真ん中に座って、正確に何が欲しいのかを尋ねるだけでなく、成果物を確認して体験しています。
主な違いは言葉遣いだけです。 BDDはより冗長なスタイルを使用しているため、ほとんど文章のように読むことができます。