Code-Modernisierung ist zentral für Clean Core-Initiativen. Legacy-ABAP-Code verwendet oft Muster und Konstrukte, die zwar funktional sind, aber nicht den modernen Qualitätsstandards oder ABAP Cloud-Anforderungen entsprechen. Die ABAP Development Tools (ADT) in Eclipse bieten Refactoring-Fähigkeiten, die Entwicklern helfen, Legacy-Code in moderne, wartbare ABAP-Implementierungen zu transformieren und dabei das Verhalten zu bewahren und Risiken zu reduzieren.
Dieser Leitfaden untersucht die Refactoring-Tools von ADT im Detail und demonstriert, wie sie effektiv für ABAP-Modernisierungsprojekte eingesetzt werden können.
Refactoring im ABAP-Kontext verstehen
Refactoring bedeutet, die Codestruktur zu ändern, ohne das Verhalten zu verändern. In der ABAP-Modernisierung dient Refactoring mehreren Zwecken.
Warum ABAP-Code refaktorieren?
Clean Core Compliance erfordert die Umstrukturierung von Code zur Nutzung freigegebener APIs und moderner Muster. Wartbarkeit bedeutet die Verbesserung der Codestruktur für leichteres Verständnis und Modifikation. Testbarkeit ermöglicht Unit-Testing durch bessere Kapselung. Performance-Optimierung verbessert Muster ohne Änderung der Funktionalität. Und Standards-Compliance richtet Code an organisatorischen Codierungsstandards aus.
Refactoring-Prinzipien
Effektives Refactoring folgt Schlüsselprinzipien. Kleine Schritte bedeuten inkrementelle Änderungen mit Tests nach jedem Schritt. Verhaltenserhaltung stellt sicher, dass das System vor und nach dem Refactoring identisch funktioniert. Automatisierte Tests verifizieren, dass das Verhalten erhalten bleibt. Versionskontrolle verfolgt Änderungen für Review und potenzielles Rollback.
ADTs Rolle im sicheren Refactoring
ADT-Refactoring-Tools bieten automatisierte Transformationen, die weniger fehleranfällig sind als manuelle Änderungen, Vorschau von Änderungen vor der Anwendung, Querverweissaktualisierungen über die gesamte Codebasis und Validierung, dass Transformationen sicher sind.
Grundlegende Refactoring-Operationen
ADT bietet mehrere fundamentale Refactoring-Operationen.
Umbenennen (Rename)
Das Rename-Refactoring ändert einen Bezeichner durchgehend in der Codebasis. Es ist angebracht bei der Korrektur irreführender oder unklarer Namen, der Angleichung an Namenskonventionen und der Selbstdokumentation von Code. Zur Verwendung positionieren Sie den Cursor auf dem umzubenennenden Bezeichner, drücken Alt+Shift+R oder nutzen das Kontextmenü Refactor, Rename, geben den neuen Namen ein, sehen eine Vorschau der Änderungen über alle betroffenen Dateien und wenden das Refactoring an. Es aktualisiert Variablen-, Methoden-, Klassen- oder Interface-Deklarationen, alle Referenzen auf das umbenannte Element, optional Kommentare mit dem alten Namen und Dokumentationsreferenzen. Best Practices sind die Verwendung beschreibender Namen, die den Zweck vermitteln, das Befolgen organisatorischer Namenskonventionen, die Berücksichtigung der Auswirkung auf abhängigen Code und das Review aller Änderungen vor der Anwendung.
Methode extrahieren (Extract Method)
Extract Method erstellt eine neue Methode aus ausgewähltem Code. Verwenden Sie es zum Aufbrechen langer Methoden, zur Eliminierung von Code-Duplizierung, zur Isolation von Logik für Tests und zur Erstellung wiederverwendbarer Komponenten. Selektieren Sie den zu extrahierenden Codeblock, drücken Sie Alt+Shift+M oder nutzen Sie Refactor, Extract Method, ADT analysiert die Selektion und bestimmt Parameter, geben Sie den neuen Methodennamen ein, reviewen und adjustieren Sie Parameter und sehen Sie eine Vorschau und wenden Sie an. ADT bestimmt erforderliche Eingabeparameter aus verwendeten Variablen, identifiziert Ausgabeparameter aus modifizierten Variablen, erstellt die Methodensignatur und ersetzt den Originalcode durch einen Methodenaufruf. Best Practices sind die Extraktion kohäsiver Blöcke, die eine Sache tun, die Benennung der Methode nach dem, was sie tut, das Halten von Parameterlisten überschaubar und die Berücksichtigung der Sichtbarkeit.
Variable extrahieren (Extract Variable)
Extract Variable erstellt eine Variable aus einem Ausdruck. Dies ist nützlich zur Benennung komplexer Ausdrücke für Klarheit, zur Vermeidung wiederholter Berechnung desselben Werts und zum Aufbrechen komplexer Statements. Selektieren Sie den zu extrahierenden Ausdruck, nutzen Sie Refactor, Extract Variable, geben Sie den Variablennamen ein und wählen Sie, ob alle Vorkommen oder nur das ausgewählte ersetzt werden sollen.
Inlining
Inline ersetzt einen Methodenaufruf oder eine Variable durch deren Inhalt. Verwenden Sie es zum Entfernen unnötiger Indirektion, zur Vereinfachung trivialer Methoden und zur Vorbereitung auf weiteres Refactoring. Positionieren Sie den Cursor auf dem Methodenaufruf oder der Variable, nutzen Sie Refactor, Inline, wählen Sie, ob alle Vorkommen oder nur das ausgewählte inline ersetzt werden sollen, und sehen Sie eine Vorschau und wenden Sie an.
Fortgeschrittene Refactoring-Techniken
Über grundlegende Operationen hinaus unterstützt ADT anspruchsvollere Refactorings.
Member verschieben (Move Member)
Verschieben Sie Methoden oder Attribute zwischen Klassen, wenn Funktionalität falsch platziert ist, zur Verbesserung der Klassenkohäsion und zur Implementierung ordnungsgemäßer Kapselung. Berücksichtigen Sie dabei die Aktualisierung aller Aufrufer für den neuen Ort, nötige Sichtbarkeitsänderungen und die Aktualisierung von Tests für den neuen Ort.
Methodensignatur ändern
Modifizieren Sie Methodenparameter zum Hinzufügen oder Entfernen von Parametern, zur Änderung von Parametertypen, zur Neuordnung von Parametern und zum Hinzufügen von Standardwerten. Positionieren Sie den Cursor auf der Methodensignatur, nutzen Sie Refactor, Change Method Signature, fügen Sie Parameter im Dialog hinzu, entfernen oder modifizieren Sie sie und sehen Sie eine Vorschau der Aktualisierungen aller Aufrufer.
Interface extrahieren
Erstellen Sie ein Interface aus Klassenmethoden zur Ermöglichung loser Kopplung, zur Unterstützung von Test-Doubles und zur Definition von Verträgen zwischen Komponenten. Selektieren Sie die Klasse, nutzen Sie Refactor, Extract Interface, wählen Sie die im Interface zu inkludierenden Methoden, benennen Sie das Interface, und ADT erstellt das Interface und aktualisiert die Klasse zur Implementierung.
Pull Up / Push Down
Verschieben Sie Member in Klassenhierarchien. Pull Up verschiebt Member von Unterklasse zu Oberklasse, Push Down verschiebt Member von Oberklasse zu Unterklasse. Verwenden Sie dies zur Konsolidierung gemeinsamer Funktionalität in der Basisklasse, zur Spezialisierung von Funktionalität für spezifische Unterklassen und zur Verfeinerung von Klassenhierarchien.
Refactoring für Clean Core
Spezifische Refactoring-Muster unterstützen die Clean Core-Migration.
Direkten Datenbankzugriff ersetzen
Transformieren Sie direkte SELECT-Statements zur CDS-View-Nutzung. Das Muster ist: Identifizieren Sie SELECT-Statements gegen SAP-Tabellen, finden oder erstellen Sie die geeignete CDS-View, refaktorieren Sie SELECT zur Nutzung der View und aktualisieren Sie Feldreferenzen auf View-Felder. Die Schritte sind: Extrahieren Sie das SELECT in eine dedizierte Methode, ersetzen Sie den Tabellennamen durch den CDS-View-Namen, aktualisieren Sie die Feldliste auf View-Feldnamen, passen Sie die WHERE-Klausel für View-Parameter an falls zutreffend und testen Sie zur Verifikation äquivalenter Ergebnisse.
FORM-Routinen modernisieren
Konvertieren Sie FORM-Routinen zu Methoden. FORM-Routinen sind in ABAP Cloud deprecated, Methoden bieten bessere Kapselung und unterstützen bessere Typisierung. Das Muster ist: Erstellen Sie eine Klasse zur Aufnahme der Methoden, erstellen Sie für jede FORM eine Methode mit äquivalenter Signatur, verschieben Sie den FORM-Body in die Methode, aktualisieren Sie PERFORM-Aufrufe zu Methodenaufrufen und entfernen Sie die FORM-Routine.
Geschäftslogik aus UI-Code extrahieren
Separieren Sie Geschäftslogik vom User-Interface-Code. Dynpros werden in ABAP Cloud nicht unterstützt, Geschäftslogik sollte wiederverwendbar sein und Unit-Testing der Logik ermöglicht werden. Das Muster ist: Identifizieren Sie Geschäftslogik in PAI/PBO-Modulen, extrahieren Sie in dedizierte Klassen, erstellen Sie saubere Interfaces für die Logik, und UI-Code ruft Geschäftslogik über Interfaces auf.
Veraltete Statements ersetzen
Aktualisieren Sie deprecated ABAP-Statements auf moderne Äquivalente. Häufige Ersetzungen sind MOVE TO durch Zuweisung mit Gleichheitszeichen, COMPUTE durch Gleichheitszeichen-Ausdruck, TRANSLATE durch String-Funktionen, CONDENSE durch condense()-Funktion und STRLEN durch strlen()-Funktion. Während nicht alle ADT-Refactoring-Unterstützung haben, kann Search and Replace mit sorgfältigem Review diese systematisch handhaben.
Quick Assist und Quick Fix
ADTs Quick Assist und Quick Fix-Features beschleunigen das Refactoring.
Quick Fix (Ctrl+1)
Quick Fix adressiert vom Editor identifizierte Probleme wie fehlende Methodenimplementierungen erstellen, fehlende Exception-Handler hinzufügen, Syntaxfehler automatisch korrigieren und fehlende Parameter hinzufügen. Wenn Sie einen Fehler oder eine Warnung sehen, drücken Sie Ctrl+1 für verfügbare Fixes.
Quick Assist
Quick Assist schlägt Verbesserungen für gültigen Code vor wie Konvertierung zwischen verschiedenen ABAP-Syntaxstilen, Hinzufügen oder Entfernen optionaler Keywords, Vorschläge für Variablenextraktionen und Refactoring-Vorschläge.
Testen während des Refactorings
Testen ist essentiell für sicheres Refactoring.
Unit-Tests
Unit-Tests verifizieren, dass das Verhalten erhalten bleibt. Schreiben Sie Tests vor dem Refactoring wenn keine existieren, führen Sie Tests nach jedem Refactoring-Schritt aus, Tests dokumentieren erwartetes Verhalten und fehlgeschlagene Tests identifizieren unbeabsichtigte Änderungen.
Test-Coverage nutzen
Code-Coverage identifiziert ungetesteten Code. Aktivieren Sie Coverage vor dem Ausführen von Tests, identifizieren Sie ungetestete Codepfade, fügen Sie Tests vor dem Refactoring ungetesteten Codes hinzu, und hohe Coverage erhöht das Refactoring-Vertrauen.
Refactoring-Workflow
Ein systematischer Workflow sichert effektives Refactoring.
Phase 1: Analyse
Verstehen Sie den zu refaktorierenden Code, identifizieren Sie die spezifisch benötigten Verbesserungen, planen Sie die Sequenz der Refactoring-Schritte und stellen Sie sicher, dass ausreichende Test-Coverage existiert.
Phase 2: Vorbereitung
Erstellen Sie einen dedizierten Transport für das Refactoring, sichern oder versionieren Sie den Originalcode, richten Sie Test-Ausführungsfähigkeit ein und kommunizieren Sie mit dem Team über laufendes Refactoring.
Phase 3: Ausführung
Machen Sie kleine, inkrementelle Änderungen, testen Sie nach jeder Änderung, committen Sie häufig in die Versionskontrolle und dokumentieren Sie signifikante Entscheidungen.
Phase 4: Validierung
Führen Sie die vollständige Test-Suite aus, führen Sie Code-Review durch, lassen Sie ATC-Prüfungen laufen und validieren Sie in der Testumgebung.
Häufige Refactoring-Szenarien
Szenario: Lange Methode
Eine Methode mit Hunderten von Zeilen braucht Zerlegung. Identifizieren Sie logische Sektionen innerhalb der Methode, extrahieren Sie jede Sektion in eine eigene Methode, benennen Sie extrahierte Methoden beschreibend, die Originalmethode wird zur Orchestrierung und testen Sie jede extrahierte Methode unabhängig.
Szenario: Feature Envy
Eine Methode nutzt extensiv Daten einer anderen Klasse. Erwägen Sie, die Methode in die andere Klasse zu verschieben, nutzen Sie Move Method-Refactoring, aktualisieren Sie Aufrufer für den neuen Ort, oder erstellen Sie alternativ geeignete Accessor-Methoden.
Szenario: Duplizierter Code
Dieselbe Logik erscheint an mehreren Stellen. Identifizieren Sie alle Instanzen der Duplizierung, extrahieren Sie in eine gemeinsame Methode oder Klasse, ersetzen Sie Duplikate durch Aufrufe des gemeinsamen Codes und überlegen Sie, wo der gemeinsame Code leben sollte.
Best Practices Zusammenfassung
Haben Sie immer Tests vor dem Refactoring, machen Sie kleine, inkrementelle Änderungen, testen Sie nach jeder Änderung, nutzen Sie Versionskontrolle zur Verfolgung von Änderungen, sehen Sie Refactorings vor der Anwendung in der Vorschau, reviewen Sie allen betroffenen Code, dokumentieren Sie signifikante Refactoring-Entscheidungen, kommunizieren Sie mit Teammitgliedern, berücksichtigen Sie Performance-Implikationen und verifizieren Sie Clean Core Compliance nach dem Refactoring.
Fazit
ADTs Refactoring-Tools sind essentiell für ABAP-Modernisierung. Sie ermöglichen Entwicklern, Legacy-Code in moderne, Clean Core-konforme Implementierungen zu transformieren und dabei Risiken durch Automatisierung und Vorschaufähigkeiten zu managen.
Effektive Nutzung von Refactoring erfordert nicht nur Kenntnis der Tools, sondern auch das Verständnis, wann und wie sie anzuwenden sind. Kombiniert mit gründlichem Testen und systematischen Workflows ermöglichen ADT-Refactoring-Tools Organisationen, ihre ABAP-Codebasen stetig zu modernisieren und dabei Systemstabilität zu wahren. Die Investition in das Erlernen dieser Tools zahlt sich während der gesamten Modernisierungsreise aus und ermöglicht schnelleren Fortschritt mit geringerem Risiko und höherer Qualität.
Passender Workshop
Vertiefen Sie Ihr Wissen in unserem eintägigen Workshop:
ABAP Cloud & RAP WorkshopNoch Fragen?
Wir helfen Ihnen bei der ABAP-Modernisierung mit ADT.

