4.3    Best Practices

Beim Refactoring kann es leicht passieren, dass Sie den Überblick verlieren und von Ihrem eigentlichen Vorhaben abkommen, weil Sie immer wieder neue Stellen im Code finden, die Sie verbessern möchten. Hier helfen Ihnen einige Best Practices, sich auf das Wesentliche zu fokussieren.

Nur die innere Struktur darf verändert werden

Bei einem Refactoring sollten Sie sich darauf konzentrieren, nur die interne Struktur einer Funktion zu modifizieren, nicht aber ihre Parameterliste oder den Rückgabewert. Bitten Sie ein KI-Werkzeug um ein Refactoring, hält es sich in der Regel an diese Empfehlung. Um auf Nummer sicher zu gehen, können Sie in Ihrem Prompt zusätzlich angeben, dass die Signatur der Methode nicht verändert werden soll.

Prompt: Do not change the signature of the method, only focus on the inner structure.

Damit stellen Sie sicher, dass sich das Refactoring nicht negativ auf den Rest Ihrer Applikation auswirkt und nur lokal begrenzt bleibt.

Kleinschrittiges Vorgehen

Auch wenn Sie sich nur auf die innere Struktur einer Methode oder Klasse konzentrieren, kann ein Refactoring größere Ausmaße annehmen, je nachdem, welche Rolle die jeweilige Struktur in Ihrer Applikation spielt. Damit das Refactoring nicht ausufert, sollten Sie versuchen, in möglichst kleinen Schritten vorzugehen.

Nutzen Sie KI-Werkzeuge wie den GitHub Copilot oder ChatGPT, lassen Sie Ihren Code zunächst analysieren und sich anzeigen, welches Refactoring-Potenzial die Klasse oder Funktion aufweist. Anschließend können Sie die einzelnen Punkte Schritt für Schritt adressieren. Diese Vorgehensweise hat den Vorteil, dass Sie die einzelnen Schritte ins Versionssystem committen können. Tritt ein Fehler auf, sind Sie maximal einen Schritt von einer funktionierenden Implementierung entfernt und können den letzten Schritt mit einem angepassten Prompt wiederholen.

Wählen Sie die Refactoring-Schritte zu groß und lassen zu viele Aspekte auf einmal umbauen, ist das Risiko von Fehlern und unerwünschtem Verhalten deutlich größer.

Testgetriebenes Refactoring

Stellen Sie vor einem Refactoring sicher, dass die Klasse oder Funktion, die Sie verbessern möchten, durch automatisierte Tests abgesichert ist. In den meisten Fällen handelt es sich dabei um Unit- oder Integrationstests, die die Schnittstellen des Teilsystems überprüfen, das Sie verbessern möchten. Laufen die Tests nach dem Umbau immer noch erfolgreich durch, ist das ein erstes Indiz für ein gelungenes Refactoring. Schlagen die Tests hingegen fehl, müssen Sie den Umbau rückgängig machen, ihn überprüfen oder zumindest analysieren, warum die Tests fehlschlagen.

Automatisierte Tests ersetzen zwar keine manuelle Überprüfung des Refactoring-Ergebnisses oder einen manuellen Test, aber sie geben Ihnen Sicherheit und nehmen Ihnen einen Teil des manuellen Testaufwands ab.

Klare Ziele setzen

Gerade beim Refactoring mit KI-Werkzeugen ist die Gefahr groß, dass es aus dem Rahmen läuft und Sie zu viel umbauen. Bevor Sie mit der Anpassung des Quellcodes beginnen, sollten Sie sich ein konkretes Ziel setzen, beispielsweise die Lesbarkeit des Quellcodes zu verbessern oder bestimmte strukturelle Verbesserungen einzuführen. Vor jedem Refactoring-Schritt sollten Sie prüfen, ob der angestrebte Umbau Sie Ihrem Ziel näherbringt. Ist dies nicht der Fall, sollten Sie ihn nicht durchführen.

In diesem Kapitel haben Sie gesehen, dass KI-Werkzeuge wie der GitHub Copilot schnelle und umfassende Refactorings anbieten. Um wirklich in kleinen Schritten und zielgerichtet zu arbeiten, sollten Sie das Ergebnis mit möglichst präzisen Prompts einschränken.