テストリストの見つけ方

42
テストリストの 見つけ方 2011.11.05 TDD BootCamp 横浜 Shuji Watanabe (@shuji_w6e) 1 11115日土曜日

description

TDDBC横浜のLT資料

Transcript of テストリストの見つけ方

Page 1: テストリストの見つけ方

テストリストの見つけ方

2011.11.05 TDD BootCamp 横浜Shuji Watanabe (@shuji_w6e)

111年11月5日土曜日

Page 2: テストリストの見つけ方

はじめに大切なことを3行で

11年11月5日土曜日

Page 3: テストリストの見つけ方

羽田着24時以降の便難民確定

11年11月5日土曜日

Page 4: テストリストの見つけ方

札幌から来ました!

通算6度のTDDBC開催11年11月5日土曜日

Page 5: テストリストの見つけ方

TDDBC 札幌の歩み1)予習編、JavaでWikiエンジン

2)和田さん来札、LRUキャッシュ

3)掲示板システム

4)和田さん来札、バイナリファイルのIO

5)ウェブ予約システム/ユースケース

6)LRUキャッシュ(一昨日w)

11年11月5日土曜日

Page 6: テストリストの見つけ方

12月10日 TDDBC 2.3

特別オプション@sumim と1日Smalltalk

11年11月5日土曜日

Page 7: テストリストの見つけ方

美味しいものが待ってます

Please come!

11年11月5日土曜日

Page 8: テストリストの見つけ方

渡辺修司(@shuji_w6e)

TDD Boot Camp 札幌の中の人

Blog「やさしいデスマーチ」

8年ほど前、横浜から札幌にIターン

Java(Desktop, Web, GAEなど)

最近の興味は、テストとGroovy

11年11月5日土曜日

Page 9: テストリストの見つけ方

渡辺修司(@shuji_w6e)

TDD Boot Camp 札幌の中の人

Blog「やさしいデスマーチ」

8年ほど前、横浜から札幌にIターン

Java(Desktop, Web, GAEなど)

最近の興味は、テストとGroovy

11年11月5日土曜日

Page 10: テストリストの見つけ方

http://www.flickr.com/photos/essecento/4297955162/

テスト駆動開発最大の問題

11年11月5日土曜日

Page 11: テストリストの見つけ方

どこから始めよう…11年11月5日土曜日

Page 12: テストリストの見つけ方

TDDのサイクル1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

11年11月5日土曜日

Page 13: テストリストの見つけ方

問. どのくらい事前設計すべきでしょうか?どうすれば、いつやめるかわかるのでしょうか?

テスト駆動開発のFAQ

答. 何を構築すべきかわかるまでです。Derick Bailey

http://www.infoq.com/jp/news/2008/03/tdd-smells

11年11月5日土曜日

Page 14: テストリストの見つけ方

正論だが、解決していない

11年11月5日土曜日

Page 15: テストリストの見つけ方

http://www.flickr.com/photos/israel-avila/5170969692/

何を構築すべきか?

11年11月5日土曜日

Page 16: テストリストの見つけ方

TDDのサイクルの確認1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

11年11月5日土曜日

Page 17: テストリストの見つけ方

TDDのサイクルの確認1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

何を構築するか?

11年11月5日土曜日

Page 18: テストリストの見つけ方

TDDのサイクルの確認1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

何を構築するか?

構築するものをコードにする

11年11月5日土曜日

Page 19: テストリストの見つけ方

TDDのサイクルの確認1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

何を構築するか?

構築するものをコードにする

動くようにコードを書く

11年11月5日土曜日

Page 20: テストリストの見つけ方

TDDのサイクルの確認1.設計する

2.テストを書く

3.コードを書く

4.テストを成功させる

5.リファクタリング

Heuristics

何を構築するか?

構築するものをコードにする

動くようにコードを書く

整理する

11年11月5日土曜日

Page 21: テストリストの見つけ方

テストリストが作りずらい理由細かすぎる着目点

曖昧な仕様

複雑な仕様

大きすぎる仕様

不慣れな分野・パターン

11年11月5日土曜日

Page 22: テストリストの見つけ方

http://www.flickr.com/photos/21785626@N06/2183388005

細かすぎる着目点

11年11月5日土曜日

Page 23: テストリストの見つけ方

少しずつ1歩ずつ ー TDDのこころTDDを実践するためには小さく細かく

11年11月5日土曜日

Page 24: テストリストの見つけ方

少しずつ1歩ずつ ー TDDのこころTDDを実践するためには小さく細かく

その前に全体像を把握しているか?

11年11月5日土曜日

Page 25: テストリストの見つけ方

利用者視点で考えるシステムを利用する利用者

エンドユーザ

開発者(APIやフレームワーク)利用者が興味あること 利用者が興味ないこと・機能(できること)・インプット・アウトプット・使い方

・内部の細かい仕様・内部の設計・データ構造・アルゴリズム

11年11月5日土曜日

Page 26: テストリストの見つけ方

利用シーンに着目する利用者がシステムを利用するシナリオ

ユースケースシナリオ

ユーザーインターフェイス

ユーザーマニュアル

外部イベント

11年11月5日土曜日

Page 27: テストリストの見つけ方

外部境界に着目するTDDは小さく細かく素早くが基本

その前に、システム全体を把握する

「木を見ずに森を見る」

ユースケース(シナリオ)

ユーザ

システム境界

システム

外部システム機能 データ

11年11月5日土曜日

Page 28: テストリストの見つけ方

お題:野球のスコアブック選手の打席数・打数・安打数を管理できる

選手の打率を表示できる

選手の打率ランキングを表示できる

チームを管理できる

試合数を管理できる

11年11月5日土曜日

Page 29: テストリストの見つけ方

お題:野球のスコアブック選手の打席数・打数・安打数を管理できる

選手の打率を表示できる

選手の打率ランキングを表示できる

チームを管理できる

試合数を管理できる

お題1~3

11年11月5日土曜日

Page 30: テストリストの見つけ方

ユースケースシナリオ(例

選手の打率ランキングを表示する1.ユーザは、選手の打席数・打数・安打数を入力する(繰り返し複数行う)

2.システムは、選手の打率を計算する

3.システムは、選手を打率順にソートする

4.システムは、選手を打率順に表示する

11年11月5日土曜日

Page 31: テストリストの見つけ方

http://www.flickr.com/photos/kriiisz/5012016237/

曖昧な仕様

11年11月5日土曜日

Page 32: テストリストの見つけ方

入出力に着目する入力

ユーザの操作

外部イベント

メソッドの引数

出力

画面出力

帳票

メソッドの戻り値

11年11月5日土曜日

Page 33: テストリストの見つけ方

具体的に考えるどんな入力でどうなるか?

2つの整数を入力すると合計が返る

3と4を入力すれば、7が返る

テストで入力値と期待値となる

11年11月5日土曜日

Page 34: テストリストの見つけ方

選手の打率計算入力として、選手の打席・打数・安打数を受け取り、選手の打率を計算できること

打席10、打数10、安打数5の時、打率が0.50となる

打席8、打数8、安打数2の時、打率が0.25となる

11年11月5日土曜日

Page 35: テストリストの見つけ方

http://www.flickr.com/photos/peakman2/1017866785

複雑な仕様大きすぎる仕様

11年11月5日土曜日

Page 36: テストリストの見つけ方

TDDのこころ少しずつ1歩ずつ 1人ずつ戦う

11年11月5日土曜日

Page 37: テストリストの見つけ方

大きいものを分割するフローやシーケンスで分割

一度に多くの事をやろうとすると難しい

役割や責務で分割

結びつきの強い属性を分割して独立

11年11月5日土曜日

Page 38: テストリストの見つけ方

足りない機能を追加する

追加した事が確認できなければならない

商品数を取得するメソッドの追加

全商品を取得するメソッドの追加

addメソッドで商品を追加できる

11年11月5日土曜日

Page 39: テストリストの見つけ方

http://www.flickr.com/photos/21084785@N06/2202706511/

不慣れな分野/パターン11年11月5日土曜日

Page 40: テストリストの見つけ方

プロトタイピングとりあえず作ってみる

コードは後で捨てる

必要なテストを見つける

テストファーストは『原則』

11年11月5日土曜日

Page 41: テストリストの見つけ方

http://www.flickr.com/photos/k1netik/50298297/

まとめ11年11月5日土曜日

Page 42: テストリストの見つけ方

まとめ最初に具体的なユースケースをイメージする

外部境界と入出力に着目

小さく分割する

フローや責務に着目

回り道して必要な機能を追加する

イメージが沸かないならばプロトタイプ作成

11年11月5日土曜日