Recommended
PDF
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
PPTX
Php development efficiency improvement
PPTX
PPTX
PPTX
How to implement CI with OutSystems using Jenkins and BDD Framework
PDF
PPTX
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
PDF
PHPでAIプログラミングコンテスト準優勝するまでの軌跡
PDF
PDF
PDF
PDF
C# から java へのプログラム移植で体験したtddの効果は?
PDF
KEY
PDF
PDF
PDF
PPT
Sue445 Style TDD #atest_hack
PDF
PDF
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PDF
PDF
CodeZineAcademy TDD実践講座PR資料
KEY
PDF
PDF
JS開発におけるTDDと自動テストツール利用の勘所
PDF
PPT
PPT
PPT
More Related Content
PDF
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
PPTX
Php development efficiency improvement
PPTX
PPTX
PPTX
How to implement CI with OutSystems using Jenkins and BDD Framework
PDF
PPTX
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
PDF
PHPでAIプログラミングコンテスト準優勝するまでの軌跡
Similar to Kubo100903
PDF
PDF
PDF
PDF
C# から java へのプログラム移植で体験したtddの効果は?
PDF
KEY
PDF
PDF
PDF
PPT
Sue445 Style TDD #atest_hack
PDF
PDF
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PDF
PDF
CodeZineAcademy TDD実践講座PR資料
KEY
PDF
PDF
JS開発におけるTDDと自動テストツール利用の勘所
PDF
PPT
Kubo100903 1. 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, "when empty" do before do @empty_array = [] end it "should be empty" do @empty_array.should be_empty end it "should size 0" 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. 13. テスト駆動開発 3つの技法 サイクルをまわす ✿ Fake it : いんちき。テストをだまして Green に持っていく ボーリングで全部ガタ―で0点にする場合、メソッドが0を返すようにする ✿ Triangulate : 二方向から挟み撃ち。2つのテストを書いて実装を決める 全部ガタ―と全部1ピンの両方が通るようにする ✿ Obvious implementation : ふつうに実装 14. 15. Rspec の使い方 インストール $ sudo gem install rspec describe Class, " コンテキスト ( どういう状態の時に )" do before(:each) do # コンテキストのお膳立て end it " 期待する振る舞いの名前 " do # ここに期待する振る舞いを書く end end コード 16. 17. 18. Rspec と Cucumber gem install cucumber webrat インストール 顧客に対して「このアプリケーションは要求仕様を満たしています」と言うことは RSpec だけでは無理だった Cucumber のテストコードは比較的自然語彙に近い形で記述できる 顧客の要望をほぼそのままテストコードに落とすことができる 基本的にはユニットテストなので,ある Model 単体のテスト,ある Controller 単体のテストとなるのが普通 内部仕様を RSpec で,外部仕様を Cucumber でテストする 19. 20. まとめ ✿ TDD は設計技法で開発の進め方 ✿ 一度にひとつずつ ✿ 感情をテストにする 不安だ 何かがおかしい これでいい 退屈だ⇒テストの構造化・書くのをやめる ✿ リズムとフィードバック テスト->コーディング->リファクタリング 早くできるようになるまで簡単なものを繰り返し行う。 21.