うちのチームのテスト事情
うちのチームのテスト事情について、反省を含めてまとめてみます。
その前に業務内容など
いわゆるビジネスロジックを作ってます。↓の青いところです。
- サーバーモジュールとそのクライアントモジュールを開発している。
- サーバーモジュールはさらにDAO的なモノに依存している。
- クライアントモジュールはライブラリのみ。UIは別のチームが開発。
テスト事情
やっていること
やってないこと
- UIからの結合テスト
- UIチーム任せ。
- 受け入れテスト
- リリースされた依存モジュールがこちらの要求する仕様を満たしているかどうかのテスト。
- DAOなんかは他のチームが作成しているモジュールだけど、受け入れテストは特に用意していない。まぁ、チームは違うけど同じ部署だし、そこまで信用してなくはないです、といったところ。別の部署や外注したモジュールとかなら必要だろうな、とは思う。
- テストカバレッジ
- 100%とか目指して、geter,seterのテストとかいちいち書いたりする暇はありません。かといって90%とか謎の数字を導入するのもアレだし。もっと有意義なテストに注力すべきと思う。
- 網羅性の目安としては使えると思うんだけどね。ただ、「必ずXX%達成!」といった規約にはなっていません。
- テストファースト
- やってないなー。
- 実装で事故があっても最低限モノはできているように、先に実装して残った時間でテストするという流れになってしまっている。
- ただ、スケジュールをずらしても最低限結合テストは書くようにしてます。
思うところ
- 結合テストは作成しているけど、網羅性は低いなとは思う。
- 特に異常系。
- この辺は単体テストでカバーすべきと思うけど、コスト的になかなか厳しい。
- 「1クラス1テスト」とか夢のまた夢。
- ロジックのテストとか、いちいちモックとか作ってられんて。JMockとかユーティリティはあるにしても、依存ジュールの動作をエミュレートするのはなにげに大変だし。
- まぁ、結合テストを補完する目的に沿って、ポイントを押さえた単体テストを充実させていく、というのが現実路線かと。
- 性能テストや負荷テストはもうちょっと網羅的にやるべきだと思う。あと自動化もしたい。性能計測とか、なんだかんだで繰り返し測る場合が多いし。
- このへん、開発担当者本人じゃなくて別のチームの人とかアルバイトさんがやってる、とかいう事情はあるんだけど。
- あと、すべての結合テストの実行に2,3時間かかるのはそろそろ何とかしないと。