Tech 8. Februar 2023 von John Lustenberger 5 Leseminuten Warum kleine Schritte besser sind als grosse - Lehren aus Java 17 Migrationen

Seit Beginn von Deimos vor über 20 Jahre wird Java als Programmiersprache eingesetzt.
Mit Java lassen sich Enterprise Applikationen, Web- und Desktopanwendungen wie auch Mobile Apps für Android und iOS implementieren. Bei der Suche nach Mitarbeitenden ist es hilfreich, dass Java unter Hochschulabsolventen sehr populär ist, nicht zuletzt, weil es eine grosse Anzahl von Open Source Bibliotheken gibt, die auch von der Java-Community aktiv vorangetrieben werden.

Java 6-Month Release Cadence
Java Release Cadence. Quelle https://inside.java20220322the-arrival-of-java18

Java 17 Migrationen

Die Wartbarkeit eines Softwaresystems ist entscheidend für seinen wirtschaftlichen Betrieb und seine Weiterentwicklung. Das erreicht man durch stete Aktualisierung verschiedener Komponenten, was nicht zuletzt auch eine effektive Methode ist, im Team die Know-how-Basis zu fördern und sicherzustellen. Dadurch wird auch die Wartbarkeit gewährleistet.

Seit Java 9 hat sich der Release Zyklus beschleunigt. So wird seit Java 10 alle sechs Monate ein Zwischenrelease freigegeben und alle drei Jahre ein Long Term Support Release (LTS) definiert. Die Migration von Java 11 zu Java 17 umfasst demnach 6 Häppchen, statt eines grossen Brockens.

Code-Vereinfachungen und das Einführen neuer Features sowie proaktive Eliminierung zukünftig nicht mehr unterstützter APIs sind wichtige Treiber für ein Java-Update.

Ein Beispiel für Reduktion und Vereinfachung ist das mit Java 17/18 (Preview) eingeführte Pattern Matching bei Switch Statements:

Java Snippet
Java Code-Snippet von Deimos

Statt einer verschachtelten ‚if‘-Abfolge im oberen Beispiel (gelb markiert), kommt eine 'switch' Anweisung (unten, gelb markiert) und erkennt automatisch:

  • Zuordnung des Objektes (String)
  • Handhabung von NULL-Werten und
  • Setzen des Standardverhaltens: Werfen einer Exception

Der Code ist aufgeräumt und lässt sich leichter lesen.

Grundvoraussetzung für die Zuverlässigkeit der durchgeführten Aktualisierungen ist die Funktionalitätsüberprüfung der Applikationen durch eine möglichst hohe automatisierte Komponententestabdeckung.

Im Idealfall kann neben der Erhöhung der Java-Version auf der Build-Infrastruktur auch mittels automatisierter Deployment-Infrastruktur das Laufzeitverhalten von Web-Applikationen durch automatisierte GUI-Tests abgesichert werden.

Die Möglichkeit, häppchenweise Java-Versionen zu aktualisieren, dient uns auch als Treiber, die von uns verwendeten Software-Komponenten (Frameworks, Bibliotheken etc.) aktuell zu halten und zukünftige Migrationen schmerzfreier und kostengünstiger durchzuführen.

In diesem Sinn – kleine Schritte sind besser als grosse.

Teilen