はじめに
みなさん、テストしてますかーー?
今日は実践アジャイルテスト、という本の内容に沿って
テスト自動化の基本的な話を書きたいと思います。
ちなみに、実践アジャイルテストなんていう名前のついた本書ですが、
テスト自動化の内容に関しては、ウォーターフォールな開発でも普通に
適用できるんじゃないかなと思いました。
1. テスト自動化のモチベーション
人は何故、テスト自動化をするのでしょうか。本書は次の通り書いています。
- 手動テストは時間がかかりすぎる
- 手作業は間違いを起こしやすい
- 自動化は人々を自由にし、最高の仕事を行えるようにする
- 自動化されたリグレッションテストはセーフティネットを提供する
- 自動化されたテストはより頻繁にフィードバックを与えることができる
- 自動テストがプロダクトコードの生きたドキュメントになる
- テストの自動化は投資上の十分な見返りがある
各主張の詳細は本書に譲るとして、では何でもかんでも自動化すればいいかというと、そうでもないですね。
機械に任せるに相応しいテストレベルというものがありますし、
テストを自動化するために払えるコストにも限りがあるわけです。
それら踏まえて、繰り返し実行する価値のあるテストレベルを選びましょう、
というのが、次のアジャイルテストの4象限です。
2. アジャイルテストの4象限
本書では、様々な目的で実施されるテストを4象限に分類をしています。
それが下図のアジャイルテストの4象限です(アジャイルでなくても参考になると思ったのはさて置き)。
図では、各テストが何視点であるかが整理されています。
Q3には自動化のラベルがつけられていませんが、実際には、幾つかのテスト
(e.g. テストデータやユーザシナリオの準備)ではツールの利用が有効と書かれています。
3. テスト自動化のピラミッド
テスト自動化は各象限で利用することが可能ですが、テスト自動化に対して払えるコストは限られています。
テスト自動化のピラミッドは、テスト自動化を進めるべきテストレベルとその分量を
指し示すモデルであり、テスト自動化のROIを高めるために役に立ちます。
この中間層のキャプションが少しわかりにくいので補足しますが、
本書によるとこれは、例の4象限のQ2の大半が含まれるようです。
例えば「ストーリー」テストや「受入」テスト、
単体テストに比べて大規模な機能集合をカバーするようなテスト等が含まれるようです。
この図のメッセージは以下のようなものです。
a. 下層のテストレベルにできる限り多くのテストを押し込める。
b. 如何に多くの自動テストがあっても、大半のシステムには手動テストが必要
さて、aの理由ですが、それは以下のようなものです。
- 高速で素早いフィードバックがもたらされる
- 実装コスト、メンテナンスコストが低い
- テストが安定して動作する
- スコープが狭いため、テストNG箇所の特定がしやすい
さて、bに関してですが、先ほどアジャイルテストの4象限で見たとおりですね。
探索的テストやユーザビリティテスト等、そもそも人でしかできないことがまだまだたくさんある、ということです。
4. まとめ
まとめます。本稿のメッセージは以下の3つです。
- 繰り返し実行する価値のあるテストを自動化する。
- そのために低レイヤーな単体テストを手厚くしよう。
- 自動テストと手動テストを同格には扱わない。
次はピラミッドの各階層のテストについて書いていければと思ってます。