Gerätetest? Integrationstest? Regressionstest? Abnahmeprüfung?

97

Gibt es jemanden, der diese Teststufen klar definieren kann, da ich es schwierig finde, bei TDD- oder Unit-Tests zu unterscheiden. Bitte, wenn jemand erläutern kann, wie, wann diese zu implementieren sind.

Donny
quelle

Antworten:

129

Kurz:

Unit-Test - Sie testen jeden einzelnen Code. Denken Sie an jede Datei oder Klasse.

Integrationstests - Wenn Sie mehrere Einheiten zusammenstellen, die interagieren, müssen Sie Integrationstests durchführen, um sicherzustellen, dass durch die Integration dieser Einheiten keine Fehler aufgetreten sind.

Regressionstests - Nach der Integration (und möglicherweise Korrektur) sollten Sie Ihre Komponententests erneut ausführen. Dies ist ein Regressionstest, um sicherzustellen, dass durch weitere Änderungen keine bereits getesteten Einheiten beschädigt wurden. Der Unit-Test, den Sie bereits durchgeführt haben, hat die Unit-Tests erstellt, die für Regressionstests immer wieder ausgeführt werden können.

Abnahmetests - Wenn ein Benutzer / Kunde / Unternehmen die Funktionalität erhält, führt er (oder Ihre Testabteilung) Abnahmetests durch, um sicherzustellen, dass die Funktionalität seinen Anforderungen entspricht.

Vielleicht möchten Sie auch White-Box- und Black-Box-Tests untersuchen. Es gibt auch Leistungs- und Lasttests sowie Tests der zu berücksichtigenden "Fähigkeiten".

mikey
quelle
Zu Ihrer Information, beim Testen von Einheiten können die getesteten Einheiten verschiedene Größen haben. Sie können beispielsweise eine Gruppe von Klassen, eine einzelne Methode oder sogar eine einzelne Methode als Unit-Test durchführen. Quelle: BlueJ Kapitel 9.3 "Unit Testing in BlueJ".
Sebastian Nielsen
112

Komponententest: Wenn dies fehlschlägt, erfahren Sie, welcher Teil Ihres Codes repariert werden muss.

Integrationstest: Wenn dies fehlschlägt, werden Sie darauf hingewiesen, dass die Teile Ihrer Anwendung nicht wie erwartet zusammenarbeiten.

Abnahmetest: Wenn dies fehlschlägt, werden Sie darauf hingewiesen, dass die Anwendung nicht das tut, was der Kunde von ihm erwartet.

Regressionstest: Wenn dies fehlschlägt, wird angezeigt, dass sich die Anwendung nicht mehr wie früher verhält.

Mathias
quelle
18

Hier ist eine einfache Erklärung für jeden der genannten Tests und wann sie anwendbar sind:

Komponententest Ein Komponententest wird an einer in sich geschlossenen Einheit (normalerweise einer Klasse oder Methode) durchgeführt und sollte immer dann durchgeführt werden, wenn eine Einheit implementiert oder die Aktualisierung einer Einheit abgeschlossen wurde.

Dies bedeutet, dass es immer dann ausgeführt wird, wenn Sie eine Klasse / Methode geschrieben, einen Fehler behoben oder die Funktionalität geändert haben ...

Integrationstest Mit dem Integrationstest soll getestet werden, wie gut mehrere Einheiten miteinander interagieren. Diese Art von Test sollte immer dann durchgeführt werden, wenn eine neue Form der Kommunikation zwischen Einheiten hergestellt wurde oder sich die Art ihrer Interaktion geändert hat.

Dies bedeutet, dass es immer dann ausgeführt wird, wenn eine kürzlich geschriebene Einheit in den Rest des Systems integriert ist oder wenn eine Einheit, die mit anderen Systemen interagiert, aktualisiert wurde (und ihre Komponententests erfolgreich abgeschlossen hat).

Regressionstest Regressionstests werden immer dann durchgeführt, wenn Änderungen im System vorgenommen wurden, um zu überprüfen, ob keine neuen Fehler eingeführt wurden.

Dies bedeutet, dass es nach allen Patches, Upgrades und Fehlerkorrekturen ausgeführt wird. Regressionstests können als Sonderfall eines kombinierten Komponententests und Integrationstests angesehen werden.

Abnahmetest Abnahmetests werden immer dann durchgeführt, wenn überprüft werden muss, ob ein Subsystem (möglicherweise das gesamte System) seine gesamten Spezifikationen erfüllt.

Dies bedeutet, dass es hauptsächlich ausgeführt wird, bevor ein neues Ergebnis fertiggestellt oder die Fertigstellung einer größeren Aufgabe angekündigt wird. Sehen Sie dies als Ihre letzte Überprüfung an, um festzustellen, ob Sie Ihre Ziele wirklich erreicht haben, bevor Sie zum Kunden / Chef laufen und den Sieg verkünden.

Dies ist zumindest die Art und Weise, wie ich gelernt habe, obwohl ich sicher bin, dass es andere gegensätzliche Ansichten gibt. Auf jeden Fall hoffe ich, dass das hilft.

Agentlien
quelle
Ich kann nicht wirklich zwischen Regressionstests und Unit-Tests unterscheiden. Ich meine, nach jeder Änderung / Festschreibung werden Ihre Unit-Tests immer noch ausgeführt ... und sie können Fehler auffangen, die durch neuen Code eingeführt wurden. Richtig?
Honig
@Honey Nun, die Regressionstestsuite besteht hauptsächlich aus einer Auswahl einiger oder aller Ihrer Einheiten- und Integrationstests. Es ist eine politische Sache, wie viel Regressionstest Sie durchführen möchten. Der Hauptunterschied besteht darin, dass Unit-Tests in der aktiven Entwicklung durchgeführt werden, während Regressionstests eher dazu dienen, zu überprüfen, ob frühere Projekte nicht unterbrochen werden, wenn Sie zurückgehen und sie patchen.
Agentlien
14

Ich werde es versuchen:

  1. Komponententest: Ein Entwickler würde einen schreiben, um eine einzelne Komponente oder Klasse zu testen.
  2. Integrationstest: Ein umfassenderer Test, der mehrere Komponenten oder Pakete umfasst, die zusammenarbeiten müssen
  3. Regressionstest: Wenn Sie eine einzelne Änderung an einer Anwendung vornehmen, müssen Sie ALLE Tests erneut ausführen und ALLE Funktionen überprüfen.
  4. Abnahmetest: Endbenutzer oder Qualitätssicherer führen diese vor dem Abmelden durch, um die Zustellung einer Anwendung zu akzeptieren. Es heißt "Die App hat meine Anforderungen erfüllt."
Duffymo
quelle
14

Unit Test: Funktioniert meine einzelne Methode richtig? (KEINE Abhängigkeiten oder verspottete Abhängigkeiten)

Integrationstest: Funktionieren meine beiden separat entwickelten Module zusammen korrekt ?

Regressionstest: Habe ich etwas durch Ändern / Schreiben von neuem Code beschädigt? (Das Ausführen von Unit- / Integrationstests mit jedem Commit ist ein technisch (automatisierter) Regressionstest.) Wird im Rahmen der Qualitätssicherung häufiger verwendet - manuell oder automatisiert.

Abnahmetest : Vom Kunden durchgeführter Test , dass er die gelieferte Software "akzeptiert"

Andrejs
quelle
0

Kann nicht kommentieren (Ruf zu niedrig: - |) also ...

@Andrejs macht einen guten Punkt in Bezug auf Unterschiede zwischen Umgebungen, die mit jeder Art von Test verbunden sind.

Unit-Tests werden normalerweise auf Entwicklercomputern (und möglicherweise während der CI-Erstellung) mit verspotteten Abhängigkeiten zu anderen Ressourcen / Systemen ausgeführt.

Integrationstests müssen per Definition (in gewissem Maße) die Verfügbarkeit von Abhängigkeiten aufweisen. Die anderen Ressourcen und Systeme werden aufgerufen, damit die Umgebung repräsentativer ist. Daten zum Testen können verspottet sein oder eine kleine verschleierte Teilmenge der realen Produktionsdaten.

UAT- / Abnahmetests müssen den QS- und Business-Teams, die die Software akzeptieren, die reale Erfahrung vermitteln. Erfordert daher eine vollständige Integration und realistische Datenmengen sowie vollständig maskierte / verschleierte Datensätze, um eine realistische Leistung und Endbenutzererfahrung zu erzielen.

Bei anderen "Funktionen" muss die Umgebung wahrscheinlich so realitätsnah wie möglich sein, um die Produktionserfahrung zu simulieren, z. B. Leistungstests, Sicherheit, ...

mhaselup
quelle