Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin
ProPra2024 > Debugging > Debugging-Praxis > einkaufsliste-defekt3

Debugging eines bedingungsabhängigen Versagens

Trial
Product

Ziel

Ich bin in der Lage, mittels Debugger durch ein Programm zu navigieren, kann bedingungsabhängige Defekte erkennen und beheben.

Detailed

Arbeitsschritte

Der letzte Bug: Ein bedingungsabhängiger Bug

  • 1 Testen Sie manuell alle möglichen Eingaben für das Programm einzeln, also erst 0, dann 1, usw. Bei welchen Eingaben erhalten Sie eine Fehlermeldung? Wie lautet die Fehlermeldung?
  • 2 Die in den Fehlermeldungen genannte Stelle kommt uns aus der ersten Aufgabe bekannt vor. Welche Zeile wird in der Fehlermeldung referenziert?
  • Setzen Sie an der in der Fehlermeldung genannten Stelle im Quellcode einen Breakpoint. Da dieser Fehler innerhalb einer for-Schleife stattfindet und bisher nur bekannt ist, dass ein bestimmter Variablenwert betroffen ist, müssen wir diese Bedingung formulieren. Nur so können wir den fehlerhaften Zustand untersuchen.
  • 3 Wie lautet die Bedingung, an der der Debugger das Programm für uns anhalten soll?
  • Setzen Sie einen Conditional Breakpoint in der in in 1 mit der in 2 genannten Bedingung und starten Sie den Debugger.
  • 4 Prüfen Sie den Zustand der Variablen.
    • Welche Zutat wird in ingr gerade abgefragt?
    • Finden Sie diese Zutat in all_ingredient_locs? Wenn nein, gibt es eine ähnlich klingende Zutat? Worin liegt der Unterschied?
  • Es gibt hier, wie meistens, verschiedene Möglichkeiten, den Defekt zu lösen. Wenn Sie sich ingredients.json, aus der die Daten von all_ingredient_locs kommen, anschauen, stellen Sie fest, dass bezüglich der Schreibweise der Zutaten die von Ihnen identifizierte Stelle einen Ausreißer darstellt.
  • 1 Beheben Sie den falsch geschriebenen Dateneintrag.
  • 5 Führen Sie das Programm mit den korrigierten Daten noch einmal aus. Finden Sie noch eine Stelle, in der solch ein Fehler auftritt?
  • 1 Führen Sie das Programm grocery_list.py im Terminal aus. Geben Sie die Ausgabe des Programms mit der Eingabe 5 an.
  • 2 Machen Sie einen separaten Commit des korrigierten Quellcodes und zeigen Sie dann git -P show HEAD.
Bemerkung:

Wir haben in diesem Fall ein händisches Testen durchgeführt. Das funktioniert, wenn das Programm nicht allzu komplex ist und/oder es nur wenige mögliche Eingaben gibt. In der Realität möchte man dieses Vorgehen aber mit geeigneten Tests automatisieren. Mehr dazu lernen Sie in der Aufgabengruppe Unittests.

Trace
Snippet
Information

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.