SlideShare a Scribd company logo
第3回BDD勉強会
フィードバックと改善
フィードバックを得る
•   重複する数字を扱う方法に問題あり


    •   暗号が1234の時に推測を1155とすると
        採点が+ーとなってしまう
要件を決定
•   推測したそれぞれの数値は一度きりの一致のみ有効


•   例)暗号が1234で推測が1134の場合
      結果は+++になる


    •   2番目の1は無視される
修正の手順


• Featureの修正
• RSpecにサンプルを追加
• プログラムコードの修正
Feature修正
Scenarios: matches with duplicates
 | code | guess | mark |
 | 1234 | 1155 | +     |
 | 1234 | 5115 | -     |
 | 1134 | 1155 | ++ |
 | 1134 | 5115 | +- |
 | 1134 | 5511 | --    |
 | 1134 | 1115 | ++ |
 | 1134 | 5111 | +- |
RSpecサンプル修正
context "with 1 exact match duplicated in guess" do
 it "returns 0" do
   pending("refactor number_match_count")
   marker = Marker.new('1234','1155')
   marker.number_match_count.should == 0
 end
end

           最初はpendingにしておくことで
       新しい失敗が発生しても混同しなくなる
RSpec
•   サブジェクトコード
     RSpecを使って振る舞いを指定するコード

•   エクスペクテーション
     →アサーション

•   サンプルコード
     →テスト

•   サンプルグループ
     →テストケース

•   スペック
     →1つ以上のサンプルを含んでいるファイル
サンプルグループ


  サンプルコード
              describe "A new Account" do
     サブジェクト    it "should have a balance of 0" do
                 account = Account.new
     コード




                 account.balance.should == Money.new(0, :USD)
               end
              end
サンプルグループ

• describeメソッド
• contextメソッド
• 対象を説明する場合はdescribe
 状態を説明する場合はcontext
 が一般的?
describe User, "with no roles assigned" do
 ...
end
=> User with no roles assigned

describe User, "(ロール未割り当て)" do
 ...
end
=> User (ロール未割り当て)
module Authentication
 describe User, "with no roles assigned" do
  ...
 end
end
=> Authentication::User with no roles assigned
describe User do
 describe "with no roles assigned" do
  it "is not allowed to view protected content"
    ...
  end
 end
end
=>User
    with no roles assigned
     is not allowed to view protected content
サンプルコード
describe Stack do
 before(:each) do
  @stack = Stack.new
  @stack.push :item
 end

 describe "#peek" do
  it "should return the top element" do
    @stack.peek.should == :item
  end
 end
end
Stack
    #peek
      should return the top element

shouldを消すとさらにドキュメントぽくなる

       Stack
        #peek
          return the top element

         Stack
          #peek
            先頭の要素を返す
サンプルを保留扱いにする
it "should be read all over"
it "should not be mixed with french fries" do
  pending "cleaning out the fryer"
  ...
end
it "should be empty" do
  pending ("bug report 18976") do
    [].should be_empty
  end
end
フック


• before(:each)、before(:all)
• after(:each)、after(:all)
• around(:each)
ヘルパーメソッド
 describe Thing do
  def create_thing(options) do
    thing = Thing.new
    thing.set_status(options[:status])
    thing
  end
  it "should do something when ok" do
    thing = create_thing(:status => "ok")
    ...
  end
 end
複数のサンプルグループで共有したい場合はmoduleでくくる
サンプルの共有
shared_examples_for "any pizza" do
 it "tastes really good" do
   @pizza.should taste_really_good
 end

 it "is available by the slice" do
    @pizza.should be available_by_the_slice
  end
end
describe "New York style thin crust pizza" do
 before :each do
   @pizza = Pizza.new(:region => "New York",
                          :style => "thin crust")
 end
 it behaves_like "any pizza"
 it "has a really great sauce" do
   @pizza.should have_a_really_great_sauce
 end
end

More Related Content

What's hot

PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZ
Wataru Terada
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
Takaaki Tanaka
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
Akio Ishida
 
超絶技巧プログラミングの世界(FTD2015)
超絶技巧プログラミングの世界(FTD2015)超絶技巧プログラミングの世界(FTD2015)
超絶技巧プログラミングの世界(FTD2015)
mametter
 
HHVM Hack
HHVM HackHHVM Hack
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
infinite_loop
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたMoriyoshi Koizumi
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
Masashi Shinbara
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
Yasuyuki Maeda
 
phpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDDphpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDD
Akio Ishida
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・RubyでやってみたTomoaki Ueda
 

What's hot (20)

JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZ
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
 
超絶技巧プログラミングの世界(FTD2015)
超絶技巧プログラミングの世界(FTD2015)超絶技巧プログラミングの世界(FTD2015)
超絶技巧プログラミングの世界(FTD2015)
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 
phpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDDphpspecで学ぶLondon School TDD
phpspecで学ぶLondon School TDD
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた
 

Similar to 第3回BDD勉強会

Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
kyoto university
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
Takahiro Sugiura
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
kyoto university
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①
Yu Yu
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
Ken Morishita
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画Kazufumi Ohkawa
 

Similar to 第3回BDD勉強会 (20)

Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Python opt
Python optPython opt
Python opt
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 

Recently uploaded

HRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreachHRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreach
gmiki1
 
kintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdfkintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdf
takashihashimoto14
 
【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer
yutooyama
 
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
recruit9
 
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
DAISUKE NAKAMURA
 
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL HoldingsThe AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
mikidaisuke
 
intra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updatesintra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updates
NTTDATA INTRAMART
 
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
ssuser4eac57
 
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
ssuserdc1268
 
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
ytakahashi4
 
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
Members_corp
 

Recently uploaded (11)

HRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreachHRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreach
 
kintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdfkintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdf
 
【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer
 
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
 
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
 
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL HoldingsThe AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
 
intra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updatesintra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updates
 
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
 
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
 
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
 
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
 

第3回BDD勉強会

  • 3. フィードバックを得る • 重複する数字を扱う方法に問題あり • 暗号が1234の時に推測を1155とすると 採点が+ーとなってしまう
  • 4. 要件を決定 • 推測したそれぞれの数値は一度きりの一致のみ有効 • 例)暗号が1234で推測が1134の場合   結果は+++になる • 2番目の1は無視される
  • 6. Feature修正 Scenarios: matches with duplicates | code | guess | mark | | 1234 | 1155 | + | | 1234 | 5115 | - | | 1134 | 1155 | ++ | | 1134 | 5115 | +- | | 1134 | 5511 | -- | | 1134 | 1115 | ++ | | 1134 | 5111 | +- |
  • 7. RSpecサンプル修正 context "with 1 exact match duplicated in guess" do it "returns 0" do pending("refactor number_match_count") marker = Marker.new('1234','1155') marker.number_match_count.should == 0 end end 最初はpendingにしておくことで 新しい失敗が発生しても混同しなくなる
  • 9. サブジェクトコード  RSpecを使って振る舞いを指定するコード • エクスペクテーション  →アサーション • サンプルコード  →テスト • サンプルグループ  →テストケース • スペック  →1つ以上のサンプルを含んでいるファイル
  • 10. サンプルグループ サンプルコード describe "A new Account" do サブジェクト it "should have a balance of 0" do account = Account.new コード account.balance.should == Money.new(0, :USD) end end
  • 11. サンプルグループ • describeメソッド • contextメソッド • 対象を説明する場合はdescribe 状態を説明する場合はcontext が一般的?
  • 12. describe User, "with no roles assigned" do ... end => User with no roles assigned describe User, "(ロール未割り当て)" do ... end => User (ロール未割り当て)
  • 13. module Authentication describe User, "with no roles assigned" do ... end end => Authentication::User with no roles assigned
  • 14. describe User do describe "with no roles assigned" do it "is not allowed to view protected content" ... end end end =>User with no roles assigned is not allowed to view protected content
  • 15. サンプルコード describe Stack do before(:each) do @stack = Stack.new @stack.push :item end describe "#peek" do it "should return the top element" do @stack.peek.should == :item end end end
  • 16. Stack #peek should return the top element shouldを消すとさらにドキュメントぽくなる Stack #peek return the top element Stack #peek 先頭の要素を返す
  • 17. サンプルを保留扱いにする it "should be read all over" it "should not be mixed with french fries" do pending "cleaning out the fryer" ... end it "should be empty" do pending ("bug report 18976") do [].should be_empty end end
  • 19. ヘルパーメソッド describe Thing do def create_thing(options) do thing = Thing.new thing.set_status(options[:status]) thing end it "should do something when ok" do thing = create_thing(:status => "ok") ... end end 複数のサンプルグループで共有したい場合はmoduleでくくる
  • 20. サンプルの共有 shared_examples_for "any pizza" do it "tastes really good" do @pizza.should taste_really_good end it "is available by the slice" do @pizza.should be available_by_the_slice end end
  • 21. describe "New York style thin crust pizza" do before :each do @pizza = Pizza.new(:region => "New York", :style => "thin crust") end it behaves_like "any pizza" it "has a really great sauce" do @pizza.should have_a_really_great_sauce end end

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n