Exkurs - Fehlererkennung und Fehlersuche
Fehlererkennung
Wir betrachten hier nur logische Fehler. Solche Fehler erkennt man, indem man die betreffende Funktion gründlich testet.
In Abschnitt Verhalten beschreiben und testen wird gezeigt, wie man das am besten (in Python) macht: Man überlegt sich gute Testfälle und lässt diese automatisiert überprüfen.
def aegyptischeMultiplikation(zahl1, zahl2):
"""
>>> aegyptischeMultiplikation(13, 12)
156
>>> aegyptischeMultiplikation(12, 13)
156
>>> aegyptischeMultiplikation(8, 5)
40
>>> aegyptischeMultiplikation(7, 5)
35
>>> aegyptischeMultiplikation(5, 1)
5
>>> aegyptischeMultiplikation(1, 5)
5
>>> aegyptischeMultiplikation(0, 2)
0
>>> aegyptischeMultiplikation(2, 0)
0
"""
produkt = 0
while zahl1 > 0:
if zahl1 % 2 == 1:
produkt = produkt + zahl2
zahl1 = zahl1 // 2
zah12 = zahl2 * 2
return produkt
# Test
if __name__ == "__main__":
from doctest import testmod
testmod()
Im vorliegenden Beispiel meldet Python, dass in 5 von 8 Testfällen das beabsichtigte Ergebnis nicht erzielt wurde. Irgend etwas stimmt also nicht.
Fehlersuche
Fehler kann man manchmal durch eine genaue Analyse des Quelltextes finden. Das verlangt aber ein geübtes Auge. Systematischer geht es, wenn man die Verarbeitung Schritt für Schritt nachvollzieht.
Eine Möglichkeit besteht darin, zum Testen Ausgaben in den Quelltext zu integrieren.
def aegyptischeMultiplikation(zahl1, zahl2):
produkt = 0
while zahl1 > 0:
if zahl1 % 2 == 1:
produkt = produkt + zahl2
zahl1 = zahl1 // 2
zah12 = zahl2 * 2
print(zahl1, zahl2, produkt)
return produkt
Anhand der ausgegebenen Daten kann man dann versuchen, Rückschlüsse auf den Verarbeitungsablauf zu ziehen.
>>> aegyptischeMultiplikation(13, 12)
6 12 12
3 12 12
1 12 24
0 12 36
36
Eine weitere Möglichkeit besteht darin, eine Trace-Tabelle zu erzeugen. Besonders einfach und anschaulich geht das mit dem Online Python Tutor.