TDDってなんなの?
・ツールや開発環境は
どんどん変わっているし、速くなっている
いつまでも「前と同じ」なわけがないでしょ
・有効な場面があれば使ってみてほしい
今日の目的
いろんな開発のやり方があることを
知ってほしい
まずはTDDのやり方を
1. 小さいテストを1つ書く。
2. すべてのテストを実行し、1つ失敗することを確認する。
3. 小さい変更を行う。
4. 再びテストを実行し、すべて成功することを確認する。
5. リファクタリングを行い、重複を除去する。
Kent Beck『テスト駆動開発』より
TDDのやり方
TDDのやり方
https://pacroy.blogspot.com/2017/01/a-few-exercises-for-you-to-practice.html
1. エラーになるテストを書く
2. テストが通るように書く
3. リファクタリング
TDDのやり方
https://pacroy.blogspot.com/2017/01/a-few-exercises-for-you-to-practice.html
0. TODOリストを書く
1. エラーになるテストを書く
2. テストが通るように書く
3. リファクタリング
x. くりかえし...
0. TODOリストを書く
どんな機能を盛り込んでいくか
どんな手順で盛り込んでいくか
要するにこれからやることを考えておく
もちろんコードを書きながら
思いついたときにリストを更新する,でもいい
1. エラーになるテストを書く
テストを書く = まずは仕様を書く
これから作るプログラムのインプット
エラーになる = テストコードが
ちゃんと呼ばれるかの確認
中身はどうでもいいので、
とりあえずかんたんにエラーでいいや
2. テストが通るように書く
いきなり動くコードでなくていい
ちょっとずつ動くようにすればいい
試しながら動作を確認しながら進めればいい
ちょっとずつだから、把握しやすいし変更しやすい
バグってても、わかりやすいし直しやすい
なやんだりこまったりで手が止まるなら、
動かしながら考えればいい
フィードバックが得られて、次の一手が思いつくかも
3. リファクタリング
同様にちょっとずつきれいにすればいい
いきなり書き換えたりせず「動いたら前のを消す」etc.
x. くりかえし
行きつ戻りを経て、
最後の最後に全てのテストがOKになればいい
テストは何度もNGになっていい
どこかのテストがNGになっても、
テストコードがあれば動くものに戻せるのだから
安心して書き直せばいい、そのためのテストコード
動かしながらの開発は、
リズムがあって,集中できる
全てを机上で考えるのは、
しんどいし,時間がかかる
ここがポイント!
じーっと考えるのって割としんどいでしょ
TDDってなんなの?
TDD はテスト技法ではない。
TDD は分析技法であり、設計技法であり、
実際には開発のすべてのアクティビティを
構造化する技法なのだ。
Kent Beck 『テスト駆動開発』より
TDDは設計技法
(プログラム構造の設計)
テストファースト
これ、テストと何が違うの?
後から書くテスト
• テストするため
• デバッグするため
後から書くテスト
• テストするため
• デバッグするため
テストのためのテストじゃない!
先に書くテスト
• コーディングするため
• リファクタするため
0. TODOリストを書く
1. エラーになるテストを書く
2. テストが通るように書く
3. リファクタリング
x. くりかえし...
テストを利用してコードを書く!
やってることはプログラム作成
コードを
コードを
ゴールは「動作するきれいなコード」
別にテストをやりたいわけじゃないし、
デバッグしただけの汚いコードでもダメ
少しずつ完成させる
TDDのコツは…
■歩幅を小さく、リズムよく、テンポよく
いま動いているものをベースに
ちょっとずつ考えればいい
一度にいろいろ考えないでいいからラクでかんたん
■動かしてみればわかる、動かしてみて直せばいい
机上での考慮漏れも拾える
■フィードバックだいじ
迷ったら動かせ、結果を見て考えればいい
動かしながら整える感じ
TDDのコツは…
動かしながら整える感じ
TDDのコツは…
実演します!
すすんでる感、できてる感
TDDの本質は…
■やってる感、すすんでる感
動くものが「できていく」のがいい
■動作確認できてる安心感
本来のテストとは自分が安心するためのもの
「できた!終わった!」
ライブ(実演)
FizzBuzz って知ってる?
FizzBuzz って知ってる?
1
2 Fizz
Buzz
4
TDDのやり方
https://pacroy.blogspot.com/2017/01/a-few-exercises-for-you-to-practice.html
0. TODOリストを書く
1. エラーになるテストを書く
2. テストが通るように書く
3. リファクタリング
x. くりかえし...
「動かしながら整える」であれば
それはTDDだと思う。
やり方はゆるく考えてOK!
できるとこからやってみよう!
ご参考:TDDはゆるく実践しても大丈夫
http://goyoki.hatenablog.com/entry/2019/10/13/232806
テストは品質をあげるわけではない
品質をあげるのはプログラミングである
バグを見つけるよりもバグを減らせ
もっといいやり方はないか?

TDDってなんなの?(What is TDD)