Was ist der Unterschied zwischen Integrationstests und Funktionstests? [geschlossen]

131

Sind Funktionstests und Integrationstests gleich?

Sie beginnen Ihre Tests mit Unit-Tests. Nach Abschluss der Unit-Tests führen Sie Integrationstests durch, bei denen Sie das gesamte System testen. Ist Funktionstest dasselbe wie Integrationstest? Sie nehmen das System immer noch als Ganzes und testen es auf Funktionskonformität.

Mischthi
quelle
1
mögliches Duplikat von [The Agile Way: Integrationstests vs. Funktionstests oder beides? ] ( stackoverflow.com/questions/555899/… )
Pascal Thivent
14
Darf ich vorschlagen, dass Sie einige Antworten aus früheren Fragen akzeptieren, die Sie gestellt haben?
Stefano Borini
Siehe meine Antwort hier: stackoverflow.com/questions/2741832/…
Andrejs
6
Ich muss sagen, dass diese Frage darstellt, was mit dieser Seite nicht stimmt. Was ist los mit dieser Frage? Wie ist es zu breit? Es fragt etwas SEHR Spezifisches, was mit Programmierung zu tun hat. Was ist der Unterschied zwischen etwas kann sogar mathematisch dargestellt werden Es scheint nur, dass es eine große Anzahl von wirklich wichtigen, wirklich relevanten Fragen gibt, die aus unerklärlichen Gründen geschlossen werden. Ich weiß, dass Sie es ernst meinen, also werden mir die Leute sagen, dass ich falsch liege, aber die Tatsache, dass diese Fragen auf Websites wie Quara.com gebrochen werden, beweist, dass ich Recht habe. [Grundsätzlich verzichtet SO auf Marktanteile].
Jim Maguire
1
Ich stimme @JimMaguire zu: Die gestellte Frage ist eine "Ja / Nein" -Frage (plus Erklärung, warum Ja oder Nein). Ich verstehe nicht, warum es als nicht fokussiert gilt.
Bob

Antworten:

101

Beim Integrationstest testen Sie mehr als eine Komponente und wie sie zusammenarbeiten. Zum Beispiel, wie ein anderes System mit Ihrem System interagiert oder die Datenbank mit Ihrer Datenabstraktionsschicht interagiert. Normalerweise erfordert dies ein vollständig installiertes System, in seiner reinsten Form jedoch nicht.

Funktionstests werden durchgeführt, wenn Sie das System anhand der funktionalen Anforderungen des Produkts testen. Das Produkt- / Projektmanagement schreibt diese normalerweise auf und die Qualitätssicherung formalisiert den Prozess, was ein Benutzer sehen und erleben sollte und was das Endergebnis dieser Prozesse sein sollte. Je nach Produkt kann dies automatisiert werden oder nicht.

aceinthehole
quelle
9
Danke ... ja, aber bei Funktionstests, auch wenn wir das System gegen die Funktionsanforderung testen, nehmen wir es zu dieser Zeit auch als integriertes System. Und während wir Funktionstests durchführen, werden wir auch herausfinden, wie die verschiedenen Einheiten funktionieren zusammen, so dass es als Integrationstest gedacht werden kann ...
Mishthi
3
Insbesondere in unserer Umgebung betrachteten wir Unit-Tests immer als Nunit-Tests, die für eine einzelne Klasse geschrieben wurden, Integrationstests als Nunit-Tests oder SQL-Skript-Tests, für die mehr als eine Klasse oder eine Datenbank oder ein anderes System erforderlich war (normalerweise ist eine vollständige Installation erforderlich). und Funktionstests sind der Test, den die Qualitätssicherung ausführt, oder automatisierte UI-Tests.
Aceinthehole
1
Außerdem würde ich sagen, dass Sie, wenn Sie vor dem Funktionstest keine Integrationstests durchgeführt haben, beide gleichzeitig ausführen und beim Testen der Funktionsanforderungen nur Fehler in den Integrationsteilen finden.
Aceinthehole
1
Wie ist das nicht die akzeptierte Antwort?
tftd
@tftd, weil der Autor dieser Frage seit 2010 inaktiv ist ...
t3chb0t
20

Funktionsprüfung :

Ja, wir testen das Produkt oder die Software als Ganzes auf Funktion, ob sie ordnungsgemäß funktioniert oder nicht (Testen von Schaltflächen, Links usw.).

Zum Beispiel: Anmeldeseite.

Wenn Sie den Benutzernamen und das Passwort angeben, testen Sie, ob Sie zur Startseite gelangen oder nicht.

Integrationstests :

Ja, Sie testen nur die integrierte Software, aber Sie testen, wo der Datenfluss stattfindet und ob Änderungen in der Datenbank vorgenommen werden.

Zum Beispiel: E-Mail senden

Sie senden eine E-Mail an jemanden, es gibt einen Datenfluss und auch eine Änderung in der Datenbank (die gesendete Tabelle erhöht den Wert um 1).


Denken Sie daran - das Klicken auf Links und Bilder ist kein Integrationstest. Ich hoffe, Sie haben verstanden, warum, denn es gibt keine Änderung in der Datenbank, indem Sie einfach auf einen Link klicken.

Hoffe das hat dir geholfen.

jsborn17
quelle
3
Die Datenbank ist ein Implementierungsdetail des Programmstatus. Durch Klicken auf den Link kann auch der Programmstatus geändert werden.
Alehro
@ jsborn17 Ist der Integrationstest auf eine Front-End-Anwendung anwendbar, die mit einer API kommuniziert, obwohl wir die API nicht ausführen können?
Wancieho
8

Dies ist eine wichtige Unterscheidung, aber leider werden Sie nie eine Einigung finden. Das Problem ist, dass die meisten Entwickler diese aus ihrer eigenen Sicht definieren. Es ist der Debatte über Pluto sehr ähnlich. (Wenn es näher an der Sonne wäre, wäre es ein Planet?)

Unit-Tests sind einfach zu definieren. Es testet den CUT ( Code Under Test ) und sonst nichts. (Nun, so wenig wie möglich.) Das bedeutet Verspottungen, Fälschungen und Spielpaarungen.

Am anderen Ende des Spektrums gibt es das, was viele Leute Systemintegrationstests nennen . Das testet so viel wie möglich, sucht aber immer noch nach Fehlern in Ihrem eigenen CUT.

Aber was ist mit der Weite dazwischen?

  • Was ist zum Beispiel, wenn Sie nur ein bisschen mehr als den CUT testen? Was ist, wenn Sie eine Fibonacci-Funktion einschließen, anstatt ein Gerät zu verwenden, das Sie injiziert haben? Ich würde das Funktionstest nennen , aber die Welt stimmt mir nicht zu.
  • Was ist, wenn Sie time()oder einschließen rand()? Oder was ist, wenn Sie anrufen http://google.com? Ich würde das Systemtest nennen , aber ich bin wieder allein.

Warum ist das wichtig? Weil Systemtests unzuverlässig sind. Sie sind notwendig, scheitern aber manchmal aus Gründen, die außerhalb Ihrer Kontrolle liegen. Auf der anderen Seite sollten Funktionstests immer bestanden werden und nicht zufällig fehlschlagen. Wenn sie schnell sind, können sie auch von Anfang an verwendet werden, um die testgesteuerte Entwicklung zu verwenden, ohne zu viele Tests für Ihre interne Implementierung zu schreiben. Mit anderen Worten, ich denke, dass Unit-Tests mehr Probleme bereiten können, als sie wert sind, und ich habe gute Gesellschaft .

Ich habe 3 Achsen mit all ihren Nullen beim Unit-Test getestet :

  1. Funktionstests: Verwenden Sie echten Code immer tiefer in Ihrem Call-Stack.
  2. Integrationstests: Immer höher in Ihrem Call-Stack; Mit anderen Worten: Testen Sie Ihren CUT, indem Sie den Code ausführen, der ihn verwenden würde.
  3. Systemtests: Immer mehr unwiederholbare Vorgänge (O / S-Scheduler, Uhr, Netzwerk usw. )

Ein Test kann leicht alle 3 in unterschiedlichem Maße sein.

cdunn2001
quelle
Funktionstests immer bestehen? oder meinst du, funktionstests sollten immer bestehen?
Aceinthehole
1
Sie sollten nicht zufällig versagen. Wenn sie versagen, sollten sie jedes Mal versagen. Sie sollten beispielsweise keine Anrufe an andere Hosts enthalten. Vielleicht sollten sie Verhaltenstests genannt werden ? Ich kenne den besten Begriff nicht. Ich weiß nur, dass dies die wichtigsten Tests sind, und sie werden normalerweise in der großen Lücke zwischen reinen, vollständig verspotteten Komponententests und hochrangigen Systemintegrationstests übersehen .
cdunn2001
7

Funktionstests: Hierbei handelt es sich um einen Testprozess, bei dem jede einzelne Komponente des Moduls getestet wird. Beispiel: Wenn eine Webseite ein Textfeld enthält, müssen die Komponenten Radio Botton, Buttons und Dropdown usw. überprüft werden.

Integrationstest: Prozess, bei dem der Datenfluss zwischen 2 Modulen überprüft wird.

Raghuram
quelle
4

Ich würde sagen, dass beide eng miteinander verbunden und sehr schwer zu unterscheiden sind. Aus meiner Sicht ist der Integrationstest eine Teilmenge des Funktionstests.

Funktionstests basieren auf den anfänglichen Anforderungen, die Sie erhalten. Sie werden testen, ob das Anwendungsverhalten den Anforderungen entspricht.

Wenn es um Integrationstests geht, ist es die Interaktion zwischen Modulen. Wenn ein Modul eine Eingabe sendet, kann das B-Modul diese verarbeiten oder nicht.

Naidu
quelle
+1 für "Integrationstests sind eine Teilmenge von Funktionstests" - meine Erfahrung zeigt auch, dass ein solcher Testansatz am sinnvollsten ist, wenn Sie schnell ein Ergebnis anstreben. In meinem Testcode behandle ich das System normalerweise als eine einzelne integrierte Einheit. Ich richte eine In-Memory-Datenbank ein und versorge meine MVC-Controller der App mit einigen Testdaten und überprüfe deren Antwort sowie die Daten in der Datenbank Stellen Sie sicher, dass die gesamte Datenüberprüfung wie erwartet funktioniert hat, um Fehler zu vermeiden, wenn der MVC-Controller die richtige Antwort zurückgibt, diese jedoch nicht korrekt an die Datenbankebene übergeben wird.
JustAMartin
4

Integrationstests - Integrationstests sind nichts anderes als das Testen verschiedener Module. Sie müssen die Beziehung zwischen Modulen testen. Wenn Sie beispielsweise Facebook öffnen, wird nach Eingabe der Anmelde-ID und des Kennworts die Anmeldeseite angezeigt. Die Startseite von Facebook wird angezeigt. Die Anmeldeseite ist also ein Modul und die Startseite ist ein anderes Modul. Sie müssen nur die Beziehung zwischen ihnen überprüfen. Wenn Sie sich angemeldet haben, muss nur die Startseite geöffnet sein, kein Meldungsfeld oder etwas anderes. Es gibt zwei Haupttypen von Integrationstests: TOP-DOWN-Ansatz und BOTTOM-UP-Ansatz.

Funktionstests - Beim Funktionstest müssen Sie nur an Ein- und Ausgabe denken. In diesem Fall müssen Sie wie ein tatsächlicher Benutzer denken. Testen, welche Eingabe Sie gegeben haben und welche Ausgabe Sie erhalten haben, ist Funktionstest. Sie müssen nur die Ausgabe beobachten. Bei Funktionstests müssen Sie die Codierung von Anwendungen oder Software nicht testen.

Yogesh Deshpande
quelle
2

In einem Funktionstest konzentriert sich der Tester nur auf die Funktionalität und die Unterfunktionalität der Anwendung. Die Funktionalität der App sollte ordnungsgemäß funktionieren oder nicht.

Beim Integrationstest muss der Tester die Abhängigkeit zwischen Modulen oder Untermodulen überprüfen. Beispiel für Moduldatensätze sollte abgerufen und in einem anderen Modul korrekt angezeigt werden.

Krunal
quelle
2

Integrationstest: - Wenn Unit-Tests durchgeführt und Probleme mit den zugehörigen Komponenten behoben wurden, müssen alle erforderlichen Komponenten unter einem System integriert werden, damit eine Operation ausgeführt werden kann. Nach dem Kombinieren der Systemkomponenten wird diese Art des Testens als Integrationstest bezeichnet, um zu testen, ob das System ordnungsgemäß funktioniert oder nicht.

Funktionstests: - Der Test ist hauptsächlich in zwei Kategorien unterteilt: 1. Funktionstest 2. Nichtfunktionstest ** Funktionstest: - Um zu testen, ob die Software gemäß den Anforderungen des Benutzers funktioniert oder nicht. ** Nichtfunktionale Tests: - Um zu testen, ob die Software die Qualitätskriterien wie Stresstest, Sicherheitstest usw. erfüllt.

Normalerweise stellt der Kunde die Anforderungen nur für Funktionstests und für Nichtfunktionstests bereit. Anforderungen sollten nicht erwähnt werden, aber die Anwendung führt diese Aktivitäten unbedingt aus.

Mohit Sarsar
quelle
2

Integrationstests

  • Es kann gesehen werden, wie die verschiedenen Module des Systems zusammenarbeiten.
  • Wir beziehen uns hauptsächlich auf die integrierte Funktionalität der verschiedenen Module, eher auf verschiedene Komponenten des Systems.
  • Damit ein System oder ein Softwareprodukt effizient funktioniert, muss jede Komponente miteinander synchronisiert sein.
  • Das meiste Tool, das wir für Integrationstests verwendet haben, wird ausgewählt, das wir für Unit-Tests verwendet haben.
  • Es wird in komplexen Situationen verwendet, in denen sich Unit-Tests als unzureichend erweisen, um das System zu testen.

    Funktionsprüfung

  • Es kann als Testen der individuellen Funktionalität von Modulen definiert werden.
  • Es bezieht sich auf das Testen des Softwareprodukts auf individueller Ebene, um dessen Funktionalität zu überprüfen.
  • Testfälle werden entwickelt, um die Software auf erwartete und unerwartete Ergebnisse zu überprüfen.
  • Diese Art von Tests wird eher aus Anwendersicht durchgeführt. Das heißt, es berücksichtigt die Erwartung des Benutzers an eine Art von Eingabe.
  • Es wird auch als Black-Box-Test sowie als Close-Box-Test bezeichnet

  • Schah
    quelle
    1

    Das Überprüfen der Funktionalität der Anwendung wird allgemein als Funktionstest bezeichnet, wobei beim Integrationstest der Datenfluss von einem Modul zum anderen überprüft wird. Nehmen wir ein Beispiel für eine Geldtransfer-App. Angenommen, wir haben eine Seite, auf der wir alle Anmeldeinformationen eingeben. Wenn wir die Überweisungstaste drücken und danach Erfolg haben, ist dies ein Funktionstest. Wenn wir jedoch im selben Beispiel die Überweisung überprüfen, handelt es sich um einen Integrationstest.

    Rahul Talwar
    quelle
    0

    Die Autoren gehen hier sehr auseinander. Ich glaube nicht, dass es "die" richtige Interpretation dafür gibt. Es kommt wirklich darauf an.

    Beispiel: Die meisten Rails-Entwickler betrachten Unit-Tests als Modelltests, Funktionstests als Controller-Tests und Integrationstests als solche, bei denen Capybara verwendet wird, um die Anwendung aus der Perspektive eines Endbenutzers zu untersuchen, dh mithilfe des DOM durch das generierte HTML der Seite zu navigieren auf Erwartungen prüfen.

    Es gibt auch Abnahmetests, die wiederum eine "Live" -Dokumentation des Systems sind (normalerweise verwenden sie Gurke, um das Schreiben in natürlicher Sprache zu ermöglichen), in der alle Funktionen der Anwendung in mehreren Szenarien beschrieben werden, die wiederum automatisiert sind von einem Entwickler. Diese, IMHO, könnten auch sowohl als Funktionstests als auch als Integrationstests betrachtet werden.

    Sobald Sie das Schlüsselkonzept hinter jedem dieser Konzepte verstanden haben, können Sie flexibler in Bezug auf das Richtige oder Falsche sein. Meiner Meinung nach könnte ein Funktionstest auch als Integrationstest betrachtet werden. Für den Integrationstest ist es abhängig von der Art der Integration, die er ausführt, möglicherweise kein Funktionstest. Sie müssen jedoch im Allgemeinen einige Anforderungen berücksichtigen, wenn Sie einen Integrationstest schreiben, sodass er die meiste Zeit auch als betrachtet werden kann ein Funktionstest.

    Nicholas Pufal
    quelle