今回のテーマはテストです。テストの重要性は知りつつも、なかなか工数が確保できないという意見は多々聞きます。キーになるのは開発の効率化とテストファーストの意識になるでしょう。
網羅的にすべてのテストを行えば問題ないかと言われるとそうではありません。最低限すべきテストをきちんと行い、その上で自分たちのシステムに合わせたテストを行いましょう。今回は主なテストの種類と関連オープンソース・ソフトウェアを紹介します。
ユニットテスト/単体テスト
最も基本になるであろうテストです。ユニットテストを行うフレームワークは各プログラミング言語ごとに存在します。また、CIの多くもユニットテストベースになっており、このテストを通過することで一定の安心感が得られるようになっています。
問題はテストコードで何をしているかです。テストファーストの視点でいくと、まず正常系テストが通るようなコードを書いて、次に複雑性を増していきます。しかし、それだけでは異常系テストが不十分なことが多くなっています。コードを理解した上でのホワイトボックステストで、あえて不具合が起こるテストコードを書かなければ多くの場合不具合発生を防げないかと思います。
ユニットテストが良いのはリファクタリング時の保証であったり、テストを書くという意識がコードを一定の品質まで引き上げてくれる点にあるかと思います。