SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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

La actualidad más candente (9)

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

Destacado

Wtm #55 e learning cms moodleについてと、大学での活用事例
Wtm #55 e learning cms moodleについてと、大学での活用事例Wtm #55 e learning cms moodleについてと、大学での活用事例
Wtm #55 e learning cms moodleについてと、大学での活用事例森下 智裕
 
大学組織と社会人をつなぐ取り組み
大学組織と社会人をつなぐ取り組み大学組織と社会人をつなぐ取り組み
大学組織と社会人をつなぐ取り組み森下 智裕
 
Raspberry piでlチカしてみた
Raspberry piでlチカしてみたRaspberry piでlチカしてみた
Raspberry piでlチカしてみた森下 智裕
 
Chris resume updated 1 3 16 - Copy
Chris resume updated 1 3 16 - CopyChris resume updated 1 3 16 - Copy
Chris resume updated 1 3 16 - CopyChris Brannon
 
#30 bddについて調べたことを丁寧に説明する
#30 bddについて調べたことを丁寧に説明する#30 bddについて調べたことを丁寧に説明する
#30 bddについて調べたことを丁寧に説明する森下 智裕
 

Destacado (10)

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

Similar a #027 tddのさわり

PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜Fukui Osamu
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Developmentaktsk
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしyamanekko
 
Shibuya.el
Shibuya.elShibuya.el
Shibuya.eluk-ar
 
DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - kumamidori
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope高広 内山
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby IntroductionYushiroDodo
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)Ryo Nagai
 
俺のRails開発環境
俺のRails開発環境俺のRails開発環境
俺のRails開発環境joker1007
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 

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

PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Development
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
Shibuya.el
Shibuya.elShibuya.el
Shibuya.el
 
Tdd
TddTdd
Tdd
 
DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す -
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
詳解! Decimal
詳解! Decimal詳解! Decimal
詳解! Decimal
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
TDD一連の流れ
TDD一連の流れTDD一連の流れ
TDD一連の流れ
 
簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)
 
Frank-afcproxy
Frank-afcproxyFrank-afcproxy
Frank-afcproxy
 
12 13-lecture
12 13-lecture12 13-lecture
12 13-lecture
 
俺のRails開発環境
俺のRails開発環境俺のRails開発環境
俺のRails開発環境
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 

#027 tddのさわり