begin cucumber-in-real-world

40
this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/ 2010-11-20 RailsDevCon 2010 諸橋恭介(@moro) begin Cucumber rescue ThisIsNotToy then_how? end 現実の世界で “はじめるCucumber

Upload: kyosuke-morohashi

Post on 19-Jan-2015

3.656 views

Category:

Technology


5 download

DESCRIPTION

my talk at RailsDevCon 2010 (http://railsdevcon.jp/)introduce

TRANSCRIPT

Page 1: Begin cucumber-in-real-world

this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/

2010-11-20 RailsDevCon 2010諸橋恭介(@moro)

begin Cucumberrescue ThisIsNotToy then_how?end 現実の世界で

“はじめるCucumber”

Page 2: Begin cucumber-in-real-world

諸橋恭介(@moro)

• (株)永和システムマネジメント...(中略)... アジャイルグループ所属

• Railsコンサルタント/Railsプログラマ

• Rails勉強会@東京という勉強会を主催

http://d.hatena.ne.jp/moro/

Page 3: Begin cucumber-in-real-world
Page 5: Begin cucumber-in-real-world

今日お話しすること

• Cucumberを現実のプロジェクトで導入する方法について考えたこと

• 第一歩目のテストの書き方

• その前の、シナリオの書き方

Page 6: Begin cucumber-in-real-world

Cucumber

• 自然言語で仕様を記述し、実行するためのテスティングフレームワーク。

• 文に対応するRubyコード (ステップ) を実行

• End to endのテストが書ける。

• ユーザの視点のテストを書ける。

Page 7: Begin cucumber-in-real-world

フィーチャ: 短いメッセージを投稿する ユーザとして、 短いメッセージを投稿したい。 なぜなら、ちょっとした考えや日々の細々したことを気軽に情報発信したいからだ。

シナリオ: ユーザごとメッセージ一覧では、指定したユーザのメッセージが 新しい順に表示される

前提 ログイン名が"alice"、Eメールアドレスが"[email protected]"のユーザがいる かつ ログイン名が"bob"、Eメールアドレスが"[email protected]"のユーザがいる かつ 以下のユーザごとのメッセージがある: ¦ ユーザ ¦ メッセージ ¦ 投稿日時 ¦ ¦ alice ¦ つくば向かう。 ¦ 12時間前 ¦ ¦ alice ¦ 着席しています(大ホール)。 ¦ 10時間前 ¦ ¦ alice ¦ 着席しています(ランチ)。 ¦ 1時間前 ¦ ¦ bob ¦ ランチどうする。 ¦ 3時間前 ¦ もし "aliceのメッセージ一覧"ページを表示している ならば 以下のメッセージが表示されていること: ¦ alice ¦ 着席しています(ランチ)。 ¦ ¦ alice ¦ 着席しています(大ホール)。 ¦ ¦ alice ¦ つくば向かう。 ¦

Page 8: Begin cucumber-in-real-world

前提 /^ログイン名が"([^"]*)"、Eメールアドレスが"([^"]*)"のユーザがいる$/ do ¦login, email¦ User.create!(:login => login, :email => email)end

前提 /^以下のユーザ(?:が¦も)いる:$/ do ¦table¦ table.raw.each do ¦row¦ username = row.first When %Q[ログイン名が"#{username}"、Eメールアドレスが"#{username}@example.com"のユーザがいる] endend

Page 9: Begin cucumber-in-real-world

Cucumber

• お客様と開発者がシステムについて会話する言語を作るフレームワーク。

• 文法を提供し、語彙を定め、その文脈を育てるためのフレームワーク。

Page 10: Begin cucumber-in-real-world

this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/

begin Cucumberrescue ThisIsNotToy then_how?end 現実の世界で

“はじめるCucumber”

Page 11: Begin cucumber-in-real-world

現実• 日本語の情報がない

• いまのプロジェクトへ適用する作戦が思いつかない

• そもそも、日本語のシナリオの使い道がない

Page 12: Begin cucumber-in-real-world

• 日本語の情報がない

• いまのプロジェクトへ適用する作戦が思いつかない

• そもそも、日本語のシナリオの使い道がない

現実

Page 14: Begin cucumber-in-real-world

•フィーチャ・ステップの構成•簡単なステップの作り方•背景•ネストしたステップ定義•表を使う•シナリオアウトライン•タグを使ったシナリオのメタデータ

Page 15: Begin cucumber-in-real-world

• 日本語の情報がない

• いまのプロジェクトへ適用する作戦が思いつかない

• そもそも、日本語のシナリオの使い道がない

現実

Page 16: Begin cucumber-in-real-world

簡単なところから一歩ずつ

Page 17: Begin cucumber-in-real-world

GET /

• インストール• see 1周目: ミニマム実装と開発環境準備

•一番簡単な画面を表示してみる•まずは「ホンモノ」のプロジェクトで動かしてみるのが大事

Page 18: Begin cucumber-in-real-world

シナリオ: トップページにタイトルが出る

もし “トップ”ページを表示している ならば “Ruby x Agile”と表示されて いること

Page 19: Begin cucumber-in-real-world
Page 20: Begin cucumber-in-real-world

GET /{link}

•そこからリンクを辿ってみる•もう一度、行った先で表示を検証

Page 21: Begin cucumber-in-real-world

シナリオ: サービスメニューを表示する

もし “トップ”ページを表示している かつ “ふつうのシステム開発”リンクを クリックする ならば “サービスメニュー”と表示されて いること

Page 22: Begin cucumber-in-real-world
Page 23: Begin cucumber-in-real-world

POST /{simple-resource}

•簡単なデータ投入してみる•できるだけ、できるだけ簡単に• それでもけっこう長くなる

•そろそろステップ定義を作ることも• see 2周目: アプリケーションを日本語化する

Page 24: Begin cucumber-in-real-world

シナリオ: お問い合わせでメールが来る

もし “トップ”ページを表示している かつ “お問い合わせ・ご相談”リンクを クリックする かつ “メールアドレス”に ”[email protected]”と入力する かつ “お名前(Name)”に”ぼく”と入力する かつ “本文”に”たた、たすけてー”と入力する かつ “送信”ボタンをクリックする ならば “[email protected]”にメールが 送られること

Page 25: Begin cucumber-in-real-world
Page 26: Begin cucumber-in-real-world

GET /{current-task}

•いまやっているタスクのテストを書いてみる• 集中しているから書きやすい

• OpenID認証とかはちょっとむずい

•これまで書いた分に、バリエーションを足してみてもよい

Page 27: Begin cucumber-in-real-world

• 日本語の情報がない

• いまのプロジェクトへ適用する作戦が思いつかない

• そもそも、日本語のシナリオの使い道がない

現実

Page 28: Begin cucumber-in-real-world

読みましょう

Page 29: Begin cucumber-in-real-world

実行できないシナリオを書く• 逆に考えるんだ「動かなくたっていいさ」

と考えるんだ

• 読んで、振る舞いがイメージできることを心がけて書いてみる。

• 既存のステップ定義があるとかないとかはちょっとしか気にしない

Page 30: Begin cucumber-in-real-world

シナリオ: お問い合わせでメールが来る

もし “トップ”ページを表示している かつ “お問い合わせ・ご相談”リンクを クリックする かつ “メールアドレス”に ”[email protected]”と入力する かつ “お名前(Name)”に”私”と入力する かつ “本文”に”たすけてー”と入力する かつ “送信”ボタンをクリックする ならば “[email protected]”にメールが 送られること

Page 31: Begin cucumber-in-real-world

対話のきっかけに

• 何となくイメージを知りたいお客様と。

• タスクを見積もりたいチームメンバーと。

• 実装の手がかりが欲しい自分自身と。

Page 32: Begin cucumber-in-real-world

完璧なCuke

完璧なRSpec 実装 RSpec

パスCukeパス

正しい?一歩

Page 33: Begin cucumber-in-real-world

完璧なCuke

完璧なRSpec 実装 RSpec

パスCukeパス

それっぽい母国語のCuke

必要なRSpec 実装 RSpec

パス

現実的な一歩

Page 34: Begin cucumber-in-real-world

動かないCukeを書く意味• 振る舞いを考える時間になる。

• その機能の「前提」や「結果」をちゃんと考えられる。

• みんなでイメージを共有できる。

• いつか動かしたくなったときにも楽。

Page 35: Begin cucumber-in-real-world

動くようにするには• 最低限のエラーを取る。

• 実行してみて、表記揺れを正す。

• 黄色のスニペットを取っていく。

• ステップ定義を追加する。

• 必要ならテスト/実装も直す。

Page 36: Begin cucumber-in-real-world

Cucumberのリズム• プロダクトオーナーたちと会話。やることを大まか

に決める。

• Cukeを書きながら振る舞いを考える。

• 難しそうな箇所のRSpecを書く。

• 実装してRSpecを通す。

• Cukeを通す。

• テストのバリエーションや観点を増やす。

Page 37: Begin cucumber-in-real-world

FAQ. Cucumberのテストはお客様に見せている?

• ふつうに開発Wikiに書いたり、打合せ資料として見せる。

• 「Cucumberというのがありまして!」とか言わない。

• 別フォーマットの「受け入れテスト仕様」作る必要あればそれはそれで作る。

Page 38: Begin cucumber-in-real-world

this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/

まとめ•Cucumberを現実のプロジェクトで導入する方法を紹介しました

•簡単なテストから書き始める•テストが動かなくても、自分(たち)でよむために、母国語で書く

Page 40: Begin cucumber-in-real-world

this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/

ご清聴ありがとうございました