概要
エンジニア1年目の駆け出しのものです。
チームでTDDを推進していくことになり、TDDを勉強、実践していくうちに初心者こそTDDを始めるべきだと思ったのでまとめました。
TDDを始めようと思っている方の一助になれば幸いです。
目次
- 結論
- TDDって何?
- TDDのメリットは?
- TDDをどうやって始める?
- まとめ
- 余談
【結論】なぜ初心者こそTDDを始めるべきか
- レッド、グリーン、リファクタリングのサイクルを小さく、素早く回す事により、__問題を小さく分解して確実に進む__ことができるから
- なおかつ、コードにバグがないと__自信を持ちながら進む__ことができるから
TDDについての説明となぜ上記の結論のように思ったのかを書く↓。
TDDって何?
テスト駆動開発 (てすとくどうかいはつ、英: test-driven development; TDD) とは、プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行なった後、コードを洗練させる、という短い工程を繰り返すスタイルである。
wikipedia参照
ある機能を実装する際、TDDでは以下のサイクルを回す。
①その実装が満たすべき挙動のテストを書く(レッド)
②最低限の実装でテストを通す(グリーン)
③リファクタリングする(リファクタリング)
TDDはただテストを始めにかけばいいのか?というとそうゆうことではない。
TDDのテストは以下のような意味を持つと書かれている。
TDDはテスト技法ではない。TDDは設計技法である。
TDDのテストはいわばプログラミングの設計の補助線、治具である。
テスト駆動開発
テストとはその機能が最終的にあってほしい姿(設計)であり、テストを先に書くことでゴールを明確にできる。
また、テストが書きづらいのであれば、考えている設計を考え直すきっかけにもなる。
TDDのメリットは?
- 「動作するコードを書く」と「きれいなコードを書く」のフェーズを分離することで、__小さく確実に進む__ことができる
- 今書いたコードにバグがないと自信を持てる
- これから書くコードが既存コードを破壊していない自信を持てる
TDDをどうやって始める?
TDDの手順は大まかに以下の通り
① 実装したい機能をリストアップする
② リストアップした中から機能の中から1つ選び、最終的にあるべき挙動のテスト書く
③ ②のテストがレッドであることを確かめる
④ 仮実装でテストをグリーンにする
⑤ ④を一般化したコードに置き換える(テスト駆動開発で言う明白な実装)
⑥ ④のコードをリファクタリングする
⑦ ②に戻る
仮実装など行わずともはじめから一般化したコード、きれいなを書けるのであれば書けば良い。
ただし、問題が複雑で混乱してきたときは__小さなステップに立ち返る__。
つまり、まずは仮実装を行い、次に動作するコード、次にリファクタリングを行う。
###初心者にすすめる理由
ベテランエンジニアであれば、一気にきれいで動作するコードを書くことができるだろう。
しかし、初心者はそうは行かない。(少なくとも私は)
そこで、TDD使うことでプログラミングの補助輪をつけることができ、小さなステップで着実にコードを書くことができる。
まとめ
- TDDはレッド、グリーン、リファクタリングの__サイクルを小さく、素早く回す__
- これにより問題を__小さく分解して確実に進む__ことができる
- なおかつ、コードにバグがないと__自信を持ちながら進む__ことができる
余談
###TDDで書くテストはソフトウェアテストの世界の一部
ソフトウェアテストは下の図のように分類でき、TDDで書くテストはその一部である。
TDDはチームや個人を支援する、つまり、より確実に安心してコードを書けるテストを提供する。
一方でセキュリティパフォーマンステストなど「製品を批評する」テストも必要である。