Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Testabdeckung (Code Coverage)

Nach dieser Lektion: Ich kann eine Abdeckungszahl lesen und sagen, was sie nicht zeigt.

Lektion, 55 Min.7 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Was 100 Prozent Abdeckung nicht verrät

Testabdeckung, englisch Code Coverage, ist der Anteil des Codes, den Ihre Tests mindestens einmal ausführen. Sie zeigt, welche Teile ein Test nie berührt hat.

Eine Prüfungsverwaltung meldet 100 Prozent Abdeckung. Trotzdem rechnet sie eine Note falsch. Die Zahl sagte, dass jede Zeile lief, nicht dass jede Zeile geprüft wurde.

Am Ende dieser Lektion

Notiz

Ich kann eine Abdeckungszahl lesen und sagen, was sie nicht zeigt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Testabdeckungder Anteil des Codes, den Tests ausführen
Zeilenabdeckungder Anteil der ausgeführten Zeilen
Zweigabdeckungder Anteil der durchlaufenen Wege einer Verzweigung
Spurdie Liste der Zeilen, die ein Lauf ausgeführt hat
Lückeeine Stelle, die kein Test erreichtZeile 7

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Zeilenabdeckung zählt, welche Zeilen liefen

Die Zeilenabdeckung zählt, welche Zeilen mindestens ein Test ausgeführt hat. Das Ergebnis ist ein Anteil.

Hat der Code 6 ausführbare Zeilen und die Tests führen 4 davon aus, sind es 4 von 6, also 66 Prozent. Die übrigen zwei Zeilen sind Lücken, die kein Test erreicht.

Die Spur eines Laufs im Lab drucken

Das Lab hat kein Abdeckungswerkzeug. Ein kleines Skript druckt stattdessen die Nummer jeder Zeile, die die Funktion bewertung ausführt. Das ist die Spur.

Sie legen zensur.py mit der Funktion und spur.py mit dem Skript an und rufen es mit drei Punktzahlen auf.

Den Ordner anlegen

Befehl
mkdir -p ~/testlabor

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Hineingehen

Befehl
cd ~/testlabor

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Funktion mit zwei Verzweigungen schreiben

Befehl
printf 'def bewertung(punkte):\n    if punkte >= 50:\n        text = "bestanden"\n    else:\n        text = "nicht bestanden"\n    if punkte == 100:\n        text = text + " mit Auszeichnung"\n    return text\n' > zensur.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Skript für die Spur schreiben

Befehl
printf 'import sys\nfrom zensur import bewertung\n\ndef spur(frame, ereignis, arg):\n    if frame.f_code.co_name == "bewertung" and ereignis == "line":\n        print(frame.f_lineno)\n    return spur\n\nsys.settrace(spur)\nbewertung(int(sys.argv[1]))\nsys.settrace(None)\n' > spur.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Spur für 70 Punkte

Befehl
python3 spur.py 70

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Spur für 30 Punkte

Befehl
python3 spur.py 30

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Spur für 100 Punkte

Befehl
python3 spur.py 100

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: wer welche Zeilen erreicht

ZeileInhalt70 Punkte30 Punkte100 Punkte
2if punkte >= 50jajaja
3text = "bestanden"janeinja
5text = "nicht bestanden"neinjanein
6if punkte == 100jajaja
7text = text + " mit Auszeichnung"neinneinja
8return textjajaja

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Zweigabdeckung zählt die Wege jeder Verzweigung

Jedes if hat zwei Wege: Die Bedingung trifft zu, oder sie trifft nicht zu. Die Zweigabdeckung zählt, wie viele dieser Wege mindestens ein Test gegangen ist.

Hier gibt es zwei if, also vier Wege. Der Lauf mit 70 Punkten geht zwei davon: den ersten if mit Ja, den zweiten mit Nein. Das sind 50 Prozent.

Ein Beispiel: vier Wege, zwei Tests

VerzweigungWeg70 Punkte30 Punkte
punkte >= 50zutreffendjanein
punkte >= 50nicht zutreffendneinja
punkte == 100zutreffendneinnein
punkte == 100nicht zutreffendjaja

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele glauben, 100 Prozent Abdeckung heiße fehlerfrei. Die Zahl sagt nur, dass jede Zeile lief. Ob ein Test das Ergebnis prüft, sagt sie nicht. Eine Zeile ohne assert ist ausgeführt und nicht geprüft.

Alle Zeilen laufen, nichts wird geprüft

Code: python
def bewertung(punkte):
    if punkte >= 50:
        text = "bestanden"
    else:
        text = "nicht bestanden"
    return text

# Dieser Test führt jede Zeile aus, aber er prüft nichts.
bewertung(70)
bewertung(30)
print("Alle Zeilen laufen, kein assert prüft das Ergebnis")
# Fügen Sie assert bewertung(49) == "bestanden" ein. Starten Sie und lesen Sie die Meldung.

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.