Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
TDD
  テスト駆動開発
Test Dr i ven Devel opment
自己紹介
 おおいしつかさ

 1975年生まれ

 6月1日付けで入社

 webで仕事をはじめて9ヶ月
ht t p: / / w w kaeruspoon. net
             w.
Amazon Resour ces
  Rai l sのプラグイン

  gi t : //gi t hub. com sukasaoi sh
                        /t
  i /am  azonr esour ce...
TDD歴
 ・半年
 ・Test Uni t -> Rspec
TDD
    テスト駆動開
    発
Test Dr i ven
Devel opm ent
今までの開発
 コーディング → テスト


TDD
 テスト → コーディング
注意!!
TDD(Test Dr i ven Devel opm )の
                           ent

テストとは、テストのことではない
TDDのテストとは

    プログラムの

     仕様
      のこと
仕様とは何か
 インターフェース


インターフェースとは何か
 振る舞い
BDD
    振る舞い駆動開発
Behavi or Dr i ven Devel opment
TDDのテストでは振る舞いを書く


   関係ないことは
     書かない
内部実装はどうでもいい

 プログラムの目的は
   決められた

   仕様( 振る舞い)

 のとおりに動くこと
TDDのテストは

プログラムが仕様通りに

動くことを保証する
TDDのテストは

プログラムの品質を

(完全には)保証しない
基本的
な流れ
3つのフェーズ

 レッド

 グリーン

 リファクタリング
レッド
テスト(仕様)を書く
  ↓
まだ本体はコーディングしてい
ないのでテストは失敗する
レッド
ひとつのテストの粒度は

  できるだけ
   細かく
   小さく
グリーン

 本体をコーディングする
       ↓
 テストが成功する
グリーン
 テストに書かれていないこ
 とは実装しない

 テストが通ることだけを目
 標に汚くコーディングする

   何も考えない
グリーン
 「きれいだけど動かないコー
 ド」に一片の価値もなし

 「汚いけど動くコード」を
 まずは目指す
リファクタリング
どんなにコードを変容させ
てもテストが通ればOK


 保証されている安心感
コミット
テストが終わったらコミッ
トする
 コミットできる安心感
実践
舞台
Ruby on Rai l s
Rspec on Rai l s

機能
 GET /user s/(ユーザ名)
 指定されたユーザのページを表
 示
コントローラの責任
リクエストに対し、適切なレスポンス
を返す

適切なビューを選択する

ビューが必要なデータをモデルから取
得する
レッド
descr i be User sCont r ol l er , “ のshowアクショ
ン” do

 i t “ において、ステータスコード200を返すこ
と” do
    get : show, : user _nam => ...
レッド
ひとつのテストの粒度は

  できるだけ
   細かく
   小さく
レッド
1)
Act i onCont r ol l er : : UnknownAct i on i n
' User sCont r ol l er のshowアクション において、
ステータスコード200を返すこと'
No act i o...
グリーン
cl ass User sCont r ol l er <
Appl i cat i onCont r ol l er

  def i ndex
  end
end
グリーン
Fi ni shed i n 0. 127367 seconds

1 exam es, 0 f ai l ur es
      pl




リファクタリングは不要
レッド
 i t “ において、指定されたユーザ名のユーザオ
ブジェクトを取得すること” do
    get : show, : user _nam => “ t sukasa”
                             e
...
グリーン
cl ass User sCont r ol l er <
Appl i cat i onCont r ol l er

  def i ndex
     @user = User . f i nd(: f i r st ,
   ...
リファクタリング
cl ass User sCont r ol l er <
Appl i cat i onCont r ol l er

  def i ndex
     @ user =
User . f i nd_by_name(par...
まとめ
TDDとは

 ふつうのプログラマのために
  用意された開発のための
    考え方の指標
TDDの目指すもの


  仕様通りに動作する
   きれいなコード
TDDのすごいところ

実装とインターフェースを
   わけて考える
   ことができる
TDDのすごいところ


    安心感
TDDのルール
レッドの章

 1. インターフェースだけに注目しろ
 2. 絶対に実装を考えるな
 3. 一度にひとつのことだけ考えろ
TDDのルール
グリーンの章
1.   きれいに書くな
2.   よけいなものを絶対に書くな
3.   テストが通ることだけを目的にしろ
4.   グリーンの状態でコードを書くな
TDDのルール
リファクタリングの章

  1. 後回しするな
  2. やりすぎるな
  3. 躊躇なくぶち壊せ
TDDのこつ

 ・リズム感重要
 ・小さく細かくを繰り返す
 ・一度にひとつずつ
TDDのやりにくいところ
・ビューのテスト
 →タグやクラス名が変わっただけで
   テストがこける

・pr i vat eメソッドのテスト
 →publ i cメソッドを通して確認する
   しかない
おしまい
Upcoming SlideShare
Loading in …5
×

Tdd

1,634 views

Published on

Published in: Technology, Health & Medicine
  • Be the first to comment

  • Be the first to like this

Tdd

  1. 1. TDD テスト駆動開発 Test Dr i ven Devel opment
  2. 2. 自己紹介 おおいしつかさ 1975年生まれ 6月1日付けで入社 webで仕事をはじめて9ヶ月
  3. 3. ht t p: / / w w kaeruspoon. net w.
  4. 4. Amazon Resour ces Rai l sのプラグイン gi t : //gi t hub. com sukasaoi sh /t i /am azonr esour ces. gi t kaer u_keywor d キーワードリンク TRI E
  5. 5. TDD歴 ・半年 ・Test Uni t -> Rspec
  6. 6. TDD テスト駆動開 発 Test Dr i ven Devel opm ent
  7. 7. 今までの開発 コーディング → テスト TDD テスト → コーディング
  8. 8. 注意!!
  9. 9. TDD(Test Dr i ven Devel opm )の ent テストとは、テストのことではない
  10. 10. TDDのテストとは プログラムの 仕様 のこと
  11. 11. 仕様とは何か インターフェース インターフェースとは何か 振る舞い
  12. 12. BDD 振る舞い駆動開発 Behavi or Dr i ven Devel opment
  13. 13. TDDのテストでは振る舞いを書く 関係ないことは 書かない
  14. 14. 内部実装はどうでもいい プログラムの目的は 決められた 仕様( 振る舞い) のとおりに動くこと
  15. 15. TDDのテストは プログラムが仕様通りに 動くことを保証する
  16. 16. TDDのテストは プログラムの品質を (完全には)保証しない
  17. 17. 基本的 な流れ
  18. 18. 3つのフェーズ レッド グリーン リファクタリング
  19. 19. レッド テスト(仕様)を書く ↓ まだ本体はコーディングしてい ないのでテストは失敗する
  20. 20. レッド ひとつのテストの粒度は できるだけ 細かく 小さく
  21. 21. グリーン 本体をコーディングする ↓ テストが成功する
  22. 22. グリーン テストに書かれていないこ とは実装しない テストが通ることだけを目 標に汚くコーディングする 何も考えない
  23. 23. グリーン 「きれいだけど動かないコー ド」に一片の価値もなし 「汚いけど動くコード」を まずは目指す
  24. 24. リファクタリング どんなにコードを変容させ てもテストが通ればOK 保証されている安心感
  25. 25. コミット テストが終わったらコミッ トする コミットできる安心感
  26. 26. 実践
  27. 27. 舞台 Ruby on Rai l s Rspec on Rai l s 機能 GET /user s/(ユーザ名) 指定されたユーザのページを表 示
  28. 28. コントローラの責任 リクエストに対し、適切なレスポンス を返す 適切なビューを選択する ビューが必要なデータをモデルから取 得する
  29. 29. レッド descr i be User sCont r ol l er , “ のshowアクショ ン” do i t “ において、ステータスコード200を返すこ と” do get : show, : user _nam => “ t sukasa” e r esponse. shoul d be_success end end
  30. 30. レッド ひとつのテストの粒度は できるだけ 細かく 小さく
  31. 31. レッド 1) Act i onCont r ol l er : : UnknownAct i on i n ' User sCont r ol l er のshowアクション において、 ステータスコード200を返すこと' No act i on r esponded t o show . /spec/cont r ol l er s/user s_cont r ol l er _spec. r b: 6 : Fi ni shed i n 0. 222733 seconds 1 exam es, 1 f ai l ur e pl
  32. 32. グリーン cl ass User sCont r ol l er < Appl i cat i onCont r ol l er def i ndex end end
  33. 33. グリーン Fi ni shed i n 0. 127367 seconds 1 exam es, 0 f ai l ur es pl リファクタリングは不要
  34. 34. レッド i t “ において、指定されたユーザ名のユーザオ ブジェクトを取得すること” do get : show, : user _nam => “ t sukasa” e assi gns[: user ]. shoul d be_ki nd_of (User ) assi gns[: user ]. shoul d == user s(: t sukasa) end ↓ 失敗
  35. 35. グリーン cl ass User sCont r ol l er < Appl i cat i onCont r ol l er def i ndex @user = User . f i nd(: f i r st , : condi t i ons => [“ nam = e ?” , par am user _nam s[: e]) end end ↓ 成功
  36. 36. リファクタリング cl ass User sCont r ol l er < Appl i cat i onCont r ol l er def i ndex @ user = User . f i nd_by_name(par am user _nam s[: e]) end end ↓ 成功
  37. 37. まとめ
  38. 38. TDDとは ふつうのプログラマのために 用意された開発のための 考え方の指標
  39. 39. TDDの目指すもの 仕様通りに動作する きれいなコード
  40. 40. TDDのすごいところ 実装とインターフェースを わけて考える ことができる
  41. 41. TDDのすごいところ 安心感
  42. 42. TDDのルール レッドの章 1. インターフェースだけに注目しろ 2. 絶対に実装を考えるな 3. 一度にひとつのことだけ考えろ
  43. 43. TDDのルール グリーンの章 1. きれいに書くな 2. よけいなものを絶対に書くな 3. テストが通ることだけを目的にしろ 4. グリーンの状態でコードを書くな
  44. 44. TDDのルール リファクタリングの章 1. 後回しするな 2. やりすぎるな 3. 躊躇なくぶち壊せ
  45. 45. TDDのこつ ・リズム感重要 ・小さく細かくを繰り返す ・一度にひとつずつ
  46. 46. TDDのやりにくいところ ・ビューのテスト  →タグやクラス名が変わっただけで    テストがこける ・pr i vat eメソッドのテスト  →publ i cメソッドを通して確認する    しかない
  47. 47. おしまい

×