リグレッションテスト(回帰テスト)とは? 目的や重要性、自動化について解説
更新:2024.5.16
著者:Sky株式会社
目次
リグレッションテスト(回帰テスト:Regression Testing)とは?
リグレッションテストとはソフトウェアテストの一種で、機能の追加・変更、不具合の改修などに伴うプログラムの変更によって、別のプログラムに意図しない不具合が発生していないかどうかを確認するためのテストです。リグレッション(regression)が日本語で「回帰」や「後戻り」といった意味であることから、「回帰テスト」や「退行テスト」と呼ばれることもあります。
プログラムやシステムは、複数の機能を組み合わせて作られています。開発が進めば進むほどその構造は複雑になり、影響し合う機能の数も増えていきます。また、規模が大きくなるにつれ、機能の追加や変更を行った際の影響範囲も広くなるため、どこまで影響が及ぶかを正確に想定することは困難になっていきます。一つの小さな不具合の改修により、意図しない部分にまで影響が生じて、それまで問題なく動いていた機能が突然エラーを起こしてしまうという事態も起こり得ます。
特に大規模なプロジェクトの場合、開発関係者が影響範囲を把握しきれていない、ということは珍しくありません。そのため、通常のソフトウェアテストとは別にリグレッションテストを行い、意図していない影響が生じていないかを確認する必要があるのです。リグレッションテストは、ソフトウェアの品質を保証する上で欠かせないテストといえます。
デグレーションとの違い
リグレッションテストに関連するキーワードとして「デグレーション」があります。デグレーションとは、「悪化」や「退化」を意味する「デグレード(degrade)」の名詞形です。
ソフトウェア開発において、プログラムの機能追加や変更、不具合修正を行った結果、それまで正常だった箇所に問題が発生し、品質が落ちて劣化してしまう事象をデグレーションと呼びます。例えば「バージョンアップによって機能が劣化した」「不具合を改修したら、別の不具合が復活した」といったケースです。こうした事象や状態は、省略して「デグレ」とも呼ばれます。
リグレッションとデグレーション(デグレード)は、単語としてはほぼ同じ意味合いですが、リグレッションはテストの名称、デグレーションは悪い影響が発生している状態を表す用語として、慣用的に使い分けられています。つまり、デグレーションが起こっていないかどうかを検証するのが、リグレッションテストということになります。
リグレッションテストのタイミングと範囲
ソフトウェアテストは、個々のプログラムごとに動作をチェックする「単体テスト」、個々のプログラムを組み合わせて動作をチェックする「結合テスト」、プログラム全体の動作をチェックする「システムテスト(総合テスト)」と、段階を踏んで進められます。
リグレッションテストは、これらの各テストが終わるごとに実施するのが一般的です。テストで見つかった不具合を修正したことで、ほかの不具合が発生していないかを確認します。また、システム全体の品質を確認するために、リリース前の最終チェックの段階でも実施することがあります。
範囲や対象を絞り込まずに行うテストを「フルリグレッションテスト」と呼び、本来はどのテスト工程でもフルリグレッションテストを行うのが理想です。しかし、時間やコストの負担が膨大になってしまうため、修正の影響範囲やリスクの高さに応じてテスト範囲を絞ることがほとんどです。テストの規模によっては、過去のテストデータや環境を再利用して影響の有無をチェックし、リグレッションテストを省略することもあります。
リグレッションテストを行わないリスク
通常のソフトウェアテストを行った上で、さらにリグレッションテストを行わなければならないのはどうしてなのでしょうか。
ここでは、リグレッションテストを実施しないことのリスクについて、機能面とセキュリティ面に分けてご紹介します。
機能面でのリスク
新しく追加した機能のみをテストし、正しく動作していても、変更部分に影響を受けた既存機能にデグレが起きている可能性があります。リグレッションテストをまったく行わずにソフトウェアをリリースすると、このような問題を見落としたままユーザーの手に渡ることになりかねません。
システムの規模の増大や複雑化がみられる昨今では、変更箇所の影響が及ぶ範囲は広く、デグレの発生リスクも大きくなっています。場合によっては、「画面が開けない」「処理が完了しない」といった致命的な機能不良につながるケースもあります。
セキュリティ面でのリスク
公開済みのソフトウェアにセキュリティ上の欠陥が発見された場合、セキュリティパッチを適用する必要がありますが、正しく適用されないと既存の機能に新たな脆弱性が生じる恐れがあります。リグレッションテストを行わなければ、新たな変更が既存の機能に及ぼす影響を確認できず、セキュリティパッチを配布しても新たな脆弱性が発生してしまうかもしれません。
ソフトウェアの脆弱性を放置することは、情報漏洩などのセキュリティ事故につながる恐れがあり、多大な損害や企業の信用の失墜につながるリスクがあります。
リグレッションテスト実施時のポイント
リグレッションテストでは、機能の追加や不具合の修正を行った範囲を超えて、一見すると無関係に思われるような部分まで検証していきます。そのため、さまざまなリスクを回避するのに有効なテスト方法である一方、やり方によっては工数やコストの負担が大きくなってしまうという側面があります。
フルリグレッションテストは費用対効果が見合わないことが多いため、まずはテスト範囲の絞り込みが必要です。しかし、テストを簡略化し過ぎると、製品の品質が低下したり、不具合が原因でトラブルを引き起こしたりするリスクもあります。
より効果的で効率的なテストを行うには、「各機能を1回は試しているか」「システムの要となる機能は含まれているか」「テストケースの粒度はそろっているか」といった点に気をつけながら、観点の洗い出しや実施範囲の絞り込みを行うことが大切です。
効率化を図るための具体的な手法や、テスト計画を考える際に考慮すべきポイントとしては、以下のようなものが挙げられます。
優先順位をつけてテストを行う
リグレッションテストの実施範囲は、プログラムの変更内容や影響範囲を踏まえて、柔軟に決定しなければなりません。的確に実施範囲の絞り込みを行うためには、テストの優先順位を明確にしておくことが大切です。優先順位を決定するポイントとして、「プログラムの変更が影響する範囲」や「デグレが起きた際のリスクが高い箇所」に着目します。
限られた機能にのみ関わる部分を変更する場合と、複数の機能の基盤となるようなソースコードを変更する場合では、デグレが発生しやすい範囲は大きく変わります。そのため、綿密な調査によって影響範囲を把握することが重要になるほか、過去の事例や傾向について分析することも判断に役立ちます。影響範囲が限定的であれば、すべてのテストパターンを実行することも可能ですが、広範囲にわたる場合はリスクの高い部分を優先的にテストします。
また、システムの根幹を担う機能については、基本的にテストの実施範囲に含めます。例えば求人サイトなら、求人の検索・情報の登録・応募といった基本操作に問題があると、求人サイトとして成り立たなくなってしまいます。このような重要度の高い機能については、一連の操作を問題なく行えるか必ず確認し、逆に重要度の低い機能については優先度を下げて対応します。
テストを繰り返し実行し拡張していく
ソフトウェアテストを行う際に理解しておくべき7原則の一つに、「殺虫剤のパラドックス」というものがあります。同じ殺虫剤を何度も使用すると効果が薄れていくように、同じテストを何度も繰り返すと新しい欠陥を見つけられなくなる点に注意が必要である、という考え方です。
しかしリグレッションテストにおいて、この考え方は当てはまらず、同じテストを繰り返し行うことが効果的とされています。それは、リグレッションテストが品質安定を目的としたテストであり、同じテストを繰り返すなかで新しい欠陥が減っていけば、デグレの発生率が下がっていることを意味するからです。工数との兼ね合いを見ながら、許容可能な範囲で繰り返しテストを行うことが推奨されます。
また、リグレッションテストを行う際はただ同じテストを繰り返すのではなく、少しずつテストケースを拡充していくことも大切です。デグレの特性上、問題なく動作していたはずのものがある時点で突然動作しなくなることも起こり得るため、拡張しながら何度もテストを繰り返した方がテスト結果の信頼性が高まります。
ソフトウェアテストの7原則とは? 実務での課題と解決策も徹底解説(ソフトウエアテストの7原則)
https://www.skygroup.jp/software/quality/article/05/すべてのテストレベルでリグレッションテストを行う
ソフトウェアテストは、「単体テスト」「結合テスト」「システムテスト」と段階を踏んでいくにつれて、徐々に複雑で規模の大きなものになっていきます。それに伴い、デグレ発生時の影響範囲やリグレッションテストの対象範囲も広くなります。後半の工程で不具合が見つかれば、改修後に再び広範囲にわたってリグレッションテストを行わなければならず、負担はさらに大きくなってしまいます。
余計な工数がかかることを避けるためには、できる限り早期に問題を検出できる体制を整え、影響範囲の広がりを抑えなければなりません。そのためリグレッションテストは、すべてのテストレベルで実施することが望ましいとされています。各工程でリグレッションテストを実行することで、影響範囲が限定的なうちに不具合を改修できます。
システムテスト(総合テスト)とは? 検証内容、種類、手順、技法を紹介
https://www.skygroup.jp/software/quality/article/03/できるだけ早期に自動化する
ソフトウェアテストの実行にかかる手間を削減する手段として、「テストを自動化する」という方法があります。特に、同じ手順で繰り返しテストを行うリグレッションテストにおいては、労力やコストを削減するために自動化するケースが多いです。
自動化することで、時間やコストの削減、正確性の向上のほか、繰り返しテストを行うことが容易になるなど、多くのメリットがあります。なるべく早期に自動化することで享受できるメリットも大きくなりますが、ツールの導入には日数を要する場合もあるため、早めの導入に対応できるよう、開発初期の段階から自動化を視野に入れておくことが大切です。
リグレッションテストの自動化とは
テスト実施時のポイントとしてご紹介したように、リグレッションテストは「テスト自動化」によって負担を削減することが可能です。
テスト自動化とは、これまでエンジニアの手で行っていたテスト作業の一部を、専用の支援ツールを導入してオートメーション化することです。適切に活用することで、迅速かつ正確にテストを進めることが可能になります。
ソフトウェア評価/検証(ソフトウェアテスト)テスト自動化ノウハウ
https://www.skygroup.jp/software/quality/test-automation.htmlリグレッションテストを自動化するメリット
テスト自動化の大きなメリットは、作業を効率化し、テストにかかる時間やコスト、人的リソースを削減できる点にあります。また、作業を効率化することで実施できるテスト回数が増えれば、リグレッションテストの実行範囲を広げることも可能になり、より確実にデグレを検出できるようになります。
リグレッションテストのように同じ手順を繰り返し実行するテストは、自動化に適しているといえます。
自動化すべきリグレッションテストの例
細かな単位でテスト実行を繰り返すことが多い「単体テスト」は、リグレッションテストの中でも特に自動化に向いています。開発初期に行われる単体テストに導入すれば、その分早期に問題を検出しやすくなるという点でも大きなメリットがあります。
ほかにも、何種類ものデータを入力して結果を確認するケースや、修正を行う度に同じテストを行わなければならないケースなどは、同じ手順を繰り返すため自動化に向いています。一方で、手順が決まっていないテストや実施回数が少ないテストについては、自動化してもあまりメリットが得られません。
テストの自動化にもコストや手間はかかりますが、自動化によって負担が削減されれば、かかった分のコストを回収できます。一つの目安として、3~5回程度同じテストを行う場合は、自動化した方がコストを抑えられるといわれています。ただ、この数字はあくまで目安に過ぎないため、実際に自動化を検討する際は、テストを行う対象に応じて向き不向きを判断することが大切です。
まとめ
ここまで、リグレッションテストの概要や目的、実際に行う際のポイントなどについてご紹介しました。リグレッションテストは高品質な製品をリリースするために欠かせない工程であり、どのように効率化するかが重要になります。
Sky株式会社では、評価/検証業務のサポートからテスト自動化ツール「SKYATT」の提供まで、ソフトウェアテストの進め方に関するさまざまな支援を行っています。お困りの際はぜひ一度お問い合わせください。
テスト自動化ツール「SKYATT」のお問い合わせはこちら
お問い合わせはこちら著者 Sky株式会社
Sky株式会社は、家電のシステム開発を手掛けたのをきっかけに、デジタル複合機やカーエレクトロニクス、モバイル、情報家電、さらに自社商品として教育分野における学習活動ソフトウェアや、公共・民間向けクライアント運用管理ソフトウェアなど、幅広い分野でのシステム開発を展開しております。