どのテストを自動化するか?
当たり前ですが、複数回実行する可能性があるテストがその対象になります。
具体的には?
機能テストを自動化しようと考えた場合、まず最初に思い浮かぶのは、回帰テストだと考えられます。
※回帰テスト(regression testing) (JSTQB ソフトウェア標準用語集より)
変更により、ソフトウェアの未変更部分に欠陥が新たに入り込んだり、発現したりしないことを確認するため、変更実施後、既にテスト済みのプログラムに対して実行するテスト。ソフトウェアや、実行環境が変わるたびに実施する。
しかし、様々なプロジェクトにおいて、全ての回帰テストを実施することは、テストの量が多すぎて、時間的制約や人員不足の面から難しいと思われます。
よって、テストを自動化することにより、コストを抑えつつ品質のアップ(または、維持)に貢献できることになります。
プロジェクトや案件、またはその工程により、回帰テストの内容は様々あると思います。
- システム(ソフトウェア)のメインとなる機能テスト
- 優先度、重要度の高いテスト
- 正常に動作しない場合、リスクが高い機能のテスト
- 必ず正常に動作しなければならないシナリオテスト
- 無影響確認テスト
- ユーザマニュアルテスト (マニュアル通りに動くことを確認するテスト)
- 。。。
また、違う観点で考えた場合、複数回同一の操作を行うテストとして、
- バリエーションテスト(同じ操作で複数のデータパターン入力が必要)
- 過去バグの確認テスト
- 保守テスト(バージョンアップ時の確認テスト)
上記のような複数回実施する(または、可能性がある)テストは、テスト自動化の対象になると思います。さらに、テストではありませんが、自動化ツールの有効活用としは、日次、月次などの定型業務(毎朝の確認作業、毎月のバージョンアップ)を、ツールを利用して自動化することも考えられます。
また、自動化対象となるテスト(作業)を検討する際に、以下の式が成り立つようなテスト項目にさらに絞り込むことが必要になります。
基準 : 自動化コスト < 手動実施コスト×実行回数
自動化コストは、作成コストとメンテナンスコストがあります。よく、「実行回数が3~5回以上の手動テストは、自動化する」と言われます。 しかしこの自動化のコストは想像以上に膨らむ事が多々あります。注意点や検討したい事として、
- 初めて利用するツールの場合、学習コストを付加する。
- 対象テスト項目の手順や確認事項を明確にする。曖昧な部分があると、自動化できない場合がある。
- 自動化の実行コストとして、テスト準備やエビデンスの保存等、テストに付随する作業があるが、これも自動化することによって、コストを減らす。
- ある程度、開発が安定した後に自動化し作成コストの増加を防ぐ。
- 開発者と情報共有を密に行い、何が変わったか事前情報を得ることにより、メンテコストを予測、最小限にする。
- 前工程で作成したテスト自動化のテストセットを再利用できないか検討する。
上記の内容を検討し、はじめは、スモールスタートで最小限の自動化を行い、仕組み作りに徹し、徐々に拡大していくのが最善です(あたり前ですね)。
最後に、自動化のためのテスト計画書を作成し、テスト設計する事をお勧めします。テスト計画では、自動化の目的、目標値(例えば、自動化率、コスト削減率)を決定し、各種スコープを明確にすることで、時間のかけ過ぎや、作り込み過ぎな部分を排除します。テスト設計では、自動化を前提として、効率的なテスト手順を検討することにより、連続実行性を確保できるようになります。
QCDのバランスを保ちながら無理、無駄のない継続的な自動化を目指しましょう。