Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Softwaremodernisierung mit GenAI – The Good, th...

Avatar for Markus Harrer Markus Harrer
September 20, 2025

Softwaremodernisierung mit GenAI – The Good, the Bad, the Unexpected (Version September 2025)

Neuen Code mit Large Language Models zu erzeugen, ist für uns längst keine Neuheit mehr. Doch der Traum, alte Softwaresysteme per Knopfdruck mithilfe künstlicher Intelligenz zu modernisieren, ist noch weit entfernt. Alte Softwaresysteme sind – sagen wir – doch etwas spezieller. In diesem Vortrag zeige ich, wie generative KI (GenAI) in diesem Bereich dennoch schon heute sinnvoll eingesetzt werden kann, wo wir (noch) an Grenzen stoßen und wo bei der Zusammenarbeit mit unseren modernen KI-Kollegen ganz andere, unerwartete Effekte auftreten.

Avatar for Markus Harrer

Markus Harrer

September 20, 2025
Tweet

More Decks by Markus Harrer

Other Decks in Technology

Transcript

  1. Softwaremodernisierung mit GenAI The Good The Bad The Markus Harrer

    Software Evolutionist Unexpected Vollausbau, Version September 2025 Legacy System Teilen mit Namensnennung - Keine Bearbeitungen
  2. 2 Softwaremodernisierung mit GenAI The Good, the Bad, the Unexpected

    ✓ GenAI für Entwicklung ✗ GenAI in Software
  3. back in 2014 … Code- Analyse Statische/ dynamische Analyse-Tools Legacy-

    Modernisierung Migration, Refactoring, Ersatz, ... Mein Einstieg in das Thema 3 Architektur- Reviews Data Science Strukturierte Vorgehen Automa- tisierte Analysen Software Analytics , Automatisierung Saubere Analyse, Reproduzierbarkeit Data Science , Automatisierung Saubere Analyse, Reproduzierbarkeit
  4. Eine neue Hoffnung 5 ab 2019 Deep Learning Program Generator

    CLGen https://github.com/ChrisCummins/clgen (von 2017)
  5. Totale Euphorie 7 seit 2023 Artificial Intelligence Machine Learning Data

    Science , Automatisierung Saubere Analyse, Reproduzierbarkeit Deep Learning GenAI LLM Legacy- Modernisierung Migration, Refactoring, Ersatz, ... GPTs AI-assisted Modernization
  6. AI einfach mal machen lassen … 9 Claude Code: „Refactor

    everything“ Ähnliche Version: https://www.youtube.com/watch?v=MAnQ5u6JqdI (das war als Witz gedacht) Das steht nun hier, weil einige einmal nach dieser Demo gemeint hatten, es ginge wirklich so einfach
  7. Meine Sicht auf das AI-Thema 10 Weg vom Holz /

    Code streicheln, hin zum Holz / Code bearbeiten früher heute Bild links: © Deutsche Fotothek , CC BY-SA 3.0 Bild rechts: © Firma Altendorf, CC BY-SA 3.0 Unported
  8. 13 Übernommen, korrigiert und ergänzt nach einer Idee von Bilgin

    Ibryam https://generativeprogrammer.com/p/ai-coding-assistants-landscape/ generisch agentisch assistierend spezialisiert Mit Tools von morgen Systeme von gestern heute verbessern Codex CLI Mindesthaltbarkeitsdatum: 31.05.2025
  9. LLMs Modernisierungsgehilfen 15 Characterization Tests Scratch Refactoring Sparring Partner Über

    das Design spekulieren Doku-Generierung Verbessern von Bezeichnern klein groß LLM: Large Language Model
  10. public abstract class DataEntryServlet extends CoreSecureController { private static final

    Logger LOGGER = LoggerFactory.getLogger(DataEntryServlet.class); Locale locale; // < ResourceBundleresmessage,restext,resexception,respage; // these inputs come from the form, from another JSP via POST, // or from another JSP via GET // e.g. InitialDataEntry?eventCRFId=123&sectionId=234 public static final String INPUT_EVENT_CRF_ID = "eventCRFId"; public static final String INPUT_SECTION_ID = "sectionId"; // these inputs are used when other servlets redirect you here // this is most typically the case when the user enters data and clicks the // "Previous" or "Next" button public static final String INPUT_EVENT_CRF = "event"; public static final String INPUT_SECTION = "section"; ... Fragen, die LLMs beantworten 18 Wer hatte ursprünglich diese Idee? Aus welchen Teilen besteht die Codebasis? Wie kann ich mich schnell mit einer Codebasis vertraut machen? Bietet die Codebasis Integrität und Konsistenz?
  11. Softwarearchäologie 23 mit Claude Code auf Basis der Git-Historie •

    Die wichtigsten Entwicklungen der Scheduling-Komponente: - März 2013: Mike startete das Feature mit grundlegenden Implementierungen - Juli 2013: REST-Schnittstelle wurde von Mike entwickelt - Dezember 2013: Umfassende Überarbeitung mit AddSchedulingUser/Date und Voting - Januar 2014: AWS-Backend-Integration durch Mike und Charlie - Februar 2014: Refactoring mit Enum für YES/NO/MAYBE und XSS-Schutz - Februar/März 2014: Implementierung der Löschfunktionen - Juli 2016: Finale Verbesserungen mit "final date" und "event Date" Funktionen Mike war hauptverantwortlich für die Grundarchitektur, während Charlie und Matthew später wichtige Verbesserungen beitrugen. „Fasse mir die wichtigsten vergangenen Entwicklungen der Scheduling-Komponente zusammen.“
  12. Optionen für lokale Nutzung 26 70 B class models (Q4)

    NVIDIA RTX Pro 6000 Blackwell 96 GB VRAM (~30t/s 16k, ~11000 €) NVIDIA DGX Spark 128 GB uRAM (~3t/s 8k, ~5000 €) Apple MacBook Pro 16-Core CPU, 40-Core GPU, 64 GB uRAM (~10t/s 8k, ~6500€) GMKtec EVO-X2 AMD Ryzen AI Max+ 395 128 GB uRAM (~5t/s 8k, ~2000 €) Langsamer, aber leichter genehmigt zu bekommen (= realistischer für EntwicklerInnen, das auch zu bekommen) (alle Werte grob geschätzt und aus verschiedenen Quellen zusammengeführt) Alle Bilder von Produktpräsentationen der jeweiligen Hersteller
  13. Wenn Geld keine Rolle spielt … 27 Run your own

    model! NVIDIA DGX B200 1440GB (~380000 €) (+ the costs for a data center where to run that one in) Bild von Produktpräsentationen von NVIDIA
  14. Mein mobiles lokales LLM-Setup 28 • Lenovo ThinkPad P15 G2

    • 11th gen Intel i9 CPU, 32 RAM, … • AMD Radeon RX 7900 XTX • 24 GB VRAM Speicher • 960 GB/s Speicherbandbreite • Up to 32B Models1 / 16k context1 • Nvidia RTX 4080 / Apple M4 Max 16 CPU / 40 GPU Cores Liga • ~25 tokens/s Gemma 3 27B Q4 16k ctx • < 1000 € (ohne eGPU Gehäuse) Sapphire Radeon RX 7900 XTX Pulse in Akitio Node Titan eGPU Gehäuse (Netzteil-Upgrade empfohlen) 1 leider nicht gleichzeitig ;-)
  15. GenAI Demos 30 Wie Einstieg in Legacy Code angenehmer gestalten?

    - Podcast? - Short? - Kinofilm? /* * OpenClinica is distributed under the * GNU Lesser General Public License (GNU LGPL). * For details see: http://www.openclinica.org/license * copyright 2003-2011 Akaza Research */ package org.akaza.openclinica.control.submit; ... import org.springframework.mail.javamail.JavaMailSenderImpl; /** * @author ssachs */ public abstract class DataEntryServlet extends CoreSecureController { ... @Override public void init(ServletConfig config) throws ServletException { super.init(config); try{ ServletContext context = getServletContext(); SessionManager sm = new SessionManager (SpringServletAccess.getApplicationContext(context)); dataSource = sm.getDataSource(); }catch(Exception ne){ ne.printStackTrace(); } } <5000 lines more> OpenClinicas „DataEntryServlet“
  16. Now, I know some of you might think like, “Java

    code, that's a bit much”, but trust me, we're going to break it down. GenAI als Einstieg in Systeme 31 NotebookLM: Podcast über unangenehmen Code erstellen lassen All right, everyone, get ready, because today we're going deep, deep, deep into some Java code. And not just any code, we're going to be exploring OpenClinica. https://www.youtube.com/watch?v=S2Jn1aIHA94 So, imagine this constant flow of information coming from electronic CRFs.
  17. GenAI als Einstieg in Systeme 32 NotebookLM: Podcast mit einer

    Zusammenfassung einer Klasse https://www.youtube.com/watch?v=FhbGIu711m8 So, hier kommt Ihr schneller Überblick zum DataEntryServlet in OpenClinica. Also, OpenClinica, das ist ja für die Verwaltung von klinischen Studiendaten da. Und dieses Servlet, tja, das ist quasi das Herzstück, wenn's um die Dateneingabe geht. Es steuert ganz genau, wie Daten in diese elektronischen Fallberichtsformulare, also die CRFs, reinkommen und verarbeitet werden. Das Servlet schnappt sich praktisch alle Daten, die Sie in die CRFs eintippen. Es passt genau auf, welche Info zu welchem Studienteilnehmer gehört, zu welchem Ereignis und zu welchem Formular ...
  18. GenAI als Einstieg in Systeme 33 Veo3*: Demo Short über

    das Wesen einer speziellen Klasse Diese Klasse ist so groß, wie der Ozean hier, und so wild, dass sich keiner dort auskennt. * Hier noch als Fake von mir auf Basis von Googles Tech Demo, da damals Veo3 noch nicht in Deutschlang verfügbar war https://www.youtube.com/watch?v=IIO9HVaigoc
  19. GenAI als Einstieg in Systeme 34 GPT-5 & Veo3: Trailer

    zu „DataEntryServlet – Der Film“ ttps://www.youtube.com/watch?v=QHHh_zaLuhA
  20. GenAI als Einstieg in Systeme GPT-5 & Veo3: Trailer zu

    „DataEntryServlet – Der Film“
  21. GenAI als Einstieg in Systeme 36 Was kommt hier noch?

    Bild links: Linke Seite generiert in ChatGPT, händisch kombiniert mit Short von YouTuber „ClashGames“, Bild rechts: Generiert in ChatGPT
  22. Was Foundation Models sahen und lernten 38 Zeichnung von Daniel

    Storii {turnoff.us}, Thanks to Michael Tharrington
  23. Was LLMs jetzt sehen (müssen?) 39 Zeichnung von Daniel Storii

    {turnoff.us}, Thanks to Michael Tharrington
  24. Es gibt immer noch andere Tools … 42 Manual Work

    Transformation Tools Guided AI AI assistants AI agents Developers manually analyze, reason about, and fix issues (based on deep domain and system knowledge) Human-based creation of formal rules and recipes to perform consistent, automated code transformations Human-led detection of issues or anti-patterns, followed by localized AI-generated fixes within defined areas Human-guided AI-based task execution for fixing code in smaller areas / clearly scoped contexts Autonomous systems orchestrate analysis, transformation and validation of modernization workflows General Idea Special issues like redesign of critical parts of business logic or performance optimization Framework migrations, API upgrades, bulk renames, restructurings Identifying systemic issues and using AI to propose or apply localized solutions Summarizing code, generating tests & comments, renaming identifiers, writing code snippets Cleanup ideation, multistep refactoring ideas, coming up with bug fixing solutions Typical Use Cases ++ + o - -- Control How much humans can be in the loop -- - - + ++ Risk How likely changes go wrong -- - - o ++ Breadth How wide the method can operate ++ ++ + o o Accuracy How well problematic spots are addressed o ++ ++ o - Traceability How well actions can be tracked ~ - o o o Efforts How much work setup and use need -- ++ o - + Volume How much can be processed
  25. Typische LLM-Hybrid-Ansätze 43 • Kryptischen Code erkennen und verständlicher machen

    (lassen) sowie Alternativlösungen brainstormen. • Vorhandene Konzepte / Muster extrahieren, dokumentieren und Architekturvalidierungs- regeln daraus erstellen (lassen). • Migrationsskripttemplates erstellen (lassen), um diese mit den bereits identifizierten Problemstellen anzureichern. Guided AI
  26. Modellen Hausregeln beibringen 45 Visualisierung von OpenAI, ziemlich sicher generiert

    mit ChatGPT https://platform.openai.com/docs/guides/model-optimization RAG Externes Wissen in Anfragen integrieren Instruction Tuning Befolgen der Anweisungen verbessern RLHF Durch menschliche Rückmeldung verbessern Fine-Tuning Auf bestimmte Aufgaben feinabstimmen Alignment Auf ethische Werte abstimmen Aufwand Retrieval Augmented Generation Reinforcement Learning from Human Feedback
  27. Ganz „spezielle“ Korrekturen 48 Teil I: Einschränken des Problembereichs z.

    B. Tree-sitter Parsergenerator und Parserbibliothek Analyze oder auch: Semgrep, Acorn, OpenRewrite LST, jQAssistant Knowledge Graphs, Rector, … Entwickly Finde alle Klassen- Kommentare Klassen- kommentare
  28. Ganz „spezielle“ Korrekturen 49 Teil II: Ermitteln der Probleme Hier

    sind Kommentare, Finde die Fakes! OK, hier sind sie LLM Evaluate Entwickly Klassen- kommentare Fake- Kommentare
  29. Ganz „spezielle“ Korrekturen 50 Teil III: Kochen lassen nach Rezept

    Hier sind Fake- Kommentare, korrigiere diese! Erledigt! Improve LLM Entwickly Korrigierte Kommentare Fake- Kommentare Rezept
  30. Maker Innovation und Ideen Schnell zum Markt Feature-fokussiert Rapid Prototyping

    Idee zum MVP 80% Lösung Kick bei Go Live Endlich mehr Care-Arbeit https://unsplash.com/photos/1lGeOg6IULc 54
  31. Mender Probleme lösen Technische Schulden angehen Produkt stabilisieren Bugfixing und

    Integration Stetige Verbesserung Beharrlich und kontinuierlich https://unsplash.com/photos/D6cgenSS5NY 55 Endlich mehr Care-Arbeit
  32. Mender Probleme lösen Technische Schulden angehen Produkt stabilisieren Bugfixing und

    Integration Stetige Verbesserung Beharrlich und kontinuierlich https://unsplash.com/photos/D6cgenSS5NY 56 Endlich mehr Care-Arbeit
  33. Das große Revival der Dev-Doku! 57 LLMs benötigen Vorgaben wie

    Code-Konventionen, Architekturstandards, Programmierstile, unsere „Spezalitäten“ etc. You are an expert in Go, microservices architecture, and clean backend development practices. Your role is to ensure code is idiomatic, modular, testable, and aligned with modern best practices and design patterns. ### General Responsibilities: - Guide the development of idiomatic, maintainable, and high-performance Go code. - Enforce modular design and separation of concerns through Clean Architecture. - Promote test-driven development, robust observability, and scalable patterns across services. ### Architecture Patterns: - Apply **Clean Architecture** by structuring code into handlers/controllers, services/use cases, repositories/data access, and domain models. - Use **domain-driven design** principles where applicable. - Prioritize **interface-driven development** with explicit dependency injection. - Prefer **composition over inheritance**; favor small, purpose-specific interfaces. - Ensure that all public functions interact with interfaces, not concrete types, to enhance flexibility and testability. ### Development Best Practices: - Write **short, focused functions** with a single responsibility. - Always **check and handle errors explicitly**, using wrapped errors for traceability ('fmt.Errorf("context: %w", err)'). - Avoid **global state**; use constructor functions to inject dependencies. - Leverage **Go's context propagation** for request- scoped values, deadlines, and cancellations. ... Auszug aus Cursor Rules von https://cursor.directory/go-microservices →
  34. 59 Weil Maker nicht die Rolle der Mender annehmen wollten.

    * 2022 mit der ersten nutzbaren Version von ChatGPT † 2025 mit der rücksichtslosen Verwendung von GenAI Professional AI-Assisted Software Development
  35. Modernisierung mit GenAI gibt Hoffnung 63 Legacy Systeme werden uns

    nämlich noch länger beschäftigen… Intelligenz Zeit Wir alle müssen uns nicht mehr mit Legacy Systemen herumärgern
  36. Meine persönliche Hoffnung 64 Die größte Chance von GenAI ist

    nicht, dass sie Legacy-Systeme verändern, sondern unsere Einstellung zu ihnen.