TDDアンチパターン 2016 01 13

Preview:

Citation preview

2016 年 1 月 13 日@secret_hamuhamu

TDD アンチパターン

自己紹介名前:大橋 勇希

Twitter : はむ(@secret_hamuhamu)

今回のテーマ

TestDriven Developmentanti-pattern

TestDriven Developmentanti-pattern

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

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

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

22 あるアンチパターンの

内、

3 つ紹介

①The Liar( 嘘つき )

①The Liar( 嘘つき )

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

①The Liar( 嘘つき )

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

①The Liar( 嘘つき )

①The Liar( 嘘つき )

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

①The Liar( 嘘つき )

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

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

①The Liar( 嘘つき )

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

①The Liar( 嘘つき )

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

①The Liar( 嘘つき )

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

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

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

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

②Excessive Setup( 過度の Setup)

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

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

②Excessive Setup( 過度の Setup)

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

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

テスト対象を混ぜない

②Excessive Setup( 過度の Setup)

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

by PHP

● Phake

③The Giant( 巨人 )

③The Giant( 巨人 )

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

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

③The Giant( 巨人 )

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

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

③The Giant( 巨人 )

③The Giant( 巨人 )

とにかくテストがデカイ

③The Giant( 巨人 )

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

③The Giant( 巨人 )

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

③The Giant( 巨人 )

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

設計を見なおしましょう

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

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

TDD の勉強をしよう!

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