テスト自動化のはじめかた はじめるまえに知っておきたいポイントとは?
テスト自動化は、「とりあえず」「なんとなく」ではじめてしまうと思わぬトラブルを招きます。テスト自動化によって解決したい課題は何かを見極めるために、自動テストで何ができるのか、どのような利点があるのかを知っておくことがとても大事です。本記事では、テスト自動化をはじめるまえに知っておきたいポイントについて、事例をまじえて解説していきます。
自動テストと手動テストの違いを知る
テスト自動化をはじめるにあたり、自動テストと手動テストとの違いを知る必要があります。代表的な違いについて解説します。
①操作・確認できる範囲
自動テストは、テストケースやテストスクリプトに書いている内容だけをチェックし、書いていない内容は一切のチェックがされません。一方、手動テストはテストケースに書いてある内容だけでなく、書かれていない内容についても、テスト実施する人の経験や知見によってテストされます。
つまり、自動テストは「こう動かなければならない・動いてはいけない」のみを確認することに対し、手動テストは「こう動かなければならない・動いてはいけない」以外にもテスト実施する人の能力によって問題ないことを確認します。
②テストを実施できる時間の制約
自動テストは24時間・365日動作し続けることができます。一方、手動テストは標準では1日8時間・営業日数しかテストできません。また、自動テストは一定のパフォーマンスを維持できますが、手動テストの場合は、人の集中を一定に保つのは難しいため、パフォーマンスにバラつきが出てしまいます。
結果として、自動テストは手動テストと比べて、3倍以上の時間働けますが、パフォーマンスも加味すると、それ以上のテスト量を実施できます。
③テスト結果の信頼性
自動テストは、書いている内容どおりに正しく動作します。一方、手動テストは、ヒューマンエラーが起こりえます。また、仕様変更などによりシステムの動作が変わった場合、自動テストを実施していると、「いつまで確実に動作していた、いつから動作しなくなった」を確実に言えますが、手動テストのみである場合、実施していた人の体験と記憶に頼ってしまいます。これにより、既存のバグなのか、新規に埋め込まれたバグなのかの判断があやふやになりかねません。
④テストを並列で実施
自動テストは、複数台の自動テストを実施する環境・パソコンを準備すれば、テスト実施量が準備した台数分増え、実施する時間は台数分減ります。一方、手動テストは、人を追加しても、追加した人の経験や知見によってパフォーマンスが異なるため、テスト実施量は人数分増えるとは限りません。
つまり、自動テストは台数を増やせばその分の効果を確実に計算しやすいのに対し、手動テストは人数を増やしてもその分の効果を得られるかどうかは増やす人次第となります。単純には計算できないのです。
では続いて自動テストと手動テストとの違いをふまえて、自動テストのメリットとデメリットについて解説します。
自動テストのメリット・デメリットを知る
テスト自動化をはじめるにあたり、自動テストによって解決できる課題を認識するためメリットとデメリットを知る必要があります。
①効率化・省力化
自動テストのテスト実施における高い生産性による効率化・省力化を得られます。一方で自動テストツールのアップデートなどによるタスク増や、テスト自動化に向かないテストを自動化したことにより、自動テストによる高い生産性を活かせないものがあります。
メリット
- 夜間や休日など、人の休んでいるときにテストを実施できる
- 手動テストでは非現実的な大ボリュームのテストを実施できる
デメリット
- 自動化ツールのバージョンアップによる検証が必要となる
- テスト自動化に向かないテストがある
②コスト
効率化・省力化できるかできないかに影響します。高い生産性を期待できるテスト実施についてはコスト削減が見込めますが、テスト自動化の導入による増えるタスクについてはコスト増加します。
メリット
- テストの実施コストを削減できる
デメリット
- 自動化ツールのライセンス費用・ライセンス更新費用が発生する
- 初期導入コストが手動テストによるテストの数倍~数十倍かかる
- 自動化ツールのバージョンアップによる検証、テスト自動化スクリプトの保守が必要
- 自動テスト実施結果の分析コストがかかる
③テストの質
自動テストは「こう動かなければならない・動いてはいけない」のみを確認するチェッキングを行います。一方で、手動テストは人の経験や知見に依存する部分もあり、柔軟な不具合の検出ができます。
メリット
- 人為的ミスを防止し正確にテスト実施できる
- テスト実施したいときに実施できるので、バグの早期発見が期待できる
デメリット
- 書いていることしか確認しないため、柔軟な不具合検出が難しい
- 常にテストが成功する状態を保つため、保守・運用体制の確保が必要
以上が、代表的なテスト自動化のメリット・デメリットです。メリットだけでなく、デメリットも考慮して、テスト自動化によって解決できる課題を見出す必要があります。
テスト自動化の目的の定義
テスト自動化は「なんとなく」「とりあえず」で導入すると思わぬ失敗を招きます。失敗しないためにも、「テスト自動化によって何を解決したいのか」の目的を定義する必要があります。そこで実際にあったテスト自動化で解決した課題を3つ紹介します。
①自動テストによりテスト頻度をあげ、デグレードを早期発見する
この課題を適用したプロジェクトは、「テストしているプロダクトのデグレードが頻発し、テスト工数が増えている」といった問題を抱えていました。増えているテスト工数を削減するための自動テスト導入で踏み切ったプロジェクトでしたが、自動テストを構築して実施してもデグレードが減ることがありませんでした。
また、デグレードがおきることにより、自動テストが失敗ばかりとなり、失敗がスクリプトのミスなのかバグによるものなのかを切り分ける作業に追われました。つまり、自動テストの実行をより早い段階で実施しなければ、デグレードが組み込まれたシステムを後のフェーズでいくら自動化しても効果が薄い結果となりました。
そこで、自動テストをソースコードの更新の度に、より前のフェーズで高い頻度で自動テスト実施するようにした結果、バグの混入したコミットを特定できました。バグの改修スピードアップとデグレード防止を実現でき、テスト工数の削減にもつながりました。
この課題は、単純に自動テストでテストコストを削減するのでなく、「自動テストを利用してテスト頻度をあげ、デグレードの混入をいち早く検出・改修できるようにし、テストコストの削減」につなげるものでした。
この時に行った強化は、単体テストの強化、結合テストの強化、UI(ユーザーインターフェース)を使ったスモークテストの強化で、高い効果を発揮でました。
②自動テストによって、均一なテスト精度とし、テストミスを防止する
この課題を適用したプロジェクトは「テスターのスキルにバラつきがあり、テストミスがある」といった問題を抱えていました。原因は明確で、テストを実施するためのテストケースが、人に依存する作りになっているためでした。つまり、テストを実施するための予備知識・暗黙知が必要で、その知識がないとテストで見る範囲が極端に狭い、または見る箇所を誤るものでした。
しかし、それだけではテストミスを防止できないため、テストケースの形式知化を進め、自動テストによる結果の信頼性を高めるように進めました。その結果、自動テストによる一定品質の担保が実現できたのです。
この課題は、テストミスを防止するために、「ミスのもとであるテストケースの改良と、ヒューマンエラー防止のため」の自動テストの導入するものでした。この時に、行った改良したテストの種類は、機能テスト・リグレッションテストの2つのテストです。
③自動テストによって、スピード、コストの問題を解決し、人による高度なテストを十分に実施するためのコストを確保する
この課題を適用したプロジェクトは「クライアントから品質が低いと評価を受けた」といった問題を抱えていました。品質が低いからテストを強化するために、テスターを増員して強化を進めても単純な動作確認の作業に追われていました。高度なテスト、アドホックテストによるバグの検出が思うように進んでいかなかったのです。
単純な動作確認、つまり「こう動かなければならない・動いてはいけない」については自動テストで実施し、人の感覚によるテスト(使い勝手や多機能を連携させるシナリオテストなど)は手動テストで実施するようにテストの分担を行いました。プロジェクト途中からの自動化導入ではありましたが、「単純作業の繰り返しのような反復するテストケースに自動テストを適用」しただけで、テスターの増員を抑えることができました。より高度なテストにリソースを割り振ることが実現できたのです。
この時に行った強化は、単体テストの強化、結合テストの強化、UI(ユーザーインターフェース)を使ったスモークテスト、機能テストのうち繰り返しテストの自動化で、高い効果を発揮でました。
このように、自動テストを導入する上で、現状抱えている問題をどのように解決するかといった課題を明確にする必要があります。単純に自動テストを導入するだけで解決できない問題もあります。何を解決するかを洗い出し、導入だけでなく運用も見据えて計画する必要があります。
まとめ
「テスト自動化のはじめかた はじめるまえに知っておきたいポイントとは?」と題してご説明してきました。自動テストをはじめるにあたり、自動テストと手動テストの違い、自動テストのメリット・デメリットを知って、’自動テストによって何を解決したいのか’の目的の定義の重要性について解説しました。
「なんとなく」「とりあえず」では、「テスト自動化を導入したけど効果がなかった」となりかねません。現状抱えている問題をどのように解決するかの課題を明確にするためにも、自動テストについて知っておく必要があります。何をテスト自動化によって解決するかを洗い出し、導入だけでなく運用も見据えて計画してみてはいかがでしょうか?
誰でもカンタンにテスト自動化ができる時代は、すぐそこまできています。当サイトでは、テスト自動化ツールに興味のある方へ、「テスト自動化 推進ガイドブック」と「テスト自動化ツールT-DASH 基本ガイドブック」のダウンロード資料をご用意しております。ぜひダウンロードいただき、資料をご覧ください。