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
PPTX
リーダブルコード 1.0'
PPTX
正規表現勉強会
PDF
Students.rb #1 資料
ODP
RSpecのここがすごい!
PPT
PPT
第1部「一時間で覚えるruby」
PDF
Phperがgoをさわってみた
mrubyボードを使って こんなことしてみました Kansai.mrb 2014 dec
リーダブルコード 1.0'
正規表現勉強会
Students.rb #1 資料
RSpecのここがすごい!
第1部「一時間で覚えるruby」
Phperがgoをさわってみた

What's hot (9)

PDF
ECMAScript没proposal追悼式
PDF
Kink: プロトタイプベースの俺々 JVM 言語
PDF
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
PDF
リーダブルコード勉強会
PDF
今さらながらRSpecに入門してみた
PDF
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
PDF
Mishimasyk6 iwatobipen
PDF
Mishimasyk 3 20140705
PPTX
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ECMAScript没proposal追悼式
Kink: プロトタイプベースの俺々 JVM 言語
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
リーダブルコード勉強会
今さらながらRSpecに入門してみた
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
Mishimasyk6 iwatobipen
Mishimasyk 3 20140705
サーバーを作ろう (毎週のハンズオン勉強会の資料)
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
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
時代はMiddleman
#31 愛しのst2
Opencampus
#30 bddについて調べたことを丁寧に説明する
Ad

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

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

#027 tddのさわり