SlideShare a Scribd company logo
TDDを勉強してみた
                 広島Ruby勉強会 #027
                      2013/2/2
                     @CentBoss
              at広島市青少年センター生活実習室




13年2月2日土曜日                        1
自己紹介的な何か

             • @CentBossの人です
             • 広島工業大学の学生です
             • プログラミングは初心者レベルです
             • 目標は@eielhさんです
             • Emacsを勉強してます!
13年2月2日土曜日                        2
今回はあくまでもTDDのさわりなので
                 深いことは喋りません
               勉強してきた範囲で喋ります
             というかBDDじゃね?とかも思ってます




13年2月2日土曜日                         3
あと、初めてLTするのでお手柔らかにお願いします




13年2月2日土曜日                   4
本題




13年2月2日土曜日        5
そもそもTDDとは?

             • test-driven developmentの略
             • テスト駆動開発
             • →テストをしながら実装を進める開発技法



13年2月2日土曜日                                 6
TDDの開発サイクル

                        Red




             Refactor         Green


13年2月2日土曜日                            7
TDDの開発サイクル

             • 非常に小さい失敗するテストを書く
              →Red
             • 出来る限りテストをパスできるような
              最小限のコードを実装する→Green

             • コードをきれいにする→Refactor

13年2月2日土曜日                           8
RubyでTDDをするには?


             RspecとCucumberと言うものがあるらしい
  他にもいろいろある感じだけど、今日はこれを選択

              というかこれしか使ったことがない




13年2月2日土曜日                               9
RubyでTDDをするには?
      ・Cucumber
       アプリケーションの振る舞いをテスト
       あるコンテキストで(Given)
       あるイベントが発生すると(When)
       ある結果が期待されます(Then)

      ・Rspec
       オブジェクトの振る舞いをテスト

13年2月2日土曜日                  10
RubyでTDDをするには?
 Cucumber                    Rspec


               Red                      Red




                             Refactor         Green


    Refactor         Green


13年2月2日土曜日                                            11
RubyでTDDをするには?
  1.Cucumberで1つのシナリオに焦点を合わせる
  2.失敗するステップ定義を書く
  3.Rspecで失敗するサンプルを書く
  4.Rspecでサンプルを成功させる最低限コードを実装する
  5.Rspecで書いた最低限コードをリファクタリングする
  6.Cucumberでリファクタリングする




13年2月2日土曜日                        12
頑張ってサンプル用意しました!!




13年2月2日土曜日                      13
RubyでTDDをしてみる
             •   今回のシナリオ

             •   「sample.rbを実行すると”Hiroshima.rb #027”と表示される」




13年2月2日土曜日                                                    14
RubyでTDDをしてみる
  1.Cucumberで1つのシナリオに焦点を合わせる
     #	
  language:	
  ja
     機能:	
  文字列の表示
     	
  
     	
  	
  シナリオ:	
  sample.rbを実行する
     	
  	
  	
  	
  もし	
  sample.rbを実行した場合
     	
  	
  	
  	
  かつ	
  メッセージが出力される
     	
  	
  	
  	
  ならば	
  "Hiroshima.rb	
  #027"と表示している




13年2月2日土曜日                                                  15
RubyでTDDをしてみる
  1.Cucumberで1つのシナリオに焦点を合わせる
     #	
  language:	
  ja
     機能:	
  文字列の表示


     	
  	
  シナリオ:	
  sample.rbを実行する	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  features/sample.feature:4
     	
  	
  	
  	
  もしsample.rbを実行した場合	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  features/sample.feature:5
     	
  	
  	
  	
  かつメッセージが出力される	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  features/sample.feature:6
     	
  	
  	
  	
  ならば"Hiroshima.rb	
  #027"と表示している	
  #	
  features/sample.feature:7

     1	
  scenario	
  (1	
  undefined)
     3	
  steps	
  (3	
  undefined)
     0m0.003s                                                                                                                          Step definitions
     You	
  can	
  implement	
  step	
  definitions	
  for	
  undefined	
  steps	
  with	
  these	
  snippets:                           に書いてね
     もし	
  /^sample.rbを実行した場合$/	
  do
     	
  	
  pending	
  #	
  express	
  the	
  regexp	
  above	
  with	
  the	
  code	
  you	
  wish	
  you	
  had
     end

     もし	
  /^メッセージが出力される$/	
  do
     	
  	
  pending	
  #	
  express	
  the	
  regexp	
  above	
  with	
  the	
  code	
  you	
  wish	
  you	
  had
     end

     ならば	
  /^"(.*?)"と表示している$/	
  do	
  |arg1|
     	
  	
  pending	
  #	
  express	
  the	
  regexp	
  above	
  with	
  the	
  code	
  you	
  wish	
  you	
  had
     end




13年2月2日土曜日                                                                                                                                               16
RubyでTDDをしてみる
  2.失敗するステップ定義を書く
     # coding: utf-8
     もし /^sample.rbを実行した場合$/ do
      pending # express the regexp above with the code you wish you had
     end

     もし /^メッセージが出力される$/ do
      pending # express the regexp above with the code you wish you had
     end

     ならば /^"(.*?)"と表示している$/ do |arg1|
      pending # express the regexp above with the code you wish you had
     end




13年2月2日土曜日                                                                17
RubyでTDDをしてみる
  2.失敗するステップ定義を書く
     # language: ja
     機能: 文字列の表示



       シナリオ: sample.rbを実行する                # features/sample.feature:4
        もしsample.rbを実行した場合                 # features/step_definitions/sample_steps.rb:2
         TODO (Cucumber::Pending)
         ./features/step_definitions/sample_steps.rb:3:in `/^sample.rbを実行した場合$/'
         features/sample.feature:5:in `もしsample.rbを実行した場合'
        かつメッセージが出力される                          # features/step_definitions/sample_steps.rb:6
        ならば"Hiroshima.rb #027"と表示している # features/step_definitions/sample_steps.rb:10

     1 scenario (1 pending)
     3 steps (2 skipped, 1 pending)


13年2月2日土曜日                                                                                    18
RubyでTDDをしてみる
  2.失敗するステップ定義を書く
     # coding: utf-8
     もし /^sample.rbを実行した場合$/ do
      @sample = Sample.new
     end

     もし /^メッセージが出力される$/ do
      @message = @sample.message
     end

     ならば /^"(.*?)"と表示している$/ do |arg1|
      @message.should == 'Hiroshima.rb #027'
     end




13年2月2日土曜日                                     19
RubyでTDDをしてみる
  3.Rspecで失敗するサンプルを書く
     require 'sample'

     describe "Message" do
      it "get message" do
        sample = Sample.new
        message = sample.message
        message.should == 'Hiroshima.rb #027'
      end
     end




13年2月2日土曜日                                      20
RubyでTDDをしてみる
  3.Rspecで失敗するサンプルを書く
     F                                          “F”が失敗したということ
     Failures:

         1) Message get message
           Failure/Error: sample = Sample.new
           NameError:
            uninitialized constant Sample
           # ./spec/sample_spec.rb:5:in `block (2 levels) in <top (required)>'

     Finished in 0.00077 seconds
     1 example, 1 failure

     Failed examples:

     rspec ./spec/sample_spec.rb:4 # Message get message



13年2月2日土曜日                                                                       21
RubyでTDDをしてみる
  4.Rspecでサンプルを成功させる最低限コードを実装する
     class Sample
       def message
        "Hiroshima.rb #027"
       end
     end




13年2月2日土曜日                        22
RubyでTDDをしてみる
  4.Rspecでサンプルを成功させる最低限コードを実装する
     .
                                   “.”が成功したということ
     Finished in 0.00037 seconds
     1 example, 0 failures




13年2月2日土曜日                                         23
RubyでTDDをしてみる
  4.Rspecでサンプルを成功させる最低限コードを実装する
     # language: ja
     機能: 文字列の表示



       シナリオ: sample.rbを実行する             # features/sample.feature:4
        もしsample.rbを実行した場合              # features/step_definitions/sample_steps.rb:2
        かつメッセージが出力される                       # features/step_definitions/sample_steps.rb:6
        ならば"Hiroshima.rb #027"と表示している # features/step_definitions/sample_steps.rb:10

     1 scenario (1 passed)
     3 steps (3 passed)




13年2月2日土曜日                                                                                 24
RubyでTDDをしてみる
  5.Rspecで書いた最低限コードをリファクタリングする
  6.Cucumberでリファクタリングする



             今日のところは省略ということで…




13年2月2日土曜日                       25
↓本日のサンプルはGithubにあります↓
             https://github.com/moriC/hiroshimarb-tdd




13年2月2日土曜日                                              26
ご清聴ありがとうございました




13年2月2日土曜日                    27

More Related Content

PDF
mrubyボードを使って こんなことしてみました Kansai.mrb 2014 dec
Yoshito Tanaka
 
PPTX
リーダブルコード 1.0'
Yamamura Takashi
 
PPTX
正規表現勉強会
zaru sakuraba
 
PDF
Students.rb #1 資料
Tetsunari Niina
 
ODP
RSpecのここがすごい!
mitim
 
PPT
Rspec
Yunosuke Taga
 
PPT
第1部「一時間で覚えるruby」
Hiromu Shioya
 
PDF
Phperがgoをさわってみた
yasuo424
 
mrubyボードを使って こんなことしてみました Kansai.mrb 2014 dec
Yoshito Tanaka
 
リーダブルコード 1.0'
Yamamura Takashi
 
正規表現勉強会
zaru sakuraba
 
Students.rb #1 資料
Tetsunari Niina
 
RSpecのここがすごい!
mitim
 
第1部「一時間で覚えるruby」
Hiromu Shioya
 
Phperがgoをさわってみた
yasuo424
 

What's hot (9)

PDF
ECMAScript没proposal追悼式
京大 マイコンクラブ
 
PDF
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
 
PDF
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
Kouhei Sutou
 
PDF
リーダブルコード勉強会
norimatsu2012
 
PDF
今さらながらRSpecに入門してみた
zaru sakuraba
 
PDF
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
LINE Corporation
 
PDF
Mishimasyk6 iwatobipen
Takayuki Serizawa
 
PDF
Mishimasyk 3 20140705
Takayuki Serizawa
 
PPTX
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
 
ECMAScript没proposal追悼式
京大 マイコンクラブ
 
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
 
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
Kouhei Sutou
 
リーダブルコード勉強会
norimatsu2012
 
今さらながらRSpecに入門してみた
zaru sakuraba
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
LINE Corporation
 
Mishimasyk6 iwatobipen
Takayuki Serizawa
 
Mishimasyk 3 20140705
Takayuki Serizawa
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
 
Ad

Viewers also liked (10)

PDF
Wtm #55 e learning cms moodleについてと、大学での活用事例
森下 智裕
 
PDF
大学組織と社会人をつなぐ取り組み
森下 智裕
 
PDF
Raspberry piでlチカしてみた
森下 智裕
 
PDF
広島Git勉強会
森下 智裕
 
PPSX
Разработка бизнес-планов, ТЭО и функциональных моделей
Агентство стратегического развития АСТРАР
 
DOC
Chris resume updated 1 3 16 - Copy
Chris Brannon
 
PDF
時代はMiddleman
森下 智裕
 
PDF
#31 愛しのst2
森下 智裕
 
PDF
Opencampus
森下 智裕
 
PDF
#30 bddについて調べたことを丁寧に説明する
森下 智裕
 
Wtm #55 e learning cms moodleについてと、大学での活用事例
森下 智裕
 
大学組織と社会人をつなぐ取り組み
森下 智裕
 
Raspberry piでlチカしてみた
森下 智裕
 
広島Git勉強会
森下 智裕
 
Разработка бизнес-планов, ТЭО и функциональных моделей
Агентство стратегического развития АСТРАР
 
Chris resume updated 1 3 16 - Copy
Chris Brannon
 
時代はMiddleman
森下 智裕
 
#31 愛しのst2
森下 智裕
 
Opencampus
森下 智裕
 
#30 bddについて調べたことを丁寧に説明する
森下 智裕
 
Ad

Similar to #027 tddのさわり (20)

PDF
エクストリームエンジニア4
T-arts
 
PDF
新しくプログラミング言語・・・Rubyでやってみた
Tomoaki Ueda
 
PDF
Tddのすゝめ
将 高野
 
ODP
Lt会01_uetch
Tomoaki Ueda
 
PDF
20110820 metaprogramming
Masanori Kado
 
PDF
最近の単体テスト
Ken Morishita
 
PDF
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
Shoot Morii
 
PDF
Ruby 3の型推論やってます
mametter
 
PDF
Meta programing ruby monday
Yuisho Takafuji
 
PDF
ゆるLTのススメ+α
joker1007
 
PDF
『JUnit実践入門』写経・実践会 in 横浜 #2
shinyaa31
 
PPT
Sue445 Style TDD #atest_hack
Go Sueyoshi (a.k.a sue445)
 
KEY
First Step TDD
Jun Yokoyama
 
ODP
とっとるびー(2回目)発表資料
ionis111
 
PDF
TDDを研ぎ究める
pocketberserker
 
PDF
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
 
PDF
Ruby&Active Support for expert 3
xibbar
 
PDF
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
 
エクストリームエンジニア4
T-arts
 
新しくプログラミング言語・・・Rubyでやってみた
Tomoaki Ueda
 
Tddのすゝめ
将 高野
 
Lt会01_uetch
Tomoaki Ueda
 
20110820 metaprogramming
Masanori Kado
 
最近の単体テスト
Ken Morishita
 
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
Shoot Morii
 
Ruby 3の型推論やってます
mametter
 
Meta programing ruby monday
Yuisho Takafuji
 
ゆるLTのススメ+α
joker1007
 
『JUnit実践入門』写経・実践会 in 横浜 #2
shinyaa31
 
Sue445 Style TDD #atest_hack
Go Sueyoshi (a.k.a sue445)
 
First Step TDD
Jun Yokoyama
 
とっとるびー(2回目)発表資料
ionis111
 
TDDを研ぎ究める
pocketberserker
 
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
 
Ruby&Active Support for expert 3
xibbar
 
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
 

#027 tddのさわり