対象試験と出題頻度
リグレッションテスト(回帰テスト)は、基本情報技術者・応用情報技術者で出題されるテーマです。
ソフトウェアテストの分類問題として定番化しており、「単体テスト」「結合テスト」「システムテスト」「受入テスト」との位置づけの違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
情報処理試験を勉強していると、「リグレッションテストって、普通のテストと何が違うの?」と混乱しがちです。
リグレッションテスト(Regression Testing/回帰テスト)とは、一言で言うと
「プログラムの修正・変更によって、既存の正常に動いていた部分に悪影響が出ていないかを確認するテスト」
のことです。
イメージとしては、「家のリフォーム後の通電・通水チェック」です。
キッチンだけリフォームしたつもりが、配線をいじった影響で2階の照明がつかなくなる、ということが現実に起こり得ます。
だからリフォーム業者は、工事した場所だけでなく、家中の電気・水道をひと通り点検します。
ソフトウェアでもまったく同じで、ある機能を直したときに「直していないはずの別機能」が壊れていないかを再点検する作業が必要になります。これがリグレッションテストです。
📊 リグレッションテストの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Regression Testing |
| 別名 | 回帰テスト、退行テスト、非劣化テスト |
| 主な実施タイミング | バグ修正後、機能追加後、仕様変更後 |
| 目的 | 変更による既存機能のデグレード(劣化)検出 |
解説
ソフトウェアは部品同士が複雑に絡み合っているため、ある場所を直すと、無関係に見える別の場所にまで影響が及ぶことがあります。
この現象を「デグレード(degrade)」または「デグレ」と呼びます。
修正したつもりが「直したらまた別のバグが出た」「以前は動いていた機能が動かなくなった」という状態に逆戻りしてしまうため、これを早期に検出する仕組みが不可欠です。そのために生まれたのがリグレッションテストです。
実施タイミングと位置づけ
リグレッションテストは「テスト工程のどこか1か所」で行うものではなく、変更が発生するたびに繰り返し実施するテストです。
🔄 リグレッションテストの実施フロー
▲ 修正箇所の確認だけでは不十分。「他に壊した場所はないか」を全体に対して確認する
なぜ自動化が前提になるのか
リグレッションテストは、修正のたびに「過去に通したテストをもう一度全部流す」という性質を持ちます。
手動で毎回繰り返すとコストが膨大になるため、テストツールによる自動化が現代では標準的なアプローチです。
# 自動テストツールでの実行イメージ(例:JUnit)
$ mvn test
[INFO] Running com.example.LoginTest
[INFO] Running com.example.PaymentTest
[INFO] Running com.example.OrderTest
[INFO] Tests run: 248, Failures: 0, Errors: 0, Skipped: 0
# →修正のたびに全件を即座に再実行できる
関連用語との比較
混同しやすいテスト種別との違いを整理します。
| テスト種別 | 目的 | タイミング |
|---|---|---|
| リグレッションテスト | 修正による既存機能への悪影響を検出 | 修正・変更のたび |
| 確認テスト (再テスト) |
修正したバグそのものが直ったかを確認 | バグ修正直後 |
| 結合テスト | 複数モジュール連携時の不具合検出 | 単体テスト後 |
| システムテスト | 本番相当環境で要件全体を検証 | 結合テスト後 |
特に「確認テスト(再テスト)」との違いは紛らわしいです。
確認テストは「直したバグが直っているか」のピンポイント確認、リグレッションテストは「他に壊していないか」の周辺確認、と覚えてください。
💡 リグレッションテストの核心を3行で
・修正による既存機能のデグレード(劣化)を検出するテスト
・バグ修正・機能追加・仕様変更のたびに繰り返し実施する
・繰り返し性が高いため、テスト自動化と相性が良い
では、この用語が試験でどのように出題されるか見ていきましょう。
試験ではこう出る!
リグレッションテストは、FE・APの午前問題で「テスト技法・テスト種別」分野の定番として繰り返し出題されています。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H31春 午前 問49 |
回帰テストの目的を選ぶ問題。 | ・「変更によって他に影響が出ていないか」が正解 ・性能評価・受入確認・新規バグ網羅はひっかけ |
| AP H29秋 午前 問49 |
プログラム保守におけるリグレッションテストの説明を選ぶ問題。 | ・「修正による予期しない影響を検出」が正解 ・修正箇所そのものの確認は「確認テスト」 |
| AP R元秋 午前 問49 |
アジャイル開発で頻繁な変更に追従するテスト手法を問う問題。 | ・自動化されたリグレッションテストが正解 ・継続的インテグレーションとの結びつきも問われる |
📝 IPA試験での出題パターン
パターン1:「回帰テストの目的を選べ」
4つのテスト目的が並び、リグレッションテストに該当するものを選ぶ形式。キーワードは「変更」「既存部分」「影響」。ひっかけとして「修正したバグが直っているかの確認」(=確認テスト)、「性能の劣化検出」(=性能テスト)、「新規バグの網羅検出」(=総合テスト)が並びます。
パターン2:「保守工程で実施するテスト」
ソフトウェア保守のシナリオで、修正後に行うテストを問う形式。「保守+既存機能への影響」というキーワードが揃ったらリグレッションテストです。
頻出キーワードは「デグレード」「非劣化」「変更前と同じ動作」。深追いは不要で、「修正の副作用を見つけるテスト」と押さえれば十分得点できます。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. リグレッションテスト(回帰テスト)の説明として、最も適切なものはどれでしょうか?
- A. システムが想定された応答時間や処理性能を満たしているかを、本番想定の負荷をかけて検証するテストである。
- B. プログラムの修正・変更によって、変更していない既存部分に予期しない悪影響が発生していないかを確認するテストである。
- C. 発見されたバグを修正した後、そのバグが正しく修正されているかをピンポイントで確認するテストである。
正解と解説を見る
正解:B
解説:
選択肢Bは、変更していないはずの既存部分まで含めて再点検するというリグレッションテストの本質を正しく説明しています。デグレード(劣化)の検出が目的です。
選択肢Aは性能テスト(パフォーマンステスト)の説明です。応答時間や処理性能の検証はリグレッションテストの主目的ではありません。選択肢Cは確認テスト(再テスト)の説明です。修正したバグそのものが直っているかを確認するピンポイント検証であり、「他の場所への副作用を確認する」リグレッションテストとは役割が異なります。
よくある質問(FAQ)
Q. 毎回すべてのテストケースを流すのは現実的ですか?
大規模システムでは全件再実行が時間的に難しいケースがあり、その場合は影響分析に基づいて「修正箇所と関連するテストケースのみ実行する」選択的回帰テストや、リスクベースで重要度の高いケースを優先的に流す方針が取られます。CI/CD環境では、軽量なスモークテストを毎コミット実行し、フルセットの回帰テストは夜間バッチで流すという二段構えも一般的です。
Q. テストケースはどんどん増えていくと思うのですが、メンテナンスはどうしますか?
仕様変更で陳腐化したテストケースは廃止・修正し、重複しているケースは統合します。テストケースが「資産」であると同時に「負債」にもなり得るため、定期的な棚卸しが必要です。実務ではテスト管理ツール(TestRail、Zephyrなど)でケースをバージョン管理し、要件と紐づけて追跡可能にする方法が広く採用されています。
Q. アジャイル開発と回帰テストの相性が良いと聞きました。なぜですか?
アジャイル開発は短いサイクルで継続的に変更を加えるため、変更のたびに既存機能の安全性を確認する仕組みが不可欠です。テスト自動化と継続的インテグレーション(CI)を組み合わせることで、コード変更の数分後には全体の健全性が判明する状態を作れます。これにより「壊れたまま気づかず進む」リスクを最小化できるため、アジャイル開発の高速な変更に追従できます。
Q. 「退行テスト」「非劣化テスト」という呼び方も聞きますが、同じものですか?
いずれもリグレッションテストの日本語訳で、指す内容は同じです。「退行(regression)」は「以前の状態に戻ってしまうこと」を意味し、修正で品質が後退してしまう現象を防ぐテストというニュアンスです。「非劣化テスト」は「劣化していないことを確認するテスト」という観点から付けられた名称で、SIerによってはこちらの呼称を社内標準にしている例もあります。IPA試験では「回帰テスト」「リグレッションテスト」のいずれかで出題されます。