Was sind Unit-Tests, Integrationstests, Rauchtests und Regressionstests? Was sind die Unterschiede zwischen ihnen und welche Tools kann ich für jedes von ihnen verwenden?
Zum Beispiel verwende ich JUnit und NUnit für Unit-Tests und Integrationstests . Gibt es Werkzeuge für die letzten beiden, Rauch- oder Regressionstests ?
unit-testing
testing
definition
Caltuntas
quelle
quelle
Antworten:
Komponententest : Geben Sie einen Punkt des Vertrags für eine einzelne Methode einer Klasse an und testen Sie ihn. Dies sollte einen sehr engen und genau definierten Umfang haben. Komplexe Abhängigkeiten und Interaktionen mit der Außenwelt werden gestoppt oder verspottet .
Integrationstest : Testen Sie die korrekte Interaktion mehrerer Subsysteme. Dort gibt es ein ganzes Spektrum, vom Testen der Integration zwischen zwei Klassen bis zum Testen der Integration in die Produktionsumgebung.
Rauchtest (auch als Sanity Check bezeichnet) : Ein einfacher Integrationstest, bei dem nur überprüft wird, ob das zu testende System beim Aufrufen normal zurückkehrt und nicht explodiert.
Regressionstest : Ein Test, der geschrieben wurde, als ein Fehler behoben wurde. Es stellt sicher, dass dieser spezielle Fehler nicht erneut auftritt. Der vollständige Name lautet "Nicht-Regressionstest". Es kann auch ein Test sein, der vor dem Ändern einer Anwendung durchgeführt wird, um sicherzustellen, dass die Anwendung das gleiche Ergebnis liefert.
Dazu werde ich hinzufügen:
Abnahmetest : Testen Sie, ob eine Funktion oder ein Anwendungsfall korrekt implementiert ist. Es ähnelt einem Integrationstest, konzentriert sich jedoch eher auf den Anwendungsfall als auf die beteiligten Komponenten.
Systemtest : Testet ein System als Black Box. Abhängigkeiten von anderen Systemen werden während des Tests häufig verspottet oder gestoppt (andernfalls wäre es eher ein Integrationstest).
Pre-Flight-Check : Tests, die in einer produktionsähnlichen Umgebung wiederholt werden, um das Syndrom „Builds on my Machine“ zu lindern. Oft wird dies durch einen Akzeptanz- oder Rauchtest in einer produktionsähnlichen Umgebung realisiert.
quelle
quelle
Jeder hat leicht unterschiedliche Definitionen und es gibt oft Grauzonen. Jedoch:
quelle
myprj
sich das Hauptprojektverzeichnis befindet undmypkg
sich unter befindetmyprj
, befinden sich die Komponententests untermyprj/tests/test_module1.py
und mein Paket untermyprj/mypkg
. Dies funktioniert hervorragend für Unit-Tests, aber ich frage mich, ob es eine Konvention gibt, die ich befolgen sollte, wo sich die Integrationstests befinden sollten.Eine neue Testkategorie, auf die ich gerade aufmerksam geworden bin, ist der Kanarientest . Ein Kanarientest ist ein automatisierter, zerstörungsfreier Test, der regelmäßig in einer Live- Umgebung durchgeführt wird. Wenn er jemals fehlschlägt, ist etwas wirklich Schlimmes passiert.
Beispiele könnten sein:
quelle
Antwort von einer der besten Websites für Softwaretesttechniken:
Arten von Softwaretests - vollständige Liste hier klicken
quelle
Komponententest: Überprüfen, ob eine bestimmte Komponente (dh eine Klasse) Funktionen wie geplant erstellt oder geändert hat. Dieser Test kann manuell oder automatisiert sein, bewegt sich jedoch nicht über die Grenze der Komponente hinaus.
Integrationstest: Überprüfen, ob das Zusammenspiel bestimmter Komponenten wie geplant funktioniert. Integrationstests können auf Einheits- oder Systemebene durchgeführt werden. Diese Tests können manuell oder automatisiert sein.
Regressionstest: Überprüfen, ob neue Fehler nicht in vorhandenen Code eingefügt werden. Diese Tests können manuell oder automatisiert sein.
Abhängig von Ihrer SDLC ( Wasserfall , RUP , Agilität usw.) können bestimmte Tests in „Phasen“ oder alle mehr oder weniger gleichzeitig durchgeführt werden. Beispielsweise können Unit-Tests auf Entwickler beschränkt sein, die den Code dann Testern für Integrations- und Regressionstests übergeben. Bei einem anderen Ansatz können Entwickler jedoch Unit-Tests sowie Integrations- und Regressionstests durchführen (unter Verwendung eines TDD- Ansatzes zusammen mit kontinuierlicher Integration und automatisierten Unit- und Regressionstests).
Der Werkzeugsatz hängt weitgehend von der Codebasis ab, es gibt jedoch viele Open Source-Werkzeuge für Unit-Tests (JUnit). HPs (Mercury) QTP oder Borlands Silk Test sind beide Tools für automatisierte Integrations- und Regressionstests.
quelle
Unit-Test : Das Testen eines einzelnen Moduls oder einer unabhängigen Komponente in einer Anwendung wird als Unit-Test bezeichnet. Der Unit-Test wird vom Entwickler durchgeführt.
Integrationstest : Kombinieren Sie alle Module und testen Sie die Anwendung, um zu überprüfen, ob die Kommunikation und der Datenfluss zwischen den Modulen ordnungsgemäß funktionieren oder nicht. Diese Tests wurden auch von Entwicklern durchgeführt.
Rauchtest Bei einem Rauchtest prüfen sie die Anwendung flach und breit. Bei Rauchtests überprüfen sie die Hauptfunktionalität der Anwendung. Wenn die Anwendung ein Blockerproblem aufweist, werden sie dem Entwicklerteam gemeldet, und das Entwicklerteam wird das Problem beheben, den Fehler beheben und es dem Testteam zurückgeben. Jetzt überprüft das Testteam alle Module, um sicherzustellen, dass sich die in einem Modul vorgenommenen Änderungen auf das andere Modul auswirken oder nicht. Bei Rauchtests werden die Testfälle per Skript ausgeführt.
Regressionstests , bei denen dieselben Testfälle wiederholt ausgeführt werden, um sicherzustellen, dass das unveränderte Modul keinen Fehler verursacht. Regressionstests fallen unter Funktionstests
quelle
REGRESSIONSTESTS-
"Bei einem Regressionstest werden frühere Tests für die geänderte Software erneut ausgeführt, um sicherzustellen, dass die in der aktuellen Software vorgenommenen Änderungen die Funktionalität der vorhandenen Software nicht beeinträchtigen."
quelle
"regression test"
und verglichen"non-regression test"
. Es ist das gleiche.Ich wollte nur hinzufügen und etwas mehr Kontext dazu geben, warum wir diese Teststufen haben, was sie mit Beispielen wirklich bedeuten
Mike Cohn hat in seinem Buch „Erfolg mit Agilität“ die „Testpyramide“ entwickelt, um automatisierte Tests in Projekten anzugehen. Es gibt verschiedene Interpretationen dieses Modells. Das Modell erklärt, welche Art von automatisierten Tests erstellt werden müssen, wie schnell sie Feedback zur zu testenden Anwendung geben können und wer diese Tests schreibt. Grundsätzlich sind für jedes Projekt drei Ebenen automatisierter Tests erforderlich, die wie folgt lauten.
Komponententests - Diese testen die kleinste Komponente Ihrer Softwareanwendung. Dies könnte buchstäblich eine Funktion in einem Code sein, der einen Wert basierend auf einigen Eingaben berechnet. Diese Funktion ist Teil mehrerer anderer Funktionen der Hardware- / Software-Codebasis, aus der die Anwendung besteht.
Zum Beispiel - Nehmen wir eine webbasierte Taschenrechneranwendung. Die kleinsten Komponenten dieser Anwendung, die einem Unit-Test unterzogen werden müssen, können eine Funktion sein, die eine Addition ausführt, eine andere, die eine Subtraktion ausführt, und so weiter. Alle diese kleinen Funktionen zusammen bilden die Taschenrechneranwendung.
In der Vergangenheit schreibt der Entwickler diese Tests, da sie normalerweise in derselben Programmiersprache wie die Softwareanwendung geschrieben sind. Zu diesem Zweck werden Unit-Test-Frameworks wie JUnit und NUnit (für Java), MSTest (für C # und .NET) und Jasmine / Mocha (für JavaScript) verwendet.
Der größte Vorteil von Unit-Tests besteht darin, dass sie unter der Benutzeroberfläche sehr schnell ausgeführt werden und wir schnelles Feedback zur Anwendung erhalten können. Dies sollte mehr als 50% Ihrer automatisierten Tests umfassen.
API / Integrationstests - Diese testen verschiedene Komponenten des Softwaresystems zusammen. Die Komponenten können Testdatenbanken, APIs (Application Programming Interface), Tools und Dienste von Drittanbietern sowie die Anwendung umfassen.
Beispiel: In unserem obigen Taschenrechnerbeispiel verwendet die Webanwendung möglicherweise eine Datenbank zum Speichern von Werten, verwendet APIs, um einige serverseitige Überprüfungen durchzuführen, und verwendet möglicherweise ein Tool / einen Dienst eines Drittanbieters, um Ergebnisse in der Cloud zu veröffentlichen, um sie für verschiedene Zwecke verfügbar zu machen Plattformen.
In der Vergangenheit hat ein Entwickler oder eine technische Qualitätssicherung diese Tests mit verschiedenen Tools wie Postman, SoapUI, JMeter und anderen Tools wie Testim geschrieben.
Diese werden viel schneller ausgeführt als UI-Tests, da sie immer noch unter der Haube ausgeführt werden. Sie benötigen jedoch möglicherweise etwas mehr Zeit als Unit-Tests, da die Kommunikation zwischen verschiedenen unabhängigen Komponenten des Systems überprüft und eine nahtlose Integration sichergestellt werden muss. Dies sollte mehr als 30% der automatisierten Tests umfassen.
UI-Tests - Schließlich haben wir Tests, die die UI der Anwendung validieren. Diese Tests werden normalerweise geschrieben, um End-to-End-Flüsse durch die Anwendung zu testen.
Beispiel: In der Taschenrechneranwendung kann ein End-to-End-Ablauf darin bestehen, den Browser zu öffnen -> die URL der Taschenrechneranwendung einzugeben -> sich mit Benutzername / Passwort anzumelden -> die Taschenrechneranwendung zu öffnen -> einige Vorgänge am Taschenrechner auszuführen -> Überprüfen dieser Ergebnisse über die Benutzeroberfläche -> Abmelden von der Anwendung. Dies könnte ein End-to-End-Ablauf sein, der ein guter Kandidat für die Automatisierung der Benutzeroberfläche wäre.
In der Vergangenheit schreiben technische QS oder manuelle Tester UI-Tests. Sie verwenden Open Source-Frameworks wie Selenium oder UI-Testplattformen wie Testim, um die Tests zu erstellen, auszuführen und zu warten. Diese Tests geben mehr visuelles Feedback, da Sie anhand von Screenshots, Protokollen und Testberichten sehen können, wie die Tests ausgeführt werden und wie unterschiedlich die erwarteten und tatsächlichen Ergebnisse sind.
Die größte Einschränkung von UI-Tests besteht darin, dass sie im Vergleich zu Tests auf Einheiten- und API-Ebene relativ langsam sind. Es sollte also nur 10-20% der gesamten automatisierten Tests ausmachen.
Die nächsten beiden Arten von Tests können je nach Projekt variieren, aber die Idee ist:
Rauchtests
Dies kann eine Kombination der oben genannten 3 Teststufen sein. Die Idee ist, es bei jedem Code-Check-in auszuführen und sicherzustellen, dass die kritischen Funktionen des Systems weiterhin wie erwartet funktionieren. nachdem die neuen Codeänderungen zusammengeführt wurden. Sie müssen normalerweise 5 bis 10 Minuten laufen, um eine schnellere Rückmeldung zu Fehlern zu erhalten
Regressionstests
Sie werden in der Regel mindestens einmal täglich ausgeführt und decken verschiedene Funktionen des Systems ab. Sie stellen sicher, dass die Anwendung weiterhin wie erwartet funktioniert. Sie sind detaillierter als die Rauchtests und decken mehr Szenarien der Anwendung ab, einschließlich der unkritischen.
quelle
Unit-Tests richten sich auf den kleinstmöglichen Teil der Implementierung. In Java bedeutet dies, dass Sie eine einzelne Klasse testen. Wenn die Klasse von anderen Klassen abhängt, werden diese gefälscht.
Wenn Ihr Test mehr als eine Klasse aufruft, handelt es sich um einen Integrationstest .
Die Ausführung vollständiger Testsuiten kann lange dauern. Daher führen viele Teams nach einer Änderung einige schnelle Tests durch, um signifikante Brüche zu erkennen. Beispielsweise haben Sie die URIs in wichtige Ressourcen aufgeteilt. Dies sind die Rauchtests .
Regressionstests werden für jeden Build ausgeführt und ermöglichen es Ihnen, effektiv umzugestalten, indem Sie abfangen, was Sie brechen. Jede Art von Test kann ein Regressionstest sein, aber ich finde, dass Unit-Tests am hilfreichsten sind, um die Fehlerquelle zu finden.
quelle
quelle
Unit-Tests: Entwickler führen diese nach der Entwicklung immer durch, um Probleme auf der Testseite zu ermitteln, bevor sie Anforderungen für die Qualitätssicherung vorbereiten.
Integrationstest: Dies bedeutet, dass der Tester die Überprüfung von Modul zu Submodul überprüfen muss, wenn einige Daten- / Funktionsausgaben an ein Modul an ein anderes Modul gesendet werden. Oder in Ihrem System, wenn Sie ein Tool eines Drittanbieters verwenden, das Ihre Systemdaten für die Integration verwendet.
Rauchtest: Der Tester wurde durchgeführt, um das System für Tests auf hoher Ebene zu verifizieren und den Show Stopper-Fehler herauszufinden, bevor Änderungen oder Code live gehen.
Regressionstests: Der Tester führte eine Regression zur Überprüfung der vorhandenen Funktionalität aufgrund von Änderungen durch, die im System für neue Erweiterungen oder Änderungen im System implementiert wurden.
quelle
Unit Testing
Unit-Tests werden normalerweise von Entwicklern durchgeführt, während Tester teilweise in dieser Art von Tests entwickelt werden, bei denen die Tests Unit für Unit durchgeführt werden. In Java können mit JUnit- Testfällen auch getestet werden, ob der geschriebene Code perfekt gestaltet ist oder nicht.
Integrationstests:
Diese Art des Testens ist nach dem Komponententest möglich, wenn alle / einige Komponenten integriert sind. Durch diese Art von Tests wird sichergestellt, dass sich Komponenten bei der Integration gegenseitig auf ihre Arbeitsfähigkeiten oder -funktionen auswirken.
Rauchprüfung
Diese Art von Tests wird zuletzt durchgeführt, wenn das System erfolgreich integriert und betriebsbereit auf dem Produktionsserver ist.
Diese Art des Testens stellt sicher, dass alle wichtigen Funktionen von Anfang bis Ende einwandfrei funktionieren und das System für die Bereitstellung auf dem Produktionsserver bereit ist.
Regressionstests
Diese Art des Testens ist wichtig, um zu testen, ob keine unbeabsichtigten / unerwünschten Fehler im System vorhanden sind, wenn der Entwickler einige Probleme behoben hat. Diese Tests stellen auch sicher, dass alle Fehler erfolgreich behoben wurden und daher keine weiteren Probleme auftreten.
quelle
Rauch- und Gesundheitstests werden beide nach einem Software-Build durchgeführt, um festzustellen, ob mit dem Testen begonnen werden soll. Vernunft kann nach Rauchprüfung ausgeführt werden oder nicht. Sie können einzeln oder gleichzeitig ausgeführt werden - die Vernunft erfolgt unmittelbar nach dem Rauchen.
Da die Prüfung der geistigen Gesundheit gründlicher ist und mehr Zeit in Anspruch nimmt, lohnt es sich in den meisten Fällen, automatisiert zu werden.
Die Rauchprüfung dauert in der Regel nicht länger als 5 bis 30 Minuten. Es ist allgemeiner: Es überprüft eine kleine Anzahl von Kernfunktionen des gesamten Systems, um sicherzustellen, dass die Stabilität der Software für weitere Tests gut genug ist und dass keine Probleme vorliegen, die den Lauf der geplanten Testfälle blockieren.
Sanity-Tests sind detaillierter als Rauch und können je nach Umfang des Neubaus zwischen 15 Minuten und einem ganzen Tag dauern. Es handelt sich um eine speziellere Art von Abnahmetests, die nach Fortschreiten oder erneuten Tests durchgeführt werden. Es überprüft die Kernfunktionen bestimmter neuer Funktionen und / oder Fehlerkorrekturen zusammen mit einigen eng verwandten Funktionen, um zu überprüfen, ob sie hinsichtlich der erforderlichen Betriebslogik funktionieren, bevor Regressionstests in größerem Maßstab ausgeführt werden können.
quelle
Es gibt bereits einige gute Antworten, aber ich möchte sie weiter verfeinern:
Unit-Tests sind hier die einzige Form von White-Box-Tests. Die anderen sind Black-Box-Tests. White-Box-Tests bedeuten, dass Sie die Eingabe kennen. Sie kennen das Innenleben des Mechanismus und können ihn überprüfen, und Sie kennen die Ausgabe. Beim Black-Box-Test wissen Sie nur, was die Eingabe ist und wie die Ausgabe sein sollte.
Unit-Tests sind hier also eindeutig die einzigen White-Box-Tests.
quelle
Rauchtests wurden hier bereits erklärt und sind einfach. Regressionstests fallen unter Integrationstests.
Automatisierte Tests können in nur zwei unterteilt werden.
Unit-Tests und Integrationstests (das ist alles, was zählt)
Ich würde den Ausdruck "langer Test" (LT) für alle Tests wie Integrationstests, Funktionstests, Regressionstests, UI-Tests usw. und Unit-Tests als "kurzen Test" bezeichnen.
Ein LT-Beispiel könnte sein, automatisch eine Webseite zu laden, sich beim Konto anzumelden und ein Buch zu kaufen. Wenn der Test bestanden wird, ist es wahrscheinlicher, dass er auf der Live-Site auf die gleiche Weise ausgeführt wird (daher die Referenz „Besserer Schlaf“). Long = Abstand zwischen Webseite (Start) und Datenbank (Ende).
Und dies ist ein großartiger Artikel, in dem die Vorteile von Integrationstests (langer Test) gegenüber Unit-Tests erläutert werden .
quelle
Regressionstest - Ist eine Art von Software - Tests , wo wir versuchen , Abdeckung oder die Fehler überprüfen um fix . Die Funktionalität rund um die Fehlerbehebung sollte aufgrund der bereitgestellten Korrektur nicht geändert werden. In einem solchen Prozess gefundene Probleme werden als Regressionsprobleme bezeichnet .
Rauchtest: Wird eine Art Test durchgeführt, um zu entscheiden, ob der Build / die Software für weitere QS-Tests akzeptiert werden soll.
quelle