810 Stimmen

Was sind Unit-Tests, Integrationstests, Smoke-Tests und Regressionstests?

Was sind Unit-Tests, Integrationstests, Smoke-Tests und Regressionstests? Was sind die Unterschiede zwischen ihnen und welche Tools kann ich für jedes von ihnen verwenden?

Ich verwende zum Beispiel JUnit y NUnit para Unit-Tests y Integrationsprüfung . Gibt es Werkzeuge für die letzten beiden, Rauchprüfung o Regressionstests ?

3 Stimmen

2 Stimmen

Andere haben bereits gut geantwortet, aber ich möchte hinzufügen, dass ich persönlich denke, dass Smoke Test und Regression Test überflüssig sind. Sie tun das Gleiche: Sie testen, um sicherzustellen, dass Änderungen am System nichts kaputt machen.

16 Stimmen

Ich denke, sie unterscheiden sich deutlich von Regressionstests. Ich denke, es handelt sich um absichtlich "leichtgewichtige" Schnelltests, die zu Beginn durchgeführt werden, um Zeit zu sparen, denn wenn einer dieser Tests fehlschlägt, weiß man, dass es sich nicht lohnt, sich mit weiteren Tests zu beschäftigen. Sie können auch vor der Bereitstellung (wir führen ein Upgrade von v1 auf v1.1 durch, also prüfen Sie, ob v1 installiert ist) und nach der Bereitstellung Rauch-Tests durchführen.

1188voto

ddaa Punkte 49943
  • Einheitstest : Spezifizieren und testen Sie einen Punkt des Vertrags einer einzelnen Methode einer Klasse. Dieser sollte einen sehr engen und gut definierten Anwendungsbereich haben. Komplexe Abhängigkeiten und Interaktionen mit der Außenwelt sind gestoßen oder verhöhnt .

  • Integrationstest : Prüfung des korrekten Zusammenwirkens mehrerer Teilsysteme. Das Spektrum reicht vom Testen der Integration zwischen zwei Klassen bis hin zum Testen der Integration mit der Produktionsumgebung.

  • Rauchtest (auch bekannt als Vernunft Kontrolle) : Ein einfacher Integrationstest, bei dem wir nur prüfen, ob das zu testende System normal zurückkehrt und nicht explodiert.

    • Die Rauchprüfung ist eine Analogie zur Elektronik, wo der erste Test beim Einschalten eines Schaltkreises stattfindet (wenn er raucht, ist er schlecht!)...
    • ... und, offenbar , mit Klempnerarbeiten Dabei wird ein Rohrsystem buchstäblich mit Rauch gefüllt und anschließend visuell überprüft. Wenn etwas raucht, ist das System undicht.
  • Regressionstest : Ein Test, der geschrieben wurde, als ein Fehler behoben wurde. Er stellt sicher, dass dieser spezielle Fehler nicht mehr auftritt. Der vollständige Name ist "Nicht-Regressionstest". Es kann sich auch um einen Test handeln, der vor der Änderung einer Anwendung durchgeführt wird, um sicherzustellen, dass die Anwendung das gleiche Ergebnis liefert.

Dem möchte ich hinzufügen:

  • Abnahmetest : Test, ob eine Funktion oder ein Anwendungsfall korrekt implementiert ist. Er ähnelt einem Integrationstest, konzentriert sich aber auf den zu liefernden Anwendungsfall und nicht auf die beteiligten Komponenten.

  • Systemprüfung : Testet ein System als Black Box. Abhängigkeiten von anderen Systemen werden während des Tests oft als Spotting oder Stubbing eingesetzt (andernfalls würde es sich eher um einen Integrationstest handeln).

  • Kontrolle vor dem Flug : Tests, die in einer produktionsähnlichen Umgebung wiederholt werden, um das "Builds on my machine"-Syndrom zu vermeiden. Oft wird dies durch einen Abnahme- oder Rauchtest in einer produktionsähnlichen Umgebung realisiert.

281 Stimmen

Rauchtest ein Jahrhundert vor der Elektronik und stammt aus der Klempnerei, wo ein Rohrsystem durch echten Rauch gefüllt und dann visuell überprüft wurde. Wenn es rauchte, war es undicht.

3 Stimmen

Regressionstests werden auch für Funktionsänderungen verwendet, nicht nur für Fehlerbehebungen. Die Antwort von Nikita unten ist eine umfassendere Definition.

26 Stimmen

@AndyM Der Hintergrund von "Smoke test" ist ungenau. IIRC kommt es aus der Klempnerei, wo Rauch in das Rohrsystem gepumpt wird, nachdem es gebaut wurde (und bevor es an die Wasserversorgung angeschlossen wird). Wenn Rauch austritt, sind die Rohre nicht richtig abgedichtet. Dies ist weniger schädlich, als das Wasser fließen zu lassen und zu sehen, ob sich Pfützen bilden (und dabei möglicherweise Wände/Mauerwerk zu beschädigen). Es ist eine grobe Annäherung, dass das System nicht katastrophal ausfallen wird. Ein Entwicklungsprozess könnte sein: "Build" bestanden => "Smoke-Test" bestanden => "Abnahmetest" bestanden => Übergabe an das QA-Team für detaillierte Tests.

116voto

Gerrie Schenck Punkte 21800
  • Einheitstest Ein automatischer Test, um die interne Funktionsweise einer Klasse zu testen. Es sollte ein eigenständiger Test sein, der nicht mit anderen Ressourcen verbunden ist.
  • Integrationstest Ein automatischer Test, der in einer Umgebung durchgeführt wird, also ähnlich wie Unit-Tests, aber mit externen Ressourcen (Datenbank, Plattenzugriff)
  • Regressionstest : Nach der Implementierung neuer Funktionen oder Fehlerbehebungen testen Sie Szenarien, die in der Vergangenheit funktioniert haben, erneut. Damit decken Sie die Möglichkeit ab, dass Ihre neuen Funktionen bestehende Funktionen beeinträchtigen.
  • Rauchtest Erste Tests, anhand derer die Tester entscheiden können, ob sie die Tests fortsetzen werden.

2 Stimmen

Die Definition von Regressionstests ist nicht ganz korrekt. @ddaa definiert ihn korrekt.

0 Stimmen

Die Definition von Integrationstest ist definitiv unscharf. Zum Beispiel in der Antwort hier stackoverflow.com/a/4904533/32453 es ist mehr definiert als Testen mehrere Interaktionen Ihres Codes, nicht unbedingt eine echte DB (externe Ressource)... obwohl einige Leute definieren es die Art und Weise Sie beschrieben haben... ahh Terminologie. (Ich bevorzuge die frühere Definition, das Testen mehrerer Interaktionen).

0 Stimmen

Das beantwortet den Titel, aber nicht die Frage nach Werkzeuge für die beiden letztgenannten Arten von Tests, für Rauchprüfung o Regressionstests .

99voto

Jon Skeet Punkte 1325502

Jeder wird etwas andere Definitionen haben, und oft gibt es Grauzonen. Wie auch immer:

  • Unit-Test: Funktioniert dieses eine kleine Stück (möglichst isoliert)?
  • Integrationstest: Funktionieren diese zwei (oder mehr) Komponenten zusammen?
  • Smoke-Test: Hält das gesamte System (das einem Produktionssystem so nahe wie möglich kommt) einigermaßen gut zusammen? (d. h. sind wir einigermaßen zuversichtlich, dass es kein schwarzes Loch erzeugen wird?)
  • Regressionstest: Haben wir versehentlich Fehler wieder eingeführt, die wir zuvor behoben hatten?

0 Stimmen

Wie platzieren Sie Ihre Integrationstests im Verhältnis zu den Unit-Tests? Wenn myprj ist das Hauptprojektverzeichnis, und mypkg befindet sich unter myprj Ich habe die Einheitstests unter myprj/tests/test_module1.py und mein Paket befindet sich unter myprj/mypkg . Dies funktioniert hervorragend für Unit-Tests, aber ich frage mich, ob es irgendeine Konvention gibt, die ich befolgen sollte, wo die Integrationstests untergebracht werden sollten?

1 Stimmen

@alpha_989: Ich weiß nicht, was die Konvention für Python sein würde. In .NET habe ich derzeit den Produktionscode, die Unit-Tests und die Integrationstests in drei separaten Projekten, die gleichrangig zueinander sind - aber es gibt auch viele Alternativen.

0 Stimmen

Das beantwortet den Titel, aber nicht die Frage nach Werkzeuge für die beiden letztgenannten Arten von Tests, für Rauchprüfung o Regressionstests .

56voto

AndyM Punkte 3454

Eine neue Testkategorie, auf die ich gerade aufmerksam geworden bin, ist die Kanarienvogeltest . Ein Canary-Test ist eine automatisierte, zerstörungsfreie Prüfung, die regelmäßig laufen in einem live Umgebung, so dass im Falle eines Ausfalls etwas wirklich Schlimmes passiert ist.

Beispiele könnten sein:

  • Hat Daten, die immer nur in der Entwicklung/Testy verfügbar sein sollten, angezeigt live ?
  • Wurde ein Hintergrundprozess nicht ausgeführt?
  • Kann sich ein Benutzer anmelden?

3 Stimmen

Kann die Website überhaupt angefunkt werden - passenderweise gibt es einen Dienst namens Binary Canary.

17 Stimmen

Der Name stammt aus dem Kohlebergbau: Nimm den Kanarienvogel mit in die Grube". Wenn es schnupft, schnell raus. Kanarienvögel reagieren sehr empfindlich auf geringe Konzentrationen schädlicher Gase und würden sterben, bevor die Konzentrationen für den Menschen giftig werden. Wenn ein Kanarienvogeltest fehlschlägt, sollten Sie ihn schnell reparieren, denn es ist nur eine Frage der Zeit, bis LIVE ausfällt.

1 Stimmen

Die Art und Weise, wie wir Canary-Tests bei meiner Arbeit einsetzen, besteht darin, zunächst einige Kunden auf eine neue Version umzustellen, und nicht alle auf einmal. Wenn die ersten paar Kunden überleben, können wir den Rest hinzufügen. Diese ersten paar Kunden sind die Kanarienvögel.

14voto

Kaleem Ullah Punkte 6183

Antwort von einer der besten Websites für Softwaretesttechniken:

Arten von Softwaretests - vollständige Liste hier klicken

Enter image description here

Es ist eine ziemlich lange Beschreibung, die ich hier nicht einfügen werde, aber sie könnte für jemanden hilfreich sein, der alle Testtechniken kennenlernen möchte.

0 Stimmen

Dieser Artikel ist eine Mischung aus Testarten und Testmethoden...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X