テスト自動化による品質担保とは?効果的な導入事例を紹介!

テスト自動化による品質担保とは?効果的な導入事例を紹介!

はじめに

この記事では、「リグレッションテストの自動化によってどのように品質担保ができるのか?」をテーマに、実際のプロジェクトで経験した事例を交えながら、効果的な導入方法を説明したいと思います。
特に、以下に当てはまる方に読んでいただきたい記事です。

・テスト自動化に興味があるが、何をやるのかよくわからない
・テスト自動化に取り組んだが、うまくいかなかった
・リリースした製品の市場障害がコンスタントに発生している

事例で見る!テストの課題と自動化の大切さ

失敗談:改修時にデグレが頻発し、テストで検知できない

リリース済みのプロダクトの保守フェーズで、修正や機能追加をした際に「デグレ」が発生することがあります。
「デグレ」とは、プログラムに変更を加えたことによって、今まで正常に動いていた部分に不具合が生じることです。

通常、改修部分は十分にテストを行いますが、変更していない箇所のテストまで手が回らないことがあります。
しかし、この変更が他の変更していないと思っていた箇所にも影響していて想定外の挙動をすることがあります。まさにこれがデグレという事象です。
この場合、デグレが発見されないままリリースされてしまい、思わぬ本番障害に繋がることもあります。
また、サービス稼働開始から何年も経過すると、過去の仕様や背景を知らないメンバーが増え、軽微な修正のつもりが大きなトラブルになることもあります。

リグレッションテストを実施したが・・・

デグレが発生していないか確認することを目的としたテストを「リグレッションテスト」といいます。一般的なリグレッションテストでは、過去に作成したテストケースを蓄積し、デプロイごとに毎回同じ内容を実施します。
これにより、改修していない箇所のテストもカバーすることができ、想定外の不具合(デグレ)を事前に検知することができます。
リリース直前に実施するリグレッションテストでは、E2Eテストがよく使われます。
ところが、リグレッションテストを実行しているのに、デグレが見つからないケースもあります。

原因の深堀り・・・

では、なぜこのような問題が起こるのでしょうか。

保守コストが十分でなく、結果としてテスト工数が削減される

リリース済みのプロダクトの保守・運用コストは削減されがちです。特にしわ寄せを受けやすいのがテストの部分で、十分なリグレッションテストの工数が確保されていない場合があります。

追加改修により機能が増えると、リグレッションテストの対象範囲もその分増えます。
追加の工数が掛かりますが、予算を確保していなければ、重要度の高い機能に絞ってテストし、それ以外をリグレッションテストの対象範囲から除外せざるを得ないことになります。
結果として、最低限のテストしか行われず、リリース後に思わぬ不具合が発覚します。

リグレッションテスト自体の品質に問題がある

テスト担当者の多忙やスキル不足によって、テストケースの観点が不十分になったり、重要な機能やユースケースの確認が抜け漏れていることも考えられます。
また、リリースの度に同じテストを繰り返すことで担当者に慣れが生じ、見落としなどのヒューマンエラーも起こりやすくなります。

解決策:リグレッションテストの自動化を導入

この問題の解決策として有効になるのが、リグレッションテストの自動化です。
大まかに、次のステップで進めていきます。

STEP1 計画

テスト自動化の目的を明確にし、テスト範囲の特定やツール選定、工数見積もり、スケジュール作成などの計画を行います。
目的を明確にすることは、テスト自動化を成功させるために最も重要な作業といえます。
また、継続的にメンテナンス費用が掛かることも考慮して計画を立て、十分な予算を確保する必要があります。自動化の費用については、後述します。

STEP2 自動テストの実装

テスト環境を構築し、テストスクリプトを作成します。使用するツールによって必要な作業は異なります。
自動化の対象となるテストケースは、すでにリグレッションテストで使用しているものを流用するため、新たにテストケースを作成する必要がないケースが多いでしょう。

ただし、前述のように、テスト自体に問題がないかのチェックを行い、必要があればテストケースを補強します。
テストケースがない場合は、新規作成する必要があります。テストケースがない状態での自動化も可能ですが、管理上の問題でオススメしません。

STEP3 運用開始

テストの実装が完了したら、実際にテストを動かしてプロダクトの検証を行います。
プロダクトに更新が入ると、自動テストの追加や修正が必要になる場合がありますので、継続的にメンテナンスを行いながら運用していきます。

詳しく解説!テスト自動化と導入における注意事項

テストの自動化とは?

これまでみてきたリグレッションテストの自動化の導入ステップですが、そもそもテスト自動化とは何なのかを説明します。
「テスト自動化」とは、ソフトウェアテストにおけるテスト実行などのテストプロセスを自動化することを指します。
一般的には「テスト実行」の自動化がイメージされるかと思いますが、テスト結果のレポート作成や、テストデータ作成などもテスト自動化の対象になります。
それまでテスト担当者が手動で実施していた作業を自動化することで、テストや開発プロセス全体の効率化を図ることができます。

E2Eテスト

E2E(エンドツーエンド: End-to-end)テストはテストの種類の1つで、ISTQB(国際ソフトウェアテスト資格認定委員会)では「本番相当の環境で、ビジネスプロセスを最初から最後まで実行するテストの一種 (A test type in which business processes are tested from start to finish under production-like circumstances) 」と定義されています。

少し抽象的なので、具体的な例を挙げます。
あるECサイトで、以下のようなユーザーシナリオがあるとします。

①商品をカートに入れて購入画面に遷移する
②配送先の情報を入力する
③支払方法を選択する
④購入内容を確認して、購入完了する
⑤購入完了メールが届く

①で「購入ボタンのレイアウトが正しいか?ボタンを押せるか?」や、③で「様々な支払い方法で決済ができるか?」などの部分的な確認を機能テストと呼びます。

一方、E2Eテストでは、「①〜⑤までの一連の操作が最後まで問題なく完了できること」を確認します。フロントエンド、API、DBなどシステム全体の連携や「ユーザーのやりたいことが達成できているか?」といった点に注目するのがE2Eテストです。

VRT(ビジュアルリグレッションテスト)

VRT(ビジュアルリグレッションテスト)は、Webサイトなどの見た目を前後比較するテストを指します。変更のページのスクリーンショットを取得しておき、変更後に再度同じページのスクリーンショットを取得して、差分がないかチェックします。

人間の目でもある程度の差分を検出することは可能ですが、ピクセル単位のズレを目視で確認することは現実的ではありません。かなりの集中力を要する上に、見落としのリスクもあります。
自動化することで、効率よく不具合を検出することができます。

テスト自動化の方法

E2EテストやVRTの自動化方法には、大きく分けると次の2パターンがあります。

・ノーコード・ローコードツールを使用する
・オープンソースの自動化フレームワークを使用する

表は、両者の違いを簡単にまとめたものです。一般的な内容であり、例外もあります。

短期間で簡単にテスト自動化を導入したい場合はノーコード・ローコードツール、専門の技術者がいて、柔軟なテストを構築したい場合はオープンソースの自動化フレームワークを選択するのが一般的です。
最近では、生成AIの普及によってテスト自動化のハードルも下がってきています。
たとえば、AIのコーディングエージェントを使用してテストスクリプトの作成を効率化したり、ノーコード・ローコードツールではAIによる変更箇所の自動修復機能が備わっているものもあります。

注意点:テスト自動化にはコストが掛かる

計画段階で押さえておきたい注意点として、テスト自動化にはどの方法を選ぶ場合にもコストが掛かります。下の表は、一般的なテスト自動化のコストをまとめたものです。ツールや導入方法によって不要なものや、追加すべきものもあります。

この中で見落としがちなのが、「メンテナンス担当者の工数」です。
自動テストの運用開始後も、テスト対象の機能に仕様変更が入ると、テストスクリプトの修正が必要になるケースが多く発生します。
このため、一度構築したら終わりではなく、継続的にメンテナンスを行うことを想定して、担当者の工数を確保しておく必要があります。

テスト自動化によって何が解決できるのか?

自動化に期待できるメリットとして、3つのポイントを挙げます。

リリース前の品質担保を効率化

リグレッションテストの自動化により、手動で実行するよりも実行時間を削減でき、人為的ミスを防ぐことができます。結果として、効率的にデグレや見落としたバグを検知することができます。

また、さきほど説明したVRT(ビジュアルリグレッションテスト)では、人間の目では見分けがつきにくいレイアウトのズレや色の変化などを検知することができます。
実際に、フロントエンドのライブラリのバージョンアップを行った際、すべてのページのデザインが崩れていないかのチェックにVRTを導入し、多くの不具合を検出した例があります。


デプロイからリリースまでの期間の短縮

アジャイル開発の場合、新しい機能をなるべく短い期間で開発し、市場に提供することが重要です。
プログラムのデプロイ時に、自動化されたリグレッションテストを実行する仕組みを構築することで、スピーディーにリリースすることができます。
特に、アジャイル開発やリリース後の保守フェーズで同じテストを繰り返し実行するような場合に、テスト自動化は効果を発揮します。

長期的なテストリソースの最適化

テスト自動化には、テストスクリプトの実装などのイニシャルコストと、運用開始後のテストスクリプトメンテナンス等のランニングコストが掛かります。
このため、導入後すぐにコスト削減できるケースはほとんどない点に注意が必要です。

一方で、自動テストの実行回数が増えれば増えるほど、コストメリットを受けやすくなります。
数ヶ月のような短期ではなく、年単位の長期的な視点で計画することで、コストを含めたテストリソースの最適化が可能になります。
コスト以外の面では、テスト担当者のリソースの有効活用が期待できます。
毎回同じリグレッションテストを手動実行することで時間を追われている場合、自動化によって担当者がよりクリエイティブな作業(新たな品質活動やテストの強化など)に取り組むことができるというメリットも重要です。

自動テストにおける誤解も押さえておこう

テスト自動化に対する過度な期待や理解不足があると、自動化に失敗することがあります。
たとえば、次のようなことを期待すると、「思っていたのと違った」という状況に陥るケースが良くあるので、注意が必要です。

・コストを削減できる
・どんな機能でも自動化できる
・バグがたくさん見つかる

前述したように、計画時にテスト自動化の目的を明確にし、関係者間で共通認識化を図ることが、自動化を成功させるためにとても重要になります。

前章で挙げた3つのメリットを目的として意識すると、成功に近づく可能性が高まるかもしれません。

まとめ

テストの自動化によって、

・リリース前の品質担保を効率化
・デプロイからリリースまでの期間の短縮
・長期的なテストリソースの最適化

などのメリットを得られることについて、リグレッションテスト自動化の事例を交えて紹介しました。
一方で、自動化に対する過度な期待や、継続的にかかるコストの見落としなどにより、自動化が失敗してしまうこともあります。
テスト自動化でお悩みの際は、モンスターラボにご相談ください!

サービス・プロダクト開発を検討している企業ご担当者様へ

モンスターラボは、約20年にわたるサービス・プロダクト開発実績から得られたデジタル領域の知見や技術力を活かし、デジタルプロダクト開発事業を展開しています。

先端テクノロジーに対応した高度なIT人材があらゆるプラットフォーム上での開発を支援します。アジャイル開発とDevOpsによる柔軟な開発進行や、国内外のリソースを活用したスケーラブルな開発体制の構築も可能です。 また、リリース後の保守運用や品質向上支援まで伴走可能です。

モンスターラボが提供するサポートの詳しい概要は以下リンクをご確認ください。

➡︎モンスターラボのサービス概要はこちら

案件の相談はこちら

直近のイベント

記事の作成者・監修者

秋元 美由起(株式会社モンスターラボ ソリューションアーキテクト)

秋元 美由起(株式会社モンスターラボ ソリューションアーキテクト)

事業会社におけるtoB・toC向けWEBシステムの開発運用、公共系・文教系のインフラ調達運用、医療システムのテクニカルサポートなど、幅広い業界・フェーズを経験し、2021年にモンスターラボに入社。主にQAを担当。 クライアントのニーズや状況に応じて、最適かつ効率的な品質戦略を考えることを大事にしている。