リグレッションテストとは何か?回帰テスト、ノンデグレードテストとも呼ばれるテストを解説

2021年1月8日

リグレッションテストの概要

リグレッションテストとは、バグ修正や機能改修などでプログラムの一部に手を加えた際に、対応箇所以外の部分に影響が出ていないか確認するためのテストです。
このリグレッションテストは回帰テストノンデグレードテストなどとも呼ばれます。

ノンデグレードテストという名前が表す通り、リグレッションテストの目的の1つは、デグレードを防ぐことです。
デグレードとは、改修や修正の際に、意図せぬ箇所が以前に行った改修や修正の前の状態に戻ってしまうことです(デグレードについては、こちらの記事もご参照ください)。

リグレッションテストのもう1つの目的は、改修や修正が、その時に対応する機能とは別の部分に影響を与えていないかを確認することです。

なぜリグレッションテストが必要なのか

ここからは、リグレッションテストがなぜ必要なのかを解説していきます。

不具合やバージョンアップなどにより、システムのプログラムは修正や改修がなされることがあります。
システムの規模が大きくなればなるほど、プログラムは複雑になり、ちょっとした修正や改修が思わぬところに影響を及ぼすこともあります。

例えば、大規模なECサイトで、特定の商品の画像が表示できないというバグが発生したとします。
プログラムの修正により、商品画像は無事に表示できるようになりました。
しかし、商品画像とは関係ない箇所である買い物カゴ機能で、今度は商品が削除できなくなってしまうというバグが発生しました。
調査したところ、画像表示の修正が、買い物カゴの削除処理に影響を与えていたようです。
プログラム修正の際、商品画像が表示できるかどうかのテストは行っていましたが、買い物カゴから商品が削除できるかどうかのテストは行っていませんでした。
買い物カゴのプログラムには手を加えていないため、テストは不要と考えられたからです。

このように、一見何の関係も無いように見える機能が影響しあっているということが、大規模なシステムでは少なくありません。
そして、このようなトラブルが発生してしまうと、その分プログラマが対応する余計な時間やコストがかかり、サイトの信頼も低下します。
サイトの信頼が低くなると、顧客が離れ、売上が低下してしまう恐れがあります。
このような事態を防ぐためにも、リグレッションテストは必要だと言えます。

どのようにリグレッションテストを行うのか

ここからは、リグレッションテストが実際にどのような流れで行われるのかを解説していきます。

いつリグレッションテストを行うのか

リグレッションテストは各テスト工程ごとに行われるのが望ましいです。
ソフトウェア開発のテストは各機能をテストする単体テスト、各機能を結合させていく「結合テスト」、そして最終的なテストを行う「総合テスト」の3つの工程を経て進められます。
これらのテストだけでは、デグレードが発生しても気づかないことが多く、リリースした後に問題に気づくということも少なくありません。
そのため、各テスト工程でリグレッションテストを行うのが理想です。

どこまでリグレッションテストを行うのか

各テスト工程でリグレッションテストを行うことが理想ではあるものの、通常のテストに加え、リグレッションテストまで行うのはコストがかかります。
なぜなら、リグレッションテストは「今回の改修・修整が他に影響を与えないか」を確認するテストであるため、心配していればきりがないという面があるからです。
そのため、リグレッションテストに関しては、「どこまでの範囲でテストを行うか」が重要になってきます。

まず、修正したモジュールが他の処理から呼び出されていないか、影響範囲を洗い出す必要があります。
他の処理と共通で使用されているような機能・モジュールはリグレッションテストを行うべきでしょう。

影響範囲の洗い出しができれば、リグレッションテストの範囲も決まってきます。
ただし、テストにかけられる時間も限られていることから、ボリュームによっては優先順位をつける必要があります。
各テスト工程の試験項目作成後には、有識者を交えてのレビューで優先順位づけを行った方がいいでしょう。
過去に発生したバグやデグレードの内容をチェックリスト化し、チェックリストに沿ってリグレッションテストの観点を決めるのも効果的です。
運用テストでは、各シナリオを一通り行うのが理想的でしょう。

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

リグレッションテストを行うにはコストがかかるため、自動化することが望ましいです。テストの自動化はリグレッションテストに限らず、開発プロセスの迅速化に貢献します。
1つ念頭に置いて欲しいのは、テストの自動化にもそれなりのコストがかかるということです。
幅広いスキルも求められるので、計画的に自動化していくべきです。
ここでは、リグレッションテストの自動化に最適なツールを3つ紹介します。

Selenium

Webアプリケーションの自動化テストツールといえば、Seleniumを思い浮かべる方も多いのではないでしょうか。
Seleniumは、自動テストのスクリプトを書くことでWebブラウザ上の動作を制御することができるツールです。
Java、Python、Ruby、Perlなどさまざまな言語をサポートしています。

Appium

Appiumはスマホアプリのテスト自動化に使われます。
一つのスクリプトでiOS、Androidの両方に対応できます。ネイティブ、Webアプリ、ハイブリッドアプリをそれぞれ自動で実行することが可能です。
テスト用にビルドする必要がなく、リリース可能なものをテストすることができます。
Java、Python、Ruby、C#、JavaScriptに対応しています。

Jenkins

Jenkinsは、CI(Continuous Integration、継続的インテグレーション)、CD(Continuous Delivery、継続的デリバリー)のためのツールで、テストのみならず、ビルドからデプロイ、リリースまでを自動化してくれるためのツールです。
Webブラウザ経由で、ほぼすべての設定、管理をGUIで行うことができます。

参考