Start / Cheat Sheets

Cheat Sheet

Umbauen und modernisieren — Cheat Sheet

Stand: · KI-gestütztes Refactoring und Legacy-Modernisierung

ModernisierungMigrationStrangler FigGovernance

Zum Danebenlegen, wenn der Umbau größer ist als ein paar Schritte — wenn eine Bibliothek abgelöst, ein Vertrag geändert oder ein Monolith aufgeteilt werden soll. Das Blatt sammelt die Muster und Entscheidungsraster aus der zweiten Hälfte des Seminars; es ersetzt nicht die Übung, sie anzuwenden.

Erster Teil: Verstehen und absichern.

Parallel Change

Drei Phasen für Verträge und Daten. Unterbleibt die dritte, sammeln sich halb abgelöste Wege an — deshalb vom ersten Tag an einplanen.

PhaseWas passiert
HinzufügenNeues neben Altem, alle bisherigen Nutzer arbeiten unverändert weiter
UmstellenNutzer nacheinander, in eigenem Tempo, notfalls über Monate
Entfernenerst wenn nachweislich niemand mehr zugreift

„Vermutlich nutzt es niemand mehr” trägt die Löschung nicht. Der Nachweis ist eine Beobachtung: Protokollierung am alten Weg, mit festgelegtem Endtermin.

Modul: Komplexe Refactorings planen

Sprout und Wrap

Zwei Wege, Neues neben Altem entstehen zu lassen, ohne im Bestand zu wühlen.

MusterVorgehenEingriff in den Bestand
Sproutneuer Teil als eigene, getestete Einheit danebeneine Aufrufzeile
Wrapalte Methode umbenennen, neue mit altem Namen darüberUmbenennung, kein Eingriff im Rumpf

Das ist mehr als ein Trick: Neuer Code, der in altem entsteht, übernimmt dessen Eigenschaften. Getrennt geschrieben, kann er von Anfang an getestet sein — und die Aufrufstelle ist der einzige Punkt, den der Review prüfen muss.

Modul: Komplexe Refactorings planen

Diff-Review bei Umbauten

Fünf Befunde, entlang derer man den Diff liest — statt nach Gefühl.

BefundWarum er entsteht
Vereinfachte Bedingung ohne RandfallAufräumen, das Verhalten mitnimmt
Entfernte Fehlerbehandlungein Fangblock sah überflüssig aus, weil unkommentiert
Geänderte Sichtbarkeiterweitert eine Schnittstelle stillschweigend
Neue Abstraktion oder Abhängigkeitwar nicht beauftragt, wirkt aber sinnvoll
Formatierung nicht betroffener Dateienbläht den Diff und versteckt die echten Änderungen

Der letzte Befund ist selten schädlich für das Programm und immer schädlich für die Prüfbarkeit.

Was über die Testsuite hinaus zu prüfen ist:

BereichPrüfung
SchnittstellenAntwortformate zeichengenau vergleichen, nicht fachlich bewerten
DateiformateReihenfolge, Trennzeichen und Zeilenende einschließen
DatenmigrationenZählungen und Stichproben vor und nach dem Lauf

Modul: Verifikation und Review von Refactoring-Patches

Drei Stufen der Prüfung

StufeWirkung
Selbstprüfung im selben Kontextbestätigt die eigenen Annahmen
Frischer Kontext, nur Diff und Auftragfindet, was die Entstehung verdeckt hat
Gezielte Frage statt allgemeinerdeutlich brauchbarere Befunde

„Prüfe diesen Diff auf unbeabsichtigte Verhaltensänderungen an Randfällen” schlägt „prüfe die Qualität” um Längen. Unverzichtbar bleibt der Mensch dort, wo das Repository nichts weiß: Dass eine Sonderbehandlung für den Standort Süd gilt, steht in keinem Quelltext.

Modul: Verifikation und Review von Refactoring-Patches

Sechs Handlungsmöglichkeiten

Die letzte wird am seltensten geprüft und ist die günstigste von allen.

MöglichkeitWas sie bedeutet
Stabilisierennichts umbauen: Tests, Beobachtbarkeit, reproduzierbarer Bau
KapselnBestand einschließen, nur über eine saubere Grenze ansprechen
Refaktoriereninnere Struktur dort verbessern, wo Änderungsdruck herrscht
MigrierenTechnologie oder Plattform austauschen, Fachlichkeit erhalten
Ersetzenabgegrenzten Teil neu bauen, den alten stilllegen
Stilllegenfeststellen, dass ein Teil nicht mehr gebraucht wird, und abschalten

Vorher gehört das Motiv benannt — ein Vorhaben ohne Motiv hat keinen Punkt, an dem es fertig ist.

MotivWoran es sich zeigt
ÄnderungsfähigkeitAnforderungen sind nicht mehr in vertretbarer Zeit umsetzbar
Risikokeine Sicherheitsaktualisierungen, niemand beherrscht die Technologie
KostenBetrieb oder Wartung sind unverhältnismäßig teuer
Personales findet sich niemand mehr, der daran arbeiten will

Modul: Modernisierungsstrategien auswählen

Beobachtbarkeit zuerst

Sie ändert das Verhalten nicht — deshalb ist sie der einzige Schritt, den man vor der Absicherung machen kann. Und sie liefert nebenbei drei Dinge, die man später ohnehin braucht:

NebeneffektWofür er gebraucht wird
Aufrufzahlen je Codepfaddie Frage nach totem Code
Vorher-Messungjeder spätere Vergleich alter und neuer Fassung
Fehlerhäufigkeitendie Kritikalitätsachse der Risikomatrix

Modul: Modernisierungsstrategien auswählen

Migrationen aufteilen

Die Aufteilung lohnt doppelt: Der mechanische Teil ist sicherer, und die Prüfaufmerksamkeit bleibt für die Urteilsfälle.

AnteilVerfahren
Großer, gleichförmiger TeilCodemods auf dem Syntaxbaum, deterministisch und wiederholbar
Alternativ dazuAltes als veraltet markieren und den Übersetzerfehlern folgen
Kleiner, sperriger RestAgent: ungewöhnliche Verwendung, Zusatzlogik, mitzudenkende Kommentare

Zum Fortschritt gehören zwei Listen. Ohne die zweite bleibt am Ende ein Rest, von dem niemand weiß, ob er vergessen oder Absicht war.

ListeZweck
Verbleibende Fundstellender messbare Stand, automatisch ermittelt
Bewusst nicht migrierte Fällemit Begründung, damit der Rest nicht rätselhaft bleibt

Modul: KI-gestützte Migrationen und großflächige Änderungen

Umkehrbarkeit und Wiederholbarkeit

EigenschaftPraktische Folge
Umkehrbarkeitbei Datenänderungen aufwendiger als ein Rücksprung im Code
Umkehrbarkeitder Rückweg will vorher durchdacht und erprobt sein
Wiederholbarkeitein abgebrochener oder unvollständiger Lauf wird einfach wiederholt
Wiederholbarkeitbei generativer Umstellung nicht selbstverständlich

Zwei Läufe desselben Auftrags liefern nicht zwangsläufig dasselbe — ein Argument für den mechanischen Weg. Was generativ entstand, wird einmal geprüft und dann festgeschrieben: Der Commit ist die Referenz, nicht der Auftrag, der ihn erzeugt hat.

Modul: KI-gestützte Migrationen und großflächige Änderungen

Rechtestufen für Agenten

Diese Stufung kostet fast nichts und nimmt der überwiegenden Mehrheit der Aufgaben das Risiko vollständig.

StufeRegel
Lesendie gesamte Erkundung, ohne Ausnahme
Schreibenerst nach Planfreigabe, begrenzt auf ein isoliertes Arbeitsverzeichnis
Ausführenspäter und mit klaren Grenzen
Netzwerkgenau hinsehen — hier können Daten das Haus verlassen
Fremde Systemegrundsätzlich nicht, sondern hinter menschlicher Freigabe

Vorab gehört festgelegt, was ein Werkzeug überhaupt sehen darf — schriftlich, denn ohne Schriftform entscheidet im Zweifel jeder für sich, meist zugunsten der Bequemlichkeit.

DatenartTypische Frage
Quellcodedarf er den Rechner verlassen?
Produktionsprotokolleenthalten sie personenbezogene Inhalte?
Fehlerberichtemit Kundendaten oder ohne?
Tickets und Kundendokumentationwer hat sie geschrieben, was steht drin?
Bewegungsdaten benannter Personeneindeutig nein

Modul: Sicherheit und Governance in Brownfield-Projekten

Kritische Bereiche und Freigaben

BereichRegel
Anmeldung und Sitzungsverwaltungkeine selbstständige Änderung
Verschlüsselung und RechteprüfungPlanfreigabe plus Review durch eine zweite Person
Alles mit Geldbezugdasselbe, zusätzlich Vergleichstest gegen die Altfassung
Personenbezogene DatenDatenklassifikation vor jedem Zugriff

Wer eine bestehende Prüfung entfernen will, muss ihren Ursprung kennen — und den kennt oft niemand. In einem gewachsenen System hat fast jede Prüfung einen Grund; eine Begründung, die nur den Code betrachtet, kann ihn nicht kennen.

FreigabepflichtigDer Nachweis beantwortet
DatenmigrationenWer hat es veranlasst?
Änderungen an Verträgen und FormatenMit welchem Auftrag?
Neue AbhängigkeitenUnter welchen Rechten?
Infrastruktur und jede AuslieferungWer hat freigegeben, was wurde geprüft?

Verantwortlich ist immer die Person, die freigegeben hat. Ein Agent kann nicht haften.

Modul: Sicherheit und Governance in Brownfield-Projekten

Schulden entscheidbar formulieren

Der hässlichste Code ist selten der teuerste. Teuer ist der Code, den man am häufigsten anfasst — und Häufigkeit steht in der Historie, nicht im Quelltext.

FormulierungWas sie auslöst
„Die Abrechnung ist unwartbar”Zustimmung, dann nichts
„Jede Änderung dauert vier Tage statt einen”eine Abwägung mit einem Ergebnis
„Zweimal Produktionsfehler in sechs Monaten”eine Priorisierung mit Beleg

Was ein Backlog-Eintrag mitbringen muss, damit er für sich abschließbar ist:

FeldInhalt
Anlasswelche Änderung hat den Bedarf ausgelöst?
Zielbeobachtbar formuliert
Voraussetzungenwas muss vorher stehen — Tests, Beobachtbarkeit?
Risikogrob geschätzt, mit Umkehrbarkeit

Modul: Modernisierung als Teamprozess

Regeln verankern und Wissen sichern

Die dritte Verankerung ist die wirksamste und wird am häufigsten vergessen — ohne sie endet die Migration nie.

VerankerungWirkung
Refactoring-Leitplanken als Repository-Anweisunggelten auch ohne Erwähnung im Auftrag
Zielmuster als benannte Referenzstellen im Codepräziser als jede Beschreibung
Ausführbare Regel gegen das jeweils Alteverhindert Nachwachsen während der Migration

Vier Speicher, die das Wissen über das Vorhaben hinaus tragen. Der Chatverlauf gehört ausdrücklich nicht dazu — er ist Arbeitsmaterial.

SpeicherWarum er trägt
Systemprofilegepflegt statt einmalig erstellt
Entscheidungsnotizenbegründen Weg und verworfene Alternativen
Characterization Testsveralten nicht unbemerkt, weil sie ausgeführt werden
Unknowns Registerdie offenen Einträge sind die Landkarte fürs nächste Vorhaben

Modul: Modernisierung als Teamprozess

Fünf Größen für den Fortschritt

GrößeWas sie beantwortet
Verbleibende FundstellenStand einer Migration, eindeutig
Änderungsdurchlaufzeit im Bereichhat die Arbeit gewirkt?
Fehler- und Rückrollratewar sie sicher?
Teststabilitätträgt das Sicherheitsnetz?
Entwicklung der Hotspotsberuhigt sich die Struktur?

Keine dieser Zahlen taugt als Vorgabe von außen — als Vorgabe werden sie erreicht statt erfüllt.

Modul: Modernisierung als Teamprozess

Typische Fallen

  • Durchhalten, weil schon so viel Arbeit hineingeflossen ist — und den Umfang erhöhen, um wieder lauffähig zu werden.
  • Die Abstraktion einführen und gleichzeitig die neue Umsetzung schreiben.
  • Logik in die Schutzschicht wandern lassen, bis sie selbst zum Bestand wird.
  • „Tests werden nicht angepasst” nicht in den Auftrag schreiben — und die Anpassung im Review übersehen, weil sie plausibel begründet ist.
  • Den Review mit dem Code beginnen statt mit den Testdateien.
  • Den Migrationslauf nur auf dem kleinen Entwicklungsbestand messen — und den Rückweg planen, aber nie ausprobieren.
  • Die Trennung als Ziel setzen statt als mögliches Mittel — und Grenzen nach Technik ziehen statt nach Fachlichkeit.
  • Mehrere Hauptversionen in einem Sprung nehmen und die Warnungen der Zwischenversionen verlieren.
  • Die Fundstellenzahl als Aufwandsschätzung verwenden.
  • Den größten Stapel zuerst nehmen, um schnell voranzukommen — und nach dem Stapel nicht committen.
  • Aus Bequemlichkeit mit Vollrechten starten und später einschränken wollen.
  • Freigaben erteilen, ohne den Diff gelesen zu haben.
  • Regeln in einem Wiki ablegen, das kein Agent liest — oder Checks so streng bauen, dass sie umgangen statt befolgt werden.
  • Aus der Hotspot-Liste ein Abarbeitungsprogramm machen.

Zum Seminar KI-gestütztes Refactoring und Legacy-Modernisierung