Automatisiertes Testen
Bei dem automatisierten Testen von Software und Webanwendungen geht es in der Regel darum, Abläufe, Prozesse oder Funktionen einmalig durch einen Testablauf nach zu bilden und dann regelmäßig automatisch auszuführen, z.B. nach jeder Änderung am Programmcode. So kann sichergestellt werden, dass einzelne Funktionen auch nach einer Änderung im Code noch funktionieren. Prinzipiell können aber auch Softwaretests – genauso wie manuelle, händische Tests – nie eine vollständige Fehlerfreiheit des Systems sicherstellen, da sie nur genau den Fall und den Abschnitt abdecken, für welchen sie gebaut wurden.
Verschieden Methoden in der Entwicklung
In der Entwicklung spricht man von verschiedenen Testarten, von welchen wir Ihnen einige heute kurz näher vorstellen wollen.
Unit Tests
Eine der bekanntesten und häufigsten Testmethoden sind die sogenannten Unit Tests, zu Deutsch auch Modultests. Hierbei wird ein Abschnitt einer Anwendung isoliert & gezielt getestet. Es geht dabei nur um den Test eines einzelnen Abschnitts und einer einzelnen Komponente. Das vollständige Testen eines Kontaktfomulars würde daher nicht darunterfallen, jedoch z.B. das Schreiben eines einzelnen Formularinhalts in ein Objekt, jedoch nicht darüber hinaus. Werden Funktionen aus verschiedenen Komponenten benötigt, werden diese i.d.R. durch Dummy-Objekte nachgebildet.
Integration Tests
Will man mehrere Komponenten miteinander Testen (z.B. das Empfangen der Daten aus dem Kontaktformular und das Versenden), spricht man von sogenannten Integrationstests. Diese können genutzt werden um die Kommunikation zwischen einzelnen Bestandteilen der Anwendung sicherzustellen.
Functional Tests
Bei Functional Tests werden einzelnen Funktionsanforderungen komplett von Anfang (Input) bis zum Ende (Output) getestet. Also z.B. das Empfangen der Daten aus dem Kontaktformular, schreiben in die Datenbank und versenden von Emails. Hier ist jedoch wieder zu berücksichtigen, dass wir nach wie vor vom Testen des Programmcodes sprechen. Wichtig: Es wird an dieser Stelle immer noch kein „echter“ Test auf einem „echten“ Webserver durchgeführt.
E2E Tests - End To End
Das vollständige Testen einer Funktion wird mit End To End Tests erreicht.
Diese sind jedoch aufwändiger zu entwickeln und kosten zudem viel Ausführungszeit. Der Browser wird so programmiert, dass er vom Testprogramm gesteuert wird, gewisse Aktionen auszuführen. Hierbei wird ein kompletter Test, samt Klicks, Formulareingaben, Login usw. simuliert und das Ausgabeergebnis geprüft.
Vor- und Nachteile
Jede der vorgestellten Methoden hat gewisse Vor- und Nachteile, dies ich häufig in dem Aufwand der Entwicklung und Ausführung ausdrücken. Deshalb spricht man hier auch von der sog. Testpyramide. Ganz unten – wenig Aufwand und hohe Automatisierbarkeit – stehen die Unit Tests. Ganz oben – großer Aufwand, lange Laufzeit und schwierige Automatisierbarkeit – stehen die E2E Tests.
Wichtig ist es, zu verstehen, dass Tests immer nur ein ganz spezielles Testszenario abdecken können, und zwar das, wofür sie programmiert wurden. Je granularer man jedoch auch schon kleine, belanglose Funktionen mit Unit Tests abdeckt, desto höher kann die Gesamtqualität des Grundsystems werden.
Es gibt natürlich auch noch weitere Testmethoden, die hier nicht vorgestellt wurden.
Realität
In der Praxis sehen leider viele Auftraggeber nicht, wie wertvoll die Entwicklung von Tests wirklich ist. Häufig wird hierfür kein oder wenig Budget eingeplant und dieses lieber in „mehr Funktionen“ gesteckt. Für eine gute Software ist das Entwickeln von Tests allerdings unerlässlich. Zugleich muss man allerdings auch sagen, dass die Entwicklung aufwändig und teuer sein kann. Es empfiehlt sich daher, zumindest einige Testmethoden für kritische Funktionen zu implementieren.