Posts

Posts mit dem Label "Clean Code" werden angezeigt.

Java 25: Die wichtigsten Features seit Version 21

Bild
Seit September 2025 gibt es das neue Java 25 LTS-Release. Neben den typischen Performance-Verbesserungen und Ressourcen-Optimierungen fallen vor allem die Vereinfachungen für Java-Neulinge auf. Mehr dazu in diesem Artikel. Java 25 Features Als neues LTS-Release bringt Java 25 einige Neuerungen im Vergleich zu Java 21 mit. Unter der Haube wurde viel optimiert, das Web-EntwicklerInnen bei der täglichen Arbeit eventuell gar nicht bemerken. Das sind zum Beispiel Optimierungen bei den Garbage-Kollektoren, der Support-Stop für 32 Bit Rechner oder mehr Unterstützung für die AOT-Kompilierung. In diesem Artikel fokussiere ich mich auf Änderungen, die auffallen. Alles Weitere findet ihr im Detail hier:  https://openjdk.org/projects/jdk/25/ Rückblick Java 21 Features Performance Tuning durch Versionsupdate Java 25 ist performanter als Java 21. Ich teste es mit einer kleinen, produktiven Spring Boot Webanwendung. Dazu starte ich die Anwendung 10 Mal mit Java 21 und 10 Mal mit Java 25. Dabei pr...

GIT Einführung und Best Practices

Bild
Ob Entwicklung, Test, Betrieb oder Projektmanagement – Git ist nicht nur ein Thema für Developer. Es ist ein zentrales Werkzeug, das die Zusammenarbeit im gesamten IT-Team unterstützt und absichert. Doch was macht Git eigentlich so wertvoll? Zentraler Zugriff auf den Code Mit Git arbeitet das ganze Team an einer gemeinsamen Codebasis. Egal ob Backend, Frontend, Testautomatisierung oder Infrastruktur-as-Code – alle Dateien liegen im selben Repository. Das sorgt für Transparenz und verhindert, dass einzelne Teammitglieder mit unterschiedlichen Versionen arbeiten. Jeder kann nachvollziehen, wie sich der Code entwickelt und welche Änderungen aktuell sind. Nachvollziehbarkeit von Änderungen Git protokolliert jede Änderung. Wer hat wann was geändert – und warum? Diese Informationen sind Gold wert, wenn man verstehen möchte, warum ein Fehler entstanden ist oder wie ein Feature genau implementiert wurde. Gute Commit-Nachrichten und sauber strukturierte Branches machen es möglich, die Entwicklu...

Testgetriebene Entwicklung (TDD) Schritt für Schritt

Bild
Testgetriebene Entwicklung besteht aus 3 Schritten: Rot: Schreib ausreichend viele fehlschlagende Unit Tests. Grün: Implementiere nur so viel Code, dass alle Unit Tests erfolgreich durchlaufen. Blau: Falls nötig, refaktorisiere den Code und Deine Unit Tests. Dieser Blog-Artikel demonstriert TDD anhand des Clean Code Bowling Game Katas in Kotlin mit JUnit Tests. Außerdem betrachten wir wie KI unsere Arbeitsweise bei TDD verändert. Passen die Idee von TDD und aktuelle KI-Tools wie GitHub Copilot oder ChatGPT überhaupt noch zusammen? Testgetriebene Entwicklung (TDD) Ich kenne testgetriebene Entwicklung aus Extreme Programming (von Kent Beck) und Clean Code (von Robert C. Martin). Beide beschreiben den TDD-Zyklus als Entwicklungsprozess in 3 sich wiederholenden Schritten. Im folgenden Bild seht Ihr den Zyklus mit entsprechenden Farben, abgeleitet aus dem Status der Testergebnisse. Rot - Test schlägt fehl In der ersten Phase ROT wird mindestens ein neuer Testfall geschrieben oder ein besteh...

Spring Boot vs. Security Vulnerabilities

Bild
Der Security-Scanner in eurer CI/CD-Pipeline hat eine kritische Security Vulnerability gefunden. In einer 3rd-Party-Bibliothek gibt es eine Schwachstelle. Der Scanner kennt bereits die Lösung: ein Upgrade der Bibliothek. Doch ist das wirklich immer die beste Idee? Oder gibt es Aspekte wie Wartbarkeit und Stabilität zu beachten? Security Scanner und Vulnerabilities CI/CD-Pipelines mit Code-Scannern sind essenzielle Werkzeuge in der professionellen Softwareentwicklung. In meinem Projekt nutzen wir eine GitLab CI/CD-Pipeline mit diversen Scannern. Einer davon analysiert unsere Third-Party-Bibliotheken auf Sicherheitslücken, also veraltete Abhängigkeiten mit bekannten Schwachstellen. Diese werden in einem Report aufgelistet. Für jede Schwachstelle sind detaillierte Informationen abrufbar.  Hier ein Beispiel aus einem Java-Projekt mit Spring Boot 3.4.2. Titel und Beschreibung der Vulerability bzw. des Security Problems. Severity: Kategorisiert die Kritikalität in fünf Stufen von "Inf...

IT Stability Health Radar

Bild
How to run IT applications stable in production? Instead of providing one more operations readiness checklist, I created an IT Stability health radar. This helps in agile projects to choose the next stability improvement depending on current situation. All non-functional requirements in this health radar are prioritized by levels, so that you and your Product Owner can plan them properly. IT Stability Health Radar Companies have often operations readiness checklists, which describe what to do before customers can use an IT system in production. These long lists with non-functional requirements are not easy to use and fulfill in agile working environments. Product owners and business stakeholders have a hard time to accept these requirements, if they come all at the same time and might block a big part of the team for several weeks.  In this article I focus on non-functional requirements related to IT stability. I group and order them, so that you learn where to start and which stab...

Java 21: Die wichtigsten Features seit Version 17

Bild
Java 21, die neue Version mit verlängertem Support, ist da! Hier stelle ich die wichtigsten Features vor: Interface SequencedCollection, Record Patterns, Neuerungen bei switch und das Highlight virtuelle Threads Falls Ihr noch Java 11 verwendet, schaut euch hier die Features von Java 17 an:  java-17-features.html 🎓 Auf Udemy findet ihr meinen kostenloses Online-Kurs zu Java 21 . Java 21 at YouTube in English Interface SequencedCollection Die neuen Sequenced -Interfaces erweitern Listen-Implementierungen um den Direktzugriff auf das erste und letzte Element. Am Beispiel einer  ArrayList  zeige ich hier die neuen, selbsterklärenden Methoden: // Mutable list created. List < String > list = new ArrayList<>( List . of ( "1st" , "2nd" , "3rd" )); log .info( "Read first & last element in list: %s & %s" .formatted( list .getFirst(), list .getLast())); var reversedList = list .reversed(); reversedList .addFirst( "4th...