====== 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