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

Post on 24-May-2015

8.658 views 0 download

description

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

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

テスト駆動開発を継

るす続2013/1/13

TDDBC Osaka 2013 1月 外伝@irof

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

よく言われること

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

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

自動テストがあれば?

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

……本当に?

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

なんか直感に反する。

少し考える

テストってなんだろう?

少し考える

テストってなんだろう?

テストの価値って?

少し考える

テストってなんだろう?

テストの価値って?

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

少し考える

テストの価値は

失敗にある

無傷のテスト

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

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

(言い過ぎ←弱気)

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

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

幕間

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

こんな状況

TDDで開発されたコード

こんな状況

TDDで開発されたコード

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

こんな状況

TDDで開発されたコード

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

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

新規開発じゃない時のTDD

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

あたりまえで対抗する

あたりまえのこと

TDDのあたりまえ

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

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

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

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

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

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

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

でもテストがあるので

まずテストを通す

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

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

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

不安なら確かめる

まずテストを通す

次にテストを確かめる

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

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

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

確かめたいこと

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

テストの価値は

失敗にある

有益な失敗をさせる

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

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

テストを失敗させる

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

バグを埋め込む

ミューテーションテスト

見ときたいこと

失敗してくれる?

失敗する量は最少?

失敗した内容がわかる?

レガシーコード乙

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

失敗した内容がわかる?

脆いの

失敗してくれる?

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

きついの

失敗してくれる?

失敗する量は最少?

失敗が意味不明

たくさん失敗する

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

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

ついで症候群

ついで症候群

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

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

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

失敗が意味不明

失敗が意味不明

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

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

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

テストにして欲しいこと

失敗してくれる

失敗する量は最少

失敗した内容がわかる

テストの価値は

失敗にある

幕間

あたりまえのこと①

テストは落ちるもの

「テストが失敗した!」

誰がした

何をした

どうしてした

次しないためには

なんかよく見るの

「テストが失敗した!」

誰がした

何をした

どうしてした

次しないためには

テスト失敗が大イベント

なんかよく見るの

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

原因の特定

影響範囲を調査

コードの修正

テストの実施

などなど……

背景

大変だから

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

ちゃうねん……。

テストの価値は

失敗にある

テストは落ちるもの

だから

失敗をあたりまえに扱う

あたりまえのこと②

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

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

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

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

だからあまりやらない

だから失敗する

だからやれない

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

テストはわかり辛い

だから

あたりまえに変更する

幕間

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

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

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

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

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

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

あたりまえのはなし

テストが落ちるのも

テストが読みにくいのも

テストが変わるのも

全部あたりまえのこと

特別なことをしない

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

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

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

あたりまえにする

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

緊急時の規律

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

普段から失敗させて

普段から失敗に対処する

信じるために成功を積む

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

テストの価値は

失敗にある

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

おしまい