Buster.JS

JavaScript umfangreich testen

01.10.2013
Von 
Detlef Romanowski ist Bereichsleiter Software-Factory beim Software- und Beratungsunternehmen PPI.
Häufig mogelt sich JavaScript ungetestet in Anwendungen. Mit dem Testmodul Buster.JS lässt sich die Skriptsprache im Browser und auf dem Server überprüfen.

JavaScript feiert dieses Jahr 18. Geburtstag - fristet aber ein Nischendasein. Die Skriptsprache wird vor allem für die Vereinfachung von HTML-Konstruktionen verwendet. In geschäftskritischen Produktionsumgebungen ist JavaScript hingegen nicht nur verpönt, sondern oft verboten. Niemand ist sich sicher, was in dem von Browsern zu interpretierenden Programmcode steckt und welche unerwünschten Effekte auftreten könnten. Im gleichen Maße wie neue Programmiersprachen und Implementierungstechniken auftauchen, müssen Qualitätssicherer daher Anwender durch Softwaretests vor möglichen Folgeschäden bewahren.

JavaScript erschwert Softwaretests

Software wird häufig auf verschiedenen Ebenen getestet. Jeder Anwendungsentwickler, der einzelne Komponenten programmiert, muss sich zum Beispiel sicher sein, dass sein lokal entwickeltes Werk den Web-Anforderungen entspricht. Auf übergeordneter Ebene stellen Integrationstests dann sicher, dass die einzelnen Komponenten erwartungsgemäß zusammenwirken.

JavaScript-Komponenten müssen in Browsern wie auch auf dem Server getestet werden.
JavaScript-Komponenten müssen in Browsern wie auch auf dem Server getestet werden.
Foto: S. Gladwell, Fotolia.com

Ein weiteres Verfahren sind klassische Oberflächentests. Sie zeichnen die Bedienung einer Anwendung auf und vermerken die Änderungen. Entsprechen die Ergebnisse der Erwartung, gilt der Oberflächentest als erfolgreich. Benutzt die Anwendung jedoch JavaScript-Komponenten, steigt die Komplexität der Benutzeroberfläche und ihrer Funktionalität. Und die aufgezeichneten Bedienungswege des automatisierten Tests greifen oft ins Leere. Der Test gerät vollends ins Wanken, wenn neben dem Client-Browser viele unterschiedliche Browser in jeweils mehreren Versionen als Client dienen sollen.

Qualität früh sichern

Wer einzelne Anwendungsteile in Java entwickelt, sichert sich mit Unit-Tests ab. Moderne Entwicklungsumgebungen bieten eine gute Unterstützung. Softwareentwickler verwenden Unit-übergreifend Testtreiber, um größere Komponenten auch im Zusammenspiel zu überprüfen. Bei JavaScript hört diese Unterstützung jedoch auf. Der JavaScript-Code kann erst im Browser getestet werden, entsprechend nehmen Entwickler die Auswirkungen erst im Systemtest wahr. Dieser Systemtest, der üblicherweise zum Schluss ausgeführt wird, prüft, ob Anwender mit der Software das erwünschte Ziel erreicht haben. Alle technischen Zwischenschritte, die dafür erforderlich sind, spielen in diesem Stadium keine Rolle.

Das ist mitunter ein Grund dafür, warum viele Entscheider mit Unbehagen auf JavaScript reagieren. Oftmals verbieten schon die Browsereinstellungen die Ausführung der Skriptsprache. Manche Entwickler verlagern daher das Schreiben von JavaScript in eine andere Instanz. Die Entwicklung basierend auf dem Google Web Toolkit (GWT) wäre ein Ansatz, da es die Übersetzung nach JavaScript übernimmt. Jedoch unterstützt GWT nicht alle Browser. Zudem begibt sich der Entwickler durch die weitere Abstraktionsschicht in die Hand eines anderen Werkzeugs, was potenzielle Fehlerquellen und Folgekosten mit sich bringen kann.

Test von JavaScript

Seit dem Aufkommen der asynchronen Datenübertragungstechnik Ajax und dem sich abzeichnenden Standard HTML5 ist JavaScript ein Thema. Die Möglichkeiten der optischen und funktionalen Anwendungsgestaltung sind verlockend. JavaScript hat zudem die Chance, künftig zur "Lingua franca" der Anwendungen zwischen mobilen Endgeräten, klassischen Desktopsystemen und Servern zu werden. Es bietet die Chance, für alle Plattformen einen einheitlichen Programmcode zu verwenden. Dafür ist es sinnvoll, neue Standardprozesse zu entwickeln. Softwarekomponenten sollten nach Veränderungen in den Testfallsammlungen stets regelmäßig geprüft werden. Diese Tests müssen zudem reproduzierbar sein. Denn je länger eine Anwendung lebt und sich weiterentwickelt, desto wichtiger wird die funktionale Kontinuität.

Ein Werkzeug zum Unit-Testen von JavaScript ist Buster.JS. Das Testmodul eignet sich für Browser und die serverseitige Open-Source-Plattform Node.js. Buster.JS unterstützt Tests mittels statischer HTML-Seiten, wie sie QUnit nutzt sowie das Testen von asynchronem Code wie Mocha. Darüber hinaus kann es wie JsTestDriver die Browser-Bedienung automatisieren. Das Tool verfügt somit über eine große Anzahl an Funktionen und ist dennoch einfach zu bedienen. Erfinder von Buster.JS ist Christian Johansen, der das Buch "Test-Driven JavaScript Development" geschrieben hat. Vom norwegischen Entwickler stammt auch das beliebte Stubbing- und Mocking-Framework Sinon.JS und das JavaScript-Werkzeug Juicer. Aktuell befindet sich Buster.JS noch im Beta-Stadium - die finale Version 1.0 ist für dieses Jahr geplant.