FlexUnit で単体テスト

いや、もう何年前に流行ったかも忘れましたが、テスト駆動開発(TDD)なんてものをしてみました。お世話になったのは FlexUnitこちらの記事を参考に使ってみました。記事のタイトルだけ見ると FlexBuilder 2 でしか使えないように見えますが、そんなことはないです。SDK のみの無料環境でも OK。

実際に TDD してみた感想としては、やらなきゃコツがつかめないということでした。何も考えずにテストケースを書いていくと、あっという間にコードが膨れ上がります。もっぱらコピペというのもありますが、今日の午後だけで 1000 行超えてしまいました。例えば、たまりんのコードは 45 万行中 30 万行がテストコードです。具体的にどんなテストコードかはこちら。Boolean のコンストラクタにとりあえず色々ぶち込んでみました、という感じです。大変です。大変は大変で大変だということで、ここらで TDD の効果で大きいなと感じた2点について。

  • 一通り動く実装ができた後で書き換える時、エンバグするんじゃないかという心配がなくなる。つまりはリファクタリングしやすいというわけですね。この辺は散々 XP で言われていると思いますが。エンバグしないというのはソフトウェアの保守において最強ではないかと思います。また、動いているものには手を付けない、という悪しき慣習も打破できます。
  • 機能を分けようとする。テストケースを書くときに、巨大なクラス、メソッドがあると書きにくいです。書きにくいテストケースは書きたくないので、自然と機能分割がうまくなります。ついでに、クラスのインターフェイスにしようとしたり、メソッドを純粋関数っぽくしようという傾向も現れます。

最後に、テストを妥協することについて。正直、全てのコードについてテストケース書くのは無理です。妥協が肝心です。メモリリークとか、バッファオーバーランとか、危険なところを重点的にチェックするのが大事だと思います。特に、目に見えないところ、エンバグしても気づかないところに。この辺のセンスは、実際にテストに慣れないと難しいところです。