統合テストと機能テストの違いは何ですか?[閉まっている]


132

機能テストと統合テストは同じですか?

ユニットテストからテストを開始し、ユニットテストが完了したら、システム全体をテストする統合テストに進みます。機能テストは統合テストと同じですか?それでもシステム全体を取り、機能の適合性についてテストします。


1
[アジャイルな方法:統合テストvs機能テスト、またはその両方の重複の可能性?](stackoverflow.com/questions/555899/…
Pascal Thivent

14
過去の質問からいくつかの回答を受け入れることをお勧めしますか?
Stefano Borini、

ここに私の答えを参照してください:stackoverflow.com/questions/2741832/...
Andrejs

6
この質問は、このサイトの何が問題になっているのかを表しています。この質問の何が問題になっていますか?広すぎますか?それはプログラミングに関連する非常に具体的な何かを求めています。何かの違いは数学的に表現することもできます不可解な理由でシャットダウンされる非常に重要で本当に関連する質問が非常にたくさんあるようです。私はあなたが深刻なSOの人々が私が間違っていると言うだろうことを知っていますが、これらの信託がQuara.comのようなサイトに破壊されているという事実は私が正しいことを証明します。[基本的に、SOは市場シェアを放棄しています]。
ジムマグワイア

1
私は@JimMaguireに同意します:尋ねられた質問は「はい/いいえ」の質問です(はい/いいえの理由の説明も)。なぜそれが集中していないと考えられているのか私にはわかりません。
ボブ

回答:


101

統合テストとは、複数のコンポーネントをテストし、それらがどのように連携するかをテストすることです。たとえば、別のシステムがシステムとやり取りしたり、データベースがデータ抽象化レイヤーとやり取りしたりする方法です。通常、これには完全にインストールされたシステムが必要ですが、最も純粋な形式では必要ありません。

機能テストは、製品の機能要件に対してシステムをテストする場合です。製品/プロジェクト管理は通常これらを記述し、QAはユーザーが見たり体験したりするプロセス、およびそれらのプロセスの最終結果がどうあるべきかというプロセスを形式化します。製品によっては、これを自動化することも、しないこともできます。


9
ありがとう...はい、しかし機能テストでは、システムを機能要件に対してテストしているときも、そのときそれを統合システムとしてとらえています。そして、機能テスティングを実行している間、異なるユニットがどのように機能しているかもわかります。統合テストとして考えることができます
Mishthi

3
特に私たちの環境では、単体テストは単一のクラスに対して書かれたnunitテスト、統合テストはクラス、データベース、または別のシステム(通常はフルインストールが必要)を必要とするnunitテストまたはSQLスクリプトテストであると常に考えていました機能テストは、QAが実行するテストまたは自動UIテストです。
aceinthehole

1
また、機能テストの前に統合テストを実行していない場合は、両方を同時に実行しているため、機能要件をテストしているときに統合部分の間違いを見つけるだけです。
aceinthehole

1
これは受け入れられた答えではありません!?
tftd 2015年

@tftd(この
クエシトンの講師

20

機能テスト

はい、製品またはソフトウェア全体が機能的に正常に機能しているかどうかにかかわらず、機能的にテストしています(ボタン、リンクなどのテスト)。

例:ログインページ。

ユーザー名とパスワードを入力し、ホームページに移動するかどうかをテストします。

統合テスト

はい、統合ソフトウェアのみをテストしますが、データフローが発生している場所、およびデータベースで変更が発生しているかどうかをテストします。

例:電子メールの送信

誰かに1通のメールを送信すると、データフローがあり、データベースも変更されます(送信されたテーブルは値を1増やします)


覚えておいてください-リンクや画像をクリックすることは統合テストではありません。リンクをクリックするだけではデータベースに変更はないので、その理由を理解してください。

これがお役に立てば幸いです。


3
データベースはプログラム状態の実装詳細です。リンクをクリックしても、プログラムの状態を変更できます。
alehro 2017年

@ jsborn17は、APIを実行できない場合でも、APIと通信するフロントエンドアプリケーションに適用できる統合テストですか?
Wancieho 2018

8

これは重要な違いですが、残念ながら同意することはできません。問題は、ほとんどの開発者が独自の観点からこれらを定義していることです。それは冥王星を巡る議論と非常によく似ています。(それが太陽に近ければ、それは惑星でしょうか?)

単体テストの定義は簡単です。CUT(テスト中のコード)だけをテストします。(まあ、それ以外はできるだけ少なくします。)つまり、モック、偽物、および備品です。

スペクトルの反対側には、多くの人々がシステム統合テストと呼ぶものがあります。それは可能な限りテストしていますが、それでも自分のCUTのバグを探しています。

しかし、その間の広大な広がりはどうですか?

  • たとえば、CUTより少しだけテストするとどうなるでしょうか。注入したフィクスチャを使用する代わりに、フィボナッチ関数を含めるとどうなりますか?私はそれを機能テストと呼んでいますが、世界は私に反対しています。
  • 含めtime()たりしたらどうなりますかrand()?または、あなたが電話したらどうなりますhttp://google.comか?私はそのシステムをテストと呼びますが、私は一人です。

なぜこれが問題なのですか?システムテストは信頼できないからです。それらは必要ですが、制御不能な理由で失敗することがあります。一方、機能テストはランダムに失敗するのではなく、常に合格する必要があります。高速である場合は、内部実装用のテストをあまり作成せずにテスト駆動開発を使用するために、最初から使用することもできます。言い換えれば、ユニットテストは価値があるよりも厄介であると私は思います、そして私は良い会社を持っています。

私は3つの軸にテストを置き、ユニットテストですべてのゼロをテストしました

  1. 機能テスト:実際のコードを呼び出しスタックの奥深くまで使用します。
  2. 統合テスト:コールスタックがどんどん高くなります。つまり、CUTを使用するコードを実行してCUTをテストします。
  3. システムテスト:ますます繰り返されない操作(O / Sスケジューラー、クロック、ネットワークなど

テストは簡単にすべて3、さまざまな程度にすることができます。


機能テストは常に合格しますか?それとも、機能テスト 常に合格する必要があるということですか?
aceinthehole 14

1
それらはランダムに失敗するべきではありません。それらが失敗すると、毎回失敗するはずです。たとえば、他のホストへの呼び出しを含めないでください。多分それらは行動テストと呼ばれるべきですか?一番いい言葉がわかりません。私はそれらが最も重要なテストであることを知っています。それらは通常、純粋な完全にモックされた単体テストと高レベルのシステム統合テストの間の大きなギャップで見落とされています
cdunn2001 14

「彼らはランダムに失敗するべきではない。」-それらが「決定的」であるという用語があるかもしれません
kleaver

7

機能テスト:モジュールのすべてのコンポーネントがテストされるテストプロセスです。例:Webページにテキストフィールドが含まれている場合、ラジオボタン、ボタン、ドロップダウンなどのコンポーネントを確認する必要があります。

統合テスト:2つのモジュール間のデータフローがチェックされるプロセス。


4

どちらも密接に関連しており、両者を区別するのは非常に難しいと思います。私の見解では、統合テストは機能テストのサブセットです。

機能テストは、受け取った初期要件に基づいています。アプリケーションの動作をテストし、要件を満たしていることを確認します。

統合テストに関しては、モジュール間の相互作用です。Aモジュールが入力を送信すると、Bモジュールはそれを処理できるかどうかを判断します。


「統合テストは機能テストのサブセットです」の+1-私の経験では、テストへのそのようなアプローチは、結果をすばやく求める場合に最も意味があることも示しています。たとえば、テストコードでは通常、システムを単一の統合ユニットとして扱います-インメモリデータベースをセットアップし、アプリのMVCコントローラーにテストデータを供給して、それらの応答を検証し、データベース内のデータを検証してMVCコントローラーが正しい応答を返し、実際にはデータベースレイヤーに正しく渡されない場合のバグを回避するために、すべてのデータ検証が期待どおりに機能していることを確認してください。
JustAMartin

4

統合テスト-統合テストは、さまざまなモジュールのテストにすぎません。モジュール間の関係をテストする必要があります。exの場合、Facebookを開くと、ログインIDとパスワードを入力するとログインページが表示され、Facebookのホームページを表示できるため、ログインページは1つのモジュールであり、ホームページは別のモジュールです。あなたはそれらの間の関係だけをチェックする必要があるということは、ログインしたときにホームページだけが開かれている必要があり、メッセージボックスや他のものはないということです。統合テストのTOP-DOWNアプローチとBOTTOM UPアプローチには、主に2つのタイプがあります。

機能テスト-機能テストでは、入力と出力についてのみ考える必要があります。この場合、実際のユーザーのように考える必要があります。入力した内容と出力した内容のテストは、機能テストです。出力を監視するだけで済みます。機能テストでは、アプリケーションやソフトウェアのコーディングをテストする必要はありません。


2

機能テストでは、テスターは機能とアプリケーションのサブ機能のみに焦点を当てています。アプリの機能が適切に機能しているかどうか。

統合テストでは、テスターはモジュールまたはサブモジュール間の依存関係をチェックする必要があります。モジュールの例では、レコードを取得して別のモジュールで正しく表示する必要があります。


2

統合テスト:-ユニットテストが完了し、関連コンポーネントの問題が解決されたら、必要なすべてのコンポーネントを1つのシステムに統合して、操作を実行できるようにする必要があります。システムのコンポーネントを組み合わせた後、システムが正常に動作しているかどうかをテストするために、この種のテストは統合テストと呼ばれます。

機能テスト:-テストは主に2つのカテゴリに分類されます。1。機能テスト2.非機能テスト**機能テスト:-ソフトウェアがユーザーの要件に従って動作しているかどうかをテストします。**非機能テスト:-ソフトウェアがストレステスト、セキュリティテストなどの品質基準を満たしているかどうかをテストします。

通常、お客様は機能テストのみの要件と非機能テストの要件を提供します。要件は明記しないでください。ただし、アプリケーションがこれらのアクティビティを実行する必要があります。


2

統合テスト

  • これは、システムのさまざまなモジュールがどのように連携するかと見なすことができます。
  • 主に、システムのさまざまなコンポーネントではなく、さまざまなモジュールの統合された機能について言及します。
  • システムまたはソフトウェア製品が効率的に機能するためには、すべてのコンポーネントが互いに同期している必要があります。
  • ほとんどの場合、統合テストに使用したツールは、単体テストに使用したツールが選択されます。
  • 単体テストではシステムをテストするには不十分であることが判明した複雑な状況で使用されます。

    機能テスト

  • モジュールの個々の機能をテストすることと定義できます。
  • ソフトウェア製品を個々のレベルでテストして、機能をチェックすることを指します。
  • テストケースは、予想される結果と予期しない結果についてソフトウェアをチェックするために開発されています。
  • このタイプのテストは、ユーザーの観点からより多く実行されます。つまり、入力の種類に対するユーザーの期待を考慮します。
  • ブラックボックステストおよびクローズボックステストとも呼ばれます。


  • 1

    アプリケーションの機能をチェックすることは、一般に機能テストとして知られています。統合テストとは、あるモジュールから別のモジュールへのデータの流れをチェックすることです。送金アプリの例を見てみましょう。すべての認証情報を入力するページがあり、転送ボタンを押した後、成功した場合、これは機能テストです。しかし、同じ例で、金額の移動を検証すると、統合テストになります。


    0

    著者はこれについて多くのことを分岐させます。これには「正しい」解釈があるとは思いません。それは本当に依存します。

    例:ほとんどのRails開発者は、単体テストをモデルテスト、機能テストをコントローラーテスト、統合テストをCapybaraのようなものを使用して、最終ユーザーの視点からアプリケーションを探索するものと見なします。つまり、DOMを使用して、ページの生成されたHTMLをナビゲートします。期待を確認します。

    受け入れテストもあります。これは、システムの「ライブ」ドキュメントであり(通常、ガーキンを使用して自然言語で記述できるようにします)、複数のシナリオを通じてアプリケーションのすべての機能を説明します。開発者による。これらのIMHOは、機能テストと統合テストの両方と見なすこともできます。

    これらのそれぞれの背後にある主要な概念を理解すると、正しいか間違っているかに関してより柔軟になります。ですから、私見ですが、機能テストは統合テストと考えることもできます。統合テストの場合、実行している統合の種類によっては、機能テストとは見なされない場合があります。ただし、一般に、統合テストを作成するときにいくつかの要件を念頭に置いているため、ほとんどの場合、機能テスト。

    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.