Komponenten-Testing ist eine testgetriebene Entwicklungsmethode (TDD) zur Bewertung von Software, bei der besonderes Augenmerk auf einzelne Komponenten oder Codeeinheiten gelegt wird – also auf die kleinstmöglichen Einheiten.
Bei Komponententests werden Einheiten isoliert, damit die Funktionalität bestätigt werden kann, bevor die Einheiten in andere Teile der Anwendung integriert werden.
Ein Komponententest-Framework bietet sowohl unmittelbare als auch langfristige Vorteile. Kurzfristig ermöglichen Komponententests einen schnelleren Entwicklungsprozess, indem sie automatisiert testen. Langfristig gesehen führt das Komponenten-Testing zu Einsparungen bei den Arbeitskosten, da später im Softwareentwicklungszyklus (SDLC) weniger Fehlerbehebung erforderlich ist, wenn diese Kosten in der Regel erheblich höher sind.
Der Grund, warum weniger Debugging erforderlich ist, liegt in der verbesserten Codequalität, die Komponententests unterstützen. Komponententests fördern eine präventive und aufmerksame Fehlererkennung, die alle viel früher im Entwicklungsprozess auftritt. Durch die Konzentration auf einzelne Einheiten können sich Tester auf „Ausführungseinheiten“ konzentrieren, d. h. auf die einzelnen Codeteile oder Codezeilen, die bewertet werden.
Der letztendliche Effekt ist der Aufbau einer stärkeren Codebasis, in der Codeänderungen während der Softwaretests sicher und frühzeitig definiert und vorgenommen werden, wodurch veralteter Legacy-Code, der möglicherweise noch vorhanden ist, ersetzt wird.
Von allen Arten von Tests kann der Komponententest als das reinste Beispiel für eine „Shift-Left“-Disziplin angesehen werden. Das Ziel von Shift-Left-Testmethoden besteht darin, bestimmte Teile der Softwaretests auf einen früheren Zeitpunkt innerhalb des SDLC zu verlegen, basierend auf einem geplanten Projektzeitplan, der sich sequenziell von links nach rechts bewegt.
Wenn ein Tester also an den kleinsten Teilen des Quellcodes herumtüftelt, arbeitet er auf der grundlegendsten Ebene des Projekts und platziert es ganz links in der Projektzeitleiste. Tatsächlich kann das Komponenten-Testing so weit nach links verschoben werden, dass es bereits vor der eigentlichen Softwareentwicklung beginnt. Ein Aspekt des Komponenten-Testings besteht darin, dass es Softwareentwickler dazu anregt, bereits in frühen Entwurfsphasen über potenzielle Probleme nachzudenken und diese gedanklich anzugehen.
Branchen-Newsletter
Bleiben Sie mit dem Think-Newsletter über die wichtigsten – und faszinierendsten – Branchentrends in den Bereichen KI, Automatisierung, Daten und mehr auf dem Laufenden. Weitere Informationen finden Sie in der IBM Datenschutzerklärung.
Ihr Abonnement wird auf Englisch geliefert. In jedem Newsletter finden Sie einen Abmeldelink. Hier können Sie Ihre Abonnements verwalten oder sich abmelden. Weitere Informationen finden Sie in unserer IBM Datenschutzerklärung.
Im Bereich der Softwaretests gibt es verschiedene Arten von Tests, die bestimmte Eigenschaften und Funktionen zu teilen scheinen.
Es ist beispielsweise leicht nachvollziehbar, warum es gelegentlich zu Verwechslungen zwischen Komponententests und einfachen Tests kommen kann. Ihrem Wortlaut nach klingt es so, als hätten die beiden Begriffe ähnliche Bedeutungen, und wir wissen, dass sich Komponententests auf einfache Codeteile konzentrieren. Während Komponententests jedoch auf das Testen grundlegender Code-Teile beschränkt sind, können einfache Tests – trotz ihres Namens – erheblich umfassender und komplexer sein.
Einfache Tests können auch für verschiedene Zwecke verwendet werden, z. B. für Integrationstests (um zu sehen, wie gut Komponenten zusammenarbeiten). Mit einfachen Tests lassen sich sogar End-to-End-Tests (zur Messung der Gesamtsystemleistung) durchführen. Der entscheidende Unterschied liegt in der jeweiligen Testumgebung. Komponententests zielen darauf ab, Code isoliert zu testen, während dies bei einfachen Tests möglich ist oder auch nicht.
Glücklicherweise gibt es bei anderen Testtypen deutlich weniger Unklarheiten. Zum Beispiel Akzeptanztests, bei denen ein ganzes Softwaresystem analysiert wird und geprüft wird, inwieweit es die geschäftlichen Erwartungen erfüllt und den Anforderungen der Benutzer entspricht. Die Abnahmetests finden spät im SDLC statt, direkt nach den Regressionstests (die sicherstellen, dass Codeänderungen keine Fehler in der Funktionalität verursachen) und vor der Systembereitstellung.
Der wichtigste Unterschied zwischen Komponententests und anderen Testtypen ist normalerweise ihre Position innerhalb des SDLC. Komponententests müssen schon früh in diesem Lebenszyklus erfolgen. Der andere wichtige Unterschied besteht darin, ob der Code isoliert geprüft wird.
Es gibt fünf allgemein anerkannte Schritte für Komponententests, die nacheinander behandelt werden müssen.
Hier wählt der Tester den zu analysierenden Komponententestcode aus, der eine Funktion, Klasse oder Methode sein kann.
Die nächste Entscheidung betrifft die Art des zu implementierenden Tests, unabhängig davon, ob es sich um manuelle Tests oder automatisierte Komponententests in einem von vielen möglichen Frameworks handelt.
Zur Vorbereitung der eigentlichen Komponententests muss der Tester sicherstellen, dass die Testumgebung alle Anforderungen für die Durchführung der Tests erfüllt, einschließlich Testdaten, Abhängigkeiten und Mock-Objekte. An dieser Stelle ist es unerlässlich, eine integrierte Entwicklungsumgebung (IDE) zu verwenden.
Die IDE ist eine Software-Anwendung, die man sich als eine Art multifunktionales Schweizer Taschenmesser vorstellen kann, das alle notwendigen Werkzeuge zum Schreiben, Erstellen, Testen und Debuggen von Code enthält. IDEs fördern die Erstellung und Ausführung von Komponententests.
Der Tester wählt ein Komponententest-Framework aus und schreibt die zu verwendenden Testfälle. Während der Entwicklung und Ausführung der Tests konvertiert ein Compiler in Programmiersprachen geschriebene Tests in ausführbaren Code. Nach der Durchführung der Testfälle bestätigt der Tester die Testergebnisse.
Schließlich bleibt noch ein letzter Schritt. Sollte einer der Testfälle fehlschlagen, muss der Tester den Code debuggen und die Grundursache bestätigen. Dann sollte das Problem behoben sein. Danach muss der Tester die Komponententests erneut ausführen, um sicherzustellen, dass alle Fehler im Code behoben wurden.
Wenn Entwickler Tests schreiben und Tests ausführen, stehen ihnen je nach ihren spezifischen Anforderungen verschiedene Testtools zur Verfügung:
Komponententests stellen einen tiefen engagierten und praktischen Testansatz dar, wie diese Strategien veranschaulichen.
Es ist wichtig zu sehen, dass so viele entscheidende Teile des Codes wie möglich getestet und ausgewertet werden. Es ist nicht immer möglich, 100 % des Codes zu testen, aber Sie sollten dennoch einen relativ hohen Prozentsatz der Testabdeckung anstreben, z. B. im Bereich von 70 bis 80 %. Die Häufigkeit der Tests sollte ebenfalls erhöht werden, um ständige Tests zu unterstützen.
Mocks und Stubs sind für die Bemühungen, Testumgebungen ordnungsgemäß zu isolieren, von entscheidender Bedeutung. Mocks lassen sich am besten als Testdoubles beschreiben, die es Testern ermöglichen, das wahrscheinliche Verhalten von Objekten in größerer Isolation zu untersuchen. Stubs ermöglichen es Testern, zu sehen, wie ein isoliertes Testdoppel mit externen Abhängigkeiten wie Komponenten interagieren würde.
Die Verwendung von Continuous Integration/Continuous Delivery (CI/CD)-Pipelines ist für den Testprozess von entscheidender Bedeutung, da sie Testfunktionen automatisieren. Durch die Ausführung von CI/CD-Pipelines werden bei jeder Codeänderung automatisierte Komponententests durchgeführt.
Edge-Fälle spiegeln extreme Nutzungsmuster wider, die an den Grenzen oder Betriebsparametern einer Komponente auftreten. Aus diesem Grund sind Edge-Cases hilfreich, um Fehler zu identifizieren, die sonst möglicherweise nicht sofort erkennbar sind. Beispiele für solche Fehler sind Array-Zugriffe außerhalb des zulässigen Bereichs, wenn ein für die Auflistung verwendeter Index den zulässigen Wert für diesen Index überschreitet. In solchen Fällen ist es oft notwendig, den Code umzugestalten – den Code neu zu strukturieren, während die vorhandenen Funktionen beibehalten werden.
Wie bei allen Computeranwendungen sorgt künstliche Intelligenz (KI) auch beim Komponenten-Testing für deutlich höhere Geschwindigkeit und weitere Nutzen. Hier sind einige Beispiele dafür, wie KI jetzt das Komponenten-Testing revolutioniert:
Ein vollständig verwalteter, mandantenfähiger Service für die Entwicklung und Bereitstellung von Java-Anwendungen.
Verwenden Sie DevOps-Software und -Tools, um cloudnative Anwendungen für mehrere Geräte und Umgebungen zu erstellen, bereitzustellen und zu verwalten.
Die Entwicklung von Cloud-Anwendungen bedeutet: einmal erstellen, schnell iterieren und überall bereitstellen.