9 Arten des Software Testing

Soviel schon einmal vorweg: Es gibt keine fehlerfreie Software. Manche Fehler offenbaren sich bereits in frühen Entwicklungsphasen, andere Fehler wiederum zeigen sich erst nach der Inbetriebnahme oder dem Verkaufsstart.

Das jeweilige Problem im Sourcecode zu lokalisieren und zu beheben kann im fortgeschrittenen Entwicklungsstadium zu einer sehr aufwändigen und zeitraubenden Angelegenheit werden. Spätestens hier setzt das Software Testing in all seiner Vielfalt an. Wir klären auf, welche Arten und Methoden des Software-Testings es gibt.

Warum Software Testing?

Je umfangreicher und komplexer eine Softwareanwendung wird, umso notwendiger sind kontinuierliche Tests. Durch geschicktes Software Testing können Fehler rechtzeitig erkannt und behoben werden, wobei eine effektivere Fehlersuche durch die Implementierung von geeigneten Testszenarien seitens des Projektmanagements unterstützt wird.

Allein schon aus diesem Grund sollte das Entwicklerteam bereits parallel zur Entwicklung an das Testen denken. Der Kunde als Abnehmer der Software wiederum sollte beim Entwicklerteam anfragen, nach welcher Methode die Software oder deren einzelnen Module getestet werden. Wichtig sind dabei folgende Fragestellungen:

  • Wann testet der Entwickler? Womöglich erst kurz vor der Übergabe und Abnahme?
  • Gibt es ein eigenes Software Testing Team?
  • Werden fortlaufende Tests durchgeführt?

Software Testing in vier grundlegenden Testkategorien

Beim Software-Testing sollten Komplettanwendungen oder deren Teilkomponenten mindestens vier Testkategorien durchlaufen: Unit Testing, Integration Testing, System Testing und End User Testing. Diese Testeinheiten folgen einem systematischen Aufbau und sollten als Mindestanforderung in der Entwicklungsphase zur Anwendung kommen.

Unit Testing

Eine grundlegende Methode des Software-Testings kann bereits in einer frühen Entwicklungsphase angewendet werden: der Unit Test, bei dem einzelne Teilkomponenten des Sourcecodes oder einzelne Softwaremodule getestet werden. Zu diesem Zweck schreibt der Programmierer eigene Testroutinen, um die Funktionen auf Fehlerfreiheit zu überprüfen.

Die Vorteile liegen klar auf der Hand: Einzelne Komponenten können bereits in Frühphasen detailliert getestet werden; dies zu einem Zeitpunkt, wo noch eine schnelle Fehlersuche im Quelltext möglich ist. Gleichzeitig kann eine konsequente Trennung von Source- und Testcode umgesetzt werden.

Des Weiteren können Testroutinen auf Wiederverwendbarkeit angelegt werden, was das Testverfahren effizient gestaltet. Und nebenbei ergibt sich dadurch der Effekt, dass der Entwickler von vornherein ein überlegteres und planvolleres Vorgehen anwendet.

Integration Testing

Aufbauend auf die Unit Tests folgen nun die Integrationstests. Hierbei werden nicht mehr die einzelnen Komponenten als solche getestet, sondern deren Abhängigkeiten untereinander.

Dieses Verfahren bildet einen Schwerpunkt des Software-Testings: Schnittstellen und die Ergebnisse von gesamten Abläufen werden auf die fehlerfreie Zusammenarbeit der einzelnen Komponenten untereinander getestet. An dieser Stelle können z. B. Fehler bei der Übergabe von Variableninhalten oder Denkfehler bei der Entwicklung des Prozessablaufs zutage treten.

Die wesentlichen Gründe für das Integration Testing liegen darin, dass festgelegte Funktionsfolgen durchlaufen werden sowie Abhängigkeiten von Komponenten untereinander sowie deren Zusammenspiel geprüft werden können. Darüber hinaus verbessert sich auch die Kommunikation zwischen verschiedenen Entwicklerteams.

System Testing

Der nun folgende Testabschnitt besteht aus dem Systemtest. Hier wird überprüft, ob alle gewünschten Anforderungen an die Software enthalten sind. An dieser Stelle tritt der klassische Fall ein, in dem ein Pflichten- oder Lastenheft abgearbeitet wird. In einer vorab festgelegten Testumgebung wird das System Testing durchlaufen, um sämtliche funktionalen und nicht-funktionalen Anforderungen auf deren Vorhandensein und Fehlerfreiheit zu überprüfen.

Die funktionalen Anforderungen betreffen die eigentlichen Funktionen der Software, wogegen nicht-funktionale Anforderungen Dinge betreffen wie Usability, Performance, Betriebssicherheit und Wartbarkeit des Sourcecodes.

Meist sind nicht-funktionale Anforderungen aufgrund ihrer Abstraktheit schwerer zu testen als die Funktionen selbst. Die Testumgebung ist in aller Regel der Produktivumgebung beim Kunden nachgebildet. Hauptvorteil des System Testing ist die Vorbereitung zur Abnahme des Produktes durch den Kunden. Weiterhin kann während dieser Testphase die Hauptarbeit der Dokumentation aller einzelnen Softwarekomponenten geleistet werden.

End User Testing

Am Ende der grundlegenden Tests steht die Abnahme der Software durch den Kunden. Hierbei testet der Kunde selbst das finale Produkt. Der Endabnehmer geht bei seinen Tests meist intuitiv vor, um vor Bezahlung der Schlussrechnung zu kontrollieren, ob alle bestellten Funktionen enthalten und fehlerfrei sind.

An dieser Stelle nimmt der Kunde sein gutes Recht in Anspruch zu überprüfen, ob wirklich geliefert wurde, was er bestellt hat. Meist verwendet der Kunde bei seinen Tests Datenbestände des eigenen Unternehmens, um echte Produktionsabläufe zu simulieren.

Es wird übrigens empfohlen, dass auch die Softwareentwickler bei ihren Testläufen möglichst mit Kundendaten (oder zumindest mit realitätsnahen Daten) arbeiten sollten. Sobald dieser finale Test erfolgreich durchlaufen ist, ist aus juristischer Sicht der Vertrag erfüllt und die Software kann als geliefert betrachtet und übergeben werden.

Weitere Methoden des Software-Testings

Ein Software Testing kann im Entwicklungsverlauf weitere spezielle Testverfahren durchlaufen. Hier einige häufig genutzten Methoden:

  • Smoke Testing – diese Testform wird in der Regel im frühen Alphastadium eingesetzt, noch bevor ein neues Release freigegeben werden kann. Der Test umfasst absolut grundlegende Funktionalitäten, z. B. auch im Benutzerinterface. Vorhandene Funktionen werden auf ihre Lauffähigkeit getestet. Scheitert ein Test, braucht dieser nicht weiter fortgesetzt zu werden, da offensichtlich ist, dass noch grundlegende Fehler sowohl in funktionaler als auch in nicht-funktionaler Hinsicht vorhanden sind.
  • Gorilla Testing – bei dieser Methode wird die Software in ihrem aktuellen Stand einem Brachialtest unterzogen und auf ihre Reaktionen getestet. So werden z. B. bewusst fehlerhafte Daten eingesetzt und beobachtet, ob dadurch möglicherweise Inkonistenzen entstehen. Eine weitere Möglichkeit besteht darin, alle möglichen (und unmöglichen) Tastenkombinationen durchzugehen. Ein typisches Anwenderverhalten ist beispielsweise das Ablegen eines Aktenordners auf die Tastatur und dadurch entstehende chaotische Zeicheneingaben.
  • Installation Testing – hier geht es darum zu ergründen, ob eine Installationsroutine auf allen vorgesehenen Hardware- und Betriebssystemplattformen einwandfrei durchlaufen werden kann. Es werden auch Verhaltensweisen bei einem bewusst herbeigeführten Installationsabbruch überprüft.
  • Performance Testing – wie der Name schon sagt, wird die Anwendung darauf getestet, ob sie unter den Mindestanforderungen an Hardware-Ressourcen (Prozessor, RAM, Speicherplatz usw.) einwandfrei läuft. Bei diesem Verfahren finden sich häufig Möglichkeiten, den Sourcecode auf schnellere Funktionsabläufe hin zu optimieren.
  • Regression Testing – bei diesem Verfahren wird eine Testreihe ständig wiederholt, um zu gewährleisten, dass bereits getestete Komponenten keine neuen Fehler verursachen. Diese können durch Korrekturen abhängiger Teil-Komponenten oder durch Wartung und Pflege entstehen.

Fazit

Der niederländische Informatiker Edsger W. Dijkstra hat einmal die These formuliert, dass das Testen von Software zwar das Vorhandensein von Fehlern aufzeigen kann, jedoch nicht deren Nichtvorhandensein.

Damit sind wir wieder bei dem Eingangssatz dieses Beitrages angelangt: Fehlerfreie Software kann es nicht geben – dies allein schon aufgrund der Tatsache, dass ein Entwickler niemals sicher sein kann, ob nicht schon in seinen Entwicklerwerkzeugen (Compiler, Bibliotheken usw.) Fehler enthalten sind.

Hauptgrund ist aber sicherlich der, dass alle Funktionen und auch alle denkbaren Datenwerte in allen Kombinationen getestet werden müssten, was in der Praxis kaum möglich ist. Daher muss Software Testing immer zum Ziel haben, mit einer möglichst kleinen Anzahl von Testfällen eine möglichst breite Testabdeckung zu erreichen.

Interessante Beiträge:
Tipps zur Qualitätssicherung mit Software Testing
Welche Arten von Software Tests es gibt

Bilder: Canva


Der Autor: Sascha Thattil arbeitet bei YUHIRO und hilft Unternehmern und Unternehmen beim einfachen Aufbau von Programmier-Teams in Indien. YUHIRO ist ein deutsch-indisches Unternehmen welches IT Firmen, Agenturen und IT Abteilungen Softwareentwickler bereitstellt.

Schreibe einen Kommentar