Zum Inhalt springen

Informatik · Klasse 11–13 · aktualisiert

Refactoring: Code sicher verbessern

Du lernst, Programme innen umzubauen, ihr beobachtbares Verhalten zu bewahren und Änderungen mit passenden Tests zu prüfen.

0 von 9 Aufgaben gelöst

Refactoring: Code sicher verbessern

Kurz gesagt

Refactoring ordnet den Code, also die geschriebenen Programmanweisungen, neu, ohne das beobachtbare Verhalten zu ändern. Kleine Schritte und Tests senken das Fehlerrisiko, geben aber keine Garantie.

Auch ein funktionierendes Programm kann schwer verständlich sein. Beim Refactoring verbesserst du seinen inneren Aufbau. Tests sind Probeläufe mit erwarteten Ergebnissen; sie helfen dir, Fehler beim Umbau zu entdecken.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Termi das Ziel für dich ab.

4 Abschnitte

Beim Refactoring veränderst du den inneren Aufbau eines bestehenden Programms. Sein beobachtbares Verhalten soll dabei gleich bleiben: Unter denselben Voraussetzungen und mit derselben Eingabe liefert es weiterhin dieselben Ergebnisse und Wirkungen. Eine Eingabe sind die Daten, die das Programm erhält. Beobachtbar sind zum Beispiel angezeigte Texte, zurückgegebene Ergebnisse und Änderungen an gespeicherten Daten.

Auch Fehlermeldungen gehören zum beobachtbaren Verhalten. Gibt ein Programm nach dem Umbau bei leerer Eingabe eine zusätzliche Fehlermeldung aus, hat sich dieses Verhalten verändert. Eine neue Funktion oder eine Fehlerkorrektur kann sinnvoll sein. Sobald sie das beobachtbare Verhalten verändert, ist diese Änderung jedoch kein Refactoring.

Eine Variable ist ein Name für einen gespeicherten Wert. Du kannst einen rein internen Variablennamen ändern und alle seine Verwendungen passend ersetzen. Bleiben dadurch Ergebnisse und Wirkungen gleich, ist das ein Beispiel für Refactoring. Eine sichtbare Meldung um einen Begrüßungssatz zu erweitern, verändert dagegen die Ausgabe.

Die erfundenen Modelle dieser Lektion haben außer den ausdrücklich genannten Ausgaben und Ergebnissen keine weiteren Wirkungen. Wir untersuchen an ihnen keine Ausführungszeiten.

Definition

Refactoring

Eine Umstrukturierung von bestehendem Code, bei der das beobachtbare Programmverhalten unter gleichen Voraussetzungen erhalten bleibt.

Teste dich

LeichtWelche Änderung passt zur Definition von Refactoring?

Alles auf einen Blick

Refactoring

  • Verhalten

    Beim Refactoring bleiben beobachtbare Ergebnisse und Wirkungen unter gleichen Voraussetzungen erhalten.

  • Warnzeichen

    Code-Duplizierung und lange Methoden geben Anlass zur Prüfung, beweisen aber keinen Fehler.

  • Auslagern

    Eine gemeinsame Aufgabe wird an den bisherigen Stellen aufgerufen; benötigte Ausführungen bleiben erhalten.

  • Kleine Schritte

    Prüfe den Ausgangszustand, ändere eine kleine Einheit und kläre Abweichungen vor dem nächsten Schritt.

  • Tests

    Typische Eingaben und erlaubte Randfälle helfen bei der Fehlersuche, liefern aber keine Garantie.

Musteraufgabe · Schritt für Schritt

Einen gemeinsamen Treffpunkthinweis auslagern (erfundenes Modell)

  1. 1Aufgabe: In der Klasse „Werkstattplan“ soll ein gemeinsamer Ausgabeschritt ausgelagert werden. Die Methoden erhalten keine Eingaben und haben außer ihren Ausgaben keine weiteren Wirkungen.
  2. 2Vorher: Die Methode „zeigeFrühplan“ gibt zuerst „Früh“ und dann „Treffpunkt: Halle“ aus. Die Methode „zeigeSpätplan“ gibt zuerst „Spät“ und dann „Treffpunkt: Halle“ aus.
  3. 3Erwartungen prüfen: Rufe jede Methode einzeln auf. Die Tests erwarten genau die jeweils genannten zwei Ausgaben in dieser Reihenfolge und bestätigen sie vor dem Umbau.
  4. 4Eine neue Methode „zeigeTreffpunkt“ anlegen: Sie gibt einmal „Treffpunkt: Halle“ aus. Die bisherigen Methoden sind noch unverändert. Prüfe ihre Ausgaben erneut.
  5. 5Ersten Aufruf einsetzen: Ersetze in „zeigeFrühplan“ den bisherigen Treffpunkthinweis durch einen Aufruf von „zeigeTreffpunkt“. Die Ausgabe „Früh“ bleibt davor stehen. Prüfe beide bisherigen Methoden erneut.
  6. 6Zweiten Aufruf einsetzen: Ersetze auch in „zeigeSpätplan“ den bisherigen Treffpunkthinweis durch den neuen Aufruf. Die Ausgabe „Spät“ bleibt davor stehen. Prüfe wieder beide Methoden.
  7. 7Ablauf nachverfolgen: „zeigeFrühplan“ zeigt „Früh“ und ruft dann „zeigeTreffpunkt“ auf. Dieser Aufruf zeigt „Treffpunkt: Halle“. Beim Spätplan entsteht entsprechend die Folge „Spät“, „Treffpunkt: Halle“.
  8. 8Ergebnis: Beide benötigten Ausgabefolgen bleiben in diesem Modell erhalten. Die Tests unterstützen die Prüfung; die Erklärung des Ablaufs zeigt zusätzlich, warum jeder Hinweis weiterhin an seiner bisherigen Stelle erscheint.

Fehler finden

Prüfe den Umbau eines Textprogramms In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Ein Programm gibt nach dem Umbau für dieselbe erlaubte Eingabe einen anderen Text aus. Diese Änderung ist . Zwei Methoden derselben Klasse enthalten denselben benötigten Ausgabeschritt. Beide sollen ihn weiterhin einmal ausführen. Nach dem Auslagern rufen an den bisherigen Stellen die neue Methode auf. Ein Test prüft die Eingabe „Wolke“. Für den noch ungeprüften leeren Text liefert sein Erfolg .

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Refactoring

LeichtEin Programm zeigt bei der Eingabe „Lampe“ den Text „Bereit“. Du benennst eine interne Variable samt allen Verwendungen passend um; das Verhalten bleibt gleich. Welche Ausgabe erwartest du danach bei „Lampe“?
MittelIn der Klasse „Pflanzenpflege“ enthalten zwei Methoden den Schritt „Gießkanne reinigen“. Beide Ausführungen werden benötigt. Der Schritt wird in eine neue Methode ausgelagert. Wie ersetzt du die bisherigen Stellen?
SchwerEin Programm erlaubt Texte mit einem bis sechs Zeichen. Nach dem Umbau bestehen Tests mit zwei, drei und vier Zeichen. Welche Aussage verbindet zusätzliche Tests beider erlaubten Längengrenzen mit einer richtigen Einschätzung ihrer Sicherheit?

Weiterlesen in Informatik