ソフトウェアテストを行う際に、従来は人の手で行われていたテストを自動化する「テスト自動化」の技術が注目を集めています。近年ではテストの手法にも変化が現れ、テストを繰り返し実行することが増えてきましたが、うまくテストを自動化することができれば、人的負担を減らし、コストも削減できる可能性があります。
この記事では、テスト自動化の重要性やメリット・デメリットなどについてご紹介します。
テスト自動化とは
ソフトウェアテストは不具合のある製品をリリースしてしまわないよう、ソフトウェアの問題を発見するために行う作業のことです。ソフトウェアテストにはさまざまな工程やテストレベルがあり、単体テスト、結合テストなどが代表的です。
各テストについては、それぞれ別の記事で詳しく紹介しています。
単体テストに関する詳しい内容は「単体テストとは?メリット・デメリットやテスト手法を詳しく解説」の記事で、総合テストに関する詳しい内容は「結合テストとは?目的や手法、単体テストとの違いを解説」の記事で解説しています。
また、システムテストについては「システムテストとは?目的やテストの種類、手順を徹底解説」の記事でも解説していますので、ぜひご覧ください。
本記事で詳しく解説する「テスト自動化」とは支援ツールを用いてソフトウェアテストのプロセスを自動化することをいいます。
例えばE2Eテスト自動化ツールを使うことで、マウスやキーボードを使ってパソコンの画面上で操作する作業を自動化し、画面上の画像や文字を自動的に判別できるようになるのです。
なぜテスト自動化が注目されているか
現在はテスト自動化が注目されています。それにはいくつかの理由があります。
理由の1つ目が、「ソフトウェア開発に関連するビジネス環境の変化」です。
かつては適切に、計画通りにソフトウェア開発をすることが望ましいとされていたため、1年以上の長い時間をかけて開発が行われていました。しかし近年は市場の移り変わりが激しくなっており、開発中に市場のニーズが変わってしまうことも多くなりました。そのため現在はハイスピードで効率の良いソフトウェア開発が求められるようになっています。
こうしたビジネス環境の変化に伴って開発手法も変化していて、ウォーターフォール型という工程を分けて1つずつ確実にこなしていく手法から、アジャイル型という仕様変更や設計変更を前提に厳密な仕様を決めないまま、小単位での実装とテスト実行を繰り返す手法も注目されるようになったのです。
このように高速で効率的な開発が重視される昨今において、新機能や新サービスを速いペースで生み出し続けるには、システム全体を素早く成長させつつ過去にリリースした機能の品質確保が重要になります。テストの自動化は、こうした短期間、低コスト、高品質なソフトウェア開発のニーズが高まるにつれて大きな注目を集めるようになりました。
テスト自動化のメリット
テスト自動化を行うことで、さまざまなメリットを得ることができます。以下でテスト自動化のメリットをご紹介します。
不具合の早期発見
テストを自動化することによって、より短い時間で不具合を発見することができます。
テストを何度も繰り返して実行できるような自動テスト環境を構築することによって、毎週~毎日単位でのテスト実行が可能になり、結果的に不具合を早期発見できるようになるのです。
さらに、不具合を早期に発見できることで、業務上のムダを取り除くことにもつながり、時間を短縮して開発にかかる時間を効率化できます。
コストを抑えながら品質を高められる
手動テストで品質保証を行うことは、莫大な労力とコストがかかってしまいます。そのため、品質保証の範囲をスリム化する手法がよく用いられます。しかし、テストが不十分な箇所が原因でシステム障害が発生するケースも珍しくありません。
テスト自動化を採り入れることで、ソフトウェア全体の品質向上に向けた取り組みを、コストを抑えながら実施できるようになります。
人的リソースが不足していてもテストできる
人の手による手動テストの場合、何らかの事象によって人的リソースが不足してしまうと、テストを実行できなくなる可能性があります。それに対して、自動テストの場合はシステムがコード通りに自動でテストを行うため、人的リソースが不足した状況でもテストを行うことができます。
さらに、手動テストでは難しかった大規模な性能テストや、大量のデータを比較するテストなどを行うことも可能です。
テストを高速で実施できる
テストを自動化することによって、人の手によるテストと比べて高速かつ正確なテストを実施することができるようになります。ただし、テストの実行速度はテスト内容や使用するツールによって変化することは留意しておきましょう。
ヒューマンエラーを排除できる
人の手によるテストでは、ヒューマンエラーがつきものといえます。一方、テスト自動化を導入した場合はシステムが正誤を判断するようになるため、ヒューマンエラーを排除することができます。
しかし、そのメリットの裏返しとして自動テストの場合はコードに書かれた内容しかテストできない点には注意が必要です。詳しくは後述します。
営業時間外でもテストできる
手動テストの場合は、テストエンジニアが勤務している営業時間内にテストを実行します。ときにはテストの際に関連する機能の開発を止めることや、そのための調整を行うこともあります。
一方、自動テストの場合は営業時間外でもテストを行えるメリットがあります。就業後や休業日、深夜帯といった時間帯であってもテストの実行が可能です。関連する機能とバッティングを避けることや開発の生産性を損なわないこともメリットといえるでしょう。
テスト自動化のデメリット
先ほどご紹介したように、テスト自動化には多くのメリットがあります。しかし、一方でデメリットも存在するため、あらかじめ把握しておく必要があります。以下でテスト自動化の際に気をつけておきたいデメリットをご紹介します。
初期段階にかかるコストが大きい
テスト自動化を行うためには、テストコードを作成するためのツールを使用するために学習が必要になります。このほかにもさまざまな初期段階のコストが発生します。
テストを行う対象がどれくらいの頻度で実行されるか、自動テストにどういう効果を求めるかなど、コストパフォーマンスを含めた総合的な判断が必要です。
テスト自動化の保守運用が必要
自動テストは導入してすぐに結果が出るものではありません。長期にわたって運用を続けることで投資対効果が得られるものです。長期にわたって運用するためには、自動化したテストの保守が必要となり、そのためのリソースも必要です。また、自動テストがアップデートされる際はその都度テストコードの修正が発生するほか、機能が追加されたときもその機能を実行できるようなテストコードの修正が必要です。
テスト自動化が適していない場合がある
先ほど初期段階にかかるコストが大きいというデメリットを紹介したように、テストの自動化にはさまざまなコストがかかるため、自動化が適していないケースもあります。
例えば、繰り返し実行しないテストは自動テストには適しておらず、手動テストの方が効率的であるといえます。また、テスト対象のソフトウェアが自動テストを想定した設計になっていないと、テスト自動化が上手く実行されない可能性もあるでしょう。
コード通りのテストしか行えない
自動テストの場合、事前に設計したテストコード通りのテストしか行えません。
仮にテスト画面のレイアウトが崩れていたり、仕様とは違う項目が表示されていたりしても、自動テストの確認対象ではない場合は問題を検出できないのです。テストコードに書かれていなければ、人の目には明らかな不具合に見えるものも検出できません。事前に起こりうる問題を予測して、自動テストで確認できるようにテストコードを書く必要があるといえます。
テスト自動化の導入ステップ
続いては、テスト自動化の一般的な導入ステップについてご紹介します。
目的を設定
テスト自動化を導入することで、ありとあらゆる面でメリットが得られると思いがちですが、実際にはそのようなことはありません。テスト自動化の成功の鍵となるのが、導入する前に自動化の目的について考え、明確に設定することにあります。最初にコストの削減や時間短縮、連続実行や定期実行といった目的を優先順位をつけながら決めて、それらの目的が達成できるかどうかを検討しましょう。
コスト削減を目的にした場合は、初期費用や保守運用の費用を考慮しながら、コストパフォーマンスが得られるかどうかを検討します。自動化をすることで節約できる時間などを導き出しながら、同じテストを実行してどのポイントで損益分岐点に達するかを算出し、判断します。
対象や範囲を設定
先ほどもご紹介した通り、自動テストが適していない場合もあることから、対象や範囲を定めておくことが必要です。自動化の目的を視野に入れながら自動化の対象や範囲を絞り込んでいきましょう。
コスト削減を目的にした場合は、テストの手順が確立されていて毎回必ず実行されるテストを自動化の対象とするなどして、コスト削減が見込める部分にフォーカスして絞り込みを行います。
テスト自動化ツールの選定
自動化の目的と自動化の対象や範囲を決めた後は、実装するツールを決定します。ツールの選定は、開発目的や対象に適用できることはもちろん、継続して運用することにも着目して行いましょう。実装するツールのメンテナンスコストやランニングコストも考慮できるとなお良いでしょう。
また、継続的インテグレーションツール(CIツール)を使用している場合は、テスト自動化ツールと連携することができるかも重要な選定ポイントとなります。この点は実際にツールを使用しないと分かりづらいものですが、有償ツールのなかにもデモ利用できるツールが多いため、目的にかなっているか確認するために試用してみることをおすすめします。
おすすめテスト自動化ツール
前項ではテスト自動化ツールの選定ポイントについてご紹介しました。ここでは代表的なテスト自動化ツールを3つご紹介します。ぜひ選定にお役立てください。
Selenium
Selenium(セレニウム)は、Webアプリケーションのテストを自動化するツールです。人がWebブラウザを使って操作する代わりに指定された動作でテストを自動化し、Web上のプログラムの動作検証を行います。主要のWebブラウザの多くに対応し、Selenium Gridという拡張機能を用いて、ネットワークに接続した他のコンピュータを使ってテストを実行することが可能です。
Jenkins
Jenkinsは「アジャイル開発の三種の神器」のうちの1つとされるテスト自動化ツールです。Javaで書かれたツールであり、オープンソースであることから世界中で多くのユーザーが利用しており、プラグインは約1,600以上にも及びます。サーバーのOSによって環境が左右されないことが強みで、サーバー上でJavaが動作さえすれば無償で利用することができます。継続的インテグレーション(CI)や、形像的デリバリー(CD)の自動化も可能です。
QCWing
QCWingは、パソコンを外部から自動制御するタイプのテスト自動化ツールです。マウスやキーボードを使って行う操作をQCWingが自動的に実行します。マウスやキーボードの操作内容をテストシナリオとして記録し、そのシナリオに従ってパソコンを自動で操作する仕組みです。ウインドウを閉じる、サイズを変更する、アクティブにするといったウインドウ操作も自動化が可能で、繰り返しテストや複数のアプリケーションにまたがったテストも自動化できます
キャプチャした画像と期待値画像を比較する機能も搭載しており、比較判定テストも可能です。
まとめ
テスト自動化のメリットやデメリット、導入の進め方についてご紹介しましたが、いかがでしたでしょうか。テスト自動化を適切に導入できれば、開発工程を合理化することができ、開発期間の短縮やコストの削減に貢献します。
開発現場がひっ迫していてテスト工程を効率化したいとお悩みの方は、以下の資料もぜひご覧ください。
- カテゴリ:
- キーワード: