Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin
ProPra2024 > Bestandscode > Refactoringpraxis > gildedrose_tests

Gilded Rose: Festhalten der Funktionalität

Experience

Ziel

Ich kann mich für Code, den ich refaktorieren möchte, dagegen versichern, das Verhalten versehentlich zu ändern.

Hintergrund

"Gilded Rose" ist eine tolle Übungsaufgabe für den Umgang mit Bestandscode: Obwohl das Programm winzig klein ist (und die Übungen deshalb kurz), kann man alle wichtigen Teilaufgaben daran üben.

In dieser Aufgabe machen wir die erste, nachfolgende bauen darauf auf.

Loose

Arbeitsschritte

  • Einlesen in die Domäne: Lesen Sie grob die Anforderungsbeschreibung (nur lesen, noch nichts machen) von "Gilded Rose": Requirements Specification.
    (Es gibt auch eine deutsche Fassung, aber da die Software auf Englisch ist, geht die Arbeit mit der englischen besser.)
  • Software beschaffen: Kopieren Sie (einfach per Copy/Paste) den Quellcode von gilded_rose.py in die Datei gildedrose/gilded_rose.py in Ihrem ProPra-Verzeichnis.
  • Testbasis beschaffen: Kopieren Sie (einfach per Copy/Paste) den Quellcode von test_gilded_rose.py in die Datei gildedrose/test_gilded_rose.py in Ihrem ProPra-Verzeichnis.
  • Machen Sie einen Commit mit den beiden Dateien gildedrose/*.
  • 1 test_gilded_rose.py enthält genau einen Test. Führen Sie die Datei aus: Der Test schlägt fehl. Lesen, verstehen und reparieren Sie den Test.
  • Machen Sie einen Commit mit der reparierten Datei test_gilded_rose.py.
  • 1 git -P show HEAD (Achtung: Starten Sie script in einer zusätzlichen zweiten Shell, sonst werden Sie viel zu bereinigen haben.)
  • Sie können mit dieser Testsuite weiterarbeiten, die unittest benutzt. Praktischer ist aber, Sie verwenden pytest mit tabellengesteuerten Tests, wie aus Aufgabe m_pytest_parametrize bekannt. Wir empfehlen dringend, den Test jetzt diese Form umzuarbeiten. Gestalten Sie Test und Tabelle so, wie es zum Hinschreiben der Testfälle am praktischsten ist.
  • Arbeiten Sie nun die Anforderungen durch und schreiben Sie, wo nötig, jeweils eine oder mehrere Testeingaben mit einer immer gleichen beliebigen Testausgabe. (Die Anforderung zu "conjured items" ist dabei natürlich auszulassen, denn die ist ja noch gar nicht umgesetzt, sondern ist der Anlass für das ganze "Softwareprojekt".)
  • Lassen Sie die Testfälle laufen und ergänzen Sie die erhaltene Testausgabe zu jedem Testfall. Es geht nicht darum, ob die Ausgabe richtig oder falsch ist, sondern die Tests sind Charakterisierungstests.
  • 2 Lassen Sie die Testfälle laufen und überzeugen Sie sich, dass alle Tests erfolgreich sind.
  • Machen Sie einen Commit mit Ihren Ergänzungen.
  • 3 git -P show HEAD
  • 1 Betrachten Sie nun die Tabelle bzw. die Klasse mit Ihren Testfällen. Ist sie übersichtlich? Gut verständlich? Könnte man z.B. ggf. einen duplizierten Testfall leicht erkennen?
  • 2 Falls nicht: Warum (vermutlich) ist Ihnen das unterwegs nicht aufgefallen? Bzw. warum haben Sie nichts dagegen unternommen?
  • 3 Halten Sie Ihre Testfallmenge eher für übervorsichtig (sehr viele Tests, vermutlich mehr als nötig) oder für hoffnungsvoll (eher wenige Tests: "Wird schon klappen") oder für genau passend? Warum? Welches wäre der erste übervorsichtige Test, den man streichen könnte, bzw. der nächste, den man zufügen sollte, um weniger hoffnungsvoll zu agieren?
Program

Abgabe

Geben Sie den Quellcode ab, wie er am Ende der Aufgabe vorliegt.

Geben Sie ein Kommandoprotokoll ab, das genau nur die Eingaben und Ausgaben der obigen Kommandos 1, 2, … enthält. Entfernen Sie vor Abgabe eventuelle Fehlversuche und sonstige zusätzliche Kommandos aus dem Protokoll.

Geben Sie ein Markdown-Dokument ab mit knappen Antworten zu den oben gestellten Fragen 1, 2, … Geben Sie diese Marker mit an.
Geben Sie ggf. Beispiele oder benutzte Quellen an.