TDD(スクラム)を使用しながらユーザーストーリーからコードに移行する


8

私はスクラムとTDDに取り掛かっていますが、いくつかの混乱があると思います。フィードバックについてお聞きしたいと思います。バックログにユーザーストーリーがあり、TDDの一部として開発を開始するために、これまでの要件が必要であるとしましょう。

プロダクトマネージャーとQAがユーザーストーリーを受け入れて受け入れテストに分解する責任を負うべきだと言うのは本当ですか?

受け入れテストは形式的である必要があるため、上記は正しいと思います。テストとして使用できるだけでなく、製品が要件であることを製品が承認できるように、人間が読める形式でも使用できます。

私が後でこれらの受け入れテストを受けて、それを私の要件として使用すること、つまり、それらが(TDDを介して)実装する一連のユースケースであることも本当ですか?私は混乱をあまり作りすぎていないといいのですが、それが今私が考えている現在の流れです。

更新
当初の意図は不明確だったので、言い換えます。TDDの使用中にユーザーストーリーをコードに変換するスクラムフローの詳細を知りたい。
開始点は明らかです。ユーザーはニーズ(または製品としてのユーザーの代表)を表面化します。これは、既知の形式で1〜2行の短い説明であり、製品のバックログに追加されます。
春の計画会議がある場合、ユーザーストーリーはバックログから取得され、開発者に割り当てられます。
開発者がコードを作成するには、要件が必要です(特に、要件はテストの派生元であるため、TDDで必要です)。
いつ、誰が、どの形式で要件がコンパイルされますか?
私が頭に浮かんだのは、製品とQAが受け入れテストを介して要件を定義することです(私はFitNesseまたはソートを使用して自動で考えていますが、それは私が考えるコアではありません)同時に2つの目的を果たすのに役立ちます:

  1. 彼らは「完了」を適切に定義しています。
  2. それらは、開発者にテストの派生元を提供します。

これらがいつ記述されたかはわかりませんでした(スプリントが選択される前に追加情報が届くか、ストーリーが選択されないため、繰り返しの間に開発者がスタックを待機する可能性があるため、これは無駄になります)。 ..)


1
コーディング時にテストを記述します。受け入れテストはTDD中に記述するテストではありません。
CaffGeek

私は知っていますが、いくつかの要件に対してTDDを記述しますよね?彼らはどのような形で入るべきですか?
Ittai

4
違いはありますが、受け入れテストは確かにあなたの開発を推進することができます。一連のテスト(ユニット、統合、システム、および受け入れ)を定義して、アプリケーションがいつ機能し、受け入れられるかを示すことができます。その後、テストに合格するまでアプリケーションをコーディングできます。それは確かにテスト駆動開発です。
マシューフリン

1
@Ittai:Chadが言っていることは、開発者が自分で定義する単体テストからTDDが始まるということです。開発者がユースケース/要件を下位レベルのコード設計に変換するとき、開発者は一度に1つのクラスで作業し、そのクラスの単体テストを作成しています。そのレベルでは、開発者がコードの有効性を証明するために必要に応じてテストを作成しているため、「アドホック」です。
Sam Goldberg

1
「どこから要件を導出するのですか」?ストーリー。これが答えとして十分ではない理由は明らかではありません。ストーリーが、見たいこれらの「要件」と魔法のように違う理由を説明できますか
S.Lott、

回答:


11

プロダクトマネージャーとQAがユーザーストーリーを受け入れて受け入れテストに分解する責任を負うべきだと言うのは本当ですか?

主に。彼らは実際に実際の受け入れテストを書かないかもしれません。彼らはあなたが書いたものを承認するかもしれません。しかし、彼らは受け入れテストを承認します。はい。

受け入れテストは正式なものである必要があるため、テストとして使用できますが、製品が要件であることを製品が承認できるように、人間が読める形式でも使用できます。

無関係です。それらは自動化されたテストとして形式化されるかもしれません。または、非公式であり、非公式の受け入れテスト基準から自動テストを作成するのはあなたの仕事かもしれません。

また。「要件」はユーザーストーリーです。「要件」と呼ばれるストーリーのさらに別のバージョンを作成する必要はありません。コーディングする前にストーリーについて詳しく説明したい人もいます。この要件と呼ぶことができますが、「デザイン」の方がいい言葉です。「精巧」は最高の言葉です。

私が後でこれらの受け入れテストを受け、それを私の要件として使用することも真実ですか?つまり、それらは私が(TDDを介して)実装する一連のユースケースです?

はい。ストーリーは受け入れテストにつながります。ストーリーは必須の動作です(つまり、「要件」)。ストーリーは、ソフトウェアの設計と開発を促進するテストにつながります。

それが今私が考えている現在の流れです。

これに対する「フロー」はそれほど多くありません。

ストーリー->受け入れテスト。

ストーリー->エラボレーション( "design"、 "requirements")->ユニットテスト->コード。

ストーリー->ユーザーが価値のあることを実行できること。

ストーリー->ストーリーポイント->速度計算。

パターンに注意してください。物語は主にすべてを動かします。


いつ、誰が、どの形式で要件がコンパイルされますか?

最初。「要件」を定義します。ストーリー自体とどう違うのですか?

私が考えていたのは、製品とQAが受け入れテストを介して要件を定義することでした

通常はありません。

反復中に、開発者はそれらを待つのに行き詰まる場合があります。

不正解です。開発者はこれらを書くのを手伝うことができます(そしてしばしばそうします)。それが「開発」のポイントです。ストーリーを明確にして「完了」します。

再び。疑問や質問がある場合は、実際にアジャイルマニフェストを読む必要があります。マニフェストは非常に明確です。開発者は、製品の所有者、ユーザー、QA、および利害関係者である他のすべての人と話し合う必要があります。相互作用は実際に起こり得る最も重要なことです。


ありがとう、詳しく説明していただけますか;)、ストーリー->詳細化ステージについてもう少し詳しく教えてください。ストーリーは「ユーザーとして、製品を購入するためにWebサイトにログインしたい」という形の印象を受けました。詳細が必要なため、TDDを開始するのに十分な詳細が含まれていません、より多くのユースケース。より多くの道、幸せと不幸。
イタイ23:45

「私はより多くの詳細、より多くのユースケースが必要です。幸福と不幸のより多くの道筋。」良い。詳しく説明するために、これ以上何を知る必要があるかわかりません。発生する必要があることの完全な説明を提供しました。あなたはもっと知りたいですか?情報を求める方法は?
S.Lott、2011年

ちょっと、私が理解しようとしているのは、スプリントの最初に短いユーザーストーリーしかなく、開発者が製品からの情報を「掘る」必要があるかどうかです。スプリントが始まると、開発者は一連の要件を満たしていないが80%(ユーザーストーリーに基づく)であるという印象を受けていた(たぶん誤っている)ためです。流れを集めようとしています。ワンライナー(2ライナー)のユーザーストーリーからの変換は、いつ詳細な仕様セットに移行しますか。
Ittai

1.「フロー」はありません。「ステップ」はありません。それはそれよりも簡単です。テストとコードを記述します。2.情報源は組織によって異なります。ほとんどの組織は、詳細を説明するために開発者にストーリーを渡します。一部は、スプリントの開始時にグルーミング中に精緻化のいくつかを実行しようとします。3.アジャイル宣言を読みます。 agilemanifesto.org。あなたは製品の所有者と対話することが期待されています。深く。頻繁に。重要なのは、ストーリーをサポートするコードを作成できるように、必要なデータを収集することです。
S.Lott、

1
「1ライナー(2ライナーの)ユーザーストーリーからの変換は、いつ詳細な仕様セットに移行するのですか?」常に。デザインをしたいなら気軽にデザインしてください。一部の人々は彼らのデザインを書き留めます。一部ではありません。たくさんの仕様を書くという考えが好きなら、それは大丈夫です。無理しないでください。ポイントはテストとコードを書くことです。デザインがあなたを集中させるのに役立つなら、気軽にしてください。多くの人々は、テストを書くことで集中力が高まると考えています。大きくて複雑な仕様書が必要な場合は、ストーリーが複雑すぎます。
S.Lott、

2

受け入れテストに関しては、エクストリームプログラミング(XP)の観点からお答えします。

私が最初に本を読んだとき(そして本を読んでいたとき)、私は実際にクライアント/ユーザーと協力して受け入れテストを開発/文書化することが開発者の役割であることを読みました。XPの目標の1つは、ユーザー/クライアントと開発者の間の直接的なコミュニケーションを増やすことです。これは、要件の誤った伝達によるコーディングエラーの可能性を減らすため、多くの場合理想的です。

私はTDDを約8年間行っており、上記のアプローチに従っています。クライアント/ユーザーがアプリケーションの開発に直接影響を与えている様子を見ることができるため、開発のスピードとシステムの満足度が向上したと思います。

私が(小さなクライアントで)遭遇した主な問題は、受け入れテストの指定に参加させるのが非常に難しいことです。(通常、私は彼らのためにそれを行い、レビューのためにそれらを送信する必要があります。)私が作業した大規模なクライアントは通常この考え方を持っていたため、特定の受け入れテストを提供する準備ができていました。

私がスクラムについて読んだことからは、それが受け入れテストの定義/作成に責任がある役割を定義しているのかわかりません。チームによって異なる場合があると思います。

私のアドバイスは、あなたは開発者として、テスト定義プロセスにできる限り参加すべきであるということです。そして目標は、スプリントの結果をできるだけ早くユーザーの前に表示することです。そうすることで、ユーザーが考え忘れていたすべて(または誤って伝えたこと)をできるだけ早く伝えることができます。


1

ユーザーストーリーは「ユーザーとしてXXXが欲しいので、YYY」ではありません。ユーザーストーリーはPOとの将来のコミュニケーションの約束です。それはあなたの問題をより詳細に解決します。必要な情報を取得するには、スプリント中にPOと通信する必要があります。

ユーザーストーリーには、コミュニケーションを約束する短い文よりも多くの機能があります。ユーザーストーリーの必要な部分は受け入れ基準です。受け入れ基準は、ユーザーストーリーにコミットする前に知っておく必要があります(ユーザーストーリーを推定する前に知っておく必要があります)。受け入れ基準は受け入れテストの入力です=受け入れテストは受け入れ基準をテストする必要があります。

したがって、TDDアプローチを使用してユーザーストーリーの作業を開始する場合、(QAではなく)最初に、受け入れ基準に基づいて自動受け入れテストを作成し、テストの失敗テストを取得する必要があります。受け入れテストに合格する前に、TDDを使用して必要なコードを実装し続けます。次の受け入れテストに進みます。それについては別の質問でも書いた。

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