SlideShare a Scribd company logo
1 of 87
Download to read offline
TDD を研ぎ究める

 pocketberserker


 2012 年 8 月 25 日
自己紹介




• 中山 / なかやん / ぺんぎん / 残 KEN
• @pocketberserker / id:pocketberserker
• どこにでもいるふつーのサーガ大学院生
• F# / Haskell / (Erlang) / (Scala) / テスト
• TDDBC 福岡 1, 東京 1.6, 福岡 2,(大阪 2.0)企
  画者
いきなり質問
いきなり質問




1. 疲れている?
いきなり質問




1. 疲れている?
2. まだ不安?
いきなり質問




1. 疲れている?
2. まだ不安?
3. これから TDD とどう付き合う?
参考意見



曰く
参考意見



曰く



     “テストというパートナー”
きのこ JP 07
きのこ JP 07




“テストを友として自信を持ちながらコードを書
く。それがテスト駆動開発を身につけたプログラ
マの仕事のやり方です。”
考えてみよう




テスト(というか TDD)という友との付き合い方
ちなみに
ちなみに

これ以降の話はだいたいこれに書かれている
ちなみに

これ以降の話はだいたいこれに書かれている




   読むのに時間がかかるけど・
               ・・
友との付き合い方を考える




1. TDD を知る
2. TDD と親しくなる
3. TDD と語りあう
  


     TDD を知る
TDD を知るって・
         ・・朝講演聴いたじゃない?
では、答えられますか?
では、答えられますか?




• どんな方針で TDD をやればいいの?
では、答えられますか?




• どんな方針で TDD をやればいいの?
• 問題の分解って?
では、答えられますか?




• どんな方針で TDD をやればいいの?
• 問題の分解って?
• きれいなコードって?
どんな方針で TDD をやればいいの?
どんな方針で TDD をやればいいの?




     “不安をテストに”
どんな方針で TDD をやればいいの?




     “不安をテストに”
     ・
     ・・不安って何さ?
不安
不安



• 不安は人それぞれ
不安



• 不安は人それぞれ
• いきなり放り込まれても “何が不安かわから
 ない”
不安



• 不安は人それぞれ
• いきなり放り込まれても “何が不安かわから
  ない”
• 何か指針がほしいところ
不安



• 不安は人それぞれ
• いきなり放り込まれても “何が不安かわから
  ない”
• 何か指針がほしいところ
• とっかかりとして品質保証のテストを学ぶ
品質保証のテストを学ぶ



• 一般的に不安だと言われている部分を知る
• 手法を足がかりに “自分の不安” について考
  える
• TDD のテストとは目的が異なる
“Developer Test しているから大丈夫” 神話
“Developer Test しているから大丈夫” 神話




 • 不安解消で品質保障できるわけではない
“Developer Test しているから大丈夫” 神話




 • 不安解消で品質保障できるわけではない
 • 不安解消で妥当性確認できるわけではない
“Developer Test しているから大丈夫” 神話




 • 不安解消で品質保障できるわけではない
 • 不安解消で妥当性確認できるわけではない
 • 要求に合わせてやりましょう
参考
問題の分解って?
問題の分解って?



• 今日のお題はある程度分解されていた
問題の分解って?



• 今日のお題はある程度分解されていた
• 実践ではこうはいかない
問題の分解って?



• 今日のお題はある程度分解されていた
• 実践ではこうはいかない
• ではどうする?
問題の分解って?



• 今日のお題はある程度分解されていた
• 実践ではこうはいかない
• ではどうする?
• 紙と 3 色ボールペンを持ちましょう
紙とボールペン
紙とボールペン


• 不安、期待は既に仕様に現れている
紙とボールペン


• 不安、期待は既に仕様に現れている
• 気になったらボールペンで印をつける
紙とボールペン


• 不安、期待は既に仕様に現れている
• 気になったらボールペンで印をつける
• 印をグループ分けてしてみる
紙とボールペン


• 不安、期待は既に仕様に現れている
• 気になったらボールペンで印をつける
• 印をグループ分けてしてみる
• つまり徹底的な分解と再構築
紙とボールペン


• 不安、期待は既に仕様に現れている
• 気になったらボールペンで印をつける
• 印をグループ分けてしてみる
• つまり徹底的な分解と再構築
• まずは 3 色ボールペンからはじめてみま
 しょう
紙とボールペン


• 不安、期待は既に仕様に現れている
• 気になったらボールペンで印をつける
• 印をグループ分けてしてみる
• つまり徹底的な分解と再構築
• まずは 3 色ボールペンからはじめてみま
  しょう
• 3 色ボールペンもテスト技法のひとつ
きれいなコードって?
きれいなコードって?




  プロのコード
プロのコードを知る・書くには?
プロのコードを知る・書くには?




• 読書や写経
プロのコードを知る・書くには?




• 読書や写経
• コードリーディング
プロのコードを知る・書くには?




• 読書や写経
• コードリーディング
• 実践
読書や写経




• 考えとサンプルが豊富
• とっつきやすい
• (本の)難易度を選べる
コードリーディング




• 生きているコード
• 各言語文化での “きれいさ” を知る
• 言語の勉強にもなる
実践




体感・手を動かしてこそわかることもある
参考
参考(もしかして絶版?)
TDD と親しくなる
親しくなる、2 つの方法
親しくなる、2 つの方法




1. 実践で親しくなる
親しくなる、2 つの方法




1. 実践で親しくなる
2. 写経で親しくなる
実践から親しくなる



1.   環境を作る
2.   不具合にテストを書いて立ち向かう
3.   後付テストで徐々に慣れる
4.   リファクタリング!
5.   テストファーストへ
環境を作る
環境を作る




テストを書きたいと思ったときから環境を作るの
         では遅い
環境を作る




やりたいと思ったらすぐテストが書ける環境をあ
       らかじめ作ってく
Q. ライブラリをダウンロードできない環境は?
Q. ライブラリをダウンロードできない環境は?
  A. 簡易テスティングフレームワークの自作
写経で親しくなる



1.   書籍の写経
2.   TDD 演習動画の写経
3.   過去の TDDBC 成果物を写経
4.   自分の TDD を記録・分析
過去の TDDBC 成果物を写経
過去の TDDBC 成果物を写経




• バージョン管理されたデータを写経
過去の TDDBC 成果物を写経




• バージョン管理されたデータを写経
• “他者の呼吸を知る”
過去の TDDBC 成果物を写経




• バージョン管理されたデータを写経
• “他者の呼吸を知る”
• いいところは取り込む
自分の TDD を記録・分析



1. DVCS で Red/Green/Refactor を記録
2. 自分の TDD の傾向を把握
3. リファクタリングが少ない場合は意識する、
   など調整
TDD と語り合う
語り合う
語り合う




• とにかく色々なものを対象に TDD してみる
語り合う




• とにかく色々なものを対象に TDD してみる
• 向き、不向きな対象を TDD に問いかける
語り合う




• とにかく色々なものを対象に TDD してみる
• 向き、不向きな対象を TDD に問いかける
• コストとメリットの境界を見極める
たとえばこんな感じ
“マスター、この問題とは相性がいいのでどんどん
      フィードバックしますね!”
“うう、なかなかフィードバックを返せません・
                     ・・
      これは向かないようです”
まとめ
まとめ




• TDD という友との付き合い方を考えよう
まとめ




• TDD という友との付き合い方を考えよう
• そのためにも写経・実践
まとめ




• TDD という友との付き合い方を考えよう
• そのためにも写経・実践
• 共に歩もう、TDD との人生を
ご清聴ありがとう
 ございました

More Related Content

What's hot

開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
Takaaki Kasai
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
Katsunori Kanda
 

What's hot (7)

開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornight
 
テストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devテストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3dev
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
Getting test world
Getting test worldGetting test world
Getting test world
 
スクラムにおけるQAメンバー(非開発者)の関わり方を模索してみた
スクラムにおけるQAメンバー(非開発者)の関わり方を模索してみたスクラムにおけるQAメンバー(非開発者)の関わり方を模索してみた
スクラムにおけるQAメンバー(非開発者)の関わり方を模索してみた
 

Viewers also liked

言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
pocketberserker
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)
pocketberserker
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
pocketberserker
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
pocketberserker
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
pocketberserker
 
TDD #NagoyaTesting
TDD #NagoyaTestingTDD #NagoyaTesting
TDD #NagoyaTesting
kyon mm
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
Takuto Wada
 

Viewers also liked (20)

Tddbc岡山LT
Tddbc岡山LTTddbc岡山LT
Tddbc岡山LT
 
GParsの?Actor Model
GParsの?Actor ModelGParsの?Actor Model
GParsの?Actor Model
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
 
私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
TDDBC東京 1.6 LT
TDDBC東京 1.6 LTTDDBC東京 1.6 LT
TDDBC東京 1.6 LT
 
Siklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JPSiklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JP
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
TDD #NagoyaTesting
TDD #NagoyaTestingTDD #NagoyaTesting
TDD #NagoyaTesting
 
Windows IoT Core and Robot Arm
Windows IoT Core and Robot ArmWindows IoT Core and Robot Arm
Windows IoT Core and Robot Arm
 
20140226_TDD
20140226_TDD20140226_TDD
20140226_TDD
 
my-spirit-of-tdd
my-spirit-of-tddmy-spirit-of-tdd
my-spirit-of-tdd
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
TDDの自殺 #TDDeX
TDDの自殺 #TDDeXTDDの自殺 #TDDeX
TDDの自殺 #TDDeX
 

Similar to TDDを研ぎ究める

Agile samuraidojogathering
Agile samuraidojogatheringAgile samuraidojogathering
Agile samuraidojogathering
M I
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
Takuya Nishimoto
 
オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)
Yukio Okajima
 

Similar to TDDを研ぎ究める (20)

チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・
チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・
チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・
 
Dev love kansai
Dev love kansaiDev love kansai
Dev love kansai
 
Dev love甲子園2014 西日本大会
Dev love甲子園2014 西日本大会Dev love甲子園2014 西日本大会
Dev love甲子園2014 西日本大会
 
アジャイルマニフェストから始めるアジャイル
アジャイルマニフェストから始めるアジャイルアジャイルマニフェストから始めるアジャイル
アジャイルマニフェストから始めるアジャイル
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
Agile samuraidojogathering
Agile samuraidojogatheringAgile samuraidojogathering
Agile samuraidojogathering
 
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」 [旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
 
オレオレになりがちなテスト計画を見直した話
オレオレになりがちなテスト計画を見直した話オレオレになりがちなテスト計画を見直した話
オレオレになりがちなテスト計画を見直した話
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」 [最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
 
10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing
 
デザインパターンとともに学ぶオブジェクト指向のこころ
デザインパターンとともに学ぶオブジェクト指向のこころデザインパターンとともに学ぶオブジェクト指向のこころ
デザインパターンとともに学ぶオブジェクト指向のこころ
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
ソースコードを読んでみよう
ソースコードを読んでみようソースコードを読んでみよう
ソースコードを読んでみよう
 
オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)
 
ゆるLTのススメ+α
ゆるLTのススメ+αゆるLTのススメ+α
ゆるLTのススメ+α
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 

TDDを研ぎ究める