Software-Testen ist ein breit gefasster Begriff, denn er umfasst unterschiedliche Methoden, Herangehensweisen und Vorwissen über das Testobjekt. Bei den Methoden unterscheidet man zwischen funktionalen und nicht-funktionalen Tests. Funktionales Testen ist eine Art von Software-Test, bei dem das System anhand der funktionalen Anforderungen/Spezifikationen getestet wird. Funktionen (oder Merkmale) werden getestet, indem ihnen Eingaben zugeführt und die Ausgaben untersucht werden. Nicht-funktionale Tests, wie der Name suggeriert, testet die nicht-funktionalen Eigenschaften der Software. Dazu gehören Sicherheit, Performanz oder Usability.
Bei der Herangehensweise unterscheidet man zwischen manuellem und automatisiertem Testen. Bei automatisierten Testen werden Tools verwendet, um den Test maschinell durchzuführen. Zum Beispiel kann das Klicken in einem Web-Shop sehr gut mit Tools wie Selenium oder Appium automatisiert werden, das Lektorat des Codes, besser bekannt als Code Reviewing, hingegen ist am aussichtsreichsten, wenn es von mehreren Reviewern vollzogen wird. Die Untersuchung des Codes setzt Zugang zum Quellcode voraus. Man spricht in diesem Zusammenhang von white-box testing. Im Beispiel des Web-Shops interagieren die Tester mit der Applikation, ohne Einblicke in die Interna des Systems oder des Codes zu haben. Hier spricht man von black-box testing, weil keine a-priori Informationen über das Testsystem notwendig sind.
Was ist ein Funktionstest?
Beim Software-Testen umfasst das funktionale Testen eine Vielzahl an unterschiedlichen Testmethoden, die dem Entwicklungsprozess enorme Vorteile bringen. Richtig durchgeführt, verbessert es die Kommunikation zwischen Projekt-/Teamleiter, Entwicklern und Testern. Letztendlich erhöht sich die Entwicklungsgeschwindigkeit, weil gut kommunizierte Anforderungen zu weniger Nacharbeit führen. Die Tests führen darüber hinaus zu einem modularen Architektur-Design mit Subkomponenten, die klare Anforderungen erfüllen. Das Hauptziel des Funktionstests ist die Überprüfung der Funktionalitäten des Softwaresystems. Er konzentriert sich hauptsächlich auf
- Funktionalität: Testen der Hauptfunktionen einer Anwendung
- Zugänglichkeit: Überprüft die Zugänglichkeit des Systems für den Benutzer
- Fehlerbedingungen: Verwendung von Prüftechniken zur Überprüfung auf Fehlerbedingungen. Es wird geprüft, ob geeignete Fehlermeldungen angezeigt werden.
Welche Methoden gibt es?
Code-Review
Ein Code-Review gehört zu der Klasse des white-box Testings, weil Zugang zum Code benötigt wird. Code-Review, manchmal auch als Peer-Review bezeichnet, ist eine Software-Qualitätssicherungsmaßnahme, bei der eine oder mehrere Personen ein Programm überprüfen, indem sie hauptsächlich Teile des Quellcodes lesen, analysieren und nach Verbesserungsmöglichkeiten Ausschau halten. Obwohl die direkte Entdeckung von Qualitätsproblemen oft das Hauptziel ist, werden Code-Reviews in der Regel durchgeführt, um eine Kombination von Zielen zu erreichen:
- Bessere Codequalität: Verbesserung der internen Codequalität und Wartbarkeit (Lesbarkeit, Einheitlichkeit, Verständlichkeit, ...)
- Auffinden von Fehlern: Verbesserung der Qualität hinsichtlich externer Aspekte, insbesondere Korrektheit, aber auch Auffinden von Performance-Problemen, Sicherheitslücken, eingeschleuste Malware, ...
- Lern-/Wissenstransfer: Hilfe beim Transfer von Wissen über die Codebasis, Lösungsansätze, Qualitätserwartungen, usw.
- Stärkung des Gefühls der gegenseitigen Verantwortung: Stärkung des Gefühls der kollektiven Code-Eigenverantwortung und Solidarität
- Bessere Lösungen finden: Ideen für neue und bessere Lösungen und Ideen generieren, die über die existierenden Coding-Richtlinien hinausgehen
- Einhaltung von QA-Richtlinien: Code-Reviews sind in einigen Applikationen obligatorisch, z.B. bei sicherheitskritischen Applikationen wie Software für den Flugverkehr, für Banken oder selbstfahrende Autos
Obwohl das Code-Reviewen historisch aus der manuellen Herangehensweise gereift ist, versucht man einige Aspekte wie die Verbesserung der Codequalität oder Auffindung von Fehlern zu automatisieren. Man unterscheidet dabei zwischen statischer und dynamischer Code-Analyse. Der Unterschied liegt dabei darin, dass im letzteren Fall der Code zur Laufzeit untersucht wird, d.h. abhängig von den Eingaben, die zu unterschiedlichen Ausgaben führen können.
Unit-Test
Unit-Tests stellen sicher, dass jeder Teil des in einer Komponente entwickelten Codes die gewünschte Ausgabe liefert. Bei Unit-Tests betrachten Entwickler nur die Schnittstelle und die Spezifikation für eine Komponente. Es handelt sich um einen black-box Test, auch wenn der Code dafür in der Regel vorhanden ist.
Unit-Tests werden überwiegend von einem Entwickler durchgeführt, der die Code-Zeilen geschrieben hat. Dies beinhaltet in der Regel das Schreiben von Unit-Tests, die die Methoden in jeder Funktion aufrufen und diese validieren, wenn die erforderlichen Parameter übergeben werden und der Rückgabewert wie erwartet ist. Die Code-Abdeckung ist ein wichtiger Teil der Unit-Tests, bei denen die Tests die wichtigsten Fälle abdecken. Dabei unterscheidet man zwischen der Abdeckung des Codes (code coverage), der Code-Pfade (code path coverage) und der Methoden (method coverage). Mit einem guten Unit-Test sollte die Abdeckung in den drei Fällen maximiert werden. Um die Maximierung zu erreichen, ist die Automatisierung der Unit-Tests von großem Vorteil.
Integrationstest
Integrationstests werden durchgeführt, um einzelne Komponenten daraufhin zu testen, wie sie zusammen funktionieren. Mit anderen Worten, er wird durchgeführt, um die Module zu testen, die einzeln einwandfrei funktionieren und bei der Integration keine Fehler aufweisen. Es ist die häufigste Art des Funktionstests und wird als automatisierter Test durchgeführt.
Im Allgemeinen bauen Entwickler verschiedene Module des Systems/der Software gleichzeitig und konzentrieren sich nicht auf andere. Sie führen umfangreiche Black- und White-Box-Funktionsprüfungen wie Code-Reviews und Unit-Tests an den einzelnen Modulen durch. Integrationstests bewirken, dass Daten, die dann zu Ereignissen führen, zwischen den Modulen ausgetauscht werden, was bedeutet, dass sie als Teile eines Gesamtsystems und nicht als einzelne Komponenten agieren müssen. Dabei werden in der Regel Probleme mit UI-Operationen, Datenformaten, Operationstiming, API-Aufrufen sowie Datenbankzugriff und Betrieb der Benutzeroberfläche aufgedeckt.
Regressionstest
Immer wenn Entwickler die Funktionalität ändern oder modifizieren, passiert mit hoher Wahrscheinlichkeit, dass die Aktualisierungen unerwartetes Verhalten verursachen. Regressionstests stellen sicher, dass eine Änderung oder das neue Feature keine der vorhandenen Funktionen beschädigt hat. Ihr Zweck ist es, Fehler zu finden, die möglicherweise versehentlich in den bestehenden Build eingeführt wurden. Regressionstests lassen sich gut automatisieren.
Systemtest
Systemtests sind Tests, die an einem vollständigen, integrierten System durchgeführt werden, um dessen Übereinstimmung mit den festgelegten Anforderungen zu bewerten.Nach Abschluss der Integrationstests wird das Produkt für den Systemtest freigegeben. Systemtests werden von unabhängigen Testern durchgeführt, die bei der Entwicklung des Programms keine Rolle gespielt haben. Diese Tests werden in einer Umgebung durchgeführt, die die Produktion genau widerspiegelt. Systemtests sind sehr wichtig, da sie überprüfen, ob die Anwendung die technischen, funktionalen und geschäftlichen Anforderungen erfüllt, die vom Interessenvertreter festgelegt wurden.
Was ist die Herausforderung bei Funktionalen Tests?
Ein Funktionstest basiert auf der Erkenntnis, was akzeptables Verhalten ist und was nicht. Akzeptables Verhalten wird in einer Funktions- oder Anforderungsspezifikation festgelegt. Es ist ein Dokument, das beschreibt, was ein Benutzer tun darf, so dass er die Konformität der Anwendung oder des Systems damit feststellen kann. Zusätzlich kann dies manchmal auch die tatsächlich zu validierenden Szenarien der Geschäftsseite beinhalten.
Daher können Funktionstests mit zwei gängigen Techniken durchgeführt werden:
- Testen auf der Grundlage von Anforderungen: Enthält alle funktionalen Spezifikationen, die eine Grundlage für alle durchzuführenden Tests bilden.
- Testen auf der Grundlage von Geschäftsszenarien: Enthält alle Funktionsspezifikationen, die die Grundlage für alle durchzuführenden Tests bilden: Enthält die Informationen darüber, wie das System aus der Geschäftsprozessperspektive wahrgenommen wird.
Die Anforderungen zu erarbeiten ist eine wirklich anspruchsvolle Aufgabe, weil sie nicht nur das Handwerkszeug eines Test Engineers voraussetzt, wie zum Beispiel die Programmierung der Testautomatisierung, sondern vor allem auch die fachliche Kenntnis über das zu testende Software-Produkt, das in der Regel nur mit dem richtigen Domänenwissen, dem Verständnis für die Kundenanforderungen und der Kultur der Industrie, in der der Kunde agiert, und seinem Geschäftsmodell funktioniert. Anders formuliert, man kann nur testen, was man auch versteht.
Warum ditCraft?
Unsere Experten kennen sich mit Funktionstests aus und wählen die richtigen Methoden, um eine effiziente QA-Strategie zugeschnitten auf Ihre Software umzusetzen. Ein großes Augenmerk werfen wir auf die Automatisierung der Funktionstests, so dass auch kleine Entwicklerteams den hohen Kundenanforderungen an qualitativ guter Software gerecht werden. Wir entwerfen zusammen mit dem Kunden und implementieren Funktionstest innerhalb CI/CD Pipelines, um die Vorzüge von kontinuierlicher Integration, schnellem Release und automatisierbaren kontinuierlichen Tests zu kombinieren.
Sollten Sie Interesse an Funktionstests haben, möchten Sie sich einen Überblick über die Möglichkeiten für Ihr IT-Unternehmen verschaffen, kontaktieren Sie uns doch über unser
Kontaktformular oder vereinbaren Sie
ein Beratungsgespräch über unseren Kalender.
x
Einschätzungsumfrage
In Zeiten der Digitalisierung und einer rapiden Nachfrage nach immer mehr Software-Produkten ist der Druck auf vielen Firmen groß. Ein oft unterschätztes, jedoch nicht zu vernachlässigendes Thema ist hierbei das Software Testing. Sie wollten schon immer wissen, wie Sie in diesem Bereich aufgestellt sind? Die Umfrage dauert nur eine Minute!