Einleitung
Legacy Code modernisieren ist eine der stärksten AI-Anwendungen. Vom Framework-Wechsel bis zum Refactoring ganzer Codebasen – hier sind 10 Prompts für Code-Migration und Modernisierung.
Dennoch sollte man die Limitierungen im Blick behalten.
Inhaltsverzeichnis
- Prompt 1: Legacy Code Audit
- Prompt 2: Migrations-Strategie
- Prompt 3: Framework-Migration
- Prompt 4: Programmiersprachen-Wechsel
- Prompt 5: Dependency Updates
- Prompt 6: Datenbank-Migration
- Prompt 7: API Modernisierung
- Prompt 8: Tests für Legacy Code
- Prompt 9: Tech Debt abbauen
- Prompt 10: Inkrementelle Migration
- FAQ
Zusätzlich gibt es einige bewährte Tipps für den Alltag.
Prompt 1: Legacy Code Audit
Außerdem gibt es hilfreiche Tools, die dich dabei unterstützen.
Analysiere meinen Legacy Code und erstelle einen Modernisierungs-Plan:
Code: [Code einfügen oder Beschreibung]
Alter: [z.B. "5 Jahre, jQuery + PHP 7.2, keine Tests"]
Problem: [z.B. "Schwer wartbar, langsam, Security-Issues"]
Analysiere:
1. **Code Quality**: Komplexität, Duplikate, Dead Code
2. **Dependencies**: Veraltete Packages, CVEs, deprecated APIs
3. **Architecture**: Monolith? Tight Coupling? God Objects?
4. **Security**: Bekannte Schwachstellen in alten Versionen
5. **Performance**: Offensichtliche Performance-Probleme
6. **Testing**: Testabdeckung, Test-Qualität
7. **Documentation**: Vorhandene Dokumentation
8. **Deployment**: CI/CD vorhanden? Manuell?
9. **Quick Wins**: Was bringt schnell Verbesserung?
10. **Big Rocks**: Was braucht fundamentale Änderung?
Prioritäten: 🔴 Sicherheit → 🟡 Stabilität → 🟢 Features
Deshalb empfiehlt es sich, den Prompt schrittweise zu verfeinern.
Zusammenfassend bietet dieser Abschnitt praktische Handlungsempfehlungen.
Prompt 2: Migrations-Strategie
Dabei spielen mehrere Faktoren eine wichtige Rolle.
Erstelle eine Migrations-Strategie:
Von: [z.B. "jQuery + PHP Monolith, MySQL"]
Nach: [z.B. "React + Node.js API, PostgreSQL"]
Strategie wählen:
1. **Big Bang**: Alles auf einmal neu (wann sinnvoll?)
2. **Strangler Fig**: Schrittweise ersetzen (recommended!)
3. **Branch by Abstraction**: Parallel alt + neu
4. **Feature-by-Feature**: Neue Features im neuen Stack
Plan erstellen:
5. Phase 1: Foundation (Neue Infra, CI/CD, Auth)
6. Phase 2: Core (Kernfunktionalität migrieren)
7. Phase 3: Migrate (Feature für Feature)
8. Phase 4: Cleanup (Alten Code entfernen)
9. Rollback-Strategy pro Phase
10. Success Criteria pro Phase
Timeline mit Milestones und Go/No-Go Entscheidungen.
Parallel-Betrieb: Alter + neuer Code gleichzeitig.
Ebenfalls sinnvoll ist es, verschiedene Varianten auszuprobieren.
Ebenfalls empfehlenswert ist eine regelmäßige Überprüfung der Ergebnisse.
Prompt 3: Framework-Migration
Ebenso wichtig ist es, die Best Practices zu kennen.
Migriere meinen Code von Framework A nach Framework B:
Von: [z.B. "Angular 14" / "Vue 2" / "Express" / "Create React App"]
Nach: [z.B. "React 19" / "Vue 3" / "Hono" / "Next.js 15"]
Code zum Migrieren: [Code einfügen]
Anleitung:
1. Äquivalente Konzepte (A → B Mapping)
2. Breaking Changes identifizieren
3. Package-Austausch (alte → neue Dependencies)
4. Routing-Migration
5. State Management Migration
6. Component-Syntax Änderungen
7. API/HTTP Client Anpassungen
8. Styling-Migration (falls nötig)
9. Test-Migration (Framework-spezifische Test-Utils)
10. Build/Config Migration
Zeige: Alter Code → Neuer Code (Side-by-Side)
Automatisierungs-Möglichkeiten: Codemods, AST Transforms.
Dementsprechend ist eine manuelle Überprüfung empfehlenswert.
Deshalb ist es wichtig, diesen Abschnitt aufmerksam zu lesen.
Prompt 4: Programmiersprachen-Wechsel
Weiterhin ist es wichtig, die Grundlagen zu verstehen.
Konvertiere meinen Code von Sprache A nach Sprache B:
Von: [z.B. "Python" / "JavaScript" / "PHP"]
Nach: [z.B. "TypeScript" / "Go" / "Rust"]
Code: [Code einfügen]
Konvertiere mit:
1. Idiomatische Umsetzung (nicht 1:1 übersetzen!)
2. Sprach-spezifische Best Practices der Zielsprache
3. Error Handling der Zielsprache (try/catch → Result Type)
4. Type System nutzen (wenn Zielsprache getypt)
5. Standard Library der Zielsprache nutzen
6. Package/Import System anpassen
7. Concurrency Model anpassen (Promises → Goroutines)
8. Testing Framework der Zielsprache
9. Build/Package System Setup
10. Häufige Fallstricke beim Wechsel
Vergleich: Stärken/Schwächen beider Sprachen für den Use Case.
Tatsächlich zeigt die Praxis, dass dieser Ansatz sehr effektiv ist.
Prompt 5: Dependency Updates
Im Grunde vereinfacht dieser Ansatz den gesamten Workflow erheblich.
Hilf mir beim sicheren Update meiner Dependencies:
Package.json / requirements.txt: [Datei einfügen]
Letzes Update: [z.B. "Vor 18 Monaten"]
Erstelle einen Update-Plan:
1. Security Audit: npm audit / pip audit (CVEs finden)
2. Breaking Changes pro Major Update identifizieren
3. Update-Reihenfolge (Peer Dependencies beachten!)
4. Sicheres Vorgehen: Minor → Patch → Major (einzeln)
5. Lock-File verstehen (package-lock.json, yarn.lock)
6. Migration Guides für Major Updates lesen/zusammenfassen
7. Automated Updates: Dependabot / Renovate konfigurieren
8. Test nach jedem Update (CI Pipeline!)
9. Veraltete Packages ersetzen (deprecated → Alternative)
10. Unused Dependencies entfernen (depcheck)
Automatisierung:
npx npm-check-updates -u (interaktiv, einzeln updaten)
Renovate Bot Config für automatische PRs.
Vor allem die detaillierten Anweisungen sorgen für präzisere Ergebnisse.
Weiterhin ist es sinnvoll, die Ergebnisse regelmäßig zu überprüfen.
Prompt 6: Datenbank-Migration
Folglich profitierst du von einem besseren Verständnis dieser Konzepte.
Plane eine Datenbank-Migration:
Von: [z.B. "MySQL 5.7" / "MongoDB" / "SQLite"]
Nach: [z.B. "PostgreSQL 16" / "PostgreSQL" / "PlanetScale"]
Schema: [Aktuelles Schema beschreiben oder einfügen]
Migrationplan:
1. Schema Mapping (Datentypen A → B)
2. Migration Script (ETL: Extract, Transform, Load)
3. Daten-Validierung (Zähler, Checksummen)
4. Referentielle Integrität prüfen
5. Indexes neu erstellen (optimiert für neue DB)
6. Stored Procedures / Views migrieren
7. Application Code anpassen (Query-Syntax)
8. ORM Konfiguration ändern (Prisma, Drizzle, TypeORM)
9. Connection String, Pooling konfigurieren
10. Zero-Downtime Migration (Dual-Write Strategy)
Rollback-Plan: Bei Fehlern zurück zur alten DB.
Testing: Parallel beide DBs, Ergebnisse vergleichen.
Außerdem kannst du den Prompt für verschiedene Programmiersprachen anpassen.
Vor allem in der Praxis hat sich dieser Workflow bewährt.
Prompt 7: API Modernisierung
Allerdings gibt es einige wichtige Unterschiede zu beachten.
Modernisiere meine API:
Aktuelle API: [z.B. "REST, kein Schema, inkonsistente Responses"]
Ziel: [z.B. "OpenAPI 3.1, konsistente Error Handling, Versionierung"]
Modernisiere:
1. Response-Format standardisieren (JSON API Standard)
2. Error Handling vereinheitlichen (RFC 7807)
3. Pagination konsistent machen (cursor-based)
4. Authentication modernisieren (JWT, OAuth 2.0)
5. Rate Limiting implementieren
6. Input Validation (Zod / Joi)
7. OpenAPI Spec erstellen (aus bestehendem Code)
8. Versionierung einführen (v1 → v2)
9. Deprecation Strategie für alte Endpoints
10. Client-Libraries generieren (TypeScript SDK)
Migration ohne Breaking Changes:
- Alte Endpoints behalten, neue parallel
- Sunset Header auf alten Endpoints
- Client-Kommunikation (Changelog, Migration Guide)
Tatsächlich lässt sich dieser Code direkt in dein Projekt übernehmen.
Allerdings gibt es dabei einige Punkte, die du beachten solltest.
Prompt 8: Tests für Legacy Code
Zusammenfassend lässt sich sagen, dass dies ein zentraler Aspekt ist.
Schreibe Tests für Legacy Code der keine Tests hat:
Code: [Code einfügen]
Problem: [z.B. "Tightly coupled, globale State, keine Dependency Injection"]
Strategie:
1. **Characterization Tests**: Aktuelles Verhalten als Test festhalten
2. **Golden Master**: Output speichern, bei Änderung vergleichen
3. **Seams finden**: Stellen wo wir Code testbar machen können
4. **Extract & Override**: Methoden extrahieren für Mocking
5. **Dependency Injection**: Schrittweise einführen
6. **Integration Tests zuerst**: Breite Abdeckung schnell
7. **Unit Tests**: Für kritische Business Logic
8. **Snapshot Tests**: UI-Änderungen erkennen
9. **Coverage messen**: Wo sind die größten Lücken?
10. **Test-Strategie**: Was zuerst testen? (Risiko × Häufigkeit)
Wichtig: Tests schreiben BEVOR du refactorst!
Working Effectively with Legacy Code (Michael Feathers) Patterns.
Hierbei hilft es, von konkreten Beispielen auszugehen.
Prompt 9: Tech Debt abbauen
Deshalb lohnt es sich, dieses Thema genauer zu betrachten.
Erstelle einen Plan zum Abbau von Technical Debt:
Projekt: [Beschreibung]
Bekannte Probleme: [Liste der Tech Debt Items]
Kategorisiere und priorisiere:
1. **Reckless Debt**: Bewusst ignorierte Best Practices
2. **Prudent Debt**: Bewusste Trade-offs (dokumentiert?)
3. **Inadvertent Debt**: Unwissenheit, jetzt besser wissen
4. **Bit Rot**: Code ist veraltet durch Umfeld-Änderungen
Aktionsplan:
5. Tech Debt Inventory erstellen (alle Items)
6. Impact Score: Wie sehr behindert es uns? (1-5)
7. Aufwand Score: Wie viel Arbeit? (1-5)
8. Priorität: Impact hoch + Aufwand niedrig = zuerst!
9. Budget: 20% jedes Sprints für Tech Debt reservieren
10. Tracking: Tech Debt als Tickets im Board (nicht ignorieren!)
Business Case: Tech Debt → Langsamere Features → Höhere Kosten
KPIs: Deployment Frequency, Lead Time, Change Failure Rate
Weiterhin ist es ratsam, die Ergebnisse immer kritisch zu prüfen.
Dementsprechend solltest du die einzelnen Schritte sorgfältig abarbeiten.
Prompt 10: Inkrementelle Migration
Insbesondere für den Einstieg sind die folgenden Informationen hilfreich.
Implementiere eine inkrementelle Migration (Strangler Fig):
Aktuell: [z.B. "PHP Monolith, 200 Endpoints"]
Ziel: [z.B. "Node.js Microservices"]
Schritt für Schritt:
1. **Proxy aufsetzen**: Nginx/API Gateway vor beider Systeme
2. **Route identifizieren**: Welchen Endpoint als erstes migrieren?
3. **Neuen Service erstellen**: Endpoint im neuen Stack
4. **Test parallel**: Alter + neuer Endpoint, Responses vergleichen
5. **Traffic umleiten**: Proxy Route zum neuen Service
6. **Monitor**: Errors, Latency, Correctness prüfen
7. **Alten Code entfernen**: Erst wenn neuer Service stabil
8. **Nächste Route**: Repeat
9. **Shared State**: Wie gehen beide Systeme mit der DB um?
10. **Feature Flags**: Schrittweise Rollout pro User/Region
Kriterien wann ein Endpoint migriert wird:
- Häufige Änderungen → früh migrieren
- Stabil und selten geändert → später migrieren
- Hohe Komplexität → aufteilen, dann migrieren
Dabei zeigt dieses Beispiel den grundlegenden Ansatz.
Zudem lassen sich die Ergebnisse auch auf andere Projekte übertragen.
FAQ
Big Bang oder inkrementelle Migration?
Dementsprechend solltest du die folgenden Aspekte kennen.
Fast immer inkrementell (Strangler Fig Pattern). Big Bang funktioniert nur bei sehr kleinen Projekten. Inkrementell: Weniger Risiko, schnellere Wertschöpfung, Team lernt den neuen Stack während des Projekts.
Wie verkaufe ich eine Migration ans Management?
Vor allem für den praktischen Einsatz sind diese Informationen wertvoll.
Nicht „wir müssen modernisieren“ sondern: „Neue Features dauern 3x länger als nötig. Migration verkürzt die Time-to-Market um 60% und senkt die Server-Kosten um 40%.“ Konkrete Zahlen, Business-Impact, ROI.
Kann AI bei Code-Migration helfen?
Somit kannst du direkt mit der Umsetzung beginnen.
AI ist dafür gemacht. Code von Framework A nach B konvertieren, Dependencies updaten, Tests für Legacy Code generieren – das sind ideale AI-Aufgaben. Nutze AI für den Großteil der mechanischen Arbeit, reviewe manuell.
Im Grunde sparst du dadurch langfristig viel Zeit.
Verwandte Artikel:
Grundsätzlich empfiehlt es sich, schrittweise vorzugehen.
Zuletzt aktualisiert: März 2026