Tests in der Softwareentwicklung: Ein Klassifizierungsansatz
Einführung
Das Thema Testing in der Softwareentwicklung hat in den letzten Jahren extrem an Bedeutung gewonnen und wird in den Fachmedien oft diskutiert. Es wird eine Anzahl von verschiedenen Testarten und Testverfahren erwähnt, dabei werden für einzelne Testarten mehrere Begriffe verwenden und einzelne Begriffe haben sehr oft je nach Kontext oder je nach Quelle unterschiedliche Bedeutung. Das führt zur Verwirrung und manchmal zu falschen Entscheidungen bezüglich erforderlicher Test-Maßnahmen in Software-Projekten.
In diesem kurzen Blog-Artikel stellen wir Ihnen einen einfachen Ansatz zur Test-Klassifizierung vor und erklären Ihnen einige gängige Testarten und Testverfahren.
Warum testen?
Testen gehört zu dem Bereich Qualitätssicherung in der Softwareentwicklung. Während des Testens wird den Unterschied zwischen dem tatsächlichen und dem erforderlichen Zustand der Software aufgezeigt. Anders gesagt: Durch das Testen wird definiert, in welchem Maße die Software die gestellten Anforderungen erfüllt.
Da die Entwicklung von modernen Software-Produkten ein mehrstufiger Prozess ist, sollten relevante Tests für jede Entwicklungsstufe ausgewählt werden. Dabei ist es besonders wichtig, früh mit dem Testen anzufangen, denn spät (nach dem Release) entdeckte Schwachstellen können nur mit höheren Kosten und viel mehr Aufwand behoben werden.
Testarten und Testverfahren: Ein Klassifizierungsansatz
Wie oben bereits erwähnt wurde, herrscht im Moment in der gelebten täglichen Praxis ein ziemliches Durcheinander was verschiedene Testarten sind und was sie tun. Als Orientierung bei der Erstellung unserer Klassifizierung haben wir folgende Qualitätsnormen benutzt: ISO/IEC ISO 25010 und IEEE 29119. Ferner haben wir einige Standards und Definitionen der ISTQB® (International Software Testing Qualification Board) eingearbeitet.
Zusätzlich basiert diese Qualifizierung auf unseren langjährigen praktischen Erfahrungen in einer Vielzahl von Software-Entwicklungsprojekten. Diese Klassifizierung bietet Einsteigern einen einfachen Überblick über die gängigsten Methoden und hilft, alle anderen Testarten und Testverfahren logisch einzuordnen.
Zeitpunkt des Testens
Eine sehr bekannte und viel verwendete Gruppe von Testarten basiert auf dem Zeitpunkt, zu welchem im Softwareentwicklungs-Prozess getestet wird und wird oft als Teststufen bezeichnet.
Hier sprechen wir von folgenden Tests:
- Der Unittest (auch Modultest) testet einzelne Codeteile (Klasse, Objekte, Funktionen) auf spezifikationskonformes Verhalten, isoliert vom Rest des Codes. Nicht selten werden für manuelle Unittests mehr Code-Zeilen geschrieben als für die Software selbst. Deshalb ist es extrem wichtig, einen Weg zu finden, um Unittests zu automatisieren und die Testprozesse auf dieser Stufe zu beschleunigen.
- Bei dem Integrationstest werden mehrere Code-Module werden zusammen als Gruppe getestet.
- Der Systemtest prüft das gesamte Software-System auf die gestellten Anforderungen und auf die Tauglichkeit zur Abnahme.
- Der Abnahmetest wird durch den Kunden oder seine Vertretung durchgeführt und überprüft die Software auf die Tauglichkeit für Inbetriebnahme.
- Der Regressionstest wird nach einer Software-Modifikation durchgeführt und prüft die Funktionsfähigkeit von modifizierten und nicht-modifizierten Software-Teilen.
Testverfahren
Bei manchen „Testarten“ handelt es sich um Testverfahren – die Art und Weise wie getestet wird.
Dabei unterscheidet man zwischen statischen und dynamischen Testverfahren. Bei statischen Testverfahren wird der zu testende Code nicht ausgeführt und man arbeitet mit Code-Analyse Tools um die Qualität des Codes zu bemessen.
Bei dynamischen Testverfahren wird die Software in der Ausführung getestet. Dabei wird der Fokus auf das Verhalten / Funktionieren der Software gelegt.
Eine andere Art, die Testverfahren zu klassifizieren ist White-Box-Tests und Black-Box-Tests. Bei einem White-Box-Test ist der Zugang zum Code erforderlich um darauf basierend Tests zu spezifizieren. Als Vorgabe für den Test dient der Programmcode. Bei einem Black-Box-Test wird das gesamte System als „Blackbox“ behandelt, sprich man kennt die interne Struktur (hier den Code) nicht. Als Vorgabe für den Test dienen dann die Anforderungen an das Verhalten des Programms.
Testintention
Eine weitere Unterscheidung zwischen Testarten basiert sich auf Testanforderungen. Auf der einen Seite spricht man von Tests, die sich auf funktionalen Anforderungen basieren (Einhaltung von Anforderungen/Erwartung und der Gesamtfunktionalität). Auf der anderen Seite spielen die Tests von nicht-funktionalen Anforderungen (vor allem Performance, Sicherheit und Benutzbarkeit der Software) auch eine wesentliche Rolle.
Unter nicht-funktionalen Tests unterscheiden wir folgende Testtypen:
Performance-Tests, z.B.
- Lasttests: der Test simuliert die Last auf Niveau der erwarteten System-Nutzung und prüft Stabilität und Antwortverhalten des Systems;
- Stresstests: der Test simuliert die Last über dem erwarteten Niveau und ermittelt die Lastgrenze des Systems sowie dessen Verhalten bei wieder sinkender Last;
- Skalierbarkeitstest: beim Test wird das Verhalten des Systems unter steigender Last untersucht mit Hinzunahme von Hardware- und Software-Komponenten.
Sicherheitstests, z.B.:
- Schwachstellen-Analyse: Identifikation von möglichen Sicherheitslücken im Programmcode; läuft automatisiert/standardisiert ab;
- Penetrationstests: Identifikation der Schwachstellen im gesamten System, inkl. Prozesse und Architektur, wird individualisiert je nach Software und System durchgeführt.
Nutzbarkeitstests, z.B.:
- Gebrauchstauglichkeitstest: überprüft, ob das System einfach/intuitiv vom Endnutzer bedient werden kann;
- Zugänglichkeitstest: überprüft, ob das System „barrierefrei“ d.h. von Menschen mit Einschränkungen bedient werden kann.
Zusammenfassend kann man sagen, dass die Auswahl von anwendbaren und empfohlenen Software-Tests sich je nach zu testendem Kontext, System und Entwicklungsmethodik stark unterscheidet. Die vorgestellte Test-Klassifizierung gibt einen kurzen Überblick über die möglichen Optionen. Wenn Sie mehr über Tests und Testautomatisierung erfahren wollen oder eine Beratung zum Thema Testing für Ihr Produkt oder Ihr Projekt brauchen, kontaktieren Sie uns.
Autoren: Thomas Klein, Elena Semenova
Bild: Jesus Kiteque, Unsplash