TDD
SE会社なのにテスト文化のない会社に所属しているので今までテストはおざなりにしてきた.
ここに来てOSS活動したいのでやっぱテストがないと信用されないと思うのでテストコードの必要性を感じ取り組んでいる. ちなみに今回のはなしは,「テスト」というより,「テスト駆動開発」の話題が主である.
TDD
OSS活動とかそれ以前にテストは退屈だなあとずっと思ってきた. でもそれは大違いだった.
僕は現在JavaScriptが好きなので,ちょうどいい具合のタイトル「テスト駆動JavaScript」という書籍を手にとった.
テスト駆動JavaScript amazon
内容はタイトルどおり「テスト駆動」なのである. 勘違いだった. 「テスト駆動開発」とはプログラムコードの「設計」,そしてプログラマのメンタルに大きな影響がある開発手法だった. やってみるとこれがおもしろい.
TDDのサイクル
TDDはプログラムについて以下のサイクルを繰り返す.
- テストを書く
- テストを実行する --> テストが失敗することを確認する(まだプログラムを書いてないので)
- プログラムを書く
- 初回は,定数などハードコーディングで実装オケ
- 2回め以降は,リファクタリングを行う.
- 定数・ハードコーディングが重複するところを取り除く
- またはプログラムが怪しいところなど,設計を見直す --> 別途プログラミングする
- テストを実行する
- テストが成功する場合,次のプログラムを実装する(はじめに戻る)
- テストが失敗する場合,リファクタリング行う
RED --> GREEN --> リファクタリング
用語を定義・確認した上で上記のリストを凝縮すると3つのステップになる
- テスト失敗を確認することを RED
- テスト成功を確認することを GREEN
- リファクタリング
RED, GREEN, リファクタリング は合言葉だ.
この「サイクルを繰り返す」ことがなにより重要. GREENを確認できた時の「気持ちの良さ」がたまらない. プログラムを追加してREDを確認し,ソフトウェアが育ったいく過程がたまらない.
この小さなサイクルは,
- プログラムを美しくし,
- プログラマのストレスを軽減し(むしろ楽しいくらい!)
- テストコードを残す.
テストコードはいつでも誰でも実行できる.成功する.プログラムの仕様書にもなる.
TDD!!!
JavaScriptでのテストはまた後日に.