SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
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
諸橋恭介(@moro)
• (株)永和システムマネジメント
...(中略)... アジャイルグループ所属
• Railsコンサルタント/Railsプログラマ
• Rails勉強会@東京という勉強会を主催
http://d.hatena.ne.jp/moro/
http://tatsu-zine.com/books/cuke
今日お話しすること
• Cucumberを現実のプロジェクトで導入
する方法について考えたこと
• 第一歩目のテストの書き方
• その前の、シナリオの書き方
Cucumber
• 自然言語で仕様を記述し、実行するための
テスティングフレームワーク。
• 文に対応するRubyコード (ステップ) を実行
• End to endのテストが書ける。
• ユーザの視点のテストを書ける。
フィーチャ: 短いメッセージを投稿する
ユーザとして、
短いメッセージを投稿したい。
なぜなら、ちょっとした考えや日々の細々したことを気軽に情報発信したいからだ。
シナリオ: ユーザごとメッセージ一覧では、指定したユーザのメッセージが
新しい順に表示される
前提 ログイン名が"alice"、Eメールアドレスが"alice@example.com"のユーザがいる
かつ ログイン名が"bob"、Eメールアドレスが"bob@example.com"のユーザがいる
かつ 以下のユーザごとのメッセージがある:
| ユーザ | メッセージ | 投稿日時 |
| alice | つくば向かう。 | 12時間前 |
| alice | 着席しています(大ホール)。 | 10時間前 |
| alice | 着席しています(ランチ)。 | 1時間前 |
| bob | ランチどうする。 | 3時間前 |
もし "aliceのメッセージ一覧"ページを表示している
ならば 以下のメッセージが表示されていること:
| alice | 着席しています(ランチ)。 |
| alice | 着席しています(大ホール)。 |
| alice | つくば向かう。 |
前提 /^ログイン名が"([^"]*)"、Eメールアドレスが"([^
User.create!(:login => login, :email => email)
end
前提 /^以下のユーザ(?:が|も)いる:$/ do |table|
table.raw.each do |row|
username = row.first
When %Q[ログイン名が"#{username}"、Eメールアドレ
end
end
Cucumber
• お客様と開発者がシステムについて
会話する言語を作るフレームワーク。
• 文法を提供し、語彙を定め、その文脈を育
てるためのフレームワーク。
this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/
begin
Cucumber
rescue ThisIsNotToy
then_how?
end 現実の世界で
はじめるCucumber
現実
• 日本語の情報がない
• いまのプロジェクトへ適用する作戦が
思いつかない
• そもそも、日本語のシナリオの
使い道がない
• 日本語の情報がない
• いまのプロジェクトへ適用する作戦が
思いつかない
• そもそも、日本語のシナリオの
使い道がない
現実
http://tatsu-zine.com/books/cuke
•フィーチャ・ステップの構成
•簡単なステップの作り方
•背景
•ネストしたステップ定義
•表を使う
•シナリオアウトライン
•タグを使ったシナリオのメタデータ
• 日本語の情報がない
• いまのプロジェクトへ適用する作戦が
思いつかない
• そもそも、日本語のシナリオの
使い道がない
現実
簡単なところから
一歩ずつ
GET /
• インストール
• see 1周目: ミニマム実装と開発環境準備
•一番簡単な画面を表示してみる
•まずは「ホンモノ」のプロジェクトで
動かしてみるのが大事
シナリオ: トップページにタイトルが出る
もし トップ ページを表示している
ならば Ruby x Agile と表示されて
いること
GET /{link}
•そこからリンクを辿ってみる
•もう一度、行った先で表示を検証
シナリオ: サービスメニューを表示する
もし トップ ページを表示している
かつ ふつうのシステム開発 リンクを
クリックする
ならば サービスメニュー と表示されて
いること
POST /{simple-resource}
•簡単なデータ投入してみる
•できるだけ、できるだけ簡単に
• それでもけっこう長くなる
•そろそろステップ定義を作ることも
• see 2周目: アプリケーションを日本語化する
シナリオ: お問い合わせでメールが来る
もし トップ ページを表示している
かつ お問い合わせ・ご相談 リンクを
クリックする
かつ メールアドレス に
helpme@example.com と入力する
かつ お名前(Name) に ぼく と入力する
かつ 本文 に たた、たすけてー と入力する
かつ 送信 ボタンをクリックする
ならば rubyagile@esm.co.jp にメールが
送られること
GET /{current-task}
•いまやっているタスクのテストを書い
てみる
• 集中しているから書きやすい
• OpenID認証とかはちょっとむずい
•これまで書いた分に、バリエーショ
ンを足してみてもよい
• 日本語の情報がない
• いまのプロジェクトへ適用する作戦が
思いつかない
• そもそも、日本語のシナリオの
使い道がない
現実
読みましょう
実行できないシナリオを書く
• 逆に考えるんだ「動かなくたっていいさ」
と考えるんだ
• 読んで、振る舞いがイメージできることを
心がけて書いてみる。
• 既存のステップ定義があるとかないとかは
ちょっとしか気にしない
シナリオ: お問い合わせでメールが来る
もし トップ ページを表示している
かつ お問い合わせ・ご相談 リンクを
クリックする
かつ メールアドレス に
helpme@example.com と入力する
かつ お名前(Name) に 私 と入力する
かつ 本文 に たすけてー と入力する
かつ 送信 ボタンをクリックする
ならば rubyagile@esm.co.jp にメールが
送られること
対話のきっかけに
• 何となくイメージを知りたいお客様と。
• タスクを見積もりたいチームメンバーと。
• 実装の手がかりが欲しい自分自身と。
完璧な
Cuke
完璧な
RSpec
実装
RSpec
パス
Cuke
パス
正しい?一歩
完璧な
Cuke
完璧な
RSpec
実装
RSpec
パス
Cuke
パス
それっぽい
母国語のCuke
必要な
RSpec
実装
RSpec
パス
現実的な一歩
動かないCukeを書く意味
• 振る舞いを考える時間になる。
• その機能の「前提」や「結果」をちゃん
と考えられる。
• みんなでイメージを共有できる。
• いつか動かしたくなったときにも楽。
動くようにするには
• 最低限のエラーを取る。
• 実行してみて、表記揺れを正す。
• 黄色のスニペットを取っていく。
• ステップ定義を追加する。
• 必要ならテスト/実装も直す。
Cucumberのリズム
• プロダクトオーナーたちと会話。やることを大まか
に決める。
• Cukeを書きながら振る舞いを考える。
• 難しそうな箇所のRSpecを書く。
• 実装してRSpecを通す。
• Cukeを通す。
• テストのバリエーションや観点を増やす。
FAQ. Cucumberのテストは
お客様に見せている?
• ふつうに開発Wikiに書いたり、
打合せ資料として見せる。
• 「Cucumberというのがありまして!」と
か言わない。
• 別フォーマットの「受け入れテスト仕様」
作る必要あればそれはそれで作る。
this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/
まとめ
•Cucumberを現実のプロジェク
トで導入する方法を紹介しました
•簡単なテストから書き始める
•テストが動かなくても、自分(たち)
でよむために、母国語で書く
http://tatsu-zine.com/books/cuke
this photo is by Ctd 2005 | http://www.flickr.com/photos/kikisdad/190501758/
ご清聴
ありがとう
ございました

Weitere ähnliche Inhalte

Was ist angesagt?

僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!
Masato Noguchi
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
 
Javaから見たRubyの世界
Javaから見たRubyの世界Javaから見たRubyの世界
Javaから見たRubyの世界
Takafumi Yoshida
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
Ryunosuke SATO
 

Was ist angesagt? (13)

僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
Rubotoを試してみた
Rubotoを試してみたRubotoを試してみた
Rubotoを試してみた
 
Javaから見たRubyの世界
Javaから見たRubyの世界Javaから見たRubyの世界
Javaから見たRubyの世界
 
Agile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjukuAgile japan2012 agilesamurai_shinjuku
Agile japan2012 agilesamurai_shinjuku
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
ご注文はライブラリですか?
ご注文はライブラリですか?ご注文はライブラリですか?
ご注文はライブラリですか?
 
okrk01_ kitanokunikara-konnnichinu
okrk01_ kitanokunikara-konnnichinuokrk01_ kitanokunikara-konnnichinu
okrk01_ kitanokunikara-konnnichinu
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
RubyからC#を扱う
RubyからC#を扱うRubyからC#を扱う
RubyからC#を扱う
 
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことPHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
 

Ähnlich wie Begin cucumber-in-real-world

続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
Yukei Wachi
 
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
masashi takehara
 

Ähnlich wie Begin cucumber-in-real-world (20)

チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
「20分で作る!」 あっという間のアンケートサイト by NetCommons
「20分で作る!」 あっという間のアンケートサイト by NetCommons「20分で作る!」 あっという間のアンケートサイト by NetCommons
「20分で作る!」 あっという間のアンケートサイト by NetCommons
 
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementationビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
DevOps Conference #1
DevOps Conference #1DevOps Conference #1
DevOps Conference #1
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Nulabとawsと私
Nulabとawsと私Nulabとawsと私
Nulabとawsと私
 
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
 
アジャイルサムライ他流試合 - 道場紹介
アジャイルサムライ他流試合 - 道場紹介アジャイルサムライ他流試合 - 道場紹介
アジャイルサムライ他流試合 - 道場紹介
 
皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 

Mehr von Kyosuke MOROHASHI

Test Context Arrangement Recipebook
Test Context Arrangement RecipebookTest Context Arrangement Recipebook
Test Context Arrangement Recipebook
Kyosuke MOROHASHI
 

Mehr von Kyosuke MOROHASHI (13)

Introduction HTTP via cURL
Introduction HTTP via cURLIntroduction HTTP via cURL
Introduction HTTP via cURL
 
Ruby ecosystem applied to agile project
Ruby ecosystem applied to agile projectRuby ecosystem applied to agile project
Ruby ecosystem applied to agile project
 
Test Context Arrangement Recipebook
Test Context Arrangement RecipebookTest Context Arrangement Recipebook
Test Context Arrangement Recipebook
 
Cucumber in Practice(en)
Cucumber in Practice(en)Cucumber in Practice(en)
Cucumber in Practice(en)
 
Rails testing environment, 2009 fall
Rails testing environment, 2009 fallRails testing environment, 2009 fall
Rails testing environment, 2009 fall
 
TDD frameworks let me dream "Project Specific Language"
TDD frameworks let me dream "Project Specific Language"TDD frameworks let me dream "Project Specific Language"
TDD frameworks let me dream "Project Specific Language"
 
Rails Tokyo 035 Cucumber
Rails Tokyo 035 CucumberRails Tokyo 035 Cucumber
Rails Tokyo 035 Cucumber
 
OSC2008 勉強会大集合 Rails勉強会@東京
OSC2008 勉強会大集合 Rails勉強会@東京OSC2008 勉強会大集合 Rails勉強会@東京
OSC2008 勉強会大集合 Rails勉強会@東京
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareer
 
named_scope more detail
named_scope more detailnamed_scope more detail
named_scope more detail
 
Rails <form> Chronicle
Rails <form> ChronicleRails <form> Chronicle
Rails <form> Chronicle
 
そうだ勉強会に行こう
そうだ勉強会に行こうそうだ勉強会に行こう
そうだ勉強会に行こう
 

Begin cucumber-in-real-world