テスト駆動開発を継続する

70
テスト駆動開発を るす続 2013/1/13 TDDBC Osaka 2013 1月 外伝 @irof

description

2013年はじめのTDD Boot Camp in 大阪 外伝 の資料です。 http://kokucheese.com/event/index/64957/

Transcript of テスト駆動開発を継続する

Page 1: テスト駆動開発を継続する

テスト駆動開発を継

るす続2013/1/13

TDDBC Osaka 2013 1月 外伝@irof

Page 2: テスト駆動開発を継続する

「動いているコードに触ってはいけない」変更し辛いのはテストのコストが高いからだ!

よく言われること

Page 3: テスト駆動開発を継続する

テストがないコードはレガシーコードだ!

レガシーコードとの戦いは苛烈を極める

Page 4: テスト駆動開発を継続する

自動テストがあれば?

Page 5: テスト駆動開発を継続する

自動テストがあれば、いくらでも自由に変更出来る!

Page 6: テスト駆動開発を継続する

……本当に?

Page 7: テスト駆動開発を継続する

自動テストがあったら自由に変更できる?

なんか直感に反する。

少し考える

Page 8: テスト駆動開発を継続する

テストってなんだろう?

少し考える

Page 9: テスト駆動開発を継続する

テストってなんだろう?

テストの価値って?

少し考える

Page 10: テスト駆動開発を継続する

テストってなんだろう?

テストの価値って?

テストが最も輝く瞬間っていつだろう?

少し考える

Page 11: テスト駆動開発を継続する

テストの価値は

失敗にある

Page 12: テスト駆動開発を継続する

無傷のテスト

一度も失敗したことがないテスト

そんなテストに価値はない

(言い過ぎ←弱気)

Page 13: テスト駆動開発を継続する

使ったことのない道具をいざと言う時に使えるか?

Page 14: テスト駆動開発を継続する

使ったことのない道具をいざと言う時に使えるか?

Page 15: テスト駆動開発を継続する

幕間

Page 16: テスト駆動開発を継続する

知らないコードのメンテをすることになった俺達は……

Page 17: テスト駆動開発を継続する

こんな状況

TDDで開発されたコード

Page 18: テスト駆動開発を継続する

こんな状況

TDDで開発されたコード

既に実装済みのところが変更になった

Page 19: テスト駆動開発を継続する

こんな状況

TDDで開発されたコード

既に実装済みのところが変更になった

テストコードがあるから大丈夫!

Page 20: テスト駆動開発を継続する

新規開発じゃない時のTDD

Page 21: テスト駆動開発を継続する

やったことのないことには

あたりまえで対抗する

Page 22: テスト駆動開発を継続する

あたりまえのこと

Page 23: テスト駆動開発を継続する

TDDのあたりまえ

やりたいことをテストで表現

テストを通す最小限の実装

テストを維持しつつリファクタリング

Page 24: テスト駆動開発を継続する

仕様変更でもあたりまえに

変えたいことをテストで表現

テストを通す最小限の変更

テストを維持しつつリファクタリング

Page 25: テスト駆動開発を継続する

でもテストがあるので

まずテストを通す

変えたいことをテストで表現

テストを通す最小限の変更

テストを維持しつつリファクタリング

Page 26: テスト駆動開発を継続する

不安なら確かめる

まずテストを通す

次にテストを確かめる

変えたいことをテストで表現

テストを通す最小限の変更

テストを維持しつつリファクタリング

Page 27: テスト駆動開発を継続する

確かめたいこと

おかしなことをしたら止めてくれるか?

Page 28: テスト駆動開発を継続する

テストの価値は

失敗にある

Page 29: テスト駆動開発を継続する

有益な失敗をさせる

失敗したときのふるまいを観察する。

「このメッセージで何したら良いかわかるか?」を問う。

Page 30: テスト駆動開発を継続する

テストを失敗させる

「こうなったら失敗するはず」

バグを埋め込む

ミューテーションテスト

Page 31: テスト駆動開発を継続する

見ときたいこと

失敗してくれる?

失敗する量は最少?

失敗した内容がわかる?

Page 32: テスト駆動開発を継続する

レガシーコード乙

失敗しない失敗する量は最少?

失敗した内容がわかる?

Page 33: テスト駆動開発を継続する

脆いの

失敗してくれる?

たくさん失敗する失敗した内容がわかる?

Page 34: テスト駆動開発を継続する

きついの

失敗してくれる?

失敗する量は最少?

失敗が意味不明

Page 35: テスト駆動開発を継続する

たくさん失敗する

複数のテストで同じことを確認しちゃってる。

一つのテストで複数のことを確認しちゃってる。

Page 36: テスト駆動開発を継続する

ついで症候群

Page 37: テスト駆動開発を継続する

ついで症候群

「このときってこうだよね?」

自分のわかっていることを全て書いてしまったりする。

名前で表現できないことはassertしない。

Page 38: テスト駆動開発を継続する

失敗が意味不明

Page 39: テスト駆動開発を継続する

失敗が意味不明

なんで落ちたかわかんない

謎の依存関係があったとか?

でも「落ちた」だけじゃね……

Page 40: テスト駆動開発を継続する

テストにして欲しいこと

失敗してくれる

失敗する量は最少

失敗した内容がわかる

Page 41: テスト駆動開発を継続する

テストの価値は

失敗にある

Page 42: テスト駆動開発を継続する

幕間

Page 43: テスト駆動開発を継続する

あたりまえのこと①

Page 44: テスト駆動開発を継続する

テストは落ちるもの

Page 45: テスト駆動開発を継続する

「テストが失敗した!」

誰がした

何をした

どうしてした

次しないためには

なんかよく見るの

Page 46: テスト駆動開発を継続する

「テストが失敗した!」

誰がした

何をした

どうしてした

次しないためには

テスト失敗が大イベント

なんかよく見るの

Page 47: テスト駆動開発を継続する

バグを直すのには凄い労力が必要

原因の特定

影響範囲を調査

コードの修正

テストの実施

などなど……

背景

Page 48: テスト駆動開発を継続する

大変だから

「失敗しない」ようにしよう!

Page 49: テスト駆動開発を継続する

ちゃうねん……。

Page 50: テスト駆動開発を継続する

テストの価値は

失敗にある

Page 51: テスト駆動開発を継続する

テストは落ちるもの

だから

失敗をあたりまえに扱う

Page 52: テスト駆動開発を継続する

あたりまえのこと②

Page 53: テスト駆動開発を継続する

他人の書いたテストはわかりづらい

Page 54: テスト駆動開発を継続する

自分の書いたテストもわかりづらい

Page 55: テスト駆動開発を継続する

過去に書いたテストはわかりづらい

Page 56: テスト駆動開発を継続する

「わかりづらい」で止まるのは、「コードの変更」が特別行事になってる

だからあまりやらない

だから失敗する

だからやれない

Page 57: テスト駆動開発を継続する

コードの変更が特別行事だから、「わかりづらい」を特別なことにしようとする

Page 58: テスト駆動開発を継続する

テストはわかり辛い

だから

あたりまえに変更する

Page 59: テスト駆動開発を継続する

幕間

Page 60: テスト駆動開発を継続する

あたりまえのことはあたりまえにする

とくべつなことをあたりまえにする

自信を持ってできるのはいつもやってること

Page 61: テスト駆動開発を継続する

変更を躊躇うのは特別行事だから

もしあたりまえのことなら躊躇いの枷は外せる(かも)

だから「あたりまえ」にする

Page 62: テスト駆動開発を継続する

あたりまえのはなし

Page 63: テスト駆動開発を継続する

テストが落ちるのも

テストが読みにくいのも

テストが変わるのも

全部あたりまえのこと

特別なことをしない

Page 64: テスト駆動開発を継続する

特別なことと思ってしまうと失敗する

特別なことには特別な対応をしがち

特別な対応には特別な不具合が紛れ込みやすい

Page 65: テスト駆動開発を継続する

あたりまえにする

Page 66: テスト駆動開発を継続する

信じられないなら、自信もクソもない。

緊急時の規律

平時にTDDの規律を守り、緊急時にそれを守らないとすれば、TDDの効果を心から信じていないと言うことだ。

Page 67: テスト駆動開発を継続する

普段から失敗させて

普段から失敗に対処する

信じるために成功を積む

失敗に対処することで学べるものは多い

Page 68: テスト駆動開発を継続する

テストの価値は

失敗にある

Page 69: テスト駆動開発を継続する

失敗をあたりまえに扱おう

Page 70: テスト駆動開発を継続する

おしまい