Meine Freunde und ich hatten Mühe, genau zu klassifizieren, was ein Integrationstest ist.
Jetzt, auf meinem Heimweg, wurde mir klar, dass es sich jedes Mal, wenn ich versuche, ein reales Beispiel für einen Integrationstest zu geben, um einen Akzeptanztest handelt, d. H. Etwas, das ein Geschäftsmann laut aussprechen würde und das genau angibt, was das System liefern soll.
Ich habe die Ruby on Rails-Dokumentation auf ihre Klassifizierung dieser Testtypen überprüft, und sie hat mich jetzt völlig umgehauen.
Können Sie mir eine kurze akademische Beschreibung eines Integrationstests mit einem realen Beispiel geben?
Antworten:
Im Moment gefällt mir diese Aussage: "Es ist nicht wichtig, wie du es nennst, sondern was es tut", die von Gojko Adzic in diesem Artikel gemacht wurde .
Sie müssen mit den Leuten, die über die Tests sprechen, genau angeben, was Sie testen möchten.
Es gibt viele Menschen, die unterschiedliche Ansichten haben, je nachdem, welche Rolle sie spielen.
Für Tester ist TMap eine allgemein anerkannte Testmethode in den Niederlanden . TMap unterscheidet Folgendes.
Sie haben spezifischere Arten von Tests, die innerhalb der oben genannten Tests durchgeführt werden können. Schauen Sie sich dieses Word-Dokument für eine Übersicht an.
Wikipedia hat auch einen schönen Überblick .
Das Buch, das der pragmatische Programmierer sagt:
Wenn ich diese verschiedenen Quellen betrachte und einige meiner eigenen Erfahrungen und Meinungen einbringe, würde ich zunächst drei Kategorien unterscheiden
Was ist das Ziel des Tests
Meine obige Liste ist nur ein Anfang und ein Vorschlag, aber ich denke wirklich: "Es ist nicht wichtig, wie du es nennst, aber was es tut."
Hoffe das hilft.
26-10-2016 Bearbeiten: Vor kurzem wurde eine sehr schöne Einführung in YouTube Unit Tests vs. Integration Tests - MPJs Musings - FunFunFunction # 55 gegeben
quelle
Offensichtlich.
Diese beiden sind fast dasselbe. Die Testspezifikation weist jedoch einige geringfügig unterschiedliche Dimensionen auf.
Integration == das Gesamtsystem.
Akzeptanz == das System als Ganzes.
Der einzige Unterschied - und das ist subtil - ist die Definition der Testfälle.
Integration == Testfälle, um die Tiefe und den Grad der Integration zu testen. Funktioniert es für alle Edge Cases und Corner Cases? Testfälle sind in der Regel technisch und werden von Designern und Programmierern geschrieben.
Akzeptanz == Testfälle, um nur die auf den Endbenutzer ausgerichteten 80% des Funktionsumfangs auszuüben. Nicht alle Kanten- und Eckfälle. Testfälle sind in der Regel nicht technisch und werden von Endbenutzern geschrieben.
quelle
Ich persönlich stelle mir einen Integrationstest gerne als Funktionstest vor, wenn jede Komponente des Systems echt ist und keine Scheinobjekte.
Ein echtes Repository, eine echte Datenbank, eine echte Benutzeroberfläche. Sie testen bestimmte Funktionen, wenn das System vollständig zusammengebaut ist und der erwarteten Bereitstellung entspricht.
quelle
In meiner (ich gebe zu) geringen Erfahrung habe ich verstanden, dass das Wort Integration wirklich Missverständnisse hervorrufen kann: Es ist wirklich schwierig, etwas vollständig isoliert in einem System zu finden, einige Elemente erfordern mit Sicherheit eine Integration.
So habe ich mich daran gewöhnt, folgende Unterscheidungen zu treffen:
In der Definition des Integrationstests meinte ich mit extern ein System, das außerhalb meines Entwicklungsbereichs liegt : Ich kann das Verhalten aus irgendeinem Grund nicht sofort ändern. Es könnte eine Bibliothek sein, eine Komponente des Systems, die nicht geändert werden kann (dh sie wird mit anderen Projekten im Unternehmen geteilt), ein DBMS usw. Für diese Tests muss ich etwas einrichten, das der realen Umgebung des Systems sehr ähnlich ist funktioniert in: Ein externes System muss initialisiert und in einen bestimmten Zustand versetzt werden. realistische Daten müssen in der Datenbank registriert sein; usw.
Stattdessen , wenn ich die Annahme I - Tests tue gefälschte Dinge: Ich arbeite gerade an etwas anderes, ich auf den Spezifikationen des Systems gerade arbeitete, nicht auf seine Fähigkeit , mit externen Einheiten zusammenzuarbeiten.
Dies ist eine engere Sichtweise im Vergleich zu dem, was KeesDijk zuvor beschrieben hat. Ich nehme jedoch an, dass die Projekte, an denen ich bis jetzt gearbeitet habe, klein genug waren, um mir dieses Maß an Vereinfachung zu ermöglichen.
quelle
Ein Integrationstest überprüft, ob Komponenten eines komplexen Systems (z. B. Software, Flugzeuge, Kraftwerke) wie geplant zusammenarbeiten.
Stellen wir uns vor, wir sprechen von einem Flugzeug (mit Software ist es abstrakter und es ist schwierig, den Unterschied zu machen). Die Integrationstests umfassen Folgendes:
Der Integrationstest befasst sich mit einem technischen Problem , nämlich dass das System trotz seiner Unterteilung in Komponenten funktioniert. In der Software können die Komponenten Anwendungsfälle, Module, Funktionen, Schnittstellen, Bibliotheken usw. sein.
Der Abnahmetest bestätigt die Gebrauchstauglichkeit des Produkts. Sie werden grundsätzlich vom Kunden durchgeführt. In Anlehnung an die Flugzeuganalogie wird unter anderem Folgendes überprüft:
Der Abnahmetest befasst sich eher mit einem Verantwortungsproblem . In einer Kunden / Lieferanten-Beziehung kann es eine vertragliche Verantwortung sein (Einhaltung aller Anforderungen). In jedem Fall liegt es aber auch in der Verantwortung der nutzenden Organisation, sicherzustellen, dass ihre Aufgaben mit dem System ausgeführt werden können und umsichtig alle unvorhergesehenen Probleme zu vermeiden (z. B. dieser Eisenbahnkonzern, der bei Abnahmetests feststellte, dass sie einige Quais verkürzen mussten, weil Die neuen Wagen waren 5 cm zu groß - kein Scherz!).
Schlussfolgerungen: Integrations- und Akzeptanztests überschneiden sich. Beide wollen zeigen, dass das System als Ganzes funktioniert. Das "Ganze" könnte jedoch für den Kunden größer sein (weil das System selbst Teil eines größeren Organisationssystems sein kann) und für den Systemintegrator technischer:
quelle
Integrationstests sind nichts anderes als die Überprüfung der Verbindung und Richtigkeit des Datenflusses zwischen zwei oder mehr Modulen.
Beispiel: Wenn wir eine E-Mail (ein Modul) erstellen und an eine gültige Benutzer-ID (zweites Modul) senden, wird beim Integrationstest überprüft, ob die gesendete E-Mail in den gesendeten Elementen vorhanden ist.
quelle
Eine praktische Definition eines Integrationstests lautet: Jeder Test, der die Interaktion mit etwas außerhalb des Prozesses erfordert.
Zum Beispiel:
Zwischen Ihrem Prozess und der Außenwelt besteht eine Art Vertrag, bei dem zumindest überprüft wird, ob der Vertrag das Ziel eines Integrationstests sein sollte. dh es sollte nicht mehr tun, als den Vertrag zu überprüfen. Wenn dies der Fall ist, bewegen Sie sich in Richtung System / Ende-zu-Ende-Raum.
Unit Tests sind in der Lage, die gesamte Logik innerhalb Ihrer Prozessgrenzen zu testen, und aufgrund der fehlenden Abhängigkeiten von der langsamen, fragilen und komplexen "Außenwelt" können sie dies problemlos und präzise tun .
Obwohl es Integrationstests gibt, die in dieser Definition nicht behandelt werden (weshalb ich sie als praktische Definition bezeichnet habe), sind sie meiner Meinung nach viel seltener / nützlicher.
NB Genau genommen würde diese Definition auch System- / End-to-End-Tests abdecken. In meiner Philosophie sind sie eine Form des "extremen" Integrationstests, weshalb ihre Namen einen anderen Aspekt betonen. In der anderen Richtung kann ein Komponententest als Integrationstest von Nullkomponenten betrachtet werden, dh alle Tests können als irgendwo im Integrationsspektrum liegend betrachtet werden und zwischen 0-n-Komponenten integrieren :-)
quelle