====== LU07.A12 - Refactoring im eigenen Projekt ======
Refactoren Sie eine echte Stelle in Ihrer Flask-Applikation und sichern Sie dabei das Material, das Sie im Portfolio für D1I und D1A brauchen.
==== Detaillierte Aufgabenstellung ====
=== Teil 1: Refactoring (D1I) ===
- Suchen Sie in Ihrem Projekt die **längste Route** oder die Funktion mit den meisten Verzweigungen.
- Schreiben Sie mindestens drei Tests, die ihr heutiges Verhalten festhalten. Bei einer Route: Statuscode und die entscheidenden Inhalte der Response.
- Wenden Sie mindestens drei Techniken aus [[modul:m323:learningunits:lu07:techniken|LU07c]] an, davon eine funktionale aus [[modul:m323:learningunits:lu07:funktionalesrefactoring|LU07d]].
- Ein Commit pro Technik, Commit-Message mit dem Namen der Technik.
- Ziel: Die Route enthält am Ende Request-Verarbeitung und Response, die Berechnung liegt in pure Funktionen ausserhalb.
=== Teil 2: Optimierung (D1A) ===
- Suchen Sie eine Stelle, an der es teuer werden kann: eine Suche in einer Liste, eine verschachtelte Schleife, eine Datenbankabfrage innerhalb einer Schleife, eine wiederholte Berechnung.
- Erzeugen Sie **realistische Testdaten** (nicht fünf Zeilen) und messen Sie mit ''timeit'' oder ''cProfile''.
- Setzen Sie eine Massnahme aus [[modul:m323:learningunits:lu07:optimieren|LU07g]] um, messen Sie nach und prüfen Sie das Ergebnis mit ''assert''.
- Begründen Sie die gewählte Datenstruktur und nennen Sie ihren Preis.
==== Abgabe ====
* Vorher/Nachher als ''git diff'' oder Screenshot aus der Commit-Historie
* Testdatei und Ausgabe des grünen Testlaufs
* Messwerte vorher und nachher mit Angabe der Datenmenge
* Ein Abschnitt Reflexion: Was war schwierig? Welche Technik hat am meisten gebracht? Was würden Sie beim nächsten Mal anders machen?
**Machen Sie das jetzt und nicht am Schluss.** Die Commit-Historie lässt sich nachträglich nicht erfinden, und ohne Vorher-Zustand gibt es keinen Vorher/Nachher-Nachweis. Genau das verlangt das [[modul:m323:leistungsbeurteilungen:lb02:start|Portfolio (LB02)]] für D1I und D1A.
----
{{tag>M323-LU07 M323-D1I M323-D1A}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi