Testautomatisierung
Ein unverzichtbarer Bestandteil agiler Entwicklung
Agile Arbeit fördert flexibles, dynamisches und unkompliziertes Arbeiten mit einem möglichst geringen Aufwand an Bürokratie. Der Mensch und die Kommunikation stehen im Mittelpunkt. Ergebnisse bedeuten mehr als Dokumentationen. Einen direkten Draht zum Kunden herzustellen sowie stets flexibel zu reagieren ist wichtiger, als stur an einem Plan festzuhalten. Agil Software zu entwickeln bedeutet in kurzen Iterationen, zusammen mit Kollegen und Kunden, das Endprodukt stetig zu verbessern. Warum automatisierte Tests ein fester Bestandteil der Softwareentwicklung sind, möchte ich in diesem Artikel erläutern.
Wichtigkeit des Testens
Der Test nimmt eine wichtige Stellung in der Softwareentwicklung ein. Ein qualitativ hochwertiges Produkt muss verschiedene Testebenen, wie Komponententests, Integrationstest und fachliche Tests durchlaufen. Bei Agiler Arbeit liegt, wie oben erwähnt der Fokus auf kurzen Entwicklungs-Iterationen, die ebenfalls kurze Test-Iterationen erfordern. Um die verschiedenen Teststufen durchführen zu können ohne zeitlich in Bedrängnis zu geraten, ist es notwendig verschiedene Tests schneller und mit leichter Wiederholbarkeit auszuführen. Je komplexer die Software ist, desto größer ist die Bedeutung der Testautomatisierung. Testautomatisierung allein kann ab einer gewissen Komplexität der Entwicklung gewährleisten, dass sich sowohl Testabdeckung als auch Testtiefe in einem zufriedenstellenden Rahmen befinden.
Der Irrtum automatisierter Tests
Die Tücke bei automatisierten Tests ist, dass diese lediglich den manuellen Aufgabenteil eines Softwaretesters übernehmen können. Hinter sauberen und zuverlässigen Tests steckt aber genauso kreatives intuitives Denken und cleveres Handeln. Auf keinen Fall sollte man Testautomatisierung als Wegrationalisierung eines Testers sehen, vielmehr als ein kaum wegzudenkendes Werkzeug für diesen. Während er sich durch automatisierte Prozesse nicht mehr stundenlang durch neue Entwicklungen seiner Firma durcharbeiten muss, bleibt für diesen mehr Zeit für den intellektuellen Part des Softwaretests. Er kann besser und konzentrierter testen anstatt in einer riesigen Testmenge zu versinken. Natürlich ist Testautomatisierung auch nicht immer sinnvoll, wie z.B. bei kleinen Übergangsprogrammen. Je langlebiger und komplexer die Software jedoch ist, umso mehr Kosten und Mühen spart Testautomatisierung auf Dauer ein.
Selenium als Allzweckwerkzeug
Werkzeuge zur Testautomatisierung gibt es jede Menge. Selenium ist wohl eines der bekanntesten, gerade im Bereich von Websites und deren Benutzeroberfläche. Selenium bietet für Projekte unterschiedlicher Größe und Anforderung verschiedene Tools.
Selenium als Browser-Plugin
Bei der Selenium IDE handelt es sich um ein Browser Add-On, das es einem ermöglicht Klicks, Tastatureingaben und Bewegungen auf der Website aufzunehmen. Später kann man die aufgenommenen Aktionen erneut abspielen und erhält so einen beliebig oft ausführbaren Test. Da die Aufnahme jedoch manuell sehr aufwendig ist, das Add-On nur für die Browser Chrome und Firefox zur Verfügung steht und keine Möglichkeit zur Dokumentation der Tests besteht, ist das Browser-Plugin nur für kleinere Projekte oder den Einstieg geeignet.
Selenium WebDriver – Wenn Websites plötzlich selbstständig werden
Der Selenium WebDriver hingegen fungiert als Programmierschnittstelle für den Browser, ist mit den gängigsten Browsern kompatibel und unterstützt viele verschiedene Programmiersprachen, darunter JavaScript, Python, Ruby, u.v.m. Tests können in einem beliebigen Code-Editor z.B. Visual Studio programmiert werden und über den WebDriver wird dann der Browser angesprochen. Bei jedem neuen Aufruf des geschriebenen Tests öffnet sich ein neues Fenster, in dem sich nun die Website selbstständig macht und den Test durchläuft. Ein großer Vorteil gegenüber des Add-Ons liegt vor allem in der Parametrisierbarkeit des Tests. Die Testabdeckung kann deutlich schneller und einfacher erhöht werden.
Cucumber, alles andere als eine Gurke
Da dieses Testen aber dennoch keine übersichtliche Dokumentation der erledigten Arbeit liefert, gibt es für verschiedene Programmiersprachen (Ruby, Java, C++, …) ein Werkzeug namens Cucumber. Dieses ermöglicht ein sehr einfaches Schreiben und Lesen der Testfälle und erzeugt bei Ausführung der Tests außerdem eine gut lesbare Dokumentation. In Cucumber werden Tests in der Sprache Gherkin geschrieben und anschließend in die entsprechende Programmiersprache übersetzt. Gherkin enthält im Wesentlichen die Befehle Given, When und Then, durch die dann die optimale Funktionalität der Software durch Gegebenheiten (Given), ausgeführte Aktionen (When) und gewolltes Ergebnis (Then) beschrieben wird. Da direkt das gewünschte Verhalten der Software ausformuliert wird, ist Cucumber ein sehr gutes Tool für Behaviour-Driven-Development. Die Dokumentation enthält dann die einfachen Sätze der Cucumber-Programmierung und ist daraufhin für jeden nachvollziehbar.
Selenium-Cucumber ein zuverlässiges Doppelpack
Die Ruby-Erweiterung Selenium-Cucumber übernimmt die Übersetzung der Cucumber-Tests in die entsprechende Programmiersprache. Anstelle beliebiger Sätze, wie zuvor in Cucumber, gibt es nun ein definiertes Befehlsset, das selbständig in einen ausführbaren Testfall „übersetzt“ wird. Der Schreibaufwand auf Seiten von Cucumber wird natürlich größer und unverständlicher, die anderweitige Programmierung entfällt jedoch ganz. Durch dieses Zusammenspiel von Selenium-Cucumber ist es möglich ohne tiefergreifende Programmierkenntnisse, automatisierte Testfälle zu schreiben. So können Product Owner die Anforderungen an das Endprodukt selbst verlustfrei in den Test packen.
Unsere ersten Schritte sind vollbracht
Die Kombination aus Selenium WebDriver, Selenium-Cucumber und Ruby o.a. erlaubt es uns die ersten Schritte in Richtung Testautomatisierung zu gehen. Neben dem einfachen Schreiben der Tests und der guten Dokumentation im html-Format, ist durch den Selenium WebDriver außerdem eine breite Testabdeckung in verschiedenen Browsern möglich.
Wie geht es weiter: Testautomatisierung ein Muss
Testautomatisierung ist in einem agilen Umfeld ein Muss. Je einfacher die Tests und je häufiger sie durchgeführt werden müssen umso wichtiger ist Automatisierung. Automatisierung ersetzt jedoch keinen Tester sondern erleichtert und verbessert seine Arbeit, gibt ihm mehr Freiraum für Tests, die nicht automatisiert werden können (z.B. UX/UI-Tests). Im Zuge stetiger Verbesserung sollte jedes Softwareunternehmen automatisierte Tests anwenden. Nur so kann es gelingen den hohen Anforderungen und dem Zeitdruck der heutigen Zeit zu genügen.
Quellen: Buch: Seidl, Richard/Baumgartner, Manfred/Bucsics, Thomas (2011), Basiswissen Testautomatisierung (2. Auflage), Heidelberg, dpunkt.verlag