@t_wada さんの #TDDBC 基調講演のメモ
https://www.youtube.com/watch?v=Q-FJ3XmFlT8
- レッド→グリーン→リファクタリング
- わざと失敗させる(テストコードのテスト)→仮実装→三角測量
- 仕様からTODOを起こす
例:
--
TODO
テスト容易性:高 重要度:高
- 数を文字列に変換する
- 1を渡すと文字列”1”を返す→仮実装
- 2を渡すと文字列”2”を返す→三角測量
--
- テストは動作するドキュメントであってほしい
- TDDではテストメソッド内で、検証・実行・準備の順番で書く
- 残酷な現実を突きつけられるのが早くなる
- assertメソッドの実測値と期待値の引数の順番は最初に確認しておく
- 作る前に使う のがTDD
- 利用者側からどう使いたいかを考えて作っていく
- 使いやすいコードの方が作りやすいコードより大事
- テストコードのテスト
- ミューテーションテスティング
- 実行するのにコストがかかる
- 仮実装
- まずレッドにしてテストコードのテストを行う
- プロダクトコードの方でわざと間違ったことをしてレッドにする
- 次にグリーンにする
- 一番早くグリーンになる方法でコードを書く
- ex) 期待される値をそのままベタに返す
- 一番早くグリーンになる方法でコードを書く
- まずレッドにしてテストコードのテストを行う
- ミューテーションテスティング
- リファクタリング
- テストコードのリファクタリング
- 重複の除去
- ツーアウト派
- 2カ所重複
- スリーアウト派
- 三カ所重複
- 2だったらいいけど、三カ所は本格的に崩壊し始めている兆候とみなす
- TDDのスキル
- 問題を小さく分割する
- テストコードと実装への不安と自信に応じて歩幅を調整する
- テスト→仮実装→三角測量→実装
- テスト→仮実装→実装
- テスト→明白な実装
- テストの構造化とリファクタリング
- インナークラスを使って仕様を明確にする
- テストの構造化とリファクタリング
- テスト仕様のツリー構造をクラスでも再現する
- 仕様(5の倍数の時はBuzzに変換する)
- 具体テスト(5を渡すと文字列Buzzを返す)
- 仕様(5の倍数の時はBuzzに変換する)
- 動作するドキュメントにする
- 必要最低限のテストだけ残す
- 三角測量用のテストは削除しておく
- テストの構造化とリファクタリング
- テストは不良資産になり得る
- テストのメンテナンスコストを考える