Testautomatisierung

8 Tipps für Ihre Testautomatisierung

   Software-TestingTestautomatisierung

Testautomatisierung ist Software-Engineering: Sie müssen sauber planen, die Tools beherrschen und exzellenten Code erzeugen, warten und weiterenwickeln. Setzen Sie denselben Maßstab an wie für Ihren Produktionscode. In acht Praxis-Tipps haben wir unsere Erfahrungen für Sie zusammengefasst.

1. Entscheiden Sie, was Sie automatisieren wollen

Sie können Ihre funktionalen Testfälle automatisieren, Sie können automatisiert Security-Tests durchführen. Sie können Ihr System auf verschiedenen Abstraktionsebenen testen. Bei Lasttests bleibt Ihnen vielleicht gar keine andere Wahl als den gleichzeitigen Zugriff von mehreren tausend Nutzern auf Ihr System mit einem Tool zu simulieren. Sie können Automatisierung auch in der Testfallerstellung einsetzen, wenn Sie bestimmte Voraussetzungen erfüllen.
Die erste Falle bei Ihrer Testautomatisierung ist also nur an die funktionale Testdurchführung zu denken. Sie haben Glück, denn Sie haben viel mehr Möglichkeiten. Entscheiden Sie, welche Testautomatisierungen Ihnen am meisten weiterhelfen und setzen Sie diese um. Was Ihnen nicht hilft, lassen Sie am besten sein, auch wenn es technisch möglich ist.

2. Wählen Sie die richtigen Tools für Ihr Projekt aus

Sie werden schnell feststellen, dass Sie in der Regel mehr als ein Tool für Ihre Testautomatisierung brauchen, auch wenn Sie Spezialfälle wie Last- und Performance-Tests ausklammern. Für eine klassische Webanwendung mit Client-Server Architektur in JAVA erstellen die Entwickler beispielsweise automatisierte Komponententests mit jUnit, die Schnittstelle zwischen Client und Server lässt sich mit soapUI testen, und für die Oberflächentests ist Selenium ein weit verbreitetes Tool. Hier sind alleine schon drei Automatisierungstools im Einsatz - und es gibt noch viele weitere. Überlegen Sie, welche Anforderungen die einzusetzenden Tools für Sie erfüllen müssen und suchen Sie gezielt Tools aus, die für Sie passen.

3. Überlegen Sie, wer Ihre Automatisierung benutzt

Machen Sie sich Gedanken darüber, wer die Testautomatisierung später hauptsächlich benutzen und auswerten wird. Sie vereinfachen den Anwendern die Tool-Nutzung, wenn sie ihre Anforderungen berücksichtigen. Viele Testautomatisierungen werden tatsächlich von Entwicklern benutzt, insbesondere natürlich im Komponententest. Aber auch Schnittstellen- oder Oberflächentests können von Entwicklern angestoßen werden. In solchen Fällen sollten die verschiedenen Testautomatisierungen aus der Entwicklungsumgebung heraus gestartet werden können. Das erspart Entwicklern einen unnötigen Tool-Wechsel.

Fachexperten tragen Wertvolles zum Design der automatisierten Testfälle bei. Insbesondere Oberflächen-Testfälle werden oft von Experten entworfen. Die erstellten Test-Skripts sollten dann für Nicht-Entwickler zumindest lesbar sein. Am besten bieten Sie Fachexperten eine Möglichkeit an, wie sie direkt automatisierte Testfälle mitentwickeln können, etwa über  Tools wie Fitnesse. Oder Sie setzen Techniken wie Keyword Driven Testing oder Behaviour Driven Development ein.

4. Achten Sie auf die Verteilung Ihrer Tests

Das Beispiel mit der Webanwendung aus Tipp zwei zeigt, dass Testautomatisierung nicht nur aus ausgeführten Oberflächentests besteht. Vieles scheinbar Unsichtbare kann getestet werden, nämlich die Komponenten- und Schnittstellentests.
Alle Testebenen haben ihre Vor- und Nachteile, zum Beispiel testen Komponententests einzelne, isolierte Klassen und Methoden. Dadurch sind sie sehr schnell, sehr robust und einfach zu erstellen, ihre Aussagekraft über das Gesamtsystem ist aber begrenzt. Oberflächentests haben die größte Aussagekraft über das Gesamtsystem, weil sie auf das komplette System angewendet werden und oft so genannte End-to-End-Tests sind. Das macht sie auch vergleichsweise schwierig in der Erstellung, langsam in der Ausführung und pflegeintensiv.

In Ihren Projekten sollten Sie alle Testebenen verwenden. Eine gesunde Verteilung gleicht einer Pyramide mit sehr vielen Komponententests, weniger Schnittstellentests und noch weniger End-to-End-Tests. So erhalten die Entwickler durch die schnellen Komponententests Feedback auf jede Codeänderung, die sie durchführen, und gleichzeitig können automatisierte End-to-End-Tests sicherstellen, dass die wichtigsten Anwendungsfälle des Systems noch funktionieren.

Wenn Sie Ihre Testautomatisierung jetzt noch in Ihre Continuous Integration eingliedern, sind Sie jederzeit auf dem Laufenden.

5. Testautomatisierung ist keine Insel

Es liegt in der Natur einer Testautomatisierung, dass sie nicht alleine stehen kann. Ihr Zweck ist, eine andere Software zu testen. Die zu testende Software wird selbst wieder Abhängigkeiten haben, zum Beispiel zu Datenbanken oder Partnersystemen. Sie müssen bei Ihrer Testautomatisierung also auch daran denken, wie Sie mit diesen Abhängigkeiten umgehen: Woher beziehen Sie Ihre Testdaten? Wie gehen Sie mit Daten um, die nach einer Verwendung verbraucht sind und beim zweiten Durchlauf der Testautomatisierung nicht wiederverwendet werden können?
Wenn Sie Testautomatisierung in einem seit langem laufenden Projekt einführen wollen, kann die zu testende Software Ihnen das Leben schwermachen. Zu enge Kopplung der Klassen kann den Einsatz von Komponententests erschweren, Oberflächenelemente können nicht eindeutig erfasst werden. Bereiten Sie sich darauf vor, Änderungen an Ihrem System durchzuführen, um die Testbarkeit zu erhöhen. Achten Sie gleichzeitig darauf, die Komplexität des Systems nicht unangemessen zu erhöhen.

6. Lassen Sie Ihre Automatisierung nicht unkontrolliert wachsen

Die Verlockung ist groß, die Tools mächtig: Viele Automatisierungsprojekte wachsen im Laufe der Zeit immer weiter und erreichen selber eine enorme Komplexität. Hüten Sie sich davor, komplexe Fachlogik in der Automatisierung nachzubauen, um die Software zu testen. Machen Sie aus Ihrer Testautomatisierung keine vollintegrierte Plattform für alle Projektbeteiligten, wenn Sie nicht müssen. Sie haben sich vorher gut überlegt, was Sie von Ihrer Lösung erwarten. Setzen Sie genau das um. Nicht weniger und auch nicht mehr.  

7. Testautomatisierung ist Software Engineering

Testautomatisierung entsteht nicht auf Knopfdruck, auch wenn diverse Capture- und Replay-Tools den Eindruck vermitteln. Es entstehen Testskripte und damit ausführbarer Code. Der Code muss modular aufgebaut sein, um erweitert werden zu können. Lesbarer Code macht verständlich, was genau getestet wird. Wartbarer Code vermeidet eine Kostenexplosion.
Sie merken: Das ist echtes Software Engineering. Stellen Sie deshalb an den Code Ihrer Testautomatisierung dieselben Ansprüche wie an Ihren Produktionscode. Testen Sie ihn, lassen Sie statische Codeanalysen laufen, machen Sie Reviews und verlangen Sie von einem Testautomatisierer, dass er Software Engineering beherrscht.

8. Prüfen Sie Ihre Erwartungen

Die meisten Testautomatisierungen scheitern an falschen Erwartungen. Zum Beispiel der, dass alle Tests schnell und einfach zu automatisieren sind und ein manueller Tests nicht mehr nötig ist. Das wird oft nicht der Fall sein. Häufig werden die Wartungskosten der Testautomatisierung unterschätzt: Entweder wird keine Zeit für Wartung und Weiterentwicklung eingeplant oder die gewählte Lösung ist nur schwer anpassbar. Beides führt schnell zu veralteten Testfällen und zu Misstrauen gegenüber dem Testergebnis.
Machen Sie sich klar, was Sie von einer Testautomatisierung erwarten können. Planen Sie laufende Kosten mit ein, damit Sie am Ende nicht böse überrascht werden.

Zurück zu den Praxis-Tipps

Abbildung: © kirstypargeter / fotolia.com

Sie möchten mehr wissen? Wir helfen gerne weiter.

Rufen Sie Sven Schirmer in München an unter 089 544 253 051