Testautomatisierung Software

Testautomatisierung – modernes Debugging in der Software Entwicklung

Der Begriff Testautomatisierung umfasst alle automatisierten Testaktivitäten und -verfahren, die im Bereich der Software Entwicklung und der damit verbundenen Qualitätssicherung zum Einsatz kommen. Die entwickelte Software wird also im Rahmen der Testautomatisierung mit individuell angepassten Testing-Tools geprüft. Solche Tools könne entweder speziell für die zu prüfende Software programmiert werden oder auf dem Markt als Testautomatisierungstool gekauft werden oder teilweise auch kostenlos als Open-Source Varianten genutzt werden.
Ein Testautomatisierungstool für einen GUI-Level Test für eine Android App wäre z.B. Appium. Am Beispiel würde das Tool die zu testende App installieren, starten und mit dem durchlaufen eines Testfalls nach vordefinierter Reihenfolge beginnen. Alle auftretenden Abweichungen vom festgeschriebenen Verhalten der Darstellung werden vom Tool als solche aufgenommen und abgespeichert. Anomalien der zu testenden Software können so automatisch gefunden werden.

Nach der Durchführung der Automatisierten Tests ist es erforderlich das ein geschulter Mitarbeiter das protokollierte Ergebnis überprüft und Abweichungen manuell überprüft und im Fall eines realen Fehlers diesen als Bugs für das Team aufnimmt. Eine manuelle Nachprüfung von Anomalien welche durch ein Testautomatisierungstool auftreten ist notwendig da Fehler auch beim schreiben der Testfälle entstanden sein könnten oder ein Fehler im Tool selbst vorliegt.

Als Schnittstellen für die Testautomatisierung werden GUI Level, API Schnittstellen (zum Beispiel HTTP) und Unit-Tests auf Codeebene (bzw. Modul- oder Komponententests) verwendet.

Wann ist eine Testautomatisierung empfehlenswert?

Automatisierte Tests sind nicht für jede Entwicklungsmethode von Software empfehlenswert. Testautomatisierung lohnt sich vor allem bei der Programmierung von komplexer Software, da hierbei eine Vielzahl von Regressionstests zum Einsatz kommt. Schon bei wenigen Regressionstests überwiegen die Vorteile von Testautomatisierung dem manuellen Testing massiv.

Testautomatisierung ist hingegen ein schlechte Wahl, falls während der Entwicklung große Teile des Code oder der Strukturen häufig verändert werden. Dies trifft vor allem bei MVP (Minimal Viable Product) Ansätzen zu. Automatisierte Tests für solche Projekte sind eine schlechte Wahl, da die Testskripte mit jeder Softwareveränderung auch angepasst werden müssen und dies dort täglich geschehen kann.

Im Bereich der Agilen Entwicklung ist die Testautomatisierung heutzutage kaum wegzudenken. In diesem Bereich der Softwareentwicklung sind sich fast alle Entwickler und Tester einig, dass automatisierte Tests eine hilfreiche Ergänzung für kurze Iterationen ist. Mit der Testautomatisierung kann die Software zum Beispiel während der Nacht getestet werden. Außerdem kann nach jeder Aktualisierung des Codes automatisiert Testdurchdurchläufe für eine automatisch erzeugte Version des aktuellen Codestands der Software durchgeführt werden.

Wenn man nach jedem Code-Check-In automatische Tests und einen automatischen Build-Prozess einleitet, spricht man von einer “Continuous Integration”. Dieser Bereich des Testings hat in den letzten Jahren vor allem für die Entwicklung von agilen Methoden an Relevanz gewonnen. Wenn nach dem Code-Check-In ein automatischer Software-Build und ein Installationsprozess ausgeführt wird, spricht man von einer “Continuous Delivery”. Nach dem Installationsprozess wird die Software von mehreren Unit Tests überprüft. Somit erhalten Entwickler in relativ kurzer Zeit einen guten Überblick auf die derzeitige Qualität der Software.

Abgesehen von dieser Testmethode gibt es noch End-To-End Systemtests (automatisierte Tests welche auf der UI aufbauen) und Integrationstests auf API Ebene. Letztere können mit geringerem Zeitaufwand eingesetzt werden und liefern dem Team sehr schnell das benötigte Feedback. Der Prozentanteil der automatisierten GUI-Tests sollte in der Testautomatisierung sehr viel geringer sein als der Anteil der API-Tests welche wiederum zusammen noch immer weniger sein sollten als die durchgeführten Unit-Tests.

Wie unterstützt die Testautomatisierung die Software Entwicklung?

Die Testautomatisierung trägt überraschenderweise kaum zur Beschleunigung des Entwicklungsprozesses bei. Die Hauptverwendungszweck sind die kontinuierliche Qualitätssicherung der Software, die Revisionssichere Dokumentation der Testergebnisse und die einfache und unproblematische Wiederholbarkeit der ausgeführten Testdurchläufe. Automatisierte Tests verkürzen definitiv die Entwicklung, da man Fehler welche durch manuelles Testen nur zufällig gefunden würden, in der Software früher entdeckt und beheben kann. Die Softwarequalität spielt im Endeffekt aber die größte Rolle.

Die Testautomatisierung bietet bei der Entwicklung von Software mit vielen Regressionstests eine Zeit- und Kostenersparnis. Nachdem die automatischen Tests erstellt werden, prüfen und analysieren tausende Testskripte den Code. Mit manuellen Tests würde für das Testen mehr Arbeitskraft und sehr viel mehr Zeit benötigt werden. Große Softwareprojekte, dennen eine hohe Komplexität innewohnt, können heutzutage gar nicht mehr rein manuell getestet werden. Die Testautomatisierung ist somit unverzichtbar.

Die Effektivität von Automatisierten Tests im Vergleich zu menschlichen Testern ist natürlich immer abhängig von der zu testenden Software. Generell ist es jedoch klar, dass der menschliche Tester aufgrund von vernachlässigter Dokumentation, Betriebsblindheit oder Routine Fehler übersehen wird. Vor allem wenn die Ausführung von Regressionstest ansteht die sehr ermüdend sind.


Testskripte können aber natürlich auch Fehler haben und es kommt auch vor, dass Testautomatisierungstools Bugs vorweisen. Zudem kann vergessen werden die Testautomatisierung bei Softwareänderungen entsprechend anzupassen, z.B. bei geänderten Akzeptanzkriterien. In solchen Fällen testet die Software zwar aber das es wird das “falsche” überprüft. Dadurch entstehen false positives welche händisch eliminiert werden müssen. Einem manuellen Tester fallen solche false positives durch die Erfahrung mit der Software meist leicht auf. Ein Testskript kann immer nur das zu definierende abtesten nicht mehr und nicht weniger.

Eine Testautomatisierung sollte also niemals den kompletten manuellen Test ersetzen! Empfehlenswert ist eine effektive Kombination aus Testautomatisierung und manuellen Tests. Den jeweiligen Anteil dieser Testarten sollte man je nach Art des Software-Projekts bestimmen. Ein großes und komplexes Projekt benötigt zum Beispiel für gewöhnlich mehr automatisierte als manuelle Tests.

Aus welchen Tools besteht eine Testautomatisierung und wie kooperieren die Tools miteinander?

Der Softwaremarkt bietet Entwicklungsteams eine Vielzahl von kommerziellen und Open-Source Testautomatisierungs-Tools. Jede Testautomatisierung ist unterschiedlich aufgebaut. Es gibt Beispielsweise Tools, bei denen schon vorhandenen Testwerkzeuge so angepasst werden können, dass sie zur jeweiligen Software passen. Es gibt natürlich auch die Möglichkeit Testautomatisierungs-Tools und -Frameworks selbst zu programmieren. Die Entwicklung einer Testautomatisierung benötigt jedoch einen relativ hohen Erfahrungsgrad im Bereich Programmierung und Software-Testing sowie eine enge Kooperation zu den Projektverantwortlichen zur Klärung der Ziele für das eigene Framework.

Idealerweise muss nicht jede Arbeitskraft im Testautomatisierungs-Team Programmierfähigkeiten besitzen. Je nach Testanwendung gibt es auch die Möglichkeit die Tests mit Daten und Schlüsselwörtern fast vollständig zu automatisieren. Die Erstellung der Testskripte kann auch durch eine grafische Oberfläche (GUI) unterstützt werden oder durch eine vereinfachte Programmiersprache Namens Gherkin. Die gewünschte Granularität der Schlüsselworte sollte durch eine umfassende Analyse definiert werden.

Die Schlüsselwort-getriebene Testautomatisierung bietet vor allem Vorteile bei der Wartung. Die Wartung der Testautomatisierung wird oftmals unterschätzt, da das Testautomatisierungs-System ständig verändert werden muss. Ziel ist es hierbei die Testautomatisierung bei einer Veränderung in der zu testenden Software so wenig wie möglich anpassen zu müssen.

Betrachten wir zum Beispiel die “Login” Funktion einer App. Die Testbereiche für den “Login” umfassen eine Vielzahl von komplexen Testfällen. Falls es dann eine Änderung beim “Login” gibt, möchte man natürlich nicht alle die Testskripte anpassen. Dies kann durch eine gut strukturierte Gliederung der Testautomatisierung vermieden werden.

Die Testautomatisierung als eigenständiges Softwareprojekt

In vielen Unternehmen ist die Testautomatisierung leider noch stark unterbewertet. Automatisierte Tests können nicht in einigen Stunden programmiert und aufgesetzt werden. Die Implementierung und Konfiguration von automatisierten Tests ist ein fortlaufender Prozess der in der Entwicklung der eigentlichen Software eingeplant werden muss. Hierbei benötigt man unter anderem auch ein Sourcecode-Repository, sodass Änderungen an den Skripten des Automatiserungscodes dezentral und Revisionssicher abgelegt werden können, wie dies auch der Fall sein sollte beim Code der zu testenden Software.

Die Testautomatisierung muss also definitiv bei der Projektplanung der zu testenden Software berücksichtigt werden. Dazu zählen zum Beispiel das Budget, die Arbeitskräfte, die notwendigen Tools und die Arbeitsumgebung. Selbst Testautomatisierungstools haben manchmal Softwarefehler. Deshalb sollten Bugs bei Softwareprojekten in einem Bug-Tracking-Tool (Defect-Management-Tool) verzeichnet werden. So können die Bugs schnellstmöglich behoben werden.

Effektive Testautomatisierung für Software Development bei Critical QA

Florian Hemmann gründete im März 2019 das Unternehmen Critical QA. Die Firma ist spezialisiert auf Dienstleistungen im Bereich der Software Qualitätssicherung. Dazu zählt auch eine individuell konfiguriert Testautomatisierung. Je nach Wunsch können alle möglichen Arbeitsabläufe in Ihren Software-Entwicklungsprozess integriert werden.