41
2016 年 1 年 13 年 @secret_hamuhamu TDD 年年年年年年年

TDDアンチパターン 2016 01 13

Embed Size (px)

Citation preview

Page 1: TDDアンチパターン 2016 01 13

2016 年 1 月 13 日@secret_hamuhamu

TDD アンチパターン

Page 2: TDDアンチパターン 2016 01 13

自己紹介名前:大橋 勇希

Twitter : はむ(@secret_hamuhamu)

Page 3: TDDアンチパターン 2016 01 13

今回のテーマ

Page 4: TDDアンチパターン 2016 01 13

TestDriven Developmentanti-pattern

Page 5: TDDアンチパターン 2016 01 13

TestDriven Developmentanti-pattern

Page 6: TDDアンチパターン 2016 01 13

●James Carr 氏●2006 年のエントリ●22 からなる TDD アンチパターンのカタログ

Page 7: TDDアンチパターン 2016 01 13

自分なりに解釈して翻訳してみた

おかしいところがあれば@secret_hamuhamu まで m(_ _)m

Page 8: TDDアンチパターン 2016 01 13

22 あるアンチパターンの

内、

3 つ紹介

Page 9: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

Page 10: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

全てのユニットテストが、全てのテストケースをパスしているように見えるが、意図されたテストがなされていないことが発見される

Page 11: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

テストはパスしているが、意図されたテストがなされていない

Page 12: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

Page 13: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

メソッド名をそのままテスト名している

Page 14: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

振る舞いのテストになっていない

Page 15: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )テストしたいことが分からず仕様を満たしているのか判断できない

Page 16: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

このテストケースが、嘘をついていても気づきにくい

Page 17: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

嘘をつかない、嘘を見抜きやすいテストを書こう!!

Page 18: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )

Page 19: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )①The Liar( 嘘つき )

テストの振る舞いが分かるようなテスト名にする

Page 20: TDDアンチパターン 2016 01 13

①The Liar( 嘘つき )①The Liar( 嘘つき )

仕様の漏れに気づきやすい

Page 21: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

Page 22: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

テストを開始するために多くの設定作業を必要とするテスト。 ひとつのテスト環境を Setup( テストを実行する為の事前準備 ) するために数百行も使用し、使用するオブジェクトがいくつもある。 Setup での「ノイズ」 が多すぎる為、テストの正当性を把握するのが難しい。

Page 23: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

Page 24: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

テストを実行する為のセットアップがやたら長い

Page 25: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

テストを実行する為のコスト ( 手間 )が大きい

Page 26: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

テスト対象のオブジェクトが複数存在

Page 27: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

一つの変更が与える影響範囲が大きく変更に弱い

Page 28: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

設計を見なおしましょうテストするのが、大変ということは設計がおかしいサイン

Page 29: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

1つのユニットテストで複数のオブジェクトをテストしない

1つのユニットテストで1つのオブジェクトをテストしよう

テスト対象を混ぜない

Page 30: TDDアンチパターン 2016 01 13

②Excessive Setup( 過度の Setup)

mock を使い本来、やりたいテストに集中しよう

by PHP

● Phake

Page 31: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

Page 32: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

正当にオブジェクトをテストできているものの1つのユニットテストが、数千行からなる大量のテストケースを有している。

これは、テスト対象のオブジェクトが God Object であると示唆している。

Page 33: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

God Object とは、神の如く全てを知っていて何もかもをなすことが出来るクラス

〇〇 Manager クラスのような、なんでも屋クラス

Page 34: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

Page 35: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

とにかくテストがデカイ

Page 36: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

画面に収まらないテスト郡

Page 37: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

オブジェクトが適切な粒度で分けられていないちゃんと責務を分けましょう

Page 38: TDDアンチパターン 2016 01 13

③The Giant( 巨人 )

クラスがデカイということは、影響範囲も大きいメンテナンスが大変

設計を見なおしましょう

Page 39: TDDアンチパターン 2016 01 13

何のためにテストを書くのか?

品質の良いプロダクトを長年、改善・改良していくためには「フィードバック」が必要。 ソースコードレベルで「フィードバック」を手軽に得るためにテストを書いていきましょう。

Page 40: TDDアンチパターン 2016 01 13

TDD の勉強をしよう!

Page 41: TDDアンチパターン 2016 01 13

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