アジャイル開発手法
Railsアプリの構築
目標、役割、特徴のリストを書き出す
- 目標 - プロジェクト全体の目標は何か - ビジネスとそれ以外。これにより、どの機能が重要かを決めることができる。
- 役割 - サイトを利用するのは誰か - 訪問者、ログインしているメンバー、管理者?サイト上の同じ情報でも、人によって見方が違うのか?
- 特徴 - サイト上でのインタラクションの基本的なカテゴリーは何か?例えばユーザー:登録、フォーラム利用、ブログ作成、管理者:ユーザーコンテンツの管理
ストーリーのリストを書く
- ストーリーは、特定のユーザーの視点からのインタラクションの単一スレッドを表すため、フィーチャーとは異なります。
- として、私は○○できるように○○したい」という形でストーリーを表現するのが一般的だ。これでは、3つの重要な質問に答えざるを得ない。彼らは何をしたいのか?なぜそれをしたいのか?
- このような形でストーリーを完成させることができない場合は、これら3つの質問のうち1つに対する答えがまだない可能性が高いので、ストーリーを実用的なものにする前に、答えを得るために少し考える必要がある。
- 例:「管理者として、フォーラムからユーザーを追放したい。
- これらのストーリーをノートカードに書き留めてください。これは、見積もりと優先順位付けに役立ちます。
ストーリーを推定する
- 見積もりはそれ自体大きなテーマですが、基本的な考え方は、特定のレベルの労力を各ストーリーに関連付けることです。
- 最も一般的なスケールは0/1/2/3/4、0/1/2/4/8だ。これは非常に重要なことだとは思わないが、何かを選んでそれにこだわることだ。
- 見積もりの正確さにあまりこだわらないでください。ストーリーを仕上げるのにかかる時間にはさまざまなことが影響するので、ストーリーの複雑さによるわずかな差はノイズに埋もれてしまいがちだ。
- ここでのゴールは、RESTコントローラーでシンプルなモデルを作成するストーリーのような、労力の少ないものと、アプリケーションと難易度の高いサードパーティAPIとのインタフェースのような、労力の多いストーリーを区別することです。
- 各カードに見積もりを記入します。
ストーリーに優先順位をつける
- ストーリーに取り組む順番にカードを並べ替える。
- この決断を下せるのはプロダクトオーナーだけだ。優先順位の決定には、納期、ユーザーテスト、ビジネス価値など、多くのことが関係する。見積もりは、機会費用を明らかにするため、優先順位付けと大いに関係があるかもしれない。プロダクトオーナーは、詳細な管理者ダッシュボードが本当に欲しいのかもしれない。しかし、その機能を実現するためのストーリーが全部で40ポイントあるとして、この機能だけに1ヶ月を費やす価値があるのだろうか?プロダクトオーナーはまだそのストーリーを望んでいるかもしれない。
- 立ち上げ可能な最小限の製品に当てはまらないストーリーはありますか?もしそうなら、下に移動させるべきだ。できるだけ早く機能するアプリを完成させ、ユーザーの前に出せるようにしましょう。
- この時点で、私は通常カードを Pivotal Tracker に移動しますが、ペンと紙を好む人をたくさん知っています。
最初のストーリーを完成までテストドライブする
- Cucumberで始める ユーザとサイトとのインタラクションを最初から最後までカバーするCucumberの機能を書く。未定義のステップをその都度定義していき、最初の失敗にぶつかった時に、あなたのアプリにはない、あなたが望む動作があることを知るのです(空白のアプリにはあまり動作がないため、最初はこのようなことはすぐに起こるでしょう)。
- ユーザー インタラクションの重要な部分である Javascript インタラクションがある場合は、Cucumber に @javascript タグを使用してこれらをテストさせるようにします。
- Rspecへ進む 望む動作のテストを書く。
- コードを書く 仕様を通すためのコードを書く。これは、ルーティングから UI、モデル、データベーススキーマ、コントローラに至るまで、 アプリケーション全体を対象とすることになります。テストに指示された順番で、これらのコードに取り組むことになります。
- キュウリが通り過ぎ、話が終わるまで繰り返す。
- デザインはできていると仮定して、CSSのスタイリングを修正する良い機会だ。もし私が一人で仕事をしていたり、デザイナーがいない場合は、ストーリーのコーディングを始める前に、紙の上かBalsamiq MockupsのようなものでUIのワイヤーフレームを作成したい。
私たちは物語を受け入れる
- その話は受け入れられますか?それはあなたが望んでいたとおりに動作しますか?そうでない場合は、戻って、想定どおりに機能するようにする必要があります。事前に Cucumber テストを作成しておくと、このような事態を防ぐことができます。
- テストはすべてパスしたか?ビルドを壊していないよね?もしそうなら、壊した部分を修正する必要がある。
- 自分の仕事を客観的な目で見るのは難しいかもしれない。
終わるまで繰り返す
これが私のやり方です。決してこれが唯一のやり方というわけではありませんが、Railsでは非常に一般的なやり方です。アジャイル推定の価値や、Cucumber対Steak、RSpec対Test::Unitのような特定の技術の価値については、それなりの議論があると思いますが、ほとんどのRails開発者は、適切なワークフローは次のとおりであることに同意するでしょう:
1) 一つのストーリーを特定する
2) テストを書く
3) 完成させる。