システム開発では、部分的なバグの修正だけでも思わぬところに影響が出ることがあります。
バグ修正などの変更をプログラムに加えた際、修正した箇所以外に影響がないかを確認するテストを「リグレッションテスト」といいます。
今回は、プログラムの変更後に欠かせないリグレッションテストの重要性やデグレーションとの違い、テストを行うタイミングなどをご紹介します。
目次
初めてプロジェクト担当者になった方向け
プロが教える「IT基礎知識・用語集」プレゼント
リグレッションテストとは?
リグレッションテスト(regression test)とは、プログラムの一部分を変更したことで、ほかの箇所に不具合が出ていないかを確認するためのテストです。
「回帰テスト」「退行テスト」とも呼ばれており、プログラムの修正後にこれらのテストをもう一度行って不具合がないかを検証します。
バグの修正に限らず、プログラムに何らかの修正や変更を加えたときは、リグレッションテストを実施し、全体への影響を確認する必要があります。
プログラムやシステムは、一つ一つの機能が複雑に絡み合っています。ある箇所のバグを修正したら、そのバグで隠されていた別のバグが見つかったり、正しく動いていたはずの機能が動かなくなったりすることがあります。
また、関係性のない部分に思えても、想定外の不具合が発生することもあり、特に大規模なプログラムやシステムの開発時には、リグレッションテストが欠かせません。プログラムやシステムの規模が大きくなるほど各部分の関係も複雑になり、開発者であってもすべての影響を把握できないことが多いからです。
そのため、プログラムの修正後にはリグレッションテストを実施し、不具合がないか全体を検証する必要があります。
リグレッションテストとデグレーションの違い
リグレッションテストと同時に使われる言葉に「デグレーション」があります。リグレッションテストとデグレーションはどう違うのでしょうか。
デグレード(degrade)とは、「悪化」「退化」という意味です。プログラムの不具合を修正したときに、ほかに新たな不具合が出てくることをデグレーションといいます。品質や機能が修正前より悪い状態になることです。
例えば、「ソフトウェアをバージョンアップしたら機能が低下した」「一部を修正したら、以前の不具合やバグが再発した」などのケースがあります。原因は、修正部分や新たに開発した部分のテスト・デバッグが不十分だったり、修正が別の部分に想定外の悪影響を及ぼしたりするためです。
つまり、プログラムの修正によりデグレーションが起こっていないかどうかを検証するためのテストが、リグレッションテストです。デグレーションを検証することから、リグレッションテストには「ノンデグレードテスト」「回帰検証」という言い方もあります。
リグレッションテストのタイミングと行わないリスク
リグレッションテストはとても大切な工程です。しかし、開発やテストが一通り終了し、不具合を修正した後に行われるので、リグレッションテスト自体に割ける工数は少なくなります。そのため、リグレッションテストを行う前にテスト戦略を立てることが重要です。
●リグレッションテストのタイミング
システム開発では多くの場合、部分ごとにプログラムを作成した後の単体テストから始まり、いくつかの部分を連結して行う連結テスト、さらに統合テストや運用テストとだんだん複雑で大きなテストに進んでいきます。
リグレッションテストを行うタイミングは、バグ発生時や単体テスト、結合テスト、総合テストなど、それぞれのテストの後が一般的です。バグや不具合を発見したら修正を行い、また同じテストを行って不具合がないかを検証します。通常のテストと同じようにテストケースも作成しましょう。
●リグレッションテストの範囲
範囲を絞り込まずにすべてのテストを最初からやり直すことを「フルリグレッションテスト」といいますが、効率的に開発を進めるにはリグレッションテストの範囲を絞り、一定の基準を設定する必要があります。
大きなテストで不具合を発見したときは、不具合を修正した部分の単体テストを行います。修正部分以外の箇所は開発時のテストデータや環境を保存して再利用し、影響の有無を確認するだけでリグレッションテストを行わないこともあります。しかし、これではほかの箇所に影響がないかどうかを正しく検証できません。
リグレッションテストが省略されるのは、修正に割く時間と工数、または予算が少ないからです。その場合はすべてのテストを行わず、バグの修正が影響する箇所と関係するデータを扱う箇所のみにテスト範囲を絞り込むと、リグレッションテストの工数を減らすことができます。
また、あらかじめリグレッションテストにレベルを設けておいて、その時々によって決められたレベルのテストのみを行うという方法もあります。
そのほか、「開発時に設定したシナリオを実行して全体の処理を確認する」「テストするパターンやテストケースをあらかじめ決めておく」「テストのノウハウを開発チームで共有する」などの工夫が可能です。
●リグレッションテストを行わないリスク
リグレッションテストを行わないと、デグレーションを残したまま納品してしまうリスクがあります。今まで使えていた機能が突然使えなくなる、システムの不具合により業務が止まるといった、デグレーションによる不具合や機能低下は、新規のバグ発生よりもクライアントの信用を失いやすいため、リグレッションテストはシステム開発に必要不可欠なのです。
リグレッションテストの自動化
リグレッションテストは、ツールで自動化することができます。自動化するメリットや向いているテストの選び方をご紹介します。
●リグレッションテスト自動化のメリット
リグレッションテストを自動化すると、テストの工数を減らせるため、コストを削減できます。さらに、継続してテストを実施できるため不具合を見つけやすく、トラブルが拡大する前に対応が可能です。
ただし、自動化するテストを作成できるのは、ある程度システムの開発が進んだ段階のため、最初から自動化ツールを導入することはできません。
●自動化すべきリグレッションテスト
リグレッションテストの中でも自動化に向いているのは単体テストです。機能やビルドごとに単体テストを行うことで、多くのバグを削減できます。
そのほか、複数の種類のデータを入力して結果を見るバリエーションテストや、バグを修正するたびに何度も行う必要があるテスト、システムを修正したときに全体の動きを確認する保守テストなど、作成後や修正後に何度も実施するテストは自動化に向いているでしょう。
リグレッションテストを自動化すれば、複数のビルドに同じテストを繰り返すことができ、テストを省略せずに行えます。しかし、自動化するツールを選定して使用方法を学習し、テストの作成、メンテナンスを行うなど、テストの自動化に工数がかかるのも、また事実です。一般的には、3回から5回以上行うテストは自動化する価値があるとされていますが、本当に自動化すべきテストかどうかを判断し、選定する必要があります。
リグレッションテストも重要な業務の一つ
リグレッションテストの重要性は理解していても、「テストのための工数や日数を確保できない」「突然の仕様変更でスケジュールがきつい」という場合は、省略されたり雑になったりしがちです。
しかし、そのまま納品してしまうと、後になって重大なトラブルが起こり、クライアントの信用を失うリスクがあります。
リグレッションテストは業務の重要な一部分であると認識して、きちんと実施しましょう。
システム開発の最適な発注先をスムーズに見つける方法
システム開発会社選びでお困りではありませんか?
日本最大級のシステム開発会社ポータルサイト「発注ナビ」は、実績豊富なエキスパートが貴社に寄り添った最適な開発会社選びを徹底的にサポートいたします。
ご紹介実績:22,000件(2024年10月現在)
外注先探しはビジネスの今後を左右する重要な任務です。しかし、
「なにを基準に探せば良いのか分からない…。」
「自社にあった外注先ってどこだろう…?」
「費用感が不安…。」
などなど、疑問や悩みが尽きない事が多いです。
発注ナビは、貴社の悩みに寄り添い、最適な外注探し選びのベストパートナーです。
本記事に掲載するシステム会社以外にも、最適な開発会社がご紹介可能です!
ご相談からご紹介までは完全無料。
まずはお気軽に、ご相談ください。 →詳しくはこちら
初めてプロジェクト担当者になった方向け
プロが教える「IT基礎知識・用語集」プレゼント
■システム開発に関連した記事