#027 tddのさわり

609 views

Published on

広島Ruby勉強会 #027でのプレゼン資料

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
609
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

#027 tddのさわり

  1. 1. TDDを勉強してみた 広島Ruby勉強会 #027 2013/2/2 @CentBoss at広島市青少年センター生活実習室13年2月2日土曜日 1
  2. 2. 自己紹介的な何か • @CentBossの人です • 広島工業大学の学生です • プログラミングは初心者レベルです • 目標は@eielhさんです • Emacsを勉強してます!13年2月2日土曜日 2
  3. 3. 今回はあくまでもTDDのさわりなので 深いことは喋りません 勉強してきた範囲で喋ります というかBDDじゃね?とかも思ってます13年2月2日土曜日 3
  4. 4. あと、初めてLTするのでお手柔らかにお願いします13年2月2日土曜日 4
  5. 5. 本題13年2月2日土曜日 5
  6. 6. そもそもTDDとは? • test-driven developmentの略 • テスト駆動開発 • →テストをしながら実装を進める開発技法13年2月2日土曜日 6
  7. 7. TDDの開発サイクル Red Refactor Green13年2月2日土曜日 7
  8. 8. TDDの開発サイクル • 非常に小さい失敗するテストを書く →Red • 出来る限りテストをパスできるような 最小限のコードを実装する→Green • コードをきれいにする→Refactor13年2月2日土曜日 8
  9. 9. RubyでTDDをするには? RspecとCucumberと言うものがあるらしい 他にもいろいろある感じだけど、今日はこれを選択 というかこれしか使ったことがない13年2月2日土曜日 9
  10. 10. RubyでTDDをするには? ・Cucumber  アプリケーションの振る舞いをテスト  あるコンテキストで(Given)  あるイベントが発生すると(When)  ある結果が期待されます(Then) ・Rspec  オブジェクトの振る舞いをテスト13年2月2日土曜日 10
  11. 11. RubyでTDDをするには? Cucumber Rspec Red Red Refactor Green Refactor Green13年2月2日土曜日 11
  12. 12. RubyでTDDをするには? 1.Cucumberで1つのシナリオに焦点を合わせる 2.失敗するステップ定義を書く 3.Rspecで失敗するサンプルを書く 4.Rspecでサンプルを成功させる最低限コードを実装する 5.Rspecで書いた最低限コードをリファクタリングする 6.Cucumberでリファクタリングする13年2月2日土曜日 12
  13. 13. 頑張ってサンプル用意しました!!13年2月2日土曜日 13
  14. 14. RubyでTDDをしてみる • 今回のシナリオ • 「sample.rbを実行すると”Hiroshima.rb #027”と表示される」13年2月2日土曜日 14
  15. 15. RubyでTDDをしてみる 1.Cucumberで1つのシナリオに焦点を合わせる #  language:  ja 機能:  文字列の表示      シナリオ:  sample.rbを実行する        もし  sample.rbを実行した場合        かつ  メッセージが出力される        ならば  "Hiroshima.rb  #027"と表示している13年2月2日土曜日 15
  16. 16. 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 end13年2月2日土曜日 16
  17. 17. 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 end13年2月2日土曜日 17
  18. 18. 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
  19. 19. 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 end13年2月2日土曜日 19
  20. 20. 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 end13年2月2日土曜日 20
  21. 21. 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 message13年2月2日土曜日 21
  22. 22. RubyでTDDをしてみる 4.Rspecでサンプルを成功させる最低限コードを実装する class Sample def message "Hiroshima.rb #027" end end13年2月2日土曜日 22
  23. 23. RubyでTDDをしてみる 4.Rspecでサンプルを成功させる最低限コードを実装する . “.”が成功したということ Finished in 0.00037 seconds 1 example, 0 failures13年2月2日土曜日 23
  24. 24. 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
  25. 25. RubyでTDDをしてみる 5.Rspecで書いた最低限コードをリファクタリングする 6.Cucumberでリファクタリングする 今日のところは省略ということで…13年2月2日土曜日 25
  26. 26. ↓本日のサンプルはGithubにあります↓ https://github.com/moriC/hiroshimarb-tdd13年2月2日土曜日 26
  27. 27. ご清聴ありがとうございました13年2月2日土曜日 27

×