Schreibtischtest durchführen

In dieser interaktiven Lerneinheit erlernst du die systematische Durchführung von Schreibtischtests - eine fundamentale Methode zur manuellen Code-Überprüfung. Du übst, wie du Algorithmen Schritt für Schritt nachvollziehst, Variablenwerte verfolgst und typische Programmierfehler frühzeitig erkennst. Diese Fähigkeit ist besonders wertvoll beim Debuggen und der Qualitätssicherung deiner eigenen Programme.

Einführung

Stell dir vor: Du entwickelst eine Software für die Steuerung einer Ampelanlage. Ein kleiner Fehler im Code könnte hier fatale Folgen haben - zwei grüne Ampeln zur gleichen Zeit wären eine Katastrophe!

Oder denk an eine Banking-App: Ein Rundungsfehler bei Geldtransaktionen könnte tausendfach auftreten und großen finanziellen Schaden anrichten. In der professionellen Softwareentwicklung können wir uns solche Fehler nicht leisten.

Doch wie können wir sicherstellen, dass unser Code wirklich das tut, was er soll? Wie finden wir Fehler, bevor sie in der Praxis auftreten?

Hier kann uns der Schreibtischtest helfen - eine Methode, mit der du systematisch und Schritt für Schritt überprüfen kannst, ob dein Code korrekt arbeitet. Ohne Computer, nur mit Stift und Papier, kannst du potenzielle Probleme aufdecken und beheben.

Lernziele

Nach dieser Lerneinheit kannst du:

  • Den Schreibtischtest als Prüfverfahren in der Softwareentwicklung präzise definieren und seine Bedeutung erklären

  • Die methodischen Schritte eines Schreibtischtests systematisch durchführen und deren Relevanz für die Codeprüfung begründen

  • Die praktische Anwendung und den Nutzen des Schreibtischtests in der Softwareentwicklung fundiert erläutern

  • Eigenständig einen Algorithmus mittels Schreibtischtest schrittweise analysieren und die Zwischenergebnisse strukturiert dokumentieren

  • Potenzielle Programmfehler durch systematische Schreibtischtests identifizieren und deren Ursachen fachgerecht analysieren

Überleitung

Ob einfache Programme oder komplexe Anwendungen – fehlerfreier Code ist entscheidend. Der Schreibtischtest ist eine wichtige Technik, die dir hilft, die Qualität deines Codes zu sichern.

Lass uns genauer anschauen, wie der Schreibtischtest funktioniert und welchen konkreten Nutzen er dir bringt.

Was ist ein Schreibtischtest?

Ein Schreibtischtest ist eine manuelle Methode zur Code-Prüfung. Du führst ihn ohne Computer durch, typischerweise am Schreibtisch mit Stift und Papier oder einer Tabelle.

Das Prinzip: Du simulierst die Ausführung des Programms. Du gehst den Code Zeile für Zeile durch und protokollierst, welche Auswirkungen jede Anweisung hat.

Hinweis: Da die Eingabemenge eines Algorithmus häufig sehr groß oder sogar beliebig groß sein kann, ist ein Schreibtischtest nur mit einer begrenzten Anzahl von Eingaben möglich. Insbesondere bei komplexeren Algorithmen liefert dieser Test daher lediglich ein Indiz, aber keinen endgültigen Beweis für die Korrektheit.

Beispiel

Damit du dir gleich vorstellen kannst, wie so ein Schreibtischtest abläuft, schauen wir uns eine kurze Code-Sequenz an. Angenommen, wir haben folgenden Pseudocode, der prüft, ob eine Zahl positiv ist und sie dann verändert:

--> Eingabe: x = 5  # Startwert setzen

Wenn (x > 0):
  x = x + 10
Sonst:
  x = x - 10

Ausgabe: x

Schritt 1: Startwert hinzufügen

Schrittx (Wert)BedingungErgebnis / Kommentar
Start5-Startwert

Erklärung: x wird mit 5 initialisiert.

Beispiel

Damit du dir gleich vorstellen kannst, wie so ein Schreibtischtest abläuft, schauen wir uns eine kurze Code-Sequenz an. Angenommen, wir haben folgenden Pseudocode, der prüft, ob eine Zahl positiv ist und sie dann verändert:

Eingabe: x = 5

--> Wenn (x > 0):  # x ist 5, also wahr
  x = x + 10
Sonst:
  x = x - 10

Ausgabe: x

Schritt 2: Bedingung prüfen

Schrittx (Wert)BedingungErgebnis / Kommentar
Start5-Startwert
Prüfung5(x > 0) → wahrWir nehmen den „wenn“-Zweig

Erklärung: Die Bedingung x > 0 ist wahr, daher wird der „Wenn“-Zweig ausgeführt.

Beispiel

Damit du dir gleich vorstellen kannst, wie so ein Schreibtischtest abläuft, schauen wir uns eine kurze Code-Sequenz an. Angenommen, wir haben folgenden Pseudocode, der prüft, ob eine Zahl positiv ist und sie dann verändert:

Eingabe: x = 5

Wenn (x > 0):
-->   x = x + 10  # x wird auf 15 gesetzt
Sonst:
  x = x - 10

Ausgabe: x

Schritt 3: Update durchführen

Schrittx (Wert)BedingungErgebnis / Kommentar
Start5-Startwert
Prüfung5(x > 0) → wahrWir nehmen den „wenn“-Zweig
Update15-x = 5 + 10

Erklärung: x = 5 + 10, also wird x = 15 gespeichert.

Beispiel

Damit du dir gleich vorstellen kannst, wie so ein Schreibtischtest abläuft, schauen wir uns eine kurze Code-Sequenz an. Angenommen, wir haben folgenden Pseudocode, der prüft, ob eine Zahl positiv ist und sie dann verändert:

Eingabe: x = 5

Wenn (x > 0):
  x = x + 10
Sonst:
  x = x - 10

--> Ausgabe: x  # x hat den Wert 15

Schritt 4: Endwert ausgeben

Schrittx (Wert)BedingungErgebnis / Kommentar
Start5-Startwert
Prüfung5(x > 0) → wahrWir nehmen den „wenn“-Zweig
Update15-x = 5 + 10
Ausgabe15-Endwert, der zurückgegeben wird

Erklärung: Das Programm gibt 15 aus.

Warum machen wir Schreibtischtests?

1. Frühe Fehlererkennung

  • Schreibtischtests helfen, logische Fehler in Algorithmen zu identifizieren, bevor der Code kompiliert oder ausgeführt wird.
  • Je früher Fehler gefunden werden, desto geringer sind die Kosten für ihre Behebung.

2. Verbesserter Algorithmusverständnis

  • Durch die detaillierte Abarbeitung des Codes vertiefst du dein Verständnis des Algorithmus.
  • Potenzielle Schwachstellen oder Verbesserungsmöglichkeiten werden frühzeitig erkannt.

3. Beherrschung komplexer Logik

  • Besonders bei komplexen Algorithmen mit Schleifen und bedingten Anweisungen hilft der Schreibtischtest, den Überblick zu behalten.
  • Die korrekte Implementierung kann dadurch besser sichergestellt werden.

4. Qualitätssicherung im Team

  • Schreibtischtests eignen sich für Code-Reviews im Team.
  • Sie fördern ein gemeinsames Verständnis des Codes und helfen, Fehler gemeinsam zu identifizieren.

Voraussetzungen für einen Schreibtischtest

1. Klar definierter Algorithmus

  • Der zu testende Algorithmus oder Code muss in einer verständlichen Form vorliegen.
  • Dies kann Pseudocode, ein Struktogramm oder Code in einer Programmiersprache sein.

2. Geeignete Eingabewerte

  • Repräsentative Eingabewerte sind notwendig, um den Test durchzuführen.
  • Beginne mit einfachen, typischen Werten und erweitere den Test auf Grenzfälle und ungültige Eingaben, falls relevant.

3. Erwartete Ausgabewerte (optional, aber empfehlenswert)

  • Die Kenntnis der erwarteten Ergebnisse erleichtert die Überprüfung der tatsächlichen Ergebnisse des Schreibtischtests.
  • Dies ermöglicht eine gezielte Analyse von Abweichungen und Fehlerquellen.
⏳ Lädt Dataview-Inhalt...

Durchführung eines Schreibtischtests - 1. Code verstehen

Hinweis: Es gibt nicht die eine richtige Methode für einen Schreibtischtest. Die genaue Vorgehensweise kann je nach Art des Algorithmus, Komplexität des Codes und persönlichen Vorlieben variieren. Wichtig ist, dass du systematisch und nachvollziehbar vorgehst. Die folgenden Schritte stellen einen strukturierten Ansatz dar, der dir als Leitfaden dienen kann.


Schritte für einen systematischen Schreibtischtest

1. Code verstehen

Schau dir zunächst den folgenden Code genau an und versuche zu verstehen, was er macht:

Eingabe: passwordIsCorrect (Boolean), userIsActive (Boolean)

userIsAuthorized = passwordIsCorrect || userIsActive

Wenn (userIsAuthorized == true):
    Ausgabe: "Autorisiert"
Sonst:
    Ausgabe: "Nicht autorisiert"

Erklärung des Codes

Eingaben

  • passwordIsCorrect: Gibt an, ob das eingegebene Passwort korrekt ist (true oder false).
  • userIsActive: Gibt an, ob der Benutzer gerade aktiv ist (true oder false).

Funktionsweise

  • Diese beiden Werte werden mit einer booleschen Operation (||, ODER) verknüpft.
  • Je nachdem, ob das Ergebnis true oder false ist, erhält man entweder „Autorisiert“ oder „Nicht autorisiert“.

Durchführung eines Schreibtischtests - 2. Eingabewerte definieren

2. Eingabewerte definieren

Um zu testen, ob der Code funktioniert, definieren wir nun gezielt Eingabewerte und die jeweils erwarteten Ausgaben.

Nehmen wir an, dass wir folgende Anforderungen (Soll-Verhalten) haben:
Ein Nutzer soll nur dann autorisiert werden, wenn beide Bedingungen (passwordIsCorrect, userIsActive) erfüllt sind.

Aus diesen Informationen lässt sich eine Tabelle mit Testfällen und den erwarteten Ausgaben erstellen.

TestfallpasswordIsCorrectuserIsActiveErwartete Ausgabe
1truetrueAutorisiert
2truefalseNicht autorisiert
3falsetrueNicht autorisiert
4falsefalseNicht autorisiert

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 1 (true / true)

Jetzt testen wir die erste Kombination

  1. Zeile/Schritt: Hier wird angegeben, welcher Programmteil betrachtet wird. Die erste Zeile beschreibt die Eingabephase, in der die Variablen gesetzt werden.
  2. Variablen/Operation: Hier werden die betroffenen Variablen und Operationen notiert. In der ersten Zeile setzen wir die Variablen passwordIsCorrect und userIsActive auf true.
  3. Ausgabe/Kommentar: Diese Spalte enthält Erklärungen oder die tatsächliche Ausgabe des Programms. In diesem Fall wird vermerkt, dass die Startwerte gesetzt wurden.

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 1 (true / true)

Jetzt testen wir die erste Kombination

  1. Operation userIsAuthorized = passwordIsCorrect || userIsActive

    • Hier wird userIsAuthorized auf das Ergebnis des logischen ODER-Ausdrucks passwordIsCorrect || userIsActive gesetzt.
  2. Ergebnis true || true => true

    • Da sowohl passwordIsCorrect als auch userIsActive auf true stehen, liefert der Ausdruck true || true das Ergebnis true.
    • Somit wird userIsAuthorized zu true.

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 1 (true / true)

Jetzt testen wir die erste Kombination

  1. Bedingung userIsAuthorized == true
    • Hier wird geprüft, ob die Variable userIsAuthorized den Wert true hat.
    • Da dies der Fall ist wird der wenn-Zweig (If-Block) ausgeführt.

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 1 (true / true)

Jetzt testen wir die erste Kombination

  1. Ausgabe "Autorisiert"
    • Wird ausgegeben, sobald die Bedingung userIsAuthorized == true erfüllt ist.
  • Die Ausgabe stimmt mit der Erwartung überein.

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 2 (true / false)

Jetzt testen wir die zweite Kombination

  1. Eingabe
    • Die beiden Variablen passwordIsCorrect und userIsActive werden als boolesche Werte (true/false) eingelesen.
    • In diesem Testfall:
      • passwordIsCorrect = true
      • userIsActive = false

Durchführung eines Schreibtischtests - 3. Schrittweise Simulation

3. Schrittweise Simulation - Testfall 2 (true / false)

Jetzt testen wir die zweite Kombination