SlideShare a Scribd company logo
1 of 13
Cucumber+Rspecではじめる

BDD開発
13/10/21 IACCラボ勉強会
BDDとは
• ビヘイビア駆動型開発
• TDD(テスト駆動開発)がさらに進んだ(?)もの
BDDとは
• ビヘイビア駆動型開発
• TDD(テスト駆動開発)がさらに進んだ(?)もの
( ◠‿◠ ) ・・・???
テストと振る舞いの違い(イメージ)
テスト

ビヘイビア

• Test “tweet” do

• Scenario “ツイートする” do

ツイートを投稿するコード
投稿の反映を確認するコード

• ツイートを送信すると、
• TLに反映される

• End

• End

→プログラマ寄りの記述

→ノンプログラマでも読める記
述
(※実装は別で与える)
振る舞いを書く特徴・メリット
• 実装構造ではなく、振る舞いを基準として動作を分解
→開発者、顧客双方が触れやすい形式

• 仕様書として機能する
→顧客/開発者間の認識の齟齬を減らしうる

• 自然言語に近い形で記述できる
→ステークホルダー(顧客)にとって理解しやすい
Cucumber – ビヘイビアの書き方
• シナリオを書く
Feature: FizzBuzz output
FizzBuzz is a game that has gained in popularity as a programming assignment to weed out non-programmers during job interviews. The
object of the assignment is less about solving it correctly according to the below rules and more about showing the programmer understands
basic, necessary tools such as if-/else-statements and loops. The rules of FizzBuzz are as follows:
For a given number X,
if X is divisible by 3 print Fizz;
if X is divisible by 5 print Buzz;
if X is divisible by 3 and 5 (15) print FizzBuzz;
else, print X.
Scenario: Fizz
Given I start FizzBuzz
When X is 3
Then I should see “Fizz”
Cucumber – ビヘイビアの書き方
• シナリオを書く
Feature: FizzBuzz
FizzBuzz is a game that has gained in popularity as a programming assignment to weed out non-programmers during job interviews. The
object of the assignment is less about solving it correctly according to the below rules and more about showing the programmer understands
basic, necessary tools such as if-/else-statements and loops. The rules of FizzBuzz are as follows:
For a given number X,
if X is divisible by 3 print Fizz;
if X is divisible by 5 print Buzz;
if X is divisible by 3 and 5 (15) print FizzBuzz;
else, print X.

ドキュメントを自然言語で書き
下す(コメント行)

Scenario: Fizz
Given I start FizzBuzz
When X is 3
Then I should see “Fizz”

ドキュメントが満たすべきシナ
リオ
→別で定義が与えられる
Cucumber – シナリオの各ステップ定義
• 1行1行定義を与える
• これを書く時点でFizzBuzzクラスを作っていなくても良い
• 最もその挙動に相応しい(と信じる)コードをとりあえず書く
Given I start FizzBuzz
When X is 3
Then I should see “Fizz”

Given /^I start FizzBuzz&/ do
@myfizzbuzz = FizzBuzz.new
End
When /^X is “*%d++”&/ do |number|
@myfizzbuzz.num = number
End
Then /^I should see “(*^”+)”&/ do |answer|
@myfizzbuzz.answer().should == answer
end

Given(動作前の状態)
When(いま行う動作)
Then(その動作に対応する挙動)
の形式で書くのが一般的
Rspecとの連携
• 抽象的な振る舞いを、より具体的な処理に落とし込んでテスト
を作る
• 処理を入れ子にした階層的な記述が可能
• 振る舞いだけでなく、実際の処理の流れを意識した記述になる

module FizzBuzz
describe “Fizz” do
it “3の倍数かつ5の倍数でないとき、Fizzが出力される” do
(↑の条件に合った数に対して、Fizzが出力されることを試すコード)
end
it “その他のとき、Fizz以外が出力される” do
(Fizz以外が出力されることを試すコード)
end
end
describe “Buzz” do
(後略)
Rspec(など)との連携(実際作業の進め
方)
• Red(とりあえず書くけど、実装前なのでテストは落ちる)
• Green(Redになったテストを通す最小限のコードを書く)
• Refactor(Green状態を維持しつつコードの質を高める)
Cucumber side
RED

GREEN
RED

RSpec side

GREEN

REFACTOR

REFACTOR
疑問点
• CucumberとRspecの棲み分け
• 漏れのないテストケースの作成
与太話:FizzBuzzEnterpriseEdition
おわり

More Related Content

What's hot

読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラムamusementcreators
 
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~Yuta Sakurai
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Kazuhide Maruyama
 
2014 08-30 life with roslyn
2014 08-30 life with roslyn2014 08-30 life with roslyn
2014 08-30 life with roslynshibuki
 
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKGoogle Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKMasahiro Wakame
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部Masahiro Wakame
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
lessコマンドのちょっと便利な使い方
lessコマンドのちょっと便利な使い方lessコマンドのちょっと便利な使い方
lessコマンドのちょっと便利な使い方Hideaki Miyake
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできることkamiyam .
 
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話開発チームにKotlinを導入した話
開発チームにKotlinを導入した話Hiroshi Kikuchi
 

What's hot (12)

読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScriptjQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
 
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)
 
2014 08-30 life with roslyn
2014 08-30 life with roslyn2014 08-30 life with roslyn
2014 08-30 life with roslyn
 
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKGoogle Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
lessコマンドのちょっと便利な使い方
lessコマンドのちょっと便利な使い方lessコマンドのちょっと便利な使い方
lessコマンドのちょっと便利な使い方
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできること
 
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
 

Viewers also liked

Importance of Childcare
Importance of ChildcareImportance of Childcare
Importance of ChildcareJohn Paul
 
Presentación e-Best Phone
Presentación e-Best PhonePresentación e-Best Phone
Presentación e-Best PhoneDanielHSJ
 
KIMU BERRI_presentation_Jokin.Otaegi
KIMU BERRI_presentation_Jokin.OtaegiKIMU BERRI_presentation_Jokin.Otaegi
KIMU BERRI_presentation_Jokin.OtaegiJokin Otaegui
 
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALES
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALESTHE SECRET SAUCE FOR ACCELERATING INDIRECT SALES
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALESJordan Linford
 

Viewers also liked (8)

Importance of Childcare
Importance of ChildcareImportance of Childcare
Importance of Childcare
 
Presentación e-Best Phone
Presentación e-Best PhonePresentación e-Best Phone
Presentación e-Best Phone
 
Hala tuju selepas spm
Hala tuju selepas spmHala tuju selepas spm
Hala tuju selepas spm
 
Hala tuju selepas spm
Hala tuju selepas spmHala tuju selepas spm
Hala tuju selepas spm
 
KIMU BERRI_presentation_Jokin.Otaegi
KIMU BERRI_presentation_Jokin.OtaegiKIMU BERRI_presentation_Jokin.Otaegi
KIMU BERRI_presentation_Jokin.Otaegi
 
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALES
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALESTHE SECRET SAUCE FOR ACCELERATING INDIRECT SALES
THE SECRET SAUCE FOR ACCELERATING INDIRECT SALES
 
Hala tuju selepas spm
Hala tuju selepas spmHala tuju selepas spm
Hala tuju selepas spm
 
Hala tuju selepas spm
Hala tuju selepas spmHala tuju selepas spm
Hala tuju selepas spm
 

Similar to Benkyokai

仕様七変化
仕様七変化仕様七変化
仕様七変化galluda
 
コード品質を保つために心がけたいこと
コード品質を保つために心がけたいことコード品質を保つために心がけたいこと
コード品質を保つために心がけたいことKentarou Takeda
 
開発者は仕事でリーダブルなコードを書けるのか?
開発者は仕事でリーダブルなコードを書けるのか?開発者は仕事でリーダブルなコードを書けるのか?
開発者は仕事でリーダブルなコードを書けるのか?Kouhei Sutou
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode ContractsYoshifumi Kawai
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015Ryo Nakamaru
 
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料Takashi Imagire
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2Shuichi Tsutsumi
 

Similar to Benkyokai (8)

仕様七変化
仕様七変化仕様七変化
仕様七変化
 
コード品質を保つために心がけたいこと
コード品質を保つために心がけたいことコード品質を保つために心がけたいこと
コード品質を保つために心がけたいこと
 
開発者は仕事でリーダブルなコードを書けるのか?
開発者は仕事でリーダブルなコードを書けるのか?開発者は仕事でリーダブルなコードを書けるのか?
開発者は仕事でリーダブルなコードを書けるのか?
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
 
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 

Benkyokai