SlideShare a Scribd company logo
1 of 47
Download to read offline
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 ces. gi t

kaer u_keywor d
  キーワードリンク
  TRI E
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 => “ t sukasa”
                           e
    r esponse. shoul d be_success
 end

end
レッド
ひとつのテストの粒度は

  できるだけ
   細かく
   小さく
レッド
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
グリーン
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
    assi gns[: user ]. shoul d be_ki nd_of (User )
    assi gns[: user ]. shoul d == user s(: t sukasa)
 end

                      ↓
                     失敗
グリーン
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
                     ↓
                  成功
リファクタリング
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                 ↓
                 成功
まとめ
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メソッドを通して確認する
   しかない
おしまい

More Related Content

Similar to Tdd

Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!Yasui Tsutomu
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかgree_tech
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDDTakuto Wada
 
DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①iPride Co., Ltd.
 
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめTDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめKyota Yasuda
 
ユニットテスト 1日目
ユニットテスト 1日目ユニットテスト 1日目
ユニットテスト 1日目Yoshiki Shibukawa
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Akira Kaneda
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編nackypon
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンスTakeshi Fukasawa
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 

Similar to Tdd (20)

Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
Tdd
TddTdd
Tdd
 
DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①
 
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめTDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめ
 
ユニットテスト 1日目
ユニットテスト 1日目ユニットテスト 1日目
ユニットテスト 1日目
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
wankuma #28
wankuma #28wankuma #28
wankuma #28
 
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 

More from Tsukasa Oishi

はてブ砲をくらったときのお話
はてブ砲をくらったときのお話はてブ砲をくらったときのお話
はてブ砲をくらったときのお話Tsukasa Oishi
 
奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法Tsukasa Oishi
 
Iphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンIphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンTsukasa Oishi
 
かんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたかんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたTsukasa Oishi
 
食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話Tsukasa Oishi
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよTsukasa Oishi
 
Tokyotyrantについて
TokyotyrantについてTokyotyrantについて
TokyotyrantについてTsukasa Oishi
 
はてなダイアリーキーワードをつくってみたよ
はてなダイアリーキーワードをつくってみたよはてなダイアリーキーワードをつくってみたよ
はてなダイアリーキーワードをつくってみたよTsukasa Oishi
 

More from Tsukasa Oishi (8)

はてブ砲をくらったときのお話
はてブ砲をくらったときのお話はてブ砲をくらったときのお話
はてブ砲をくらったときのお話
 
奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法
 
Iphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンIphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターン
 
かんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたかんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみました
 
食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよ
 
Tokyotyrantについて
TokyotyrantについてTokyotyrantについて
Tokyotyrantについて
 
はてなダイアリーキーワードをつくってみたよ
はてなダイアリーキーワードをつくってみたよはてなダイアリーキーワードをつくってみたよ
はてなダイアリーキーワードをつくってみたよ
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Tdd