コラム

  • 2021.08.17
  • ソフトウェアテスト
  • #テスト実行
  • #テスト技法
  • #テスト計画
  • #テスト設計
  • #基礎知識

リグレッションテストとは その重要性と必要性について解説

システム開発が進み、構築しているシステムが複雑になってくると、部分的な不具合の修正だけでも思わぬところに影響が出ることがあります。

そのようなプログラムの変更や、修正した場合にシステム全体に影響がないかを確認するテストを「リグレッションテスト」といいます。

今回は、プログラムの変更後に欠かせないリグレッションテストの重要性やデグレーションとの違い、テストを行うタイミングなどをご紹介します。

リグレッションテストとは?

リグレッションテストは新機能のリリースや、不具合の改修をするときに実施するテストであり、「回帰テスト」や「退行テスト」と同義語に捉えられることもあります。

また、
・PHPのバージョンアップが必要とされるとき
・スマートフォンの新しいOSがリリースされるとき
・いままで推奨していなかったPCブラウザでも利用可能になるとき

などの場合でも、リグレッションテストと同等の確認が必要です。

リグレッションテストの自動化

リグレッションテスト自動化のメリット

リグレッションテストを自動化すると、テストの実行が効率的になり、工数・コストを削減することができます。テストを省略せず、繰り返してテストを実施できることにもつながるので、品質の向上にも寄与します。

しかし、一方で自動化ツールの選定時間、使用のための学習時間、自動化用のテスト作成、メンテナンスなど、テストの自動化に工数がかかるのも、また事実です。
さらに、自動化するテストを作成できるのは、ある程度システムの開発が進んだ段階のため、最初から自動化ツールを導入することは難しいでしょう。

メリットを享受するには、このような点を踏まえつつ自動化を検討する必要があります。

自動化すべきリグレッションテスト

リグレッションテストのなかでも自動化に向いているのが単体テストです。機能やビルドごとに単体テストを実施することで、多くの不具合を改善できます。

そのほか、複数の種類のデータを入力して結果を見るバリエーションテストや、システムを修正したときに全体の動きを確認する保守テストなど、作成後や修正後に何度も実施するテストも自動化に向いているでしょう。

一般的には、3回から5回以上行うテストは自動化する価値があるとされていますが、本当に自動化すべきテストかどうかを判断し、選定する必要があります。

リグレッションテストの目的

リグレッションテストの目的は、プログラム改変後や新機能の追加のあとに、そういった変更によって直接手を加えていない機能などに不具合が発生していないかをテストし、「いままでどおり動くか」を確認することにあります。

例えば、ECサイトの場合、

・新規会員登録の機能
・購入履歴の確認機能
・購入時の各決済機能

といったものが、改変前と同じように動作するかどうかを確認するといった具合です。

改変した機能のみのテストに終始してしまい、それ以外の上記のような機能が停止してしまったことに気づかないままにサービスを提供してしまうとユーザーに多大な迷惑をかけてしまうばかりか、機会損失や売上減少につながりかねません。

確かに、新しい不具合を見つけることは重要です。しかしながら、リグレッションテストが目的とする「いままでどおりに動く」かどうかということも、テストの観点としては忘れてはならないことといえます。

リグレッションテストを行わないことによるリスク

昨今のプログラムやシステムは、一つ一つの機能が複雑に絡み合うことで成り立っているといえます。そのため、開発者であってもすべての影響を把握できないことが多いため、例えばある箇所の不具合の修正が、隠されていた別の不具合につながったり、正しく動いていたはずの機能に悪影響を与えたりすることがあります。

リグレッションテストを行わないことは、このようなリスクを野放しにするということといえるでしょう。

先にもお話ししたとおり、システムリリース後にいままで動いていた機能、表示された画面などが正常に動かなくなることは、ユーザーへ多大な迷惑をかけることになります。

また不具合が発生すれば、その改修作業が新たに発生します。

本来であればリリースが終わり、次のリリースに向けて開発作業を行うつもりが予期せぬ「不具合改修」の作業が入ることでスケジュールの遅延を引き起こし、開発自体が滞るといった負のスパイラルを生むことになります。

確かに、リグレッションテストを実施することでその分の工程が増えてしまいますが、実施の結果、隠されたリスクを未然に発見・対応することで、開発工程全体を効率よく進めることができるといえるでしょう。

リグレッションテストを行うタイミング

リグレッションテストを行うタイミングは、システムのリリース直前だけではありません。「単体テスト」、「結合テスト」、「総合テスト」のあとで、各工程で発生した不具合の改修を行ったことにより、ほかの機能に不具合が発生していないかを確認する場合にも行います。

特に、各工程に関連するリグレッションテストの場合、「システム全体のプログラム改変が終わっているか」という点について注意が必要です。

例えば、開発遅延の影響によりスケジュールがひっ迫しているケースで「A機能の開発は終わっている」が、「B機能はまだ開発中」といった状況にあるとします。

この場合、先にA機能のリグレッションテストを行い、次に開発が終わったあとでB機能のリグレッションテストを行ってしまうと、B機能の改変によるA機能への影響をまったく考慮しないことになりかねません。

このようなリスクを回避するためにも「システム全体のプログラム改変が終わっているか」という点は、忘れてはならない点の1つといえます。

(B機能の開発がA機能に影響を与えるパターン)

B機能の開発がA機能に影響を与えるパターン図

リグレッションテストとデグレードテストの違い

リグレッションテストと同時に使われる言葉に「デグレーション」があります。

・機能追加によって、既存の機能にデグレードが発生していないかを確認するデグレードテスト

・不具合修正などで存在するプログラムを改変したことで、ほかの機能に影響がないかを確認するリグレッションテスト

どちらも、もともと動いていたシステムが「いままでどおり動くか」を確認するテストということになるため、リグレッションテストとデグレードテストを別々のテストとして考えるのは不要だといえるでしょう。

デグレードとは?

ちなみに、デグレードとは「退化」「劣化」あるいは「先祖返り」などといわれています。

・機能追加や不具合修正を行った影響により動いていた機能が動作しなくなること
・プログラム改変によって過去に発生していた不具合が再発すること

などが代表的なデグレードです。

リグレッションテストのまとめ

このコラムをとおして、リグレッションテストは開発作業と切り離して考えず、必要なものとして認識することがいかに重要かを理解していただけたかと思います。このコラムでご紹介した目的や注意点を忘れずに、適切なタイミングでリグレッションテストを行うことで、ぜひみなさまも効率よく品質の高い開発を行っていただければと思います。

ただし、やみくもにすべてのシステムをテストすることは得策ではありません。というのは、システムによっては影響範囲が広く、複雑化した仕様などから、簡単にテストスコープを決めることができないということがあるからです。

そこでもっとも重要になってくるのがテスト計画だといえます。

開発を進めてから「テストをどう行うか?」と悩むのではなく、開発計画段階からリグレッションテストも含めて入念なテスト計画を立て、そこからプロジェクトを進めることこそ、リグレッションテストをうまく進めるために必要なことではないでしょうか。

資料ダウンロード/動画視聴

ソフトウェアテスト入門動画

テスト計画入門動画

SHIFTサービス資料

テストサービス導入事例集

関連サービス