BDD / TDDを最初にテストする必要がありますか?


11

TDDやBDDのプロジェクトに参加したことがない、またはTDDを行っていると言っているが、それとはかなりかけ離れていると言っても、これらは私が考えていることで、できる限り読みたい約。

質問に戻ります。BDDを実行しているときは、最初に「テスト」を記述して、失敗させる必要があります。そして、その機能またはあなたがそれを呼ぶものを実装します。しかし、これを極端に考えれば、これはある種のトップダウン開発ではないでしょうか?UIを見て、「この機能/動作をここに追加したい」と言っています。次に、UIを修正して、その機能とUIをサポートするコードを実装します。この時点では、ビジネスロジックやデータアクセスロジックを実装しておらず、動作を実装しただけです。最初にテストを書く代わりに、私が目指しているのは、最初にUIコードを書くことです。UIコードを使用してビジネスでサポートする必要があるものを定義するため、場合によっては、データアクセス層とビジネス層で同じコードになるはずです。

もちろん、機能を機能で機能することを確認するために使用されるテストでこれを補完する必要があります。

何かご意見は?


TDD下のテストであるユニットが別個介した場合と同様に、直接モジュールを駆動テスト、main。トップダウンコメントでは、機能テストについて説明しています。機能テストは、単一のを通じてプログラム全体を実行しmainます。
マクニール

@Macneil:プログラム全体をテストする機能テストについては説明しません。プログラムをトップダウンで実装/設計していると思っていても、すべての公開コードに対して単体テストを実装する必要があります。トップダウンで行うからといって、別のレイヤーを抽象化できないため、すべてのレイヤーを単独で分離できるわけではありません。
トマスヤンソン

1
@Macneil:これはよくある誤解です。TDDテストはありませんユニットテスト。TDD 、スケールを設定していない機能をテストします
スティーブンA.ロウ

2
ただし、一定のスケールがあります。テストはTDDで迅速に実行する必要があります。発生する必要があるテストもありますが、TDDの範囲外です。全体として、TDDは開発計画であり、テスト計画ではありません。
マクニール

@Macneil:「クイック」は相対的な用語です。私の最後のプロジェクトのテストスイートは、約30分で実行されます。8 時間の手動テストに代わるものです。これで十分です。
スティーブンA.ロウ

回答:


8

UIのテストの高レベルの観点からBDDについて話している。このレベルでのテストは、Javascript /サーバー側のコードの下位レベルよりも少しふわふわしています。

私がTDDで読んだいくつかの本は、基礎となるシステムが存在するかのようにコードを書き、テストをパスするのに十分なだけ書くべきだと書いています。サーバーにスタブを作成して、UI動作テストに合格することができます。次に、このスタブシームから始めて、サーバー側コードのユニットテストをいくつか作成し、完全な実装に進みます。

多くの場合、高レベルのテストに合格するための基礎となるレイヤーが存在するかのようにコーディングします。ウサギの穴を下って、高レベルのテストを満たすために他の多くのクラスを抽出し、これらの低レベルのテストを作成するように感じます。すでに認識しているように、より高いレベルのテストから始めて集中するのに役立ちます。

熟練したプログラマなら誰でも知っているように、ソフトウェア開発には多くの層があります。私はUIよりも低い仕事をして、サーバーからUIが必要とするデータや動作を考えてそこから始める傾向があります(最近はUIの仕事をあまりしないので)。

正直に言うと、基礎となるレイヤーからクラスを抽出するということは、最初にテストを行うのではなく、数分または数時間以内にそのコードのテストを行うことを意味します。クラスに依存関係を提供し、単一の責任原則を尊重する必要がある場所を確認するのに役立つので、これはまだ私にとって有益だと感じています-テストするのが難しい場合は、1か所でやりすぎです


あなたは正しいと思います。今年の夏にレールでルビーを試したとき、これがきっかけでした。そこでは、UIを駆動するbddテストがあり、後で基礎となるクラスの実装を駆動します。
トマスヤンソン

17

はい!それ以外の場合は、開発主導のテストです。

ただし、現実的に言えば、「純粋な」TDDを使用してアプローチするのが難しい問題があります。発見された量産コードを前もって記述し、後でテストでカバーすることで、より生産的な記述が可能になります(そして将来TDDで同様の問題に対処する方法を学習します)。この手法を見てください。著者は、より良い用語を求めてTDDすすぎと繰り返しと呼びました。


3
最初の行は素晴らしいです。
EpsilonVector

TDDと比較すると本当ですが、トップダウンで物事を行うことは、BDDと非常によく一致するはずです。GUIを見て、必要な動作を指定します。すぐに「動作テスト」を記述しないようにしますが、UIを実装する前に動作を指定しました。
トマスヤンソン

15

最初にテストを作成しないと、テストを通じて開発を推進できません。エルゴ、あなたはテスト駆動開発を行っていません!


公平を期すために、BDDを行うときに(TDDではなく)最初にテストを作成する必要があるかどうかについての質問ではありませんか?
bytedev

「test」を「behaviour」に置き換えてください。TDDとBDDには大きな違いがあることを心から納得させるものは見ていません。多分、フォーカス。しかし、核となるアイデアは?そんなにない。
フランク・シーラー

テスト駆動開発を行っていないという事実に反対します。キー付き用語の定義に従ってそれを行っているわけではありませんが、コードのテストを開発している限り、コードはいつ書いてもテストによって駆動されます。
代替14年

TDDとは、具体的にはコードの前にテストを書くことを意味します。気に入らない場合は、この用語を発明したケント・ベックに相談してください。あなたのコードの後にテストを書くことにあなたのコードを駆動かもしれないいくつかのエクステントが、あなたはまだあなたがいないとき、あなたがテストを通して、あなたのコード設計を運転している信じるように自分をだますことができます。また、テストされていないコードを頻繁に変更する必要があるため、これらのテストを記述することは困難です。言及するにはあまりにも頻繁に見た。
フランクシェラー14年

@FrankSheararケント・ベックが言ったことによるとTDDではないことを認めましたが、率直に言って、ランダムな人が言ったことを気にしません。最初にテストを記述することなく、テストを通じてコード設計を推進することは完全に可能です。
代替案14年

4

この方法で作業したい場合は、それを選択してください。しかし、それはテスト駆動開発ではありません。


3

あなたが説明することは、前倒し設計のアプローチによく似ています。残念ながら、Front-Ahead Designはアレックスパパディモウリスのアジャイル手法の風刺的な刺しゅうです。


FADで反撃し、風刺的な刺し傷を暴く記事を知っているのだろうか?
CL22

3

個人的には、設計段階でのテストについて考えることが重要だと思います。実用的な実装を持つことは本当に素晴らしいことですが、実際に製品を使用できるかどうかを確認できる唯一の方法は、1つずつテストしてみることです。これをカバーする方法は、単体テストと、協力して作業する熟練したQAチームの組み合わせです。

このディシプリンをどのようにチームにインストールするかはあなた次第です。TDDはそのような戦略の1つであり、その位置付けがあり、他にも多くのバリエーションがあります。ただし、TDDはUIレイアウトの開発には特に適していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.