software_and_testing_logo
software_and-testing_softwareentwicklung_logo

Software Testing

Testklassifikation

Statische Tests

Die statischen Art von Tests passieren ohne Ausführung des Programms. Daher ist es nicht notwendig die Software auf dem Endgerät abspielen zu müssen. Die statische Codeanalyse sollte in jedem Softwareprojekte in der Planung berücksichtigt werden und in der Continuous Integration eingebunden sein, damit diese mit jedem Software Build laufen kann. Zudem zählt hier auch das Peer-Review dazu, um mindestens ein vier Augen Prinzip zu erfüllen.

Dynamische Tests

Bei dieser Art von Test ist die Ausführung des Programms zwingend. Dabei werden mehrere Typen von Testarten unterschieden

Funktionaler Test

Diese Testart beschreibt die Erbringung des Nachweises das eine Spezifikation des Produktes auch implementiert wurde und korrekt Funktionalität bietet.

Nicht-funktionaler Test

Die Nicht-funktionalen Tests haben keine Spezifikation welche erfüllt sein muss, dennoch sind diese für die Entwicklung von Software und Hardware im höchsten Maße wichtig. Diese Testart sollte für stochastische Aussagen genutzt werden, damit Ausreißer nicht im produktivbetrieb auftreten. Für eine randomisierte Pfadabdeckung lassen Monkeytests optimal nutzen, hierbei werden willkürlich, mit oder ohne statischem Sequenzen, verschiedene Positionen an der grafischen Oberfläche betätigt.

Fehler Test

Die Fehler Tests dienen zur Verifizierung wie das Endgerät bzw. die Software mit provozieren und realen Fehlerszenarien umgeht. Dabei wird das korrekte verhalten sichergestellt. Regressionstests fallen auch in diese Kategorie und dienen zur Vermeidung von Fehlern, welche bereits aufgetreten sind .

Die Test-Pyramide

Die Test-Pyramide unterteilt sich in drei bis vier Testebenen. Damit eine vollständige und erfolgreiche Testabdeckung gewährleistet wird, sind diese Testebenen zwingend notwendig:

Akzeptanztest

Der Fokus von Akzeptanztests liegt auf der Sichtweise des Kunden bezogen auf das Produkt. Daher muss im Vorfeld definitiert werden, welche Anwendungsfälle aus Kundensicht relevant sind. Diese sind beispielsweise Bedienbarkeit, Lesbarkeit von Texten, Aktualisierbarkeit von Software oder Firmware sowie Interaktion mit Fehlermeldungen.

Systemtest

Der Systemtest zielt auf den Nachweis von Anforderungen aus der Spezifikation auf Systemebene ab. Das bedeutet die gesamte Kette durch das System für die jeweilige Funktionalität muss geprüft werden - damit alle Ebenen durchlaufen werden. Dieser Anteil sollte möglichst gering gehalten werden, da durchaus viele manuelle Tests notwendig sind und diese die Release-Phase verlangsamen könnten. Ein weiterer Punkt ist der Fokus auf einen hohen Automatisierungsgrad.

Integrationstest

Die Integrationstests stellen Testungen von Teilsystem dar, diese sind zwei oder mehrere beteiligte Komponenten. Die Anzahl dieser Tests sollte höher als die der Systemstests sein, aber weniger als Komponententests. Als Beispiel fallen in diesen Bereich Kommunikationsprotokolle und Funktionalität mehrerer Features, welche in einander greifen.

Komponentest

Die Kategorie Komponententest (Unittest) wird auf modularer Ebene realisiert. Hierbei werden einzelne Funktionen auf Code-Ebene, möglichst mit maximaler Pfadabdeckung, getestet. Diese Ebene sollte die größte Anzahl von Tests darstellen.

Test Automation

Damit die Release-Zyklen möglichst kurz sind, ist ein hohe Abdeckung der Testebenen von Test Automation unumgänglich. Die eingesparte Zeit sollte unbedingt mit explorativen Tests von erfahrenen Testpersonal genutzt werden. Die Praxis zeigt das nur der Blick links und rechts neue Fehler findet. Mit der Continous Integration können viele oder alle Tests mit jeder Buildversion laufen, dies gibt dem Productowner und dem Entwicklerteam eine gutes Grundgefühl für die Softwarequalität.