SlideShare a Scribd company logo
1 of 23
Download to read offline
TDDワークショップ
古川 剛啓
http://www.flickr.com/photos/utest/5609991407
デバックってどうやってますか?
http://www.flickr.com/photos/porsupah/2577287047
バグ混入 バグ顕在化 バグ発見 バグFix
Td Tfind Tfix
時間
今までのプログラミング
(Debug Later Programming)
バグが混入してから顕在化するまでに時間が掛かると、バグ
がある場所を探すまでに時間が掛かる
バグ混入 バグ顕在化 バグ発見 バグFix
Td Tfind Tfix
時間
テスト駆動開発
(Test Driven Development)
バグ混入から顕在化するまでの時間を短くし、
バグがある場所を探すまでの時間を短縮する
プロジェクト終盤でありがちな状況
✓単体テストを省略した
✓いつの間にかテストが壊れている
✓テストが直ぐ壊れるのでテストする
のをやめた
✓テストに時間が掛かるのでテストし
てない
http://www.flickr.com/photos/bagger2009/3630270346
テキスト
http://www.flickr.com/photos/kazk/198640938
ユニットテストフレームワークを使う
JUnit, Google Test, CppUTest・・・
Mockフレームワークを使う
jMock, GMock・・・
と言うことで・・・
Google Testをインストールしてみよう
http://code.google.com/p/googlemock/
• 以下のサイトからGoogle Mockのソースを
ダウンロードする(Google Testのソースも
含まれている)
• zipファイルを適当な場所に解凍する
• READMEに従って、ビルド&インストール
テストメソッドを書く
テストをPassする最低限
のコードを実装する リファクタリング
Red ー Green ー リファクタリング サイクル
例:FizzBuzz問題を考える
FizzBuzzクラスのfizzBuzzメソッド
• 引数が3の倍数の時、”Fizz”を返す
• 引数が5の倍数の時、”Buzz”を返す
• 引数が3と5の公倍数の時、”FizzBuzz”を返す
• それ以外の時、引数の整数を文字列にして返す
例:FizzBuzz問題を考える
Step 1
テストメソッド
3の時、”Fizz”が返される事を確認する
std::string judgeFizzBuzz( int i ) {
return “Fizz”;
}
TEST_F(fizzBuzzTest, returnFizzWhenNumberIsThree_3) {
EXPECT_EQ("Fizz", sut_->judgeFizzBuzz(3));
}
例:FizzBuzz問題を考える
Step 2
テストメソッド
5の時、”Buzz”が返される事を確認する
std::string judgeFizzBuzz( int i ) {
if( i == 3 ) return “Fizz”;
if( i == 5 ) return “Buzz”;
}
TEST_F(fizzBuzzTest, returnBuzzWhenNumberIsFive_5) {
EXPECT_EQ("Buzz", sut_->judgeFizzBuzz(5));
}
例:FizzBuzz問題を考える
Step 3
テストメソッド
3の倍数の時、”Fizz”が返される事を確認する
std::string judgeFizzBuzz( int i ) {
if( i % 3 == 0 ) return “Fizz”;
if( i == 5 ) return “Buzz”;
}
TEST_F(fizzBuzzTest, returnFuzzWhenNumberIsSix_6) {
EXPECT_EQ("Fizz", sut_->judgeFizzBuzz(6));
}
例:FizzBuzz問題を考える
Step 4
リファクタリング(引数名の変更)
std::string judgeFizzBuzz( int number ) {
if( number % 3 == 0) return “Fizz”;
if( number == 5 ) return “Buzz”;
}
例:FizzBuzz問題を考える
Step n (完成)
std::string judgeFizzBuzz( int number ) {
std::stringstream returningString( "" );
if( number < 0 ) {
std::string exceptionMessage( "Number is minus." );
throw exceptionMessage;
}
else if( number == 0 ) return "";
else if( number % 15 == 0 ) return "FizzBuzz";
else if( number % 3 == 0 ) return "Fizz";
else if( number % 5 == 0 ) return "Buzz";
else {
returningString << number;
return returningString.str();
}
}
TDDの利点
• テストカバレッジが向上する
• テスタビリティが向上する
• メソッドや構造をシンプルに保つことが出来る
• 書いたコードに自信が持てる
• テストメソッドを読めばメソッドの使い方が分かる
• その他 Titter #TDDやっててよかったのまとめ
http://togetter.com/li/258537 等
継続的にTDDをやるための材料
• 単体テストは設計(実装)の一部だと理解する
• 単体テストフレームワークを使用する
• テストコードも構成管理する
• テストカバレッジを「Doneの定義」に含める
• CI (Continuous Integration)サーバを導入する
http://www.flickr.com/photos/roboppy/312248677
最後に
• TDD は簡単なプラクティスではありません。
• しかし、コード品質は確実に向上します。
• 一度や二度の失敗で諦めずに取り組みましょう。
継続は、力なり
http://www.flickr.com/photos/picsbyperi/7457301384

More Related Content

Viewers also liked

The performance christens
The performance christensThe performance christens
The performance christenskerygmaawards
 
Microsoft confidential document leaked
Microsoft confidential document leakedMicrosoft confidential document leaked
Microsoft confidential document leakedChanchal Jhanwar
 
Semantic technologies
Semantic technologiesSemantic technologies
Semantic technologiesuniverse543
 
Tolerant and believers
Tolerant and believersTolerant and believers
Tolerant and believerskerygmaawards
 
Microsoft confidential document leaked
Microsoft confidential document leakedMicrosoft confidential document leaked
Microsoft confidential document leakedChanchal Jhanwar
 

Viewers also liked (7)

The performance christens
The performance christensThe performance christens
The performance christens
 
Following jesus
Following jesusFollowing jesus
Following jesus
 
Microsoft confidential document leaked
Microsoft confidential document leakedMicrosoft confidential document leaked
Microsoft confidential document leaked
 
Active learning
Active learningActive learning
Active learning
 
Semantic technologies
Semantic technologiesSemantic technologies
Semantic technologies
 
Tolerant and believers
Tolerant and believersTolerant and believers
Tolerant and believers
 
Microsoft confidential document leaked
Microsoft confidential document leakedMicrosoft confidential document leaked
Microsoft confidential document leaked
 

Similar to Tddワークショップ

CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料Yasui Tsutomu
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)seichi23
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous TestingAtsuhiro Kubo
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTipsShou Takenaka
 
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
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テストmakopi 23
 
Emergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerEmergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerTakuto Wada
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりません
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりませんレガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりません
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりませんTakahiro Okada
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかったMakoto Iguchi
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDShinya Nakajima
 
FlexUnit4でテスト駆動開発
FlexUnit4でテスト駆動開発FlexUnit4でテスト駆動開発
FlexUnit4でテスト駆動開発theworldinunion
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~Tomomi Kajita
 
リファクタリング読書会20120220
リファクタリング読書会20120220リファクタリング読書会20120220
リファクタリング読書会20120220Suguru Shirai
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Shinya Nakajima
 

Similar to Tddワークショップ (20)

CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous Testing
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
 
Emergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerEmergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summer
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
Swift on Docker
Swift on DockerSwift on Docker
Swift on Docker
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりません
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりませんレガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりません
レガシーコード改善ガイド 第7章 いつまでたっても変更作業が終わりません
 
Hudson (JJUG CCCにて)
Hudson (JJUG CCCにて)Hudson (JJUG CCCにて)
Hudson (JJUG CCCにて)
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CD
 
FlexUnit4でテスト駆動開発
FlexUnit4でテスト駆動開発FlexUnit4でテスト駆動開発
FlexUnit4でテスト駆動開発
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
TDDBC横浜3rd
TDDBC横浜3rdTDDBC横浜3rd
TDDBC横浜3rd
 
リファクタリング読書会20120220
リファクタリング読書会20120220リファクタリング読書会20120220
リファクタリング読書会20120220
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Tddワークショップ