自前ライブラリが度々エラーになってしまうのでテストについて考えてみた。(C++のコードに対して考察です。考え方については他の言語でもいけると思います。)
とりあえずテストが必要だという前提があるとして、でもやはりテストを書くのは面倒だ。テストそれ自身にも保守が必要だ。テスト駆動開発もいいのだがどうしても作りたいことがあるとまず先に作ってしまう。気持ちに行きたがっているのにそこでストップをかけられるとすごいストレスに感じるのだ。やっぱり楽しくコーディングしたい。
そこでテストはどうあるべきか考えた。
- テスト専用のコードは出来るだけ作らない
- できるだけ元のコードをそのまま使う
これを実現するためのポイントは2つある
受け入れテストをいっぱい作る。
ユニットテストをいっぱい書かなくても結局受け入れテストを実行すればユニットテストもカバーできそう。(使ってないコードなどは心配だが。ライブラリを売っているようなところはきついかな)
受け入れテストは実際に動かすコードにできるだけ少ないコードで仕込んでおいて実装する。私の場合は全部のライブラリが参照するような基本ライブラリにテスト用のヘッダーを用意して、テストに合ったヘッダーに差し替えて全部ビルドし直して実行している。今のところヘッダーにはdefineが設定してあってdefineを使って切り替えている。
最小限ユニットテストを書く
受け入れテストだけだとどうしてもどこが問題なのか発見しにくい場合がある。基本ライブラリのちょっとしたミスが影響しているとけっこう厄介な場合もあるから、クリティカルなものだけしっかりユニットテストを作る。最低限すぐにユニットテストが実行できるような仕組みだけは用意しておいてすぐ実装できるようにしておく。
今のところこの方法でだいぶ楽が出来ているように思う。もともとテストがない場合も導入しやすいのでまずこの辺のやり方で手を打っておくのも良いかもしれない。