7

Ich finde das Konzept des "Integrationstests" verwirrend. Es scheint ziemlich viele Erklärungen und Bereiche zu sein:Ist Integrationstests ein Überbegriff, und wenn ja, welche Arten von Tests beinhaltet es?

  • Functional/Abnahme Prüfung (zB Prüfung der Benutzeroberfläche mit zB Selen)
  • Testen der Integration verschiedener Klassen/Module von Software zusammen (einfach testen zwei oder mehr Klassen zusammen, ohne dass sie etwas Besonderes wie db Anrufe und Sachen tun)
  • Testen der Systemkonfiguration Funktion/Feature-unabhängig (Datenbank-Integration funktioniert, Abhängigkeiten sind richtig injiziert, Sicherheit Basisklassen arbeiten)
  • Testen des Systems als Ganzes (laufende Dienste, die Datenbanken verwenden, Web Services, etc.)
  • etc. etc.

Ich beginne Integrationstests als Oberbegriff zu sehen (im Gegensatz es in der Programmierung Gespräche zu definieren, in denen spezifische/strengen Sinne oft es gegeben ist):

  • Integrationstest enthält:
    • Einheit Integrationstests (Test Integration verschiedener Klassen im gleichen Paket ohne externe Bibliotheken Aufruf)
    • Functional/Abnahmeprüfung (Test letzte Ausgabe der Software durch Selen, zum Beispiel)
    • Systemtests (enthält verschiedene, weitere technische & nicht merkmalsbezogenen Tests wie in Wikipedia article aufgeführt)

In Maven Standard-Lebenszyklus gibt es nur "Test" und "Integrationstest" -Phasen. Dies scheint die Tests in etwa zwei Kategorien aufzuteilen und würde mit diesen Annahmen einhergehen.

Es gibt viele bestehende Fragen und Antworten, die auf Unterschiede zwischen Komponententests, Funktionstests, Regressionstests usw. im Allgemeinen achten. Ich suche jedoch nach einer spezifischeren Antwort zu Integrationstests: Wie kategorisierst du Integrationstests und was nimmst du darin auf? Scheuen Sie es auch, Software-Tests grob in zwei Kategorien zu teilen, wie ich es getan habe: Komponententests (1 Einheit) vs. Integrationstests (2+ Einheiten)?

+0

Nur eine Anmerkung: Da die Themen so verschwommen scheinen, glaube ich nicht, dass ich irgendeine der Antworten als "akzeptiert" auswählen kann. Sie sind alle sehr gut. –

Antwort

3

Das Rechnen ist voll von überladenen Begriffen, die für jeden Programmierer, mit dem Sie sprechen, leicht (und manchmal nicht so leicht) eine andere Bedeutung haben. Integrationstests gehören dazu.

Ich neige dazu, Ihre Interpretation von Integrationstests zu favorisieren, um zwei oder mehr miteinander verbundene Einheiten zu testen. Aber das ist immer noch ziemlich unscharf, da wir verschiedene Definitionen haben können, was eine "Einheit" ist.

Ich denke, es ist wichtiger, dass ein Team von Entwicklern darüber einig ist, was sie unter Integrationstests verstehen, anstatt die einzig wahre Definition von Integrationstests zu finden.

3

Mein Team sieht (deine Worte verwenden), Integrationstests als

  • Testen der Integration verschiedener Klassen/Module der Software zusammen Belags (einfach testen zwei oder mehr Klassen zusammen, ohne dass sie etwas Besonderes wie db zu tun Anrufe und Sachen)
  • Testen der Systemkonfiguration Funktion/Feature-unabhängig (Datenbank-Integration funktioniert, Abhängigkeiten korrekt injiziert werden, Sicherheit Basisklassen) arbeiten

und nichts anderes. Systemtests und Akzeptanztests sehen wir als unterschiedliche Familien.

wir hatten einige lange Diskussionen darüber, um sicherzustellen, dass wir alle die gleiche Sprache sprachen, wenn wir über Tests sprachen.

Ich stimme nicht stark mit dem überein, was Sie als Integrationstests definieren, aber ich sage nur, dass es nett ist, wenn alle Leute, mit denen Sie arbeiten, sich auf eine Klassifizierung einigen.

2

Nun, Sie haben Komponententests, deren genaue Definition variiert, aber sicherlich alle diese Tests enthalten, die mit einem JUnit-ähnlichen Werkzeug definiert und auf die gleiche Weise wie der Quellcode organisiert sind. Wenn Sie für eine Quellcodedatei nur einen einzigen Test finden, ist das, was Sie gefunden haben, ein Komponententest.

Und dann gibt es Systemtests, die das komplette System so nah wie möglich testen, damit ein Kunde es sehen kann.

Jeder Test, der in der Lücke zwischen diesen beiden Dingen lebt, ist ein Integrationstest - weder isomorph zum Quellcode noch repräsentativ für eine Endbenutzererfahrung.

Das ist eine ziemlich große Lücke zwischen zwei Kategorien, die in der Praxis sehr unterschiedlich sind. Diese Lücke kann viele potenziell nützliche Tests enthalten, aber die Art dieser Tests wird natürlich ziemlich dramatisch variieren.

Verwandte Themen