Suche

Test-Driven Development: Unit Tests mit Scala entwickeln

Ready for prime time?

Neben der Fülle an schönen neuen Sprachfeatures muss Scala auch durch gute Integration in bereits bestehende Java-Projekte bestechen, um wirklich überzeugen zu können. Das Scala-Plug-in für Maven [12] bietet z. B. eine einfache Möglichkeit, den Scala Compiler zu integrieren. Da der Compiler JVM Bytecode erzeugt, ist Scala-Code von Java-Code nach dem Kompilieren nicht mehr zu unterscheiden. Es spielt also demnach keine Rolle, ob Unit Tests in Java oder in Scala geschrieben wurden. Der Einsatz von Scala beeinträchtigt Continuous-Integration-Umgebungen keineswegs. Codeinstrumentierung und Analysen, z. B. die Ermittlung der Testabdeckung, können unverändert eingesetzt werden.

Ein verbreiteter Kritikpunkt der Scala-Gemeinde ist der noch nicht zufriedenstellende Reifegrad von Plug-ins für Entwicklungsumgebungen. Es existieren zwar Plug-ins für Eclipse, NetBeans und IntelliJ, diese bieten bei Weitem noch nicht denselben Komfort, den wir seit Jahren im Java-Umfeld genießen. Den Scala-Entwicklern wird vorgeworfen, einen zu starken Fokus auf die Sprache zu haben und das Tooling rund um die Sprache zu vernachlässigen. Scala Solutions, einer von Martin Odersky gegründeten Firma rund um Scala, will diesem Missstand entgegenwirken. Eine der Zielsetzungen der Firma ist es, die Entwicklung von Scala-Tools voranzutreiben, um eine noch weitere Akzeptanz der Sprache zu erreichen. Aber auch die Sprache selbst wird kontinuierlich weiterentwickelt. Für Anfang 2011 ist bereits das Release der Version 2.9 geplant, das vor allem durch parallele Collections überraschen will.

Immer wieder wird Scala enormes Potenzial und eine enorme Produktivitätssteigerung nachgesagt. Der Beweis dafür ist bis heute nicht erbracht worden. Das volle Potenzial einer Programmiersprache wird von Entwicklern meist erst nach mehrjährigem Einsatz voll ausgeschöpft. Die gepriesene hohe Produktivität kann somit für die noch relativ junge Sprache Scala heute noch nicht attestiert werden. Jedoch lassen sich schon heute Unterschiede zwischen Java und Scala erkennen.

Abb. 4: Codevolumen von Test Suites

Abbildung 4 stellt das Codevolumen einer Testsuite dar, die zuerst in Java und anschließend in Scala geschrieben wurde. Durch den Umstieg auf Scala-basierte Tests kann der Testcode um ca. ein Viertel reduziert werden. Jede eingesparte Zeile Code eliminiert potenzielle Fehlerquellen und reduziert den zu wartenden Code. Wird der zu testende Code ebenfalls in Scala implementiert, so reduziert sich der Testcode nochmals um einige Prozent. Die Klasse zur Repräsentation von Berühmtheiten kann z. B. als Einzeiler in Scala implementiert werden und hat direkte Auswirkungen auf die Kompaktheit der Tests: class Person(name:String, birthYear:Int, deathYear:Option[Int]). Derselbe Faktor an Codeeinsparung kann nahezu 1:1 auf die zu testenden Komponenten übertragen werden. Bei einer Umstellung von Java auf Scala wird der Code erfahrungsgemäß um ein Viertel schrumpfen.

Flucht nach vorne

Scala und seine Testframeworks sind auf jeden Fall ausgereift genug, um einen ersten Schritt in Richtung Scala zu wagen. Die Einführung von Scala erfolgt in der Regel fließend. Stück für Stück können neue Sprachelemente aufgegriffen und in Unit Tests umgesetzt werden. Zu Beginn wird meist ein Java-ähnlicher Programmierstil verfolgt. Die syntaktischen Unterschiede zwischen Java und Scala sind minimal und ermöglichen so einen leichten Einstieg, der bereits nach kurzer Einarbeitung Früchte trägt. Mit steigender Scala-Erfahrung fließen von ganz alleine immer mehr Sprachfeatures in den Code ein und es dauert eventuell nicht lange bis zum ersten Produktionscode in Scala. Und nicht zu vergessen: Ein in Scala geschriebener Test erfüllt immer auch eine Doppelfunktion – neben der Gewährleistung der Funktionsweise einer Einheit wird auch immer aufs Neue geprüft, ob Scala tatsächlich eines Java-Nachfolgers würdig ist.

Andreas Kaltenbach arbeitet als Systems Developer bei Stendahls.net AB und erfüllt zusammen mit seinem Team die Wünsche großer schwedischer Unternehmen mit allem was die Java-Plattform zu bieten hat. Andreas lebt in Göteborg, ist als Autor aktiv und hier und da als Zuhörer und Sprecher auf Konferenzen zu finden. Sie erreichen ihn unter andreas.kaltenbach[at]stendahls.se.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.