Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Korrektheit mit Python testen

Eine Implementierung des Algorithmus

Wir betrachten weiterhin den folgenden Algorithmus zur ggT-Berechnung:

Algorithmus

Hier eine Implementierung dieses Algorithmus in Python:

def ggt(x, y):
    while x > 0 and y > 0:
        if x >= y:
            x = x - y
        else:
            y = y - x
    return x+y

Testfälle kann man in Python z.B. direkt im Ausführfenster durchspielen:

>>> ggt(24, 15)
3
>>> ggt(10, 25)
...
>>> ggt(15, 7)
...
>>> ggt(8, 8)
...
>>> ggt(1, 4)
...

Aufgabe 1

Probiere das selbst aus.

Python-Programm mit integrierten Testfällen

Python erlaubt es, Testfälle in Funktionsdefinitionen zu integrieren. Das hat den Vorteil, dann man die Erwartungen an die Funktion im Vorfeld dokumentieren kann. Python ist in der Lage, die vorgegebenen Testfälle automatisiert zu überprüfen.

def ggt(x, y):
    """ Testfälle:

    >>> ggt(44, 12)
    4
    >>> ggt(7, 13)
    1
    >>> ggt(4, 4)
    4
    >>> ggt(1, 6)
    1
    >>> ggt(6, 18)
    6
    
    """
    while x > 0 and y > 0:
        if x >= y:
            x = x - y
        else:
            y = y - x
    return x+y

from doctest import testmod
testmod(verbose=True)

Hier sind Testaufrufe der implementierten Funktion in einem Kommentarbereich dargestellt. Innerhalb dieses Kommentarbereichs werden Aufrufe der Funktion im interaktiven Modus simuliert. Das benutzte Modul doctest ist in der Lage, die Testfälle zu überprüfen und eine geeignete Rückmeldung zu liefern. (Details zu Modultests findest du im entsprechenden Abschnitt Imperative Programmierung mit Python.) Im vorliegenden Fall erhält man:

Trying:
    ggt(44, 12)
Expecting:
    4
ok
Trying:
    ggt(7, 13)
Expecting:
    1
ok
Trying:
    ggt(4, 4)
Expecting:
    4
ok
Trying:
    ggt(1, 6)
Expecting:
    1
ok
Trying:
    ggt(6, 18)
Expecting:
    6
ok
1 items had no tests:
    __main__
1 items passed all tests:
   5 tests in __main__.ggt
5 tests in 2 items.
5 passed and 0 failed.
Test passed.

Alle Testfälle sind hier erfolgreich überprüft worden.

Aufgabe 2

Probiere das selbst aus. Überprüfe auch, wie Python sich verhält, wenn ein Testfall nicht erfolgreich ist.

X

Fehler melden

X

Suche