テスト自動化とは|テストを自動化するメリットと注意点

テスト自動化とは|テストを自動化するメリットと注意点

テスト自動化とは

テスト自動化とは、テスト支援向けのソフトウェアを用い、ソフトウェアテストにおける設計や実行、結果の確認および レポート作成、進捗管理といった一連の工程の一部あるいはすべてを自動化することを指します。
基本的には、ソフトウェアテストの効率向上や範囲拡大、コストの削減や実行時間の短縮などを目的とした取り組みです。

日本でソフトウェアテスト技術者資格を運営する JSTQBの『ソフトウェアテスト標準用語集(日本語版)Version 2.3.J02』によると、テスト自動化とは以下のように定義されています。

テスト自動化(test automation): ソフトウェアを使って、テストマネジメント、テスト設計、テスト実行、 結果チェックなどのテスト活動の実行や支援をすること。

上記のようにテスト自動化とは、テストの設計から実行、結果確認から管理などソフトウェアテストにおける作業の全般として定義されていますが、本記事ではもっともお問い合わせをいただくことが多い『テスト実行の自動化』についてフォーカスした上で、テスト自動化についてご紹介いたします。

なお同じくJSTQBによると、テスト実行自動化とは以下のように定義されています。

テスト実行自動化(test execution automation): たとえばキャプチャ/プレイバックツールのようなソ フトウェアを使用して、テストの実行、実行結果と期待結果の比較、テスト条件の設定、その他のテスト コントロールやレポート機能を(自動)制御すること。

つまりテスト実行自動化とは、それまで手動で行ってきたテスト実行や実行結果の確認、結果レポートの作成などテスト実行に関わる作業を、ソフトウェアを用いて自動で行うこと、と言えます。

テスト自動化が注目される理由

新たにリリースされるソフトウェアの数が増え続け、またソフトウェア自体の複雑さ・規模も拡大を続けるのになかば比例する形で、ソフトウェアテストにかかる工数も増大し続けています。

またSaaS(サービスとしてのソフトウェア)が一般的な形態となり、多くのソフトウェアが長期的かつ継続的な開発を伴った運用をされる中、 リリースのたびに同じテストを繰り返し行うケースが増えていることも、テスト工数の増大に拍車をかけています。

その一方、ソフトウェアの規模に比例する形でテスト予算が増額されるというケースは稀です。
さらに多様性や変化のスピードを増すユーザーニーズを背景にアジャイル開発の採用が増えており、ソフトウェアのリリースサイクルは短くなっています。

かといって、ソフトウェア品質を犠牲にすることはできません。一定の水準を下回る品質は、ときにビジネスにとって致命的な影響をもたらしかねません。

こういった背景から『ソフトウェアテストの効率化』がソフトウェア開発に対して、ひいてはサービスの競争力や安定的かつスピード感のある経営にとってより重要性を増してきており、それを実現する手段として『テスト自動化』が注目を集めているのです。

テスト自動化のメリット

テスト自動化にはソフトウェアテストの効率向上を中心にさまざまな メリットがあります。こちらではテスト自動化の主なメリットを取り上げ、具体的に紹介します。

コスト削減

手動でのテスト実行と比べると、テスト実行にかかるコストの削減が期待できます。
コストの削減効果は対象のソフトウェアや自動化されるテスト、テストの体制等によってケースバイケースとなりますが、毎月テスター5人月相当をかけて実行していたテストを自動化することで、月額100万円以上のコスト削減が図れたケースもあります。
テスト自動化によって削減されたコスト・リソースを開発に配分することで、開発生産性の向上にも寄与します。

ただしテスト自動化には環境構築やテストスクリプトの作成といった初期導入コストや導入後の運用費用が発生することから、前提として「何度も繰り返し同じテストを行う場合」や「導入後の運用コストが小さい場合」などに限り、中長期的なコスト削減を見込むことが可能です。

これは必ずしもすべてのテストを自動化した方が良いというわけではなく、場合によっては自動ではなく手動でテストを実施した方が良いケースもあるということを意味します。

詳しくは後述の『テスト自動化において注意すべきポイント』でご紹介します。

時間短縮

手動テストに比べて実行にかかる時間を大きく短縮することが可能です。
こちらもケースバイケースとなりますが、1人月(約160時間)相当のテストを自動化により10時間程度まで短縮できたケースもあります。

また基本的には、自動テストにおいて同じテストを同じ条件で実施する場合には毎回同程度の所要時間となることから、テスト実行にかかる時間を精度高く見積もることができるというメリットもあります。

時間を問わず実施可能

手動テストでは、基本的にはテストエンジニアが稼働している営業時間中にテストを実行することになるため、場合によってはテストのタイミングに合わせて関連する機能の開発をストップさせたり、そのための調整が必要となることがあります。

一方で自動テストは基本的には時間を問わず、終業後や深夜、休業日といった営業時間外にテストを実行することが可能なため、開発とのバッティングを避けやすく開発側の生産性に悪影響を及ぼしにくいというメリットがあります。

また手動テストでは負担が大きい長時間にわたるテストでも、自動テストであれば容易に実施ができるということもポイントです。

正確性の担保

自動テストではコードに書かれた内容に従って機械的にテストが実行されるため、ヒューマンエラーの心配がなく正確性を担保することができます。
一方でメリットの裏返しとして自動テストではコードに書かれたことしかテストしないという注意点もあります。

詳しくは後述の『テスト自動化において注意すべきポイント』でご紹介します。

CI(継続的インテグレーション)ツールと組み合わせることでリアルタイムでのテストが可能

JenkinsをはじめとするCIツールと組み合わせることで、機能の変更や追加時にリアルタイムでリグレッションテスト(回帰テスト)を自動実行させるといったことも可能となります。

不具合の検出は遅れれば遅れるほど手戻りをはじめ多くの悪影響が生じますが、CIツールと組み合わせた自動テストによって極めて早いタイミングでの不具合検出および修正が期待できます。

テスト自動化において注意すべきポイント

テスト自動化には上で紹介したような多くのメリットがある一方で、あらゆる面で万能というわけではありません。
テスト自動化によるメリットを十分に享受するためには注意すべきポイントがありますので、こちらで合わせて紹介します。

自動化にもコストがかかる

テスト自動化をコストメリットに着目して検討する際にありがちなのが、テスト自動化によってコスト削減ができないケースもあるということの見落としです。

テストの自動化といってもすぐに導入できる・導入したら終わりというわけでは当然なく、どのテストをどのように自動化するかといった検討や、導入する上での技術課題の事前検証、自動テストの環境構築やテストの開発といった導入前のプロセスが必要であり、導入後においてもテストコードの改修や分析といった保守運用業務が発生します。
つまりこういったテスト自動化に付随するコストが中長期的に手動テストのコストを上回る場合にはじめて、自動化によるコスト削減がはかれるということになります。

テスト自動化が「何度も繰り返し同じテストを行う場合にコスト削減が可能」と一般的に言われているのは、手動テストの場合はテストを実行するたびにテストエンジニアの稼働コストが発生しますが、自動テストの場合はテスト実行自体にはほぼコストが発生しないためです。

したがってテストの自動化を検討する際には、対象のテストに対して手動テストと自動テスト各々の想定されるコストを一定期間において比較し、ROIを計算することで導入の判断を行うことが基本になります。

なおSHIFT ASIAではテスト自動化コンサルタントによる導入検討のサポートなどもさせていただいておりますので、自動化に関するお悩みがありましたらお気軽にご相談ください。

自動化できない・すべきではないテストもある

例えばユーザビリティテストなど、原理的に手動で行う必要があるテストタイプがあったり、captchaなど自動での操作を防止する仕組みが含まれたページは自動化ができません。

また上でもご紹介した通りテストの自動化にもコストがかかることから、繰り返し実行しないテストや、テストコードの頻繁な修正が発生する仕様が変わりやすい機能のテストなどは手動で実行する方が効率的なため、自動化の対象からは外すのが望ましいと言えます。

一例として、ECサイトで「ユーザーログイン」→「商品をカゴに入れる」→「購入画面に進む」→「決済手段を選択」→「購入」→「購入取り消し」→「購入取り消し確認」などの極めて重要かつ基本的なユーザーフローを自動化し、定期的に一連の流れがエラーなく行えるかどうかを確認する場合などには、自動テストは非常に相性が良いと言えるでしょう。

自動テストはコード通りにしかテストをしない

当然のことですが、自動テストは書かれたテストコード通りにしか実行されません。
仮にテスト対象の画面のレイアウトが大きく崩れていたり、仕様とは全く異なる項目が表示されていたとしても、それが自動テストの確認対象でない場合は検出できません

一方で人間の手によって行う手動テストでは、テストを実行する中でテストケースに書かれていないことも暗黙的に、なかば無意識的に確認されています。
例えば「野菜」というカテゴリに「アパレル」カテゴリのアイテムが表示されていたり、名前入力欄のプレースホルダーに電話番号が記入されていたりした場合、手動テストであればテスターが異なる観点でのテストを行っていたとしても検出できる可能性があります。

自動テストでは、テストケースとしてそれらを確認するためのコードが書かれていない場合、人の目からすると明らかな不具合であっても検出されることはありません

継続的な保守運用が前提

自動テストは導入したら終わりというわけではなく、導入後の保守運用が重要です。
導入後に関連する機能のアップデートがあった場合は、それに合わせてテストコードを適宜修正する必要があります。
同様に機能追加に対して、その機能も自動でテストを行えるようにするにはテストコードの追加も必要となります。

またテストコードのリファクタリングや自動テストにかかる時間の短縮、信頼性の向上など、テスト自動化の保守運用フェーズにおけるタスクは多岐に渡ります。
テストの自動化は短期的なプロジェクトではなく、テストされるソフトウェアのアップデートが続く限りセットで継続的に保守運用されるものと認識する必要があります。

よくある失敗事例として、この認識のないままテスト自動化を進めてしまい、保守運用がされず開発されたテストコードのみが残るというケースがあります。
そういったことにならないよう、テスト自動化を検討する場合には中長期的な目線での体制構築まで含めて取り組むことが重要です。

自動テストの結果分析が必要

自動テスト実行時にFailedが出た場合、自動テストが適切に行われた結果システムに不具合があったためか、自動テスト自体に問題があったためか、あるいはまったく関係のない要因によってFailedとなったのかを分析する必要があります。

手動テストであれば結果がNGとなった場合、不具合が発生したこと自体は明白であることから、その現象や期待値との差、再現手順などについて起票をすれば良いのですが、自動テストの場合はFailedの原因は不具合のみに限らず多岐に渡るため、分析した上で切り分ける必要があります。

このタスクは自動化によって新たに発生するタスクであることから、事前に認識した上で工数や計画にも織り込んでおくことが重要です。

ソフトウェアのつくりによって自動化が難しい場合がある

自動テストの導入を想定する場合は、あらかじめ自動化を前提としたシステム設計をすることで導入がスムーズになります。

一方で対象のソフトウェアが自動テストを前提とした設計・構成になっていない場合、自動化に余計なコストがかかったり、あるいは自動化が難しい・自動化できないというケースもあります。

そのため、本格的にテスト自動化に着手する前に、PoCを通じて技術的な課題などの検証を事前に実施することがおすすめです。事前の検証により対象のテストが自動化できるかできないかの判断や、自動化のおおよその難易度やスケジュール・コスト感などを見積もることが可能となります。

さいごに

ますます多くのソフトウェアが新たに生まれていく中で、ソフトウェアテストの効率化およびその手段としてのテスト自動化は、今後もさらに重要性を増していくと思われます。同時に、その活用もより一般的なものとなっていくことでしょう。

自動テストは決して万能な手段ではなく、単に導入しただけでは必ずしも期待される効果が発揮されるとは限らないということを念頭に置いた上で、できる限り開発の上流工程から入念に計画・準備を進めることが重要です。

またテスト自動化の導入フェーズにおいても、自動化すべきテスト・自動化すべきでないテストを適切に切り分けた上で事前の検証を行い、なるべくスモールスタートすることで余分なコストの発生や手戻りといったリスクを抑えることが可能です。

本記事で取り上げたように、テスト自動化にはビジネスに大きなインパクトをもたらすメリットがあると同時に、注意すべきポイントも多く存在します。
また自動テストを導入しても、手動テストがなくなるわけではありません。
それゆえに手動テスト・自動テストの特徴や利点などをしっかりと認識し、それぞれを適切に運用することが、これからのソフトウェア開発や事業の運営においてますます重要な要素となってくるでしょう。

SHIFT ASIAでは、これまでのテスト自動化支援のナレッジをもとに、自動化に関するお悩み相談や導入前のPoC、自動化導入のサポートをさせていただいています。
テスト自動化について検討をされている方やお悩み、課題を抱えられている方は、ぜひ一度SHIFT ASIAにご相談ください。

SHIFT ASIAのテスト自動化

テストの自動化によりテストのリードタイムを短縮し、コスト削減・品質向上を実現。 高品質なテスト設計との組み合わせにより、網羅性・メンテナンス性の高い自動テストの導入が可能です。