TDD Boot Camp

62
TDD Boot Camp へ ようこそ 和田 卓人 (a.k.a id:t-wada or @t_wada) Dec 19, 2009 @日本オラクル青山センター

description

TDD Boot Camp - Dec 12, 2009 at Oracle Aoyama Center

Transcript of TDD Boot Camp

Page 1: TDD Boot Camp

TDD Boot Camp へようこそ和田 卓人 (a.k.a id:t-wada or @t_wada)

Dec 19, 2009 @日本オラクル青山センター

Page 2: TDD Boot Camp

大事なことを最初に

Page 3: TDD Boot Camp

感謝•参加していただいている皆様•Lasse さん•スポンサーの皆様•朝から手伝ってくれたスタッフの皆様

Page 4: TDD Boot Camp

自己紹介

Page 5: TDD Boot Camp

自己紹介名前: 和田 卓人 (わだ たくと)

ブログ: http://d.hatena.ne.jp/t-wada

メール: [email protected]

Twitter: http://twitter.com/t_wada

タワーズ・クエスト株式会社 取締役社長

Page 6: TDD Boot Camp

これまで書いたものWEB + DB PRESSvol.35 「実演! テスト駆動開発」vol.37 「実演! リファクタリング」vol.42 「REST特集」vol.49 「DRY特集」LifeHacks PRESSオープンソースマガジン(リレーコラム)他いろいろ

Page 7: TDD Boot Camp

gihyo.jpの連載『[動画で解説]和田卓人の“テスト駆動開発”講座』http://gihyo.jp/dev/serial/01/tdd/全20回すべて動画付き解説ニコニコ動画でも見れます

WEB+DB過去記事の特設サイトと動画も

Page 8: TDD Boot Camp

デベロッパーテスティング・ライブ - 自信を持ってコードを書くための心・技・体 -

【徹底討論】テストなんていらない?! -テストを、どこまでやるべきか?

パネルディスカッション:テストを行うこと、テストを続けること

デブサミ

Page 9: TDD Boot Camp

よろしくおねがいします

Page 10: TDD Boot Camp

TDD Boot Camp へようこそ!

Page 11: TDD Boot Camp

優しい教官が君を待ってる

Page 12: TDD Boot Camp

TDD の神秘の力を会得できます

Page 13: TDD Boot Camp

TDDBC お品書き

•TDDとは何か(この講演)•Lasse さん講演•全員でペアプロ体験 & コードレビュー大会 × 2

Page 14: TDD Boot Camp

コードを見せ合ってみよう

http://www.flickr.com/photos/snapperwolf/2607585548/

Page 15: TDD Boot Camp

http://www.flickr.com/photos/snapperwolf/2607586846/

設計を議論しよう

Page 16: TDD Boot Camp

http://www.flickr.com/photos/recompile_net/3298985098/

事実、ペアプロは楽しい。

Page 17: TDD Boot Camp

改めて、TDD Boot Camp へようこそ

Page 18: TDD Boot Camp

TDDとは?

Page 19: TDD Boot Camp

動作する、きれいなコードへ

きれい

汚い

(すぐには)動かない 動作する

二つの道がある

Page 20: TDD Boot Camp
Page 21: TDD Boot Camp

TDDのサイクル1. テストを書き2. そのテストを実行して失敗させ(Red)3. 目的のコードを書き4. 1で書いたテストを成功させ(Green)5. テストが通るままでリファクタリングを行う(Refactor)

6. 1~5を繰り返す

Page 22: TDD Boot Camp

テストの分類DeveloperTesting

開発者

開発促進

CustomerTesting

顧客(のロール)

進捗管理

QATesting

品質保証担当者(のロール)

品質保証

「テスト」

Page 23: TDD Boot Camp

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

Page 24: TDD Boot Camp

TDDのこころ

Page 25: TDD Boot Camp

一つずつ少しずつ

Page 26: TDD Boot Camp

ひとりずつ対処する。

複数を相手にしない。

Page 27: TDD Boot Camp

すばやくまわす

Page 28: TDD Boot Camp

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

Page 29: TDD Boot Camp

自分が最初のユーザ

Page 30: TDD Boot Camp

不安をテストに

Page 31: TDD Boot Camp

祈るのではダメ

Page 32: TDD Boot Camp

安心して飛び込む

Page 33: TDD Boot Camp

TDDはテスト技法では なく設計技法

Page 34: TDD Boot Camp

テストは目的ではなく手段

Page 35: TDD Boot Camp

•即座にフィードバックを得るため•書いたコードに自信を持つため•これから書くコードに自信を持つため

Developer Testing, TDD にソフトウェア工学的なメリットはいろいろあるけれど、最大の理由は工学的なものではない。最大の理由は心理的なもの

Page 36: TDD Boot Camp

TDDの真の目的

Page 37: TDD Boot Camp

健康

Page 38: TDD Boot Camp

変化に対応するのは健康体のコード

Page 39: TDD Boot Camp

変化に対応するのは健康体のチーム

Page 40: TDD Boot Camp

不安の克服健康の維持

Page 41: TDD Boot Camp

デモ

Page 42: TDD Boot Camp

FizzBuzz問題Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

Page 43: TDD Boot Camp

ukaiさんのお題• 制限を加える(ループを使わないで書く、剰余を使わないで書く、…)

• printせず list にしてかえす• FizzBuzzをテストするプログラムを書く• 3とか5がパラメータ化されているとして、出力からそのパラメータを調べる

http://blogger.ukai.org/2007/09/itpro-challenge.html

Page 44: TDD Boot Camp

TDDの基本テクニック• テストファースト• アサートファースト

• 仮実装(Fake it)• Fake it はテストのテスト

• 三角測量(Triangulation)• 明白な実装(Obvious Implementation)

Page 45: TDD Boot Camp

間合いを測る• 対象を見定める• ゴールへの距離を感じる

• 不安は何か• 何なら不安でないか• 小さな一歩を考える

• 一度にひとつずつ

Page 46: TDD Boot Camp

Design for Testability

• テストしやすいコードを書くためには?• テストから先に書く => テスト可能になる• テストを考える = 設計を考える

Page 47: TDD Boot Camp

Refactoring

• 呼吸をするようにリファクタリングする• Rename (改名)• Extract (抽出)• Inline (インライン化)

Page 48: TDD Boot Camp

おわりに

Page 49: TDD Boot Camp

acts_as_professional

Page 50: TDD Boot Camp

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

Page 51: TDD Boot Camp
Page 52: TDD Boot Camp
Page 53: TDD Boot Camp

TDDはスキルです• テストやTDDはスキルです。つまり…• 才能ではなく、習得可能です• 量は質に転化します• 写経!!

Page 54: TDD Boot Camp

楽しみましょう!

Page 55: TDD Boot Camp

ご清聴ありがとうございました

Page 56: TDD Boot Camp

お題

Page 57: TDD Boot Camp

お題 : LRU Cache

一定の数に達したら使われていない順に要素が削除されていく Map のような入れ物を作りたい。

このため、 Last Recently Used (LRU) Cache を今回作成する。

キャッシュの最大サイズに達したときに、最も使われていないデータから順に消される Map のような仕組みがほしい。

Page 58: TDD Boot Camp

例 :サイズが 2 の LRU Cache の場合

# 一つも使われてない場合は最初に追加したものから消えるlru.put(“a”, “dataA”);lru.put(“b”, “dataB”);lru.put(“c”, “dataC”);lru.get(“a”); #=> null

# get されたら使われたとみなすlru.put(“a”, “dataA”);lru.put(“b”, “dataB”);lru.get(“a”); #=> “dataA”lru.put(“c”, “dataC”);lru.get(“b”); #=> null

Page 59: TDD Boot Camp

仕様変更その1「いやー和田君、こないだの LRU Cache、だっけ?」「はい」「ステキなんだけど、もうちょっと便利にしたいなぁ」「はい (なんだろう…)」「キャッシュサイズをあとから変えたいんだ」「えっ」「キャッシュサイズ減らしてもちゃんと動いてほしい」「えっ」

Page 60: TDD Boot Camp

仕様変更その2

「いやー和田君、こないだの LRU Cache、だっけ?」「はい」「ステキなんだけど、もっと意図を汲んで欲しいんだ」「はい (なんだろう…)」「一定時間経ったデータも消えて欲しいんだ」「えっ」

Page 61: TDD Boot Camp

仕様変更その3

「いやー和田君、こないだの LRU Cache、好評だよ」「ありがとうございます」「ステキなんだけど、もっと意図を汲んで欲しいんだ」「はい (なんだろう…)」「同時アクセスが結構あるのでスレッドセーフがいいなぁ」「えっ」

Page 62: TDD Boot Camp

ご参加ありがとうございました