Integrationstests

Integrationstests
MIN
02 Aug. 2023

Traditionell wurde das Testen von Software als eine Möglichkeit angesehen, Fehler zu finden, sobald ein brauchbares Produkt erstellt wurde. Mit dem Fortschreiten des Softwareentwicklungsprozesses und der Entwicklung der Anforderungen an komplexe Software hat sich jedoch auch der Testprozess weiterentwickelt.

Die Tests wurden in verschiedene Stufen aufgeteilt, um die Testabdeckung und Zuverlässigkeit zu verbessern. In diesem Text werden wir zunächst einen kurzen Überblick über die verschiedenen Testebenen geben und dann einen detaillierten Blick auf Integrationstests und ihre Arten, Vorteile und einige der gängigsten Integrationstest-Tools werfen.

Inhaltsübersicht

Stufen der Prüfung

Die Arten von Softwaretests lassen sich grob in statische Tests und dynamische Tests unterteilen. Beim statischen Testen führen wir die entwickelte Softwareanwendung nicht aus, sondern verwenden verschiedene Techniken, um die Anwendung zu testen, wie z. B. – Checks, Zwischentests, informelle und technische Überprüfungen.

Beim dynamischen Testen wird die Softwareanwendung getestet, indem der Code ausgeführt und sein dynamisches Verhalten untersucht wird. Dabei werden verschiedene Parameter wie Antwortzeit, CPU-Auslastung, Speichernutzung usw. analysiert. Derzeit umfasst das dynamische Testen verschiedene Testebenen, die mit Unit-Tests beginnen und mit Integrations-, System- und schließlich Akzeptanztests fortgesetzt werden.

Prüfung des dynamischen Niveaus
dynamische Prüfung – Stufen

Unit-Testing – Dies ist die erste Ebene des Testens, bei der einzelne Module oder kleinere Bausteine der Anwendung isoliert getestet werden. Dies hat den Vorteil, dass es einfacher ist, ein bestimmtes Modul vollständig und erschöpfend zu testen, da wir uns nur auf kleinere Module konzentrieren. Außerdem können Fehler, die auf dieser Ebene entdeckt werden, schnell und einfach mit weniger Ressourcen korrigiert werden.

Integrationstests – Dies ist die zweite Ebene der Tests, die wir in diesem Artikel behandeln. Sie umfasst die Prüfung der integrierten Module als Ganzes sowie deren Zusammenschaltung.

Systemtests – Die dritte Teststufe, bei der die gesamte Anwendung von Anfang bis Ende getestet wird. Es hilft bei der Überprüfung der Anforderungen vor der endgültigen Prüfung durch den Kunden.

Abnahmetests – Dies ist die vierte und letzte Teststufe, bei der der Kunde oder die Interessenvertreter prüfen, ob die Anwendung ihren geschäftlichen Anforderungen entspricht oder nicht.

Da wir nun über statische und dynamische Tests und die verschiedenen Teststufen Bescheid wissen, können wir uns nun mit den Integrationstests im Detail beschäftigen.

Was sind Integrationstests?

Integrationstests sind die zweite Testebene nach den Unit-Tests, bei denen wir neben den integrierten Komponenten auch die Verbindung zwischen den Modulen testen. Sie kann sowohl mit White-Box- als auch mit Black-Box-Testverfahren durchgeführt werden.

Warum sollten wir Integrationstests durchführen?

  • Ein Modul kann isoliert gut funktionieren, aber bei der Interaktion mit einem anderen Modul können Integrationsprobleme auftreten.
  • Es kann Probleme mit dem Datentyp oder dem gültigen Datenbereich zwischen Modulen geben.
  • In großen Teams, in denen Module von verschiedenen Entwicklern oder sogar Teams erstellt werden, ist dies sehr wichtig, da das Verständnis der verschiedenen Entwickler nicht übereinstimmen kann.

Vorteile von Integrationstests

  • Wie bereits erwähnt, hilft es bei der Identifizierung von Integrationsproblemen zwischen Modulen.
  • So kann sichergestellt werden, dass die integrierten Module ordnungsgemäß funktionieren, bevor man zum systemweiten Testen der Anwendung übergeht.
  • Fehler, die auf dieser Ebene gefunden werden, sind leichter zu beheben als Fehler, die in späteren Testphasen – System- und Akzeptanztests – gefunden werden.
  • Sie verbessert die Testabdeckung und bietet ein zusätzliches Maß an Zuverlässigkeit.

Arten von Integrationstests

Wir kennen 4 Arten:

Urknall-Integration

Bei einer großen Integration müssen zunächst alle Module fertiggestellt und dann integriert werden. Nach der Integration erfolgt die Prüfung der integrierten Einheit als Ganzes. Sie unterscheidet sich von der Systemprüfung, da sich die Prüfung hier auf die Verbindung/Kommunikation zwischen den Modulen konzentriert.

Vorteil – Es eignet sich für kleinere Projekte, bei denen alle Module vor Beginn der Integrationstests entwickelt werden können.

Nachteil – Die Integration ist sehr schwierig, da es weder praktisch noch bequem ist, alle Module vor Beginn der Integrationstests fertig zu haben.

Top-down-Integrationstests

Die Top-Down-Integration ist ein inkrementeller Ansatz für Integrationstests, bei dem der Testfluss von den Top-Level-Modulen (Module, die in der Hierarchie höher stehen) zu den Modulen der unteren Ebene führt. Da es sehr wahrscheinlich ist, dass die Module der unteren Ebene nicht entwickelt werden, bevor die Module der oberen Ebene gestartet werden, werden in solchen Fällen Plugins (Stubs) verwendet.

Proxy-Module sind Dummy-Module, die den Betrieb eines Moduls simulieren, indem sie die vom Modul empfangenen Parameter akzeptieren und ein akzeptables Ergebnis liefern. Im Allgemeinen haben Stubs fest kodierte Ein- und Ausgaben, die beim Testen anderer Module, die mit ihnen integriert sind, helfen.

Vorteil – Durch die Verwendung von Stubs müssen wir nicht auf die Entwicklung aller Module warten. Wir können auch dem Testen kritischer integrierter Module Vorrang einräumen.

Nachteil – Diese Technik erfordert die Erstellung vieler untergeordneter Module, um Module auf niedrigerer Ebene zu simulieren. Es kann auch vorkommen, dass Module der unteren Ebene nicht ausreichend getestet werden.

Bottom-up-Integrationstests

Die Bottom-up-Integration basiert ebenfalls auf einem inkrementellen Ansatz, der von Modulen der unteren Ebene ausgeht und sich zu Modulen der oberen Ebene hocharbeitet. Auch hier ist es möglich, dass die Module der höheren Ebene nicht zu dem Zeitpunkt entwickelt werden, zu dem die Module der unteren Ebene getestet werden. In diesen Fällen werden Treiber eingesetzt. Diese Treiber simulieren die Funktionalität von Modulen höherer Ebenen, um Module niedrigerer Ebenen zu testen.

Vorteil – ähnlich wie beim Top-down-Testing müssen wir nicht warten, bis alle Module entwickelt sind, bevor wir mit dem Testen beginnen.

Nachteil – Top-Level-Module, die in späteren Phasen getestet werden, sind möglicherweise nicht ausreichend getestet und können Fehler enthalten.

Hybride Integrationstests

Der hybride Integrationsansatz wird auch als Sandwich-Ansatz bezeichnet. Dieser Ansatz ist eine Kombination aus Top-down- und Bottom-up-Integrationstests. Bei diesem Ansatz beginnt die Integration in der mittleren Schicht, und die Tests werden in beide Richtungen durchgeführt – zu den Modulen der höheren Ebene (aufwärts) und zu den Modulen der unteren Ebene (abwärts). Diese Methode vereint die Vorteile von Top-down- und Bottom-up-Ansätzen und ermöglicht eine schnellere Prüfung von Modulschnittstellen.

Vorteil – Da wir uns nach oben und unten bewegen können, ist dies die zeitsparendste Methode mit der Möglichkeit, Module auf der obersten oder untersten Ebene zu priorisieren.

Nachteil – dieser Ansatz ist schwierig zu implementieren, da wir das zu prüfende Modul integrieren und in beide Richtungen bewegen müssen.

Herausforderungen bei Integrationstests

  • Schwierig auszuführen – im Vergleich zu Systemtests, bei denen wir die Anwendung als Blackbox betrachten können, ist es sehr schwierig, sie durchzuführen.
  • Zeitaufwendig – Das Testen aller Verbindungen zwischen den verschiedenen verknüpften Modulen ist sehr zeit- und ressourcenaufwendig.
  • Zusätzlicher Aufwand – Erfordert die Erstellung von Untergruppen und Treibern, die, wenn sie nicht korrekt erstellt werden, zu unzureichenden Tests führen können.

Werkzeuge für Integrationstests

Rational Integration Tester – Rational Integration Tester ist ein Integrationstestwerkzeug von IBM. Es bietet eine codierungsfreie Umgebung für die Entwicklung von Integrationstests.

TESSY – Tessy von Razorcat Development GmbH hilft bei der Automatisierung des Unit- und Integrationstestzyklus für eingebettete Software in C und C++.

LDRA – Das LDRA-Toolpaket bietet Funktionen für Unit-, Integrations- und Systemtests. Es wird meist für kritische Softwareanwendungen wie Luft- und Raumfahrt, medizinische Geräte, Automobilbau usw. verwendet.

Protractor – Protractor ist ein Open-Source-Testframework für Angular- und AngularJS-Anwendungen, das Javascript-Skripting unterstützt.

Citrus Integration Testing – Citrus ist ein Open-Source-Testframework, das bei der Entwicklung automatisierter Integrationstests für HTTP REST, TCP/IP, SOAP, FTP, XML, JSON usw. Protokolle und Nachrichtenformate hilft.

Steam – Steam ist ein Open-Source-Framework zur Testautomatisierung, das Integrationstests ohne Kopfhörer ermöglicht.

Jasmine – Jasmine ist ein Open-Source-BDD-Framework, das zur Automatisierung jeder Javascript-basierten Anwendung verwendet werden kann.