狠狠撸

狠狠撸Share a Scribd company logo
テスト駆動開発と RSpec スはスペックのス
目次     Rspec とは なぜ Rspec なのか メリットと Test::Unit との違い テスト駆動開発 Rspec の使い方 Rspec と Cucumber テストの高速化  Cucumber の並列処理ライブラリ まとめ
Rspec とは テスティングフレームワーク プログラムの振る舞い (behaviour) を記述するための ドメイン特化言語 (DomainSpecificLanguage:DSL) を提供 arr = [] arr.empty? # ? 振る舞いとして、 true を返す。 振る舞い ? テストが設計であることを強調 ? Ruby を使い、プログラムの振舞の本質に集中できる書き方 特徴 DSL 特定の領域 ( ドメイン ) を記述するために設計された言語。 「開発対象のプログラムの振舞を記述する」という領域。
Rspec と Test::Unit の違い Test::Unit クラスやメソッ ドを定義する require 'test/unit'  class ArrayTest < Test::Unit::TestCase def setup @empty_array = []  end  def test_empty? assert(@empty_array.empty?) end def test_size assert_equal(0, @empty_array.size) end def teardown  @empty_array = nil  end  end   describe Array, &quot;when empty&quot; do before do @empty_array = [] end it &quot;should be empty&quot; do @empty_array.should be_empty end it &quot;should size 0&quot; do @empty_array.size.should == 0 end  after do @empty_array = nil end end RSpec ブロック付きメソッド呼び出しなど、  Ruby  スクリプトになっている
なぜ Rspec なのか  Test::Unit との違い Rspec は、統合テスティング環境であることを目指している テスト駆動開発の考え、つまりテストは設計である という考え方を全面に押し出している。 Test::Unit  RSpec 「テストケース」 実行可能なサンプル  (example) 「テストクラス」 テストケースのまとまり 振舞  (behaviour) アサート  (assert) コードの検証 エクスペクテーション  (expectation) テストメソッド
まとめ RSpec は以下のことを目指している ? プログラマにテストコードが設計であることを明確に意識させること ? プログラマがテストコードをスムーズに記述し実行できるようになること ? 振舞定義用の  DSL  を提供し、様々なテスト関連ライブラリや周辺ツールとの   連携を積極的に行い、「統合テスティング環境」となること
テスト駆動開発 (TDD) とは ? 設計技法であり、開発の進め方 ? コーディングは設計であり、テスティングとデバッギングも設計の一部であり、私たちが一般的にソフトウェア設計と呼んでいるものもやはり設計の一部である ? ソフトウェア設計は、コーディングが完了し、かつテストされるまでは完璧にならない ? テスティングは、設計の検証と洗練を行うプロセスにおける基礎となる ? TDD とは BDD であり、 BDD とは TDD である TDD  のプログラミングの進め方が「テストというよりは設計である」ということを強調する考え方を、 振舞駆動開発  (Behaviour Driven Development:BDD) と呼ぶ
テスト駆動開発 (TDD)  テストの分類 ? Developer Testing : 開発者が行う、開発促進のためのテスト プログラマの、プログラマによる、プログラマのための、プログラムとして書く、プログラミングを進めていくための、テスト ? Customer Testing : お客様と機能の確認の為に用いる、進捗管理のためのテスト ? QA Testing : 品質保証のためのテスト
テスト駆動開発 (TDD) 1つのゴール  =  動くか不安 何かがおかしい これでいいよね めんどくさいって思ったときは、 テストを構造化するか、書くのをやめる。 1つのテーマ  =  動作するきれいなコードを書くこと 感情をテストにする:
テスト駆動開発 (TDD) ① 設計の技法: 設計とはソースコードを書くこと。テストもデバッグも設計。 設計が終わるのは、コーディングが完了しかつテストが通るまで。 ② 開発の進め方: テストが開発を駆動する。テストが開発を引っ張る。 クは駆動のク。駆動っていうのが大切。 この2つを押さえておくだけで大丈夫 ①  テストに失敗したときだけコードを書く ② 重複を取り除く 2つの主張 2つのルール :
テスト駆動開発 3つのモード + 1 失敗->通過->きれいに Red :  テストに失敗している状態 Green :  コードが動作している状態 Refactoring : コードの意味を変えずに綺麗に。動いた状態を維持して中身を綺麗に Think 作るための作戦などをまず考える。 そしてテストを書き、通るようにコードを書き、リファクタリングで綺麗にしてまた考える。 think -> red -> green -> refactoring  の繰り返し。 今、どのモードなのかを意識するのが大切 3つのモードでは明示されていない4つ目のモードがある。
テスト駆動開発 今、どのモードなのか意識 どんなルートをたどるか 順番に行い、理想を目指す 動く 動かない 汚い 綺麗 Think Red Green Refactoring
テスト駆動開発 3つの技法   サイクルをまわす ? Fake it : いんちき。テストをだまして Green に持っていく ボーリングで全部ガタ―で0点にする場合、メソッドが0を返すようにする ? Triangulate : 二方向から挟み撃ち。2つのテストを書いて実装を決める 全部ガタ―と全部1ピンの両方が通るようにする ? Obvious implementation : ふつうに実装
テスト駆動開発  しっかり身につけるためには コード=カタ カタとは、空手などの型 単純な定型を反復する。素振りみたいなもの 体で覚えるまでやる 簡単なものができないと、難しいものはできない
Rspec の使い方 インストール $ sudo gem install rspec describe Class, &quot; コンテキスト ( どういう状態の時に )&quot; do ?  before(:each) do ???  #  コンテキストのお膳立て ?  end ?  it &quot; 期待する振る舞いの名前 &quot; do ???  #  ここに期待する振る舞いを書く ?  end end コード
Rspec の使い方 テストを実行
Rspec の使い方
Rspec と Cucumber gem install cucumber webrat インストール 顧客に対して「このアプリケーションは要求仕様を満たしています」と言うことは RSpec だけでは無理だった Cucumber のテストコードは比較的自然語彙に近い形で記述できる 顧客の要望をほぼそのままテストコードに落とすことができる 基本的にはユニットテストなので,ある Model 単体のテスト,ある Controller 単体のテストとなるのが普通 内部仕様を RSpec で,外部仕様を Cucumber でテストする
テストの高速化 test/spec/cucumber を並列実行できるライブラリ  parallel_tests Ruby / Rails  のテストが約 3 倍速になって超快適に!!
まとめ ? TDD は設計技法で開発の進め方 ? 一度にひとつずつ ? 感情をテストにする  不安だ  何かがおかしい  これでいい  退屈だ?テストの構造化?書くのをやめる ? リズムとフィードバック  テスト->コーディング->リファクタリング 早くできるようになるまで簡単なものを繰り返し行う。
結論 Rspec は素晴らしい

More Related Content

Similar to Kubo100903 (20)

開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
?
【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用
智治 長沢
?
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
智治 長沢
?
少し分かった気になるテスト駆动开発
少し分かった気になるテスト駆动开発少し分かった気になるテスト駆动开発
少し分かった気になるテスト駆动开発
lnial
?
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jpRAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
智治 長沢
?
pytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメpytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメ
iRidge, Inc.
?
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
滨顿贰を目指す开発者コンソール
滨顿贰を目指す开発者コンソール滨顿贰を目指す开発者コンソール
滨顿贰を目指す开発者コンソール
minoaw
?
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
?
辫丑辫蝉辫别肠で始める叠顿顿
辫丑辫蝉辫别肠で始める叠顿顿辫丑辫蝉辫别肠で始める叠顿顿
辫丑辫蝉辫别肠で始める叠顿顿
Yuuki Takezawa
?
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOpsJAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
智治 長沢
?
搁耻产测プログラミング教育に対する取り组みと事例绍介
搁耻产测プログラミング教育に対する取り组みと事例绍介搁耻产测プログラミング教育に対する取り组みと事例绍介
搁耻产测プログラミング教育に対する取り组みと事例绍介
Yasushi Ishikawa
?
顿谤耻辫补濒て?叠顿顿テストを実施してみる①
顿谤耻辫补濒て?叠顿顿テストを実施してみる①顿谤耻辫补濒て?叠顿顿テストを実施してみる①
顿谤耻辫补濒て?叠顿顿テストを実施してみる①
iPride Co., Ltd.
?
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
?
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
SHIFT Inc.
?
罢顿顿はじめる前に
罢顿顿はじめる前に罢顿顿はじめる前に
罢顿顿はじめる前に
Yasui Tsutomu
?
Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28
光一 原田
?
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
?
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
baroqueworksdev
?
TDD with RDD: Clojure/LispのREPLで変わる開発体験
TDD with RDD: Clojure/LispのREPLで変わる開発体験TDD with RDD: Clojure/LispのREPLで変わる開発体験
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
?
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
?
【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用
智治 長沢
?
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
智治 長沢
?
少し分かった気になるテスト駆动开発
少し分かった気になるテスト駆动开発少し分かった気になるテスト駆动开発
少し分かった気になるテスト駆动开発
lnial
?
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jpRAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
智治 長沢
?
pytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメpytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメ
iRidge, Inc.
?
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
?
滨顿贰を目指す开発者コンソール
滨顿贰を目指す开発者コンソール滨顿贰を目指す开発者コンソール
滨顿贰を目指す开発者コンソール
minoaw
?
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
?
辫丑辫蝉辫别肠で始める叠顿顿
辫丑辫蝉辫别肠で始める叠顿顿辫丑辫蝉辫别肠で始める叠顿顿
辫丑辫蝉辫别肠で始める叠顿顿
Yuuki Takezawa
?
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOpsJAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
JAWS FESTA Kansai 2013 | ビジネスに貢献する戦略的なITのためのDevOps
智治 長沢
?
搁耻产测プログラミング教育に対する取り组みと事例绍介
搁耻产测プログラミング教育に対する取り组みと事例绍介搁耻产测プログラミング教育に対する取り组みと事例绍介
搁耻产测プログラミング教育に対する取り组みと事例绍介
Yasushi Ishikawa
?
顿谤耻辫补濒て?叠顿顿テストを実施してみる①
顿谤耻辫补濒て?叠顿顿テストを実施してみる①顿谤耻辫补濒て?叠顿顿テストを実施してみる①
顿谤耻辫补濒て?叠顿顿テストを実施してみる①
iPride Co., Ltd.
?
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
?
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
20140903 し?と?うかの窓口特別編 君にもなれる!?テスト自動化エンシ?ニア
SHIFT Inc.
?
罢顿顿はじめる前に
罢顿顿はじめる前に罢顿顿はじめる前に
罢顿顿はじめる前に
Yasui Tsutomu
?
Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28
光一 原田
?
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
?
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
baroqueworksdev
?
TDD with RDD: Clojure/LispのREPLで変わる開発体験
TDD with RDD: Clojure/LispのREPLで変わる開発体験TDD with RDD: Clojure/LispのREPLで変わる開発体験
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
?

More from kubo (8)

Aries Kubo081219
Aries Kubo081219Aries Kubo081219
Aries Kubo081219
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Aries Kubo081125
Aries Kubo081125Aries Kubo081125
Aries Kubo081125
kubo
?
Aries Kubo081125
Aries Kubo081125Aries Kubo081125
Aries Kubo081125
kubo
?
Aries Kubo081024
Aries Kubo081024Aries Kubo081024
Aries Kubo081024
kubo
?
Aries Kubo080822
Aries Kubo080822Aries Kubo080822
Aries Kubo080822
kubo
?
Aries Kubo081219
Aries Kubo081219Aries Kubo081219
Aries Kubo081219
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Speed Reading
Speed ReadingSpeed Reading
Speed Reading
kubo
?
Aries Kubo081125
Aries Kubo081125Aries Kubo081125
Aries Kubo081125
kubo
?
Aries Kubo081125
Aries Kubo081125Aries Kubo081125
Aries Kubo081125
kubo
?
Aries Kubo081024
Aries Kubo081024Aries Kubo081024
Aries Kubo081024
kubo
?
Aries Kubo080822
Aries Kubo080822Aries Kubo080822
Aries Kubo080822
kubo
?

Kubo100903

  • 2. 目次     Rspec とは なぜ Rspec なのか メリットと Test::Unit との違い テスト駆動開発 Rspec の使い方 Rspec と Cucumber テストの高速化  Cucumber の並列処理ライブラリ まとめ
  • 3. Rspec とは テスティングフレームワーク プログラムの振る舞い (behaviour) を記述するための ドメイン特化言語 (DomainSpecificLanguage:DSL) を提供 arr = [] arr.empty? # ? 振る舞いとして、 true を返す。 振る舞い ? テストが設計であることを強調 ? Ruby を使い、プログラムの振舞の本質に集中できる書き方 特徴 DSL 特定の領域 ( ドメイン ) を記述するために設計された言語。 「開発対象のプログラムの振舞を記述する」という領域。
  • 4. Rspec と Test::Unit の違い Test::Unit クラスやメソッ ドを定義する require 'test/unit' class ArrayTest < Test::Unit::TestCase def setup @empty_array = [] end def test_empty? assert(@empty_array.empty?) end def test_size assert_equal(0, @empty_array.size) end def teardown @empty_array = nil end end describe Array, &quot;when empty&quot; do before do @empty_array = [] end it &quot;should be empty&quot; do @empty_array.should be_empty end it &quot;should size 0&quot; do @empty_array.size.should == 0 end after do @empty_array = nil end end RSpec ブロック付きメソッド呼び出しなど、 Ruby スクリプトになっている
  • 5. なぜ Rspec なのか  Test::Unit との違い Rspec は、統合テスティング環境であることを目指している テスト駆動開発の考え、つまりテストは設計である という考え方を全面に押し出している。 Test::Unit RSpec 「テストケース」 実行可能なサンプル (example) 「テストクラス」 テストケースのまとまり 振舞 (behaviour) アサート (assert) コードの検証 エクスペクテーション (expectation) テストメソッド
  • 6. まとめ RSpec は以下のことを目指している ? プログラマにテストコードが設計であることを明確に意識させること ? プログラマがテストコードをスムーズに記述し実行できるようになること ? 振舞定義用の DSL を提供し、様々なテスト関連ライブラリや周辺ツールとの   連携を積極的に行い、「統合テスティング環境」となること
  • 7. テスト駆動開発 (TDD) とは ? 設計技法であり、開発の進め方 ? コーディングは設計であり、テスティングとデバッギングも設計の一部であり、私たちが一般的にソフトウェア設計と呼んでいるものもやはり設計の一部である ? ソフトウェア設計は、コーディングが完了し、かつテストされるまでは完璧にならない ? テスティングは、設計の検証と洗練を行うプロセスにおける基礎となる ? TDD とは BDD であり、 BDD とは TDD である TDD のプログラミングの進め方が「テストというよりは設計である」ということを強調する考え方を、 振舞駆動開発 (Behaviour Driven Development:BDD) と呼ぶ
  • 8. テスト駆動開発 (TDD)  テストの分類 ? Developer Testing : 開発者が行う、開発促進のためのテスト プログラマの、プログラマによる、プログラマのための、プログラムとして書く、プログラミングを進めていくための、テスト ? Customer Testing : お客様と機能の確認の為に用いる、進捗管理のためのテスト ? QA Testing : 品質保証のためのテスト
  • 9. テスト駆動開発 (TDD) 1つのゴール  =  動くか不安 何かがおかしい これでいいよね めんどくさいって思ったときは、 テストを構造化するか、書くのをやめる。 1つのテーマ  =  動作するきれいなコードを書くこと 感情をテストにする:
  • 10. テスト駆動開発 (TDD) ① 設計の技法: 設計とはソースコードを書くこと。テストもデバッグも設計。 設計が終わるのは、コーディングが完了しかつテストが通るまで。 ② 開発の進め方: テストが開発を駆動する。テストが開発を引っ張る。 クは駆動のク。駆動っていうのが大切。 この2つを押さえておくだけで大丈夫 ① テストに失敗したときだけコードを書く ② 重複を取り除く 2つの主張 2つのルール :
  • 11. テスト駆動開発 3つのモード + 1 失敗->通過->きれいに Red : テストに失敗している状態 Green : コードが動作している状態 Refactoring : コードの意味を変えずに綺麗に。動いた状態を維持して中身を綺麗に Think 作るための作戦などをまず考える。 そしてテストを書き、通るようにコードを書き、リファクタリングで綺麗にしてまた考える。 think -> red -> green -> refactoring の繰り返し。 今、どのモードなのかを意識するのが大切 3つのモードでは明示されていない4つ目のモードがある。
  • 12. テスト駆動開発 今、どのモードなのか意識 どんなルートをたどるか 順番に行い、理想を目指す 動く 動かない 汚い 綺麗 Think Red Green Refactoring
  • 13. テスト駆動開発 3つの技法   サイクルをまわす ? Fake it : いんちき。テストをだまして Green に持っていく ボーリングで全部ガタ―で0点にする場合、メソッドが0を返すようにする ? Triangulate : 二方向から挟み撃ち。2つのテストを書いて実装を決める 全部ガタ―と全部1ピンの両方が通るようにする ? Obvious implementation : ふつうに実装
  • 14. テスト駆動開発  しっかり身につけるためには コード=カタ カタとは、空手などの型 単純な定型を反復する。素振りみたいなもの 体で覚えるまでやる 簡単なものができないと、難しいものはできない
  • 15. Rspec の使い方 インストール $ sudo gem install rspec describe Class, &quot; コンテキスト ( どういう状態の時に )&quot; do ? before(:each) do ??? # コンテキストのお膳立て ? end ? it &quot; 期待する振る舞いの名前 &quot; do ??? # ここに期待する振る舞いを書く ? end end コード
  • 18. Rspec と Cucumber gem install cucumber webrat インストール 顧客に対して「このアプリケーションは要求仕様を満たしています」と言うことは RSpec だけでは無理だった Cucumber のテストコードは比較的自然語彙に近い形で記述できる 顧客の要望をほぼそのままテストコードに落とすことができる 基本的にはユニットテストなので,ある Model 単体のテスト,ある Controller 単体のテストとなるのが普通 内部仕様を RSpec で,外部仕様を Cucumber でテストする
  • 19. テストの高速化 test/spec/cucumber を並列実行できるライブラリ parallel_tests Ruby / Rails のテストが約 3 倍速になって超快適に!!
  • 20. まとめ ? TDD は設計技法で開発の進め方 ? 一度にひとつずつ ? 感情をテストにする  不安だ  何かがおかしい  これでいい  退屈だ?テストの構造化?書くのをやめる ? リズムとフィードバック  テスト->コーディング->リファクタリング 早くできるようになるまで簡単なものを繰り返し行う。