BDDはTDDを置き換えますか、または両方を一緒に使用しますか?私は、BDDはユーザーが見ることができるものだけをテストすべきだと読んできました。そのような場合は、ユーザーが見ることのできないサービスメソッドにTDDを使用する必要がありますか?BDDはTDDを置き換えるか、拡張しますか?
答えて
BDDは、TDDとATDD(およびそれらから派生したもの)の両方を置き換えるものです。
BDD用の初めてのツールJBehaveは、実際にはユニットテストフレームワークJUnitの代用として開始されました。 「テスト」という言葉を使わずに、あなたの(まだ書かれていない)システムの動作を説明し、例を提供することを可能にするという意図がありました。その言葉は、 "テスト"は、あらゆる種類の混乱を引き起こしていた!
差が例と挙動と仕様ワード試験に対しが溶液空間であり、すべての問題空間の言語であるということです。人々は彼らが問題を理解していると思うようになりがちであり、解決策をテストしています。
単語のテストを避けると、人々は問題をより完全に調べるのに役立ちます。これについてはDan North's original articleで読むことができます。
Danは2003/4年にBDDを調査していましたが、当時ビジネスアナリストとして働いていたChris Matts氏に説明しました。クリスは、 "しかし、それは分析のようなものです!"そして、彼らはChrisがシステム全体でどのように分析したか、そしてその事例がどのように分析されたかを調べ始めた。そして、Chrisはそれが行動や成果だけではないことに気づいた。という文脈で。それは、今日私たちが現在知っている(時にはキュウリが存在しなかったためにガーキンとは呼ばれていなかった)全体的な「時、その時」の構文を形成しました。
Danはユニットテストツールの上にシナリオ実行フレームワークを書いてから、RBehaveとしてRubyに移植しました。RBehaveはプレーンテキストになり、Cucumberになりました。その時点で、BDDはATDDの代わりになりました(これは、通常、ユニットテストツールを使用した非常に手続き的なスクリプトで行われていました)。
JUnit、NUnit、または他の種類のユニットテストフレームワークを低レベルで使用しているかどうかは、実際問題ではありません。あなたが行動の例を考え、その例を話しているなら、あなたはBDDをやっています。サンプルを書くことは便利で、自動化することも便利です。そのためJBehaveやCucumberのようなシステムレベルで動作するBDDツールがあります。
開発者とテスターが "テスト"を "example"または "should"に気にせずにマップするのはかなり簡単なので、特定のBDDツールを下位レベルで使用する必要はありません。
「テスト」という言葉を使わずに、人々が会話できるのは簡単です。
クラスのBDDを記述するとき、そのクラスの「ユーザー」は通常は別のクラスです。したがって、システムのユーザーが見ることができるものに基づいてシナリオを作成するのと同じ方法で、別のクラスが見ることができるものに基づいて、より低いレベルの例を記述します。 BDDから出てくるテストはとても良い副産物ですが、会話はラバーダックで行わなければならない場合でも、最も重要な側面です。
BDDはTDDに代わるものではありませんが、私はBDDを補完すると主張します。
それはすべての質問に依存して、これについてのビジネスケアはありますか?
ジョブに適切なツールを使用したいと考えています。つまり、BDDには適しているものもあれば、TDDでうまくいくものもあります。正しく実行されると、BDDとTDDの間の線が非常にぼやけます。それが存在する場合でも。
は、私はそれはあなたの質問にいくつかの追加の光を共有することが、私は「テスト氷山」と呼ばれる概念を議論するブログの記事、 http://www.thinkcode.se/blog/2016/07/25/the-right-tool-for-the-jobを書きました。
そして、@ Lunivoreには、会話から得られる問題の理解に比べて、ツールの選択肢があまり重要でないことに同意します。
- 1. バッチは、遅延拡張パラメータを遅延拡張パラメータで置き換えます。
- 2. 置き換えるのではなく__str __()を拡張する
- 3. TDDの基本 - テストを追加または置き換えますか?
- 4. 文字列の値を拡張メソッドに置き換えます
- 5. クロム拡張のhtmlをjavascriptに置き換えます。
- 6. Android - サーバーのテキストファイルを拡張行に置き換えます。
- 7. TabActivityをフラグメントに置き換える:クラスを拡張するエラー
- 8. Yii2コアクラスの拡張または置き換え
- 9. 拡張子からFirefoxプロファイルのkey3.dbを置き換える/削除する
- 10. GIT拡張ファイルを置き換え、マージしない方法。
- 11. Forループを置き換えるカスタムLinq拡張子
- 12. html単語を置き換えるChrome拡張子
- 13. ページロード前のリクエストURLをSafari拡張子に置き換える
- 14. Linuxのシェルコマンドで出力ファイルの拡張子を置き換え
- 15. テキストをChromeの拡張子のあるリンクに置き換えます。
- 16. QUnit対ジャスミンとTDD対BDD
- 17. Updatewithchildren SQLite.netの拡張機能は古い要素を置き換えません
- 18. パスワードジェネレータChrome拡張機能のonsubmit/onclickの置き換え方法
- 19. C#.Net 3.5 LINQを使用してファイル拡張子を置き換えるコード
- 20. 特定のディレクトリ内のファイル拡張子を置き換えます。
- 21. 詳細な拡張行をClarity Datagridの詳細に置き換えます。
- 22. C#拡張メソッドの元の文字列の値を置き換えます
- 23. BDD/TDD(Rails/Rspec)を使い始める
- 24. Chrome拡張単語置換
- 25. .htaccess拡張サブドメインURL書き換え
- 26. Htaccess書き換えルールファイル拡張子
- 27. cssとjsの要素を置き換えるchrome拡張子を作る
- 28. Chrome拡張機能を使用したjQueryスクリプトの置き換え
- 29. 私は次の行置き換えるしようとしていますクローム拡張
- 30. 画像を他の画像に置き換えるChrome拡張子
ニースの回答。以前はクラスレベルでBDDのことを聞いたことはありませんでした。 –
@BarnabyGolden RSpecはもともとJBehaveのクラスレベルのフレームワーク(私たちはJUnitの注釈の使用によりJBehave 2.0で廃止されましたが、RSpecが当時のRubyに相当するものはありませんでした)のRuby-idiomaticポートでした。だからあなたはそれを見たことがあるのですが、それを実現していません! C#でこれを行う方法は次のとおりです。https://github.com/lunivore/sudoque/blob/master/Sudoque.Behavior/Game/Engine/CellBehavior.cs – Lunivore