単体テスト、統合テスト、スモーク テスト、および回帰テストとは何ですか? それらの違いと、それぞれに使用できるツールは何ですか?
たとえば、単体テストと統合テストにはJUnitとNUnitを使用します。最後の 2 つのスモーク テストまたはリグレッション テスト用のツールはありますか?
誰もがわずかに異なる定義を持っており、多くの場合、灰色の領域があります。でも:
私が最近気付いた新しいテスト カテゴリは、カナリア テストです。カナリア テストは、ライブ環境で定期的に実行される自動化された非破壊テストであり、失敗した場合は非常に悪いことが起こったことを示します。
例は次のとおりです。
ソフトウェア テスト手法に関する最高の Web サイトの 1 つからの回答:
ソフトウェアテストの種類 – 完全なリストはここをクリック
これは非常に長い説明なので、ここに貼り付けるつもりはありませんが、すべてのテスト手法を知りたい人にとっては役立つかもしれません。
単体テスト: 特定のコンポーネント (つまり、クラス) が設計どおりに関数を作成または変更したことを検証します。このテストは手動または自動で行うことができますが、コンポーネントの境界を超えて移動することはありません。
統合テスト: 特定のコンポーネントの相互作用が設計どおりに機能することを検証します。統合テストは、ユニット レベルまたはシステム レベルで実行できます。これらのテストは、手動または自動で行うことができます。
回帰テスト: 新しい欠陥が既存のコードに導入されていないことを確認します。これらのテストは、手動または自動で行うことができます。
SDLC (ウォーターフォール、RUP、アジャイルなど) に応じて、特定のテストが「フェーズ」で実行される場合もあれば、多かれ少なかれ同時にすべてが実行される場合もあります。たとえば、単体テストは開発者に限定され、開発者はコードをテスターに引き渡して統合および回帰テストを行うことができます。ただし、別のアプローチでは、開発者が単体テストとある程度の統合および回帰テストを行う場合があります (継続的統合および自動化された単体および回帰テストと共にTDDアプローチを使用)。
ツール セットはコードベースに大きく依存しますが、ユニット テスト (JUnit) 用のオープン ソース ツールは多数あります。HP (Mercury) の QTP または Borland のSilk Testは、どちらも自動化された統合および回帰テスト用のツールです。
単体テスト: アプリケーション内の個々のモジュールまたは独立したコンポーネントのテストは、単体テストとして知られています。単体テストは開発者が行います。
統合テスト: すべてのモジュールを組み合わせてアプリケーションをテストし、モジュール間の通信とデータ フローが正しく機能しているかどうかを確認します。このテストも開発者によって行われました。
スモーク テスト スモーク テスト では、浅く広い方法でアプリケーションをチェックします。スモーク テストでは、アプリケーションの主な機能をチェックします。アプリケーションにブロッカーの問題がある場合、彼らは開発チームに報告し、開発チームはそれを修正して欠陥を修正し、テスト チームに戻します。テスト チームはすべてのモジュールをチェックして、1 つのモジュールで行われた変更が他のモジュールに影響を与えるかどうかを確認します。スモーク テストでは、テスト ケースがスクリプト化されます。
変更されていないモジュールが不具合を引き起こさないことを確認するために、同じテスト ケースを繰り返し実行する回帰テスト。回帰テストは機能テストの下にある
「回帰テストは、変更されたソフトウェアに対して以前のテストを再実行して、現在のソフトウェアで行われた変更が既存のソフトウェアの機能に影響を与えないことを確認します。」
単体テストは、実装の可能な限り最小の部分に向けられています。Java では、これは単一のクラスをテストしていることを意味します。クラスが他のクラスに依存している場合、これらは偽物です。
テストが複数のクラスを呼び出す場合、それは統合テストです。
完全なテスト スイートは実行に時間がかかる可能性があるため、変更後、多くのチームがいくつかの迅速なテストを実行して重大な破損を検出します。たとえば、URI を重要なリソースに分割しました。これらはスモークテストです。
回帰テストはすべてのビルドで実行され、壊れたものをキャッチすることで効果的にリファクタリングできます。あらゆる種類のテストが回帰テストになる可能性がありますが、単体テストが障害の原因を見つけるのに最も役立つことがわかりました。
単体テストは通常、開発者側で行われますが、テスターは、単体でテストが行われるこのタイプのテストで部分的に進化しています。Java JUnitテスト ケースでは、記述されたコードが完全に設計されているかどうかをテストすることもできます。
このタイプのテストは、すべてまたは一部のコンポーネントが統合されている場合の単体テストの後に可能です。このタイプのテストは、コンポーネントが統合されたときに、それらが互いの動作能力または機能に影響を与えるかどうかを確認しますか?
このタイプのテストは、システムが正常に統合され、運用サーバーに移行する準備が整ったときに最後に行われます。
このタイプのテストでは、すべての重要な機能が最初から最後まで正常に動作し、システムが運用サーバーにデプロイする準備ができていることを確認します。
このタイプのテストは、開発者がいくつかの問題を修正したときに、意図しない/望ましくない欠陥がシステムに存在しないことをテストするために重要です。このテストでは、すべてのバグが正常に解決され、他の問題が発生していないことも確認します。
リグレッション テスト - ソフトウェア テストの一種で、バグ修正をカバーまたはチェックします。バグ修正に関する機能は、提供された修正によって変更または変更されるべきではありません。このような過程で発見された問題を回帰問題と呼びます。
スモーク テスト: ビルド/ソフトウェアをさらに QA テストに受け入れるかどうかを決定するために行われる一種のテストです。