Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| modul:m323:learningunits:lu07:grundlagen [2024/03/28 14:07] – angelegt - Externe Bearbeitung 127.0.0.1 | modul:m323:learningunits:lu07:grundlagen [2026/09/09 11:06] (aktuell) – LU07a mit Inhalt gefüllt (Band D / D1B) admin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU07a - Was ist Refactoring ====== | ====== LU07a - Was ist Refactoring ====== | ||
| + | |||
| + | **Refactoring** heisst: die //innere Struktur// von bestehendem Code verbessern, ohne sein //nach aussen sichtbares Verhalten// zu verändern. Gleiche Eingabe, gleiche Ausgabe, gleiche Seiteneffekte - nur der Weg dorthin ist danach lesbarer, kürzer oder besser zerlegt. | ||
| + | |||
| + | <WRAP center round info 90%> | ||
| + | **Die Faustregel: | ||
| + | </ | ||
| + | |||
| + | ===== Abgrenzung: was Refactoring nicht ist ===== | ||
| + | |||
| + | Der Begriff wird im Alltag für alles verwendet, was man an altem Code tut. Für Band D müssen Sie die Fälle auseinanderhalten: | ||
| + | |||
| + | ^ Tätigkeit ^ Verhalten ändert sich ^ Struktur ändert sich ^ Beispiel ^ | ||
| + | | **Refactoring** | nein | ja | Eine 60-Zeilen-Funktion in vier benannte Funktionen zerlegen | | ||
| + | | **Bugfix** | ja (das falsche Verhalten verschwindet) | evtl. | ''<'' | ||
| + | | **Neues Feature** | ja (es kommt etwas dazu) | ja | Eine Exportfunktion ergänzen | | ||
| + | | **Optimierung** | nein (Ergebnis gleich, Laufzeit anders) | ja | Eine Liste durch ein '' | ||
| + | | **Rewrite** | oft ja | vollständig | Das Modul wegwerfen und neu schreiben | | ||
| + | |||
| + | Refactoring und Optimierung sehen ähnlich aus, verfolgen aber verschiedene Ziele: Refactoring optimiert für den **Menschen**, | ||
| + | |||
| + | <WRAP center round important 90%> | ||
| + | **Nie beides gleichzeitig.** Wer im selben Schritt umbaut //und// ein Feature ergänzt, kann bei einem Fehler nicht mehr sagen, welche der beiden Änderungen ihn verursacht hat. Erst refactoren, testen, committen - dann das Feature. | ||
| + | </ | ||
| + | |||
| + | ===== Warum überhaupt? ===== | ||
| + | |||
| + | Code wird viel häufiger gelesen als geschrieben. Jede Minute, die eine unklare Funktion beim nächsten Lesen kostet, zahlen Sie mehrfach - und in einer Projektarbeit oft schon nach zwei Wochen an sich selbst. | ||
| + | |||
| + | * **Verständlichkeit: | ||
| + | * **Änderbarkeit: | ||
| + | * **Testbarkeit: | ||
| + | * **Fehlersuche: | ||
| + | |||
| + | ===== Der Refactoring-Zyklus ===== | ||
| + | |||
| + | Refactoring ist keine grosse Aufräumaktion am Freitagnachmittag, | ||
| + | |||
| + | - **Sicherheitsnetz prüfen.** Gibt es Tests, die das aktuelle Verhalten festhalten? Wenn nein: zuerst welche schreiben (siehe [[.: | ||
| + | - **Einen Smell auswählen.** Genau einen, nicht fünf (siehe [[.: | ||
| + | - **Eine Technik anwenden.** Möglichst mit dem Refactoring-Werkzeug der IDE statt von Hand. | ||
| + | - **Tests laufen lassen.** Rot? Sofort zurück zum letzten funktionierenden Stand. | ||
| + | - **Committen.** Kleine Commits sind später Ihr Nachweis, dass das Verhalten gleich geblieben ist. | ||
| + | - Zurück zu Schritt 2. | ||
| + | |||
| + | <WRAP center round tip 90%> | ||
| + | **Faustregel für die Schrittgrösse: | ||
| + | </ | ||
| + | |||
| + | ===== Wann refactoren Sie? ===== | ||
| + | |||
| + | * **Vorbereitend**, | ||
| + | * **Aufräumend**, | ||
| + | * **Nebenbei** (Pfadfinderregel): | ||
| + | |||
| + | Nicht refactoren sollten Sie am Tag vor einer Abgabe ohne Tests, an Code, den niemand mehr liest, und an Stellen, die Sie nicht verstehen - dort steht zuerst Lesen und Testen an. | ||
| + | |||
| + | ===== Einordnung ins Kompetenzband D ===== | ||
| + | |||
| + | Diese Learning Unit deckt das Kompetenzband **D - Refactoring und bestehenden Code optimieren** ab: | ||
| + | |||
| + | ^ Feld ^ Anspruch ^ Seiten ^ | ||
| + | | **D1B** | Techniken und Massnahmen **aufzählen** und deren Zweck **erklären** | LU07a, [[.: | ||
| + | | **D1I** | Techniken **anwenden**, | ||
| + | | **D1A** | Auswirkungen **einschätzen**, | ||
| + | |||
| + | Im [[modul: | ||
| + | |||
| + | ===== Quellen ===== | ||
| + | |||
| + | * Martin Fowler: // | ||
| + | * [[https:// | ||
| + | |||
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||