- 1 Section
- 7 Lessons
- unbegrenzt
Aufgaben
Aufgabe 1
Analysiere das folgende Programm und bestimme jeweils den Fehlertyp (Syntax-, Laufzeit- oder Logikfehler).
Korrigiere den Code so, dass er fehlerfrei läuft und das richtige Ergebnis ausgibt.
# A)
print("Willkommen"
print("Summe:", 5 + 3)
# B)
x = 10
y = 0
print("Ergebnis:", x / y)
# C)
zahl = 5
if zahl = 5:
print("Fünf!")
# D)
note = 4
if note > 5:
print("Bestanden")
else:
print("Nicht bestanden")
a) Welche Zeile(n) verursachen einen Syntaxfehler?
b) In welchem Beispiel entsteht ein Laufzeitfehler?
c) In welchem Beispiel ist die Ausgabe zwar gültig, aber inhaltlich falsch (Logikfehler)?
d) Schreibe zu jedem Beispiel die korrigierte Version des Codes auf.
Aufgabe 2
Ordne die Schritte in die richtige Reihenfolge:
| Schritt | Beschreibung |
|---|---|
| A | Fehler reproduzieren |
| B | Ursache verstehen und beheben |
| C | Fehler testen und dokumentieren |
| D | Fehler erkennen |
| E | Fehler eingrenzen |
Welche logische Reihenfolge ergibt den Debugging-Prozess?
(Beispiel: D → A → E → B → C)
Aufgabe 3
Im folgenden Beispiel soll ein Breakpoint gesetzt werden:
def divide(a, b):
return a / b
x, y = 5, 0
print(divide(x, y))
a) An welcher Stelle würdest du den Breakpoint setzen, um die Ursache des Fehlers zu erkennen?
b) Welche Variablen würdest du im Debugger beobachten (Watch)?
c) Wie könntest du den Breakpoint so einschränken, dass er nur bei b == 0 stoppt?
Aufgabe 4
Ergänze im folgenden Python-Code sinnvolle Logging-Zeilen mit passenden Log-Leveln:
def calc_discount(price, discount):
result = price - (price * discount)
return result
print(calc_discount(100, 0.1))
print(calc_discount(50, 2))
a) Füge INFO-Logs für Start und Ergebnis der Berechnung hinzu.
b) Ergänze eine WARN-Meldung, wenn der Rabatt größer als 1 (100 %) ist.
c) Wie würde das Log-Format aussehen, wenn du zusätzlich eine Zeit und eine Anfrage-ID aufnehmen willst?
Aufgabe 5
Analysiere den folgenden Code und bestimme den Fehlertyp:
nums = [1, 2, 3]
for i in range(0, len(nums)+1):
print(nums[i])
a) Welcher Fehlertyp tritt hier auf?
b) Wie würdest du den Fehler im Debugger sichtbar machen?
c) Wie müsste die Schleife angepasst werden?
Aufgabe 6
In folgendem Programm soll überprüft werden, ob der Nutzer ein Profil hat:
user = None
print(user.name)
a) Welcher Fehler tritt auf?
b) Wo würdest du einen Breakpoint setzen?
c) Wie könntest du das Programm robust machen, damit kein Absturz entsteht?
d) Warum ist das kein Syntaxfehler, sondern ein Laufzeitfehler?
Aufgabe 7
Unten findest du eine Berechnungsfunktion, die manchmal falsche Ergebnisse liefert:
def calc(a, b):
temp = a + b
return temp / 2 * 3
a) Teste mit den Werten a = 2, b = 4. Was kommt heraus?
b) Wo könnte der logische Fehler liegen?
c) Korrigiere die Formel, sodass zuerst der Durchschnitt und dann die Multiplikation erfolgt.
d) Wie würdest du mit einem Debugger prüfen, ob der Zwischenschritt temp / 2 korrekt ist?
Aufgabe 8
Ordne die passenden Werkzeuge oder Methoden zu den Szenarien:
| Szenario | Werkzeug / Methode |
|---|---|
| Fehler tritt nur bei bestimmten Eingaben auf | … |
| Eine Variable verändert sich unerwartet in einer Funktion | … |
| Der Code stürzt auf dem Server ab, aber nicht lokal | … |
| Du willst sehen, wie sich eine Zählvariable entwickelt | … |
| Du möchtest den gesamten Aufrufpfad eines Fehlers nachvollziehen | … |
Wähle aus:
Debugger, Conditional Breakpoint, Logging, Watch Expressions, Call-Stack
Aufgabe 9
Erkläre in eigenen Worten:
a) Warum ist „Herumprobieren“ beim Debugging keine gute Strategie?
b) Welche Vorteile hat es, Hypothesen zu formulieren und schrittweise zu prüfen?
c) Wie hilft dir das Dokumentieren gefundener Ursachen bei späteren Projekten?
Aufgabe 10
Lies den fehlerhaften Code und beschreibe den wahrscheinlichsten Fehlergrund:
def total(items):
for item in items:
sum = sum + item
return sum
a) Warum schlägt dieser Code fehl?
b) Welche Meldung würdest du erwarten?
c) Wie lautet die korrekte Variante?
d) Wie würdest du den Fehler mithilfe des Debuggers sichtbar machen?
Aufgabe 11
Ordne folgende Aussagen „richtig“ oder „falsch“ zu:
| Aussage | Richtig / Falsch |
|---|---|
| Logging ersetzt den Debugger vollständig. | |
| Der Call-Stack zeigt, aus welcher Funktion ein Fehler stammt. | |
| Ein Off-by-One-Fehler ist ein Syntaxfehler. | |
| Breakpoints können Bedingungen haben. | |
| Eine gute Fehlerdokumentation spart langfristig Zeit. |
Aufgabe 12
Erstelle dein eigenes kleines Testprogramm (5 – 10 Zeilen),
das absichtlich einen logischen Fehler enthält.
a) Führe es aus und notiere das falsche Ergebnis.
b) Beschreibe in 3 – 5 Sätzen, wie du den Fehler Schritt für Schritt aufgespürt hast.
c) Korrigiere den Code und überprüfe, ob er nun funktioniert.
d) Was hast du aus diesem Debugging-Prozess gelernt?
