BDD:はじめに


9

私はBDDから始めて、これが私の話です。

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

疑問があります...

何かをコーディングする前にシナリオを書くべきでしょうか、それとも最初にシナリオを書いてからコードを書いたり、シナリオをもう一度書いてからコードを書いたりするべきでしょうか...

以前にシナリオを作成する必要がある場合、私のステップを承認しても製品コードはまだ完了しませんか?

いつコードをリファクタリングする必要がありますか?機能が完了した後、または各シナリオの実装後?


「私のステップは承認されても、製品コードはまだ完了しませんか?」これは何を意味するのでしょうか?説明してください。
S.Lott、2011

回答:


12

物語から、私はあなたが自分でコーディングしていると推測します。

通常、BDDの目的は、特にビジネスと開発者の間の会話を可能にすることです。これにより、チームは彼らが共通の理解に達したことを確認できます。テスターを含めることも好きです。テスターは、シナリオを見逃したときに見つけることができるからです。

自分でこれを行う場合は、ゴム製のアヒルをつかんで、アプリケーションの動作をアヒルに説明してください。それがどのように機能するかの例をいくつか挙げてください。それらはあなたのシナリオになります。

まず、これらのシナリオを自動化しないことをお勧めします。必要に応じてそれらを書き留めることができます。アヒルと共有したビジネス上の成果は、それらを表現するのに適切なレベルであることを忘れないでください。これで、アプリの動作のアイデアが得られ、シナリオを手動で実行できます。まだ機能しないものはすべてバグのように扱いたい。私時々自動化から始めましたが、システムがどのように機能するかをよく知っていて、ツールに精通していて、UIがよく理解されている場合に限ります。それでも、コードを記述したときは、少し手直ししなければならないことがよくあります。

下位レベルでは、各クラスがどのように動作するかをアヒルに伝えます。いくつか例を挙げてください。ゴム製のアヒルは、技術用語を完全に理解できます。これで、ユニットレベルのBDD、つまり単体テストが作成されました。ここでは、赤、緑、リファクタリングのサイクルが発生します。(クラスの責任について考え、ビジネス指向の言語で表現しているので、これ以上リファクタリングする必要はありません。それはとにかく非常に美しい方法で抜け落ちる傾向があります。しかし、しばらくの間これを行っています。実行しても問題ありません。)

あまりリファクタリングしないでください。私たちには、コードについてフィードバックが欲しいのです。なぜなら、わからないことが常にあるからです。完璧はここであなたの敵です。十分に良いものにし、読みやすくし、次に進みます。さらに変更を加えるために完璧なものを作成する必要がある場合は、さらに変更を加えるときに行います。

ビジネス関係者からシナリオに関するフィードバックを得る機会があるが、彼らがあなたと一緒に座っていない場合は、その時点で書いてすぐに、それを自動化する前に、シナリオを彼らに送信できます。UIのモックアップも送信して、単語をアクションに関連付けることができます。これを使ってコーディングの先を行き過ぎないでください。すでに行ったことは間違っているという前提で作業します。その方法を見つけるにはフィードバックを得る必要があります。

最後のヒントとして、一般的にユーザーの視点からストーリーをフレーズしないでください(シナリオではありますが、ストーリーではありません)。それらはユーザーストーリーではありません。それはおそらく次のようなものになるはずです:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

とにかく、あなたが探しているより高いレベルの目標があります。これは、必要な機能を引き出すのにも役立ちます。幸運をお祈りします。また、投稿が長すぎることをお詫びします。


1
「ゴムアヒル」の部分は素晴らしいです。そう思ったのは私だけだと思った!
NoChance 2012年

3

何かをコーディングする前にシナリオを書くべきでしょうか、それとも最初にシナリオを書いてからコードを書いたり、シナリオをもう一度書いてからコードを書いたりするべきでしょうか...

どちらも機能します。一つを選ぶ。

それは大した問題ではありません。

シナリオが多いほど、より多くの設計を事前に行うことができます。

シナリオが多いほど、何かが完了するまでに時間がかかります。

いつコードをリファクタリングする必要がありますか?機能が完了した後、または各シナリオの実装後?

いいえ。次のシナリオの設計が困難になると、リファクタリングします。


新しい質問をしました...「前にシナリオを書くべきなら...」。ご覧ください。どうもありがとうございました。
2011

1
@ S.Lott良い答えですが1つの問題があります。red-green-refactorサイクルの有用性に基づいて、BDDプロセス中、各グリーンテストの直後に継続的にリファクタリングすることをお勧めします。
Rein Henrichs、2011

@Rein Henrichs:1つのストーリーのすべてのテストを完了するためのリファクタリングは、コーディングの避けられない、避けられない部分として発生することに注意してください。素晴らしいデザインでさえすべてのベースをカバーすることはできません。そのリファクタリングは言及する価値がなかったようです。しかし、あなたはそれをうまく指摘しました。ただし、機能セットはストーリーの追加によって進化するため、ストーリー間のリファクタリングはより深刻で時間のかかる操作です。
S.Lott、2009

3

説明的な動詞を使用する

Feature: CONVERT Months and days to days

ストーリーでデザインを決定しないでください[「ウェブページが必要」はデザインの決定です]

As a date conversion fan
I want to convert days and months into days

ストーリーでビジネス価値の目標を使用する

So that [some business reason]

コードを書き始める前に、できるだけ多くの機能とストーリーを記述してください。ストーリーはお互いに知らせ、機能に影響を与え、デザインに知らせます。

各ストーリーの後でリファクタリングします。赤緑リファクタリング。


+1、良い答え。しかし、外部の受け入れテストサイクルではなく、内部の単体テストサイクルの一部としてリファクタリングする「BDDの方法」ではないでしょうか。
pdr 2011

@pdr:それが私が意味したことで、各ストーリーの後でリファクタリングします。BDD / TDDテストは、ユニットから受け入れまでのスケールで、(私の心の中で)1サイクルしかありません;-)
Steven A. Lowe

なぜ「ウェブページが必要」は設計上の決定なのですか?ありがとう!
2011

@thom:ユーザーストーリーは、ユーザーが実行したいことを表現する必要があり、実装方法ではありません。つまり、機能、ストーリー、シナリオは要件と機能仕様です。全体像を把握するまで、設計の決定は行わないでください。この(おそらく人工的な)例では、ユーザー全体のビジネスニーズは、Webページが最も便利なソリューションではない可能性があることを示している可能性があります。デスクトップウィジェットまたはモバイルアプリの方が、いつどのように使用する必要があるかによって異なります。実装の詳細により、話が煩雑になり、特定の設計にすぐに夢中になってしまう可能性があります。
スティーブンA.ロウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.