how to eat cucmber

75
Cucumber で美味しい開発 (入門編) ○×sonic 勉強会 sonicチーム id:nsgc

Upload: naoki-nishiguchi

Post on 26-Jan-2015

2.161 views

Category:

Documents


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: How to eat Cucmber

Cucumber で美味しい開発(入門編)

第○×回 sonic 勉強会sonicチーム id:nsgc

Page 2: How to eat Cucmber

http://cukes.info/

Page 3: How to eat Cucmber

Behaviour Driven

Development with elegance and joy

簡潔に楽しくBDD(ビヘイビア駆動開発)しよう

Page 4: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

Page 5: How to eat Cucmber

2. Ruby で step の定義を書く

Page 6: How to eat Cucmber

3. 実行して失敗に着目する

Page 7: How to eat Cucmber

4. step をパスするコードを作る

Page 8: How to eat Cucmber

5. 再度実行して step がパスするのを確認する

Page 9: How to eat Cucmber

6. キュウリのように緑色になるまで、2-5 を繰り返す

Page 10: How to eat Cucmber

7. お金が無くなるまで、1-6を繰り返す

Page 11: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

2. Ruby で step の定義を書く

3. 実行して失敗に着目する

4. step をパスするコードを作る

5. 再度実行して step がパスするのを確認する

6. キュウリのように緑色になるまで、2-5 を繰り返す

7. お金が無くなるまで、1-6を繰り返す

Page 12: How to eat Cucmber

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

Page 13: How to eat Cucmber
Page 14: How to eat Cucmber

お品書き

• Cucumber って食べれるの?

• Cucumber の下ごしらえ

• Cucumber で料理してみよう

Page 15: How to eat Cucmber

お品書き

• Cucumber って何?

• Cucumber の動かし方

• Cucumber で開発してみよう

Page 16: How to eat Cucmber

お品書き

• Cucumber って何?

• Cucumber の動かし方

• Cucumber で開発してみよう

Page 17: How to eat Cucmber

Cucumber って何?(第35回Rails勉強会 id:moro さんの資料より)

http://www.slideshare.net/moro/rails-tokyo-035-cucumber-presentation

Page 18: How to eat Cucmber

Cucumber lets software development teams describe how software should behave in plain text. The text is written in a business-readable domain-specific language and serves as documentation, automated tests and development-aid - all rolled into one format.

Cucumber って何?(http://cukes.info/ 公式サイト)

Page 19: How to eat Cucmber

• プレーンテキストで振る舞いを書ける

• 仕事上でも読めるDSL言語で書ける

• ドキュメントとしての機能も持つ

• 自動でテストを実行する

• 開発の手助けをする

Cucumber って何?(http://cukes.info/ 公式サイト)

って多分書いてる

all rolled into one format

Page 20: How to eat Cucmber

(おさらい)BDD って何?(クは駆動のク”D is for Driven” 角谷 さんの発表資料より)

http://www.slideshare.net/kakutani/d-is-for-driven

Page 21: How to eat Cucmber

(おさらい)BDD って何?(クは駆動のク”D is for Driven” 角谷 さんの発表資料より)

http://www.slideshare.net/kakutani/d-is-for-driven

Page 22: How to eat Cucmber

この章のまとめ✓ Cucumber とは プレーンテキストにシステムの振る舞いを書いて、それを実行するアプリケーション

✓ BDD のためのツール

✓ BDD のゴールと同じく、「顧客と同じ語彙で設計する」

✓ 受け入れテスト = システムの振る舞い

Page 23: How to eat Cucmber

お品書き

• Cucumber って何?

• Cucumber の動かし方

• Cucumber で開発してみよう

Page 24: How to eat Cucmber

Cucumber の動かし方

A.まずは、インストールしよう

B.Cucumber の雛形を作ろう

C.振る舞い の雛形を作ろう

D.実行しよう

Page 25: How to eat Cucmber

Cucumber の動かし方

A.まずは、インストールしよう

B.Cucumber の雛形を作ろう

C.振る舞い の雛形を作ろう

D.実行しよう

Page 26: How to eat Cucmber

gem で 以下のものをインストール

✓cucumber

✓webrat

✓nokogiri ※依存で勝手に入ると思うが✓rspec

✓rspec-rails

まずは、インストール

Page 27: How to eat Cucmber

WebratRuby Acceptance Testing for Web applications

★受け入れテストのためのツール class SignupTest < ActionController::IntegrationTest

def test_trial_account_sign_up visit home_path click_link "Sign up" fill_in "Email", :with => "[email protected]" select "Free account" click_button "Register" end

end

Page 28: How to eat Cucmber

Nokogiri鋸

★HTML, XML, SAX, XSLT, Readのパーサ require 'nokogiri' require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in... doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods... #### # Search for nodes by css doc.css('h3.r a.l').each do |link| puts link.content end

#### # Search for nodes by xpath doc.xpath('//h3/a[@class="l"]').each do |link| puts link.content end

#### # Or mix and match. doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link| puts link.content end

Page 29: How to eat Cucmber

Nokogiri鋸

★HTML, XML, SAX, XSLT, Readのパーサ require 'nokogiri' require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in... doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods... #### # Search for nodes by css doc.css('h3.r a.l').each do |link| puts link.content end

#### # Search for nodes by xpath doc.xpath('//h3/a[@class="l"]').each do |link| puts link.content end

#### # Or mix and match. doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link| puts link.content end

割愛

Page 30: How to eat Cucmber

Cucumber の動かし方

A.まずは、インストールしよう

B.Cucumber の雛形を作ろう

C.振る舞い の雛形を作ろう

D.実行しよう

Page 31: How to eat Cucmber

$ruby script/generate cucumber

Page 32: How to eat Cucmber

$ruby script/generate cucumber

Page 33: How to eat Cucmber

features/step_definitions/webrat_steps.rb

Page 34: How to eat Cucmber

• step とは、ユーザの操作内容

• features/step_definitions 以下に step を定義する

• 汎用的な step はwebrat_step.rb に記載する

• Given, When, Then には、前提の内容、実行する内容、確認する内容を定義する

• Webrat の表記で記述。Rspec の文法でも書ける

features/step_definitions/webrat_steps.rb

Page 36: How to eat Cucmber

その他にも✓ features/support/env.rb

cucumber の設定を書くファイル

✓ features/support/paths.rbpath_to メソッドとかパスに関する設定はここに書く

Page 37: How to eat Cucmber

Cucumber の動かし方

A.まずは、インストールしよう

B.Cucumber の雛形を作ろう

C.振る舞い の雛形を作ろう

D.実行しよう

Page 38: How to eat Cucmber

$ruby script/generate feature Memo

Page 39: How to eat Cucmber

$ruby script/generate feature Memo

Page 40: How to eat Cucmber

features/manage_memos.feature

Page 41: How to eat Cucmber

• feature ファイルには、振る舞いを書く

• Feature: には要求や機能を書く

• Scenario: そのフィーチャについてのテストシナリオ名を付ける

• あとは、ユーザの操作内容(Step)を記述

• Given, When, Then には、前提の内容、実行する内容、確認する内容 を書く。And は 直前の内容 ‘かつ’ です

features/manage_memos.feature

Page 42: How to eat Cucmber

features/manage_memos.feature

Page 43: How to eat Cucmber

features/manage_memos.feature

「メモを削除するシナリオ」前提として、以下のメモがある時、もし、3つ目を削除すると、その結果、以下のようになる

Page 44: How to eat Cucmber

Cucumber の動かし方

A.まずは、インストールしよう

B.Cucumber の雛形を作ろう

C.振る舞い の雛形を作ろう

D.実行しよう

Page 45: How to eat Cucmber

実行する

✓全フィーチャの実行$rake features$cucumber featutes

✓フィーチャを指定して実行$cucumber features/manage_memos.feature

Page 46: How to eat Cucmber

この章のまとめ✓ gem で cucumber, webrat をインストール

✓ ruby script/generate cucumber で cucumber 実行のための雛形を作成

✓ ruby script/generate feature XXX でXXX機能に対する振る舞いを書く雛形を作成

✓ rake features や cucumber コマンドで実行

Page 47: How to eat Cucmber

お品書き

• Cucumber って何?

• Cucumber の動かし方

• Cucumber で開発してみよう

Page 48: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

2. Ruby で step の定義を書く

3. 実行して失敗に着目する

4. step をパスするコードを作る

5. 再度実行して step がパスするのを確認する

6. キュウリのように緑色になるまで、2-5 を繰り返す

7. お金が無くなるまで、1-6を繰り返す

Page 49: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

2. Ruby で step の定義を書く

3. 実行して失敗に着目する

4. step をパスするコードを作る

5. 再度実行して step がパスするのを確認する

6. キュウリのように緑色になるまで、2-5 を繰り返す

7. お金が無くなるまで、1-6を繰り返す

その前に

Page 50: How to eat Cucmber

feature はやっぱり、日本語で書きたいよね?お客さんも僕たちも、列記とした日本人だし!

Page 51: How to eat Cucmber

features/manage_memos.feature

「メモを削除するシナリオ」前提として、以下のメモがある時、もし、3つ目を削除すると、その結果、以下のようになる

Page 52: How to eat Cucmber

features/manage_memos.feature

‘フィーチャ’, ‘シナリオ’, ‘前提’, ‘もし’, ‘ならば’, ‘かつ’

と日本語でも書ける (ありがとう! 角谷さん)

「メモを削除するシナリオ」前提として、以下のメモがある時、もし、3つ目を削除すると、その結果、以下のようになる

Page 53: How to eat Cucmber

さらに✓step_definition も自前で用意して、やれば日本語でフィーチャ内のstepを書けます

✓でも、1から書くのはなー っというあなたには、モロ味噌をお勧めします

Page 54: How to eat Cucmber

?

Page 55: How to eat Cucmber

moro-miso✓日本語の step_definition ジェネレータ

✓“キュウリにつけてお召し上がりください”

✓インストールは以下$gem sources --add http://gems.github.com$gem install moro-miso

✓参考サイトCukeの日本語step_definitionジェネレータ、misoを作ってみました(id:moro のブログ) http://d.hatena.ne.jp/moro/20090603/1244042258

Page 56: How to eat Cucmber

$ruby script/generate miso

Page 57: How to eat Cucmber

features/step_definitions/webrat_ja_steps.rb

Page 58: How to eat Cucmber

実行する時の注意

★ -l ja オプション を付ける

$cucumber features/manage_memos.feature -l ja$cucumber features -l ja

Page 59: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

2. Ruby で step の定義を書く

3. 実行して失敗に着目する

4. step をパスするコードを作る

5. 再度実行して step がパスするのを確認する

6. キュウリのように緑色になるまで、2-5 を繰り返す

7. お金が無くなるまで、1-6を繰り返す

Page 60: How to eat Cucmber

今回作りたい機能簡易なメモの作成機能の仕様

•タイトルと本文に文字を入力し、作成ボタンをクリックするとメモを作成して欲しい

•タイトルが空でボタン押下時はエラーメッセージを表示して欲しい

お客さんの声 画面イメージ

Page 61: How to eat Cucmber

1. プレーンテキストに振舞いを記述する

Page 62: How to eat Cucmber

2. Ruby で step の定義を書く

Page 63: How to eat Cucmber

3. 実行して失敗に着目する

Page 64: How to eat Cucmber

4. step をパスするコードを作る

Page 65: How to eat Cucmber

5. 再度実行して step がパスするのを確認する

Page 66: How to eat Cucmber

6. キュウリのように緑色になるまで、2-5 を繰り返す

Page 67: How to eat Cucmber

7. お金が無くなるまで、1-6を繰り返す

NO MONEY

Page 68: How to eat Cucmber

結局、何がそんなに嬉しいの?• 自然言語(っぽいもの)で書かれた振る舞い(=受け入

れテスト=仕様)でそのままテストが実行できるよ

• もちろん、繰り返し実行できるよ

• BDDのためのアプリケーションだから、BDDの恩恵が得られるよ

• ブラウザをいちいち開かなくても、テストできるよ

• Rspec で書いてた View, Controller のテストが1つで書けるよ

• 最初は大変だけど、結構すぐ書けるようになるよ

Page 69: How to eat Cucmber

問題は無かったの?• feature をお客さんに見せたら、「そりゃ、まだ、

プログラミング言語だよ、読み辛い」と言われたよ

• 受け入れテスト仕様 > Cucumberで書ける振る舞い

• Ajax まわりのテストには厳しいよ

• レイアウト周りの確認のために、結局コミット前はブラウザ立ち上げるよ

• 最近、バッチのテストに使おうと思っているけど、苦戦してるよ

• ある程度、プロジェクト内でStepが溜るまでは、大変かもしれないよ

Page 70: How to eat Cucmber

この章のまとめ✓ step_definition を用意すれば、feature は日本語でも書ける

✓ 日本語の step_definition ジェネレータ moro-miso を使うと便利

✓ 振る舞いを書いて、 step を書いて、 プロダクトコードを書いて、を繰り返しキュウリを緑色に

✓ 既に、Rspec で BDD してるなら、 採用するにあたってのデメリットは無い

Page 71: How to eat Cucmber

Cucumber で美味しい開発(実践編)

第○×回 sonic 勉強会sonicチーム id:nsgc

Page 72: How to eat Cucmber

Cucumber で美味しい開発(実践編)

第○×回 sonic 勉強会sonicチーム id:nsgc

次回開催

Page 73: How to eat Cucmber

最後に• 今回は Cucumber の入門編という内容で紹介させて頂きました

• ご要望があれば次回、実践編をさせて下さい• Rainbow プロジェクトでのノウハウ等を紹介します

• (開催されるなら)次回時までの宿題は、実際に使ってみて下さい!で、疑問を教えて下さい

Page 74: How to eat Cucmber

次回、話したい内容など• テーブル表記

• autospec で 実行

• カバレッジ計測

• cucumber.el

• Nokogiri てか、xpath について

Page 75: How to eat Cucmber

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