リグレッションテストとは? コードなしのエンドツーエンドリグレッションテスト
リグレッションテストとは何か、そしてエンドツーエンドのリグレッションテストがユニットテストの見逃すものを捉える理由: 何をカバーし、いつ実行し、コードなしでどう自動化するか。
読了 11 分更新日: 2026年11月6日執筆: Ait Nohaila (事業開発担当)
リグレッションテストとは、アプリケーションへの変更のあとで既存のテストを再実行し、その変更によってそれまで動いていたものが壊れていないことをチェックすることです。
リグレッションテスト (回帰テスト) とは?
Definition
リグレッションテストは、アプリケーションへの変更によってそれまで動いていたものが壊れていないことをチェックします。新機能、バグ修正、ライブラリの更新、新しいブラウザーのバージョンは、どれも誰も触っていないアプリケーションの一部を壊すことがあります。変更後に同じテストをもう一度実行し、以前は合格していたのに今は不合格になるテストがあれば、それがリグレッションを見つけたことになります。
この言葉は「後戻り」から来ています: アプリケーションが退行し、昨日よりも今日のほうがうまく動かなくなったのです。だからこそ、リグレッションはユーザーにとって大きな不満の種になります。頼りにしていたものが、ただ動かなくなってしまうのです。
リグレッションが起きるのは、アプリケーションの各部分が、誰も意識していない形で互いに依存しているからです。共有スタイル、丸めのルール、API で名前が変わったフィールド: ある場所での小さな変更が、遠く離れた画面にまで届きます。変更した人は変更した箇所を確認しており、それは正しかったのです。破損は別の場所にあります。
リグレッションテストと再テストの違い
この 2 つはよく混同されますが、答える問いが異なります。
| 問い | 再テスト | リグレッションテスト |
|---|---|---|
| 何をチェックするか? | 修正した 1 つのバグが本当に直っていること。 | その修正や他の変更が、他の何も壊していないこと。 |
| どこを見るか? | バグがあった場所。 | それ以外のすべて、特にユーザーが頼りにしている部分。 |
| どのテストか? | バグを再現した手順。 | 同じスイートを、変更のたびにもう一度。 |
| いつか? | 修正後に 1 回。 | 変更のたびに、アプリケーションが存続する限り。 |
ユニット、統合、エンドツーエンドのリグレッションテスト
リグレッションテストはアプリケーションのあらゆるレベルに存在し、レベルごとに見える範囲が異なります。
各テストが見るアプリケーションの範囲
ユニットテスト
1 つの関数だけ
検出: 誤った値を返す計算
統合テスト
2 つか 3 つの部品の組み合わせ
検出: 次のサービスが期待する形で応答しなくなったサービス
エンドツーエンドテスト
アプリケーション全体を、画面を通じて
検出: ユーザーの目に壊れて映る合計、ボタン、ページ、メッセージ
ユニットテストと統合テストは高速かつ正確で、どのチームにも必要です。しかし、それらは開発者が考えるとおりにコードをチェックします。ユーザーは関数を呼び出したりはしません: ボタンをクリックし、合計を読み、次のページが開くことを期待します。
- 画面上にしか存在しないリグレッションもあり、ユニットテストはそこを決して見ません。スタイルの変更で「支払う」ボタンがバナーの後ろに隠れます。合計は正しく計算されたのに、誤った通貨で表示されます。ダイアログがウィンドウの後ろに開きます。翻訳が長すぎてラベルが途中で切れます。
だからこそ、エンドツーエンドのリグレッションテストが最も重要です: エンドツーエンドテストは、ユーザーがたどるのと同じようにインターフェイスを通じてアプリケーション全体を操作し、ユーザーが見るものをチェックします。全体像はエンドツーエンドテストとは何かを参照してください。
同じチェックアウトのバグを統合テストとエンドツーエンドテストの両方から見た詳しい比較は、エンドツーエンドテストと統合テストの違いをお読みください。
ユーザーはユニットテストを実行しません。ユーザーが実行するのはアプリケーションそのもので、画面を次々とたどっていきます。
機能的リグレッションテストと非機能的リグレッションテスト
機能テストは、アプリケーションが何をするかをチェックします: 注文が確定する、レポートがエクスポートされる、フィールドが空ならエラーメッセージが表示される、などです。非機能テストは、それをどのように行うかをチェックします: どれだけ速いか、どう見えるか、別のデバイスや遅いネットワークでどう振る舞うか、などです。
機能的リグレッション
チェックアウトでは今も注文が確定し、確認画面には今も注文番号が表示されます。画面は今も以前と同じ見た目です: 欠けたアイコンも、途中で切れた単語も、誤った色のボタンもありません。ページは今も時間内に読み込まれ、スマートフォンや遅い接続でもレイアウトが保たれます。
ほとんどのリグレッションスイートは機能的なものであり、機能的な確認が問うのは要素が存在するかどうかであって人に見えるかどうかではないので、ビジュアルやレイアウトの破損の大半はそれをすり抜けます。その理由は自動テストが見逃すビジュアルバグで説明しています。
リグレッションテストの種類と例
テスターはリグレッションテストをいくつかの種類に分けています。種類ごとに、スイートのどれだけを実行するか、そしてその理由が異なり、同じアプリケーションでも 1 週間のうちにそのすべてが必要になることがあります。
| 種類 | 意味 | 例 |
|---|---|---|
| 是正型リグレッションテスト | アプリケーションの変更がテストの追従を必要としないものなので、既存のテストをそのまま再実行します。 | ライブラリの更新: チェックアウトのスイートを変更せずに実行し、引き続き合格する必要があります。 |
| 漸進型リグレッションテスト | 機能の変更でアプリケーションのあるべき動作が変わったため、先にテストを更新します。 | チェックアウトに新しいクーポン欄を追加: チェックアウトのテストにステップを加えてから、スイートを実行します。 |
| 選択型リグレッションテスト | 変更が届きうる部分から選んだ、その変更に関わるテストだけを実行します。 | サインインページを変更: サインイン、サインアップ、パスワードリセットのジャーニーを実行します。 |
| 完全リグレッションテスト | サポートするすべてのブラウザーとデバイスで、スイート全体を実行します。 | リリースの前夜に、すべてのジャーニーを Chrome、Edge、Firefox、そしてスマートフォンで実行します。 |
| 部分リグレッションテスト | 1 つのモジュール内にとどまる変更のあとで、スイートの一部を実行します。 | レポートモジュールをリファクタリング: そのエクスポートのジャーニーを実行し、残りは夜間の実行を待ちます。 |
| ユニットリグレッションテスト | 変更したコードのユニットテストを、アプリケーションの他の部分なしで再実行します。 | 丸め関数を書き直し: そのユニットテストを保存のたびに数秒で実行します。 |
| ビジュアルリグレッションテスト | ユーザーの目に入るものを捉えるため、画面を以前の表示と比較します。 | スタイルの変更後に、「支払う」ボタンの色、位置、文言をチェックします。 |
エンドツーエンドのリグレッションテストは、この一覧の中の独立した種類ではありません: テストが実行されるレベルのことです。選択型、部分、完全のどのリグレッション実行もエンドツーエンドテストで構成でき、ユーザーが見るものについては、そうすべきです。
エンドツーエンドのリグレッションスイートに入れるべきもの
すべてをカバーしようとするリグレッションスイートは、いつまでも完成せず、信頼もされません。小さく始め、壊れたら最も困るものから手を付けましょう。
- 1
ユーザーに欠かせないジャーニーを挙げる
サインアップ、サインイン、検索、チェックアウト、顧客が毎週月曜日にエクスポートするレポート。5 ~ 10 件のジャーニーを、それぞれ最初のクリックからユーザーが期待する結果まで挙げます。
- 2
以前に壊れたものを加える
一度でもユーザーの元に届いたバグには、気づかれないまま戻ってくることがないよう、それぞれテストを用意する価値があります。リグレッションスイートはそうやって学んでいきます。
- 3
画面の数ではなく、リスクで重み付けする
すべての顧客が毎日使う画面は、10 個の設定ページより重要です。お金、データ、サインインが最優先です。
- 4
クリックだけでなく、結果を確かめる
チェックアウトをクリックして進むだけで合計を確かめないテストは、ほとんど何も証明しません。各ジャーニーはユーザーが求めていたもので終わり、テストはそれを検証します: 合計、確認画面、エクスポートされたファイルです。
- 5
変更のたびに実行できる速さに保つ
いくつかのジャーニーをスモークスイートとし、プルリクエストごとに数分で実行するものにします。残りは毎晩実行します。
リグレッションテストはいつ実行すべきか
リグレッションは早く見つかるほど安く済みます: 変更はまだ開発者の記憶に新しく、その上にはまだ何も積み上げられていないからです。
| いつ | 実行するもの | 理由 |
|---|---|---|
| プルリクエストまたはビルドのたびに | スモークスイート: 重要なジャーニーです。 | 変更がまだ小さいうちに、マージされる前に破損を捉えられます。 |
| 毎晩 | スイート全体です。 | 誰の作業も遅らせることなく、1 日 1 回すべてをチェックします。 |
| リリース前 | スイート全体を、サポートするすべてのブラウザーとデバイスで実行します。 | ユーザーが実際に受け取るものを、それを受け取る環境でチェックします。 |
| 自分では制御できない更新のあと | スイート全体です。 | 新しいブラウザー、OS、ライブラリのバージョンは、自分のコードが 1 行も変わらなくてもアプリケーションを壊すことがあります。 |
チェックアウトのジャーニー、直近 8 回のビルド
- #38
- #39
- #40
- #41
- #42
- 失敗し始めた#43
- #44
- #45
#42 最後に合格した実行#43 最初に確認すべき変更#45 修正済み、再チェック済み
7 段階で進めるリグレッションテスト
最初の決定からスイートを生かし続ける習慣まで、実践のすべてを順に紹介します。各手順は意図的に短くしています: リグレッションテストはプロジェクトではなく、日常の作業です。
- 1
対象を決める
リグレッションスイートが守るものを決めます: ユーザーが頼りにしている機能と、二度と戻ってきてはならないバグです。それを書き留めておけば、スイートにはそれ以外を断る理由ができます。
- 2
ジャーニーを選ぶ
最初のクリックからユーザーが期待する結果までのジャーニーを 5 ~ 10 件選びます: サインイン、検索、チェックアウト、毎週月曜日にエクスポートされるレポートなどです。どのジャーニーも、その結果のアサーションで終わります。
- 3
ビルドのたびにスイートを実行する
重要なジャーニーをプルリクエストまたはビルドのたびに実行し、スイート全体を毎晩とリリース前に実行するようにします。その日のうちに見つかったリグレッションが、最も安く済みます。
- 4
失敗を切り分ける
何よりも先に、テストが失敗した理由を読みます: 本当のリグレッションか、意図した変更か、ノイズかです。レポートには期待結果と検出結果が並べて表示されるべきで、そうすればこれは数分で済みます。
- 5
修正するか、採用する
リグレッションは、失敗したステップとその画像を添えて開発者に戻します。意図した変更は新しい期待結果として採用し、次の実行ではそれに照らしてチェックします。
- 6
スイートを小さく保つ
正当な理由で失敗したことが一度もないテストは削除し、同じものをチェックするテストはまとめます。数分で終わるスイートは実行され、何時間もかかるスイートは省かれます。
- 7
四半期ごとに見直す
数か月ごとに、スイートを現在のアプリケーションと比べます: 新しく加わったジャーニー、なくなった画面、ユーザーの元に届いてテストに値するバグです。
自動化したリグレッションスイートが放棄される理由
リグレッションテストは自動化すべきだという点で、ほとんどのチームの意見は一致しています。多くのチームが試み、そして多くの自動化スイートが結局オフにされるか無視されています。その理由はほぼ決まっています。
- スイートの維持にかかるコストが、節約できる分を上回るのです。コードで書かれたテストはセレクターでボタンを見つけるので、デザインを変えるたびに何十ものテストが一度に壊れます。直せるのは開発者だけで、その開発者は機能の開発で手一杯です。色のわずかな違いやアンチエイリアスの 1 ピクセルといった無害な理由でテストが失敗するので、誰も結果を読まなくなります。スイート全体の実行には何時間もかかるので週に 1 回しか実行されず、リグレッションが見つかるまで何日も待つことになります。
コードなしでエンドツーエンドのリグレッションテストを自動化する
GUI Test Studio は、Web アプリ、Windows デスクトップアプリ、スマートフォン、ゲームのエンドツーエンドのリグレッションテストを、インターフェイスを通じて、テストコードの作成や保守なしで行うために作られています。
各ジャーニーを一度記録する
GUI Test Runner-Recorder で「記録」をクリックし、実際のアプリケーションでユーザーと同じようにジャーニーをたどります。クリック、入力、表示された内容のアサーションがテストになります。AI アシスタントにジャーニーをプロンプトで説明して、テストを作ってもらうこともできます。
- テストがチェックするのは画面に表示されるものであり、背後のコードではありません。ビジュアルアサーションは要素の画像を比較し、テキストアサーションはその文字を読み取ります。GTS Engine + AI は各要素を、まずアプリケーションのアクセシビリティ情報を通じて見つけ、アプリケーションが答えない場合は視覚で見つけるので、ボタンの背後のコードを作り直してもテストは壊れません。
動画のように編集する
どのテストも GUI Test Studio のタイムライン上で開きます: ステップはブロックとして、アサーションはその横に、記録はその上に並びます。アサーションの変更、待機の追加、ジャーニーのステップのグループ化: コードは不要で、チームの誰でも行えます。タイムラインを参照してください。
ビルドのたびに実行する
gtr-cli は Windows のビルドマシンでスイートを実行し、パイプラインが期待する形で応答します: 失敗したテストはビルドを失敗させ、JUnit ファイルがテストタブを埋め、失敗した箇所のすべての画像が保存されます。
gtr-cli run tests\regression --countdown 0 --junit results\junit.xml --artifacts results\artifactsTeamCity、Jenkins、GitHub Actions、GitLab、Azure DevOps で動作します。パイプラインでテストを実行するを参照してください。
本当のリグレッションか、無害なノイズか?
どの実行も信頼度レポートで終わります。アサーションごとに、要素が見つかったか、記録時と同じ見た目かが示され、期待画像と検出画像が並び、差異が枠で囲まれます。
- ノイズは無視され、リグレッションは捉えられます。誰も気づかないようなわずかな描画の差は数えられません。変わった単語、欠けたバッジ、灰色になったボタンはアサーションを不合格にします。画像が異なるとき、AI スマート分析が改めて確認し、何が変わったかを平易な言葉で説明できます。
意図した変更はワンクリックで採用
すべての差異がリグレッションとは限りません: 新しい画面のほうが正しいこともあります。信頼度レポートで、実行が検出したものを新しい期待画像として採用すれば、次回の実行はそれと比較します。ダークモードや別の言語など、意図的に異なる画面については、ベースラインが環境ごとに 1 つのバージョンを保持します。
いつ始まったかを知る
すべての実行はテストの履歴に保存されます。ジャーニーが失敗し始めたとき、履歴には最後に合格した実行と最初に不合格になった実行が表示され、2 つの実行をアサーションごとに比較できます。
すべてのブラウザーとデバイス、そしてトラッカーへのバグ登録
一度記録した Web テストは、Chrome、Edge、Firefox で、スマートフォンとタブレットで、他の言語と画面サイズで実行できます: クロスブラウザーテストを参照してください。また、失敗した実行は再現手順と画像付きの Jira の課題に自動でなります: 失敗したテストを Jira のバグにを参照してください。
変更がプッシュされる
機能、修正、更新
ビルドが実行される
gtr-cli がスイートを実行
信頼度レポート
リグレッションかノイズかを、画像付きで
マージするか、先に修正する
失敗が変更を止める
すべきこと
- ビルドごとに実行する、重要なジャーニーの小さなスイート
- 各ジャーニーの最後にユーザーが見るもののアサーション
- ユーザーの元に届いたすべてのバグに対するテスト
- リリース前のすべてのブラウザーとデバイス
避けるべきこと
- 大きすぎて週に 1 回しか実行できないスイート
- ジャーニーをクリックして進むだけで何も検証しないテスト
- 半分がノイズなので誰も読まない失敗
- 開発者にしか変更できないテスト
要点
- 1リグレッションテストは、変更によって動いていたものが壊れていないことをチェックします。同じテストを、変更のたびにもう一度実行します。
- 2再テストは修正を証明し、リグレッションテストはその修正が他の何も犠牲にしていないことを証明します。
- 3エンドツーエンドのリグレッションテストは、ユーザーが実際に感じるものを捉えます: ユニットテストが決して見ない合計、ボタン、ページ、メッセージです。
- 4小さく始めましょう: ビルドごとに 5 ~ 10 件の重要なジャーニー、毎晩スイート全体、リリース前にすべてのブラウザーとデバイスです。
- 5スイートはリグレッションとノイズを見分けられなければならず、維持コストも低くなければ、放棄されてしまいます。
質問
リグレッションテスト (回帰テスト) とは?
リグレッションテストは、アプリケーションへの変更によってそれまで動いていたものが壊れていないことをチェックします。新機能、バグ修正、更新のあとに同じテストをもう一度実行し、以前は合格していたのに今は不合格になるテストがあれば、それがリグレッションを指し示しています。
リグレッションテストと再テストの違いは何ですか?
再テストは、修正した 1 つのバグが本当に直っていることをチェックします。リグレッションテストは、その修正や他の変更がアプリケーションの残りの部分を壊していないことをチェックします。再テストは 1 か所を見て、リグレッションテストはそれ以外のすべてを見ます。
エンドツーエンドのリグレッションテストとは何ですか?
エンドツーエンドのリグレッションテストは、変更のたびに、ユーザーがたどるのと同じようにインターフェイスを通じてアプリケーションの重要なジャーニーを実行します。画面上にしか現れない破損を捉えます: 誤った合計、ダイアログを開かなくなったボタン、読み込めないページです。
リグレッションテストは機能テストですか、非機能テストですか?
両方です。ほとんどのリグレッションテストは機能的なものです: 機能が今も期待どおりに動くことをチェックします。遅くなったページやスマートフォンで崩れたレイアウトのように、非機能的なリグレッションもあり、それらには専用のテストを用意する価値があります。
リグレッションテストはどのくらいの頻度で実行すべきですか?
プルリクエストまたはビルドのたびに重要なジャーニーの短いスイートを、毎晩スイート全体を、リリース前にはすべてのブラウザーとデバイスでスイート全体を実行します。リグレッションは早く捉えるほど、修正にかかるコストが安く済みます。
コードを書かずにリグレッションテストを自動化できますか?
はい。GUI Test Studio では、アプリケーションを使いながらジャーニーを一度記録するか、プロンプトで説明するだけで、テストが作られます。gtr-cli でビルドのたびに実行され、テストコードを保守する人は誰も必要ありません。
ビジュアルリグレッションテストとは何ですか?
ビジュアルリグレッションテストは、画面が今表示しているものと以前に表示していたものを比較し、ユーザーの目に映る変化を捉えます: 欠けたアイコン、途中で切れた単語、誤った色のボタンなどです。エンドツーエンドのリグレッションチェックの一種です。
リグレッションテストの例にはどのようなものがありますか?
あるチームが割引の計算方法を変更すると、昨日は合格したチェックアウトのテストで合計が $0.00 と表示されるようになります。チェックアウトページには誰も触れていません: 割引の変更がそこまで届いたのです。変更後にチェックアウトのテストを再実行することがリグレッションテストであり、赤い結果はそれが見つけたリグレッションです。
リグレッションテストとユニットテストの違いは何ですか?
ユニットテストは、開発者が書いたとおりに、1 つの関数や 1 つのクラスを単独でチェックします。リグレッションテストは規模ではなくタイミングの問題です: 変更のあとで既存のテストを再実行し、何も壊れていないことを確かめます。ユニットテストはリグレッションスイートの一部になれますし、画面を通じてアプリケーション全体を操作するエンドツーエンドテストも同じです。
OpenAI、Anthropic、Jira、TeamCity、Jenkins、GitHub、GitLab、Azure DevOps、Chrome、Edge、Firefox は、それぞれの所有者の商標です。
テスト対象のアプリでご覧になりますか? チームとの 30 分の無料相談を予約してください。