Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| modul:m450:learningunits:lu01:grundlagen [2024/10/29 12:49] – msuter | modul:m450:learningunits:lu01:grundlagen [2026/11/11 10:52] (aktuell) – Überarbeitet: Struktur, Lernziele, Fehlerbegriffe, Äquivalenzklassen/Grenzwerte, Begriffe, Kontrollfragen admin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU01a - Grundlagen des Testens ====== | ====== LU01a - Grundlagen des Testens ====== | ||
| - | ===== Einleitung ===== | + | <WRAP center round info 80%> |
| - | <WRAP center round info 60%> | + | **Auf einen Blick**\\ |
| - | Testen | + | Testen |
| + | Vor dem Test legen wir fest, mit welchen Daten wir testen und welches Ergebnis wir erwarten (**SOLL**). | ||
| + | Beim Test vergleichen wir das tatsächliche Ergebnis (**IST**) mit dem SOLL. | ||
| </ | </ | ||
| + | ===== Lernziele ===== | ||
| + | Sie können | ||
| + | * erklären, warum Testen Fehler sucht und nicht die Fehlerfreiheit beweist, | ||
| + | * Fehlhandlung, | ||
| + | * Blackbox- und Glassbox-Tests unterscheiden, | ||
| + | * mit Äquivalenzklassen und Grenzwerten sinnvolle Testdaten finden, | ||
| + | * den Ablauf von den Testfällen bis zur Freigabe beschreiben. | ||
| - | Testen ist ein Teil der Qualitätssicherung in der Softwareentwicklung. | + | ===== Warum testen? ===== |
| - | Beim Testen suchen wir gezielt nach Fehlern in einem Programm. | + | Software steuert Bankkonten, Stundenpläne, |
| - | Beim Testen geht es nicht darum, zu beweisen, dass ein Programm fehlerfrei ist. | + | |
| - | Das ist zum einen fast unmöglich und zum anderen wenig motivierend. | + | |
| - | ==== Vorgehensweise ==== | + | Je später |
| - | Manche Programmierer haben seltsame Vorstellungen vom Testen eines Programms. | + | |
| - | Sie geben irgendwelche Daten ein und schauen, was passiert. | + | |
| - | <WRAP center round box 60%> | + | ^ Fehler wird entdeckt ... ^ Folge ^ Aufwand |
| - | Ihr Motto ist: Schiess einen Pfeil ab und alles, was du triffst, nennst du ein Ziel. | + | | beim Programmieren |
| - | </ | + | | beim Testen vor der Auslieferung |
| + | | beim Kunden im Betrieb | ||
| + | Testen ist ein Teil der **Qualitätssicherung**. Dabei gilt ein Grundsatz, der auf den Informatiker Edsger W. Dijkstra zurückgeht: | ||
| + | <WRAP center round important 80%> | ||
| + | Testen kann zeigen, dass Fehler vorhanden sind, aber nie, dass ein Programm fehlerfrei ist. | ||
| + | </ | ||
| - | Beim Testen legen wir zunächst fest, was wir testen | + | Wir testen |
| - | Man schreibt auf, welches Ergebnis man erwartet oder wie das Programm reagieren soll. | + | |
| - | Das nennen wir Testfall. | + | |
| - | >> Sie wollen zum Beispiel testen, wie das Programm reagiert, wenn Sie eine negative Menge eingeben. | + | ===== Was ist ein Fehler? ===== |
| - | >> | + | Im Alltag sagen wir für alles «Fehler» oder «Bug». In der Softwareentwicklung unterscheidet man drei Stufen: |
| - | >> Sie erwarten, dass das Programm die Fehlermeldung "Menge muss grösser als 0 sein" ausgibt. | + | |
| - | Nachdem Sie einige Testfälle beschrieben haben, führen Sie diese Testfälle aus. | + | ^ Begriff |
| - | Dabei notieren Sie, wie das Programm tatsächlich reagiert hat. | + | | **Fehlhandlung** (Irrtum) |
| - | Indem Sie die erwartete Reaktion | + | | **Fehlerzustand** (Defekt, Bug) | Der Irrtum steckt jetzt im Code. | Im Code steht '' |
| - | können Sie beurteilen, ob das Programm | + | | **Fehlerwirkung** |
| - | ===== Psychologie des Testens ===== | + | Beim Testen beobachten wir immer nur die **Fehlerwirkung**. Den Fehlerzustand im Code suchen und korrigieren die Entwicklerinnen und Entwickler. |
| - | <WRAP center round info 60%> | + | ===== Vorgehen: SOLL mit IST vergleichen ===== |
| - | Beim Testen | + | Manche Programmierer «testen», indem sie irgendwelche Daten eingeben und schauen, was passiert. |
| - | * Sei hart und unerbittlich zum Programm: Deine Aufgabe ist es, so viele Fehler wie möglich zu finden. | + | |
| - | * Sei nett zum Programmierer: | + | <WRAP center round box 80%> |
| + | //Ihr Motto: Schiess einen Pfeil ab und nenne alles, was du triffst, ein Ziel.// | ||
| </ | </ | ||
| - | Viele Programmierer fühlen sich angegriffen, wenn ihre Arbeit kritisiert wird. | + | Systematisches Testen geht anders: |
| - | Deshalb muss der Tester bei der Erstellung des Testprotokolls mit Fingerspitzengefühl vorgehen: | + | - **Planen:** Wir legen fest, welche Situation wir testen wollen. |
| - | * Abweichungen zwischen erwartetem | + | - **Testfall beschreiben:** Wir notieren die konkreten Eingaben und das erwartete Ergebnis (SOLL). Siehe [[.: |
| - | * Vorschläge zur Korrektur des Programms vermeiden. | + | |
| + | | ||
| - | Hier ein gutes und ein schlechtes | + | **Beispiel:** |
| - | * Gut: Zahl = 0 führt zu einem Absturz. | + | ^ Was wir testen |
| - | * Schlecht: Die Bedingung zur Überprüfung der Eingabe ist falsch. | + | | Negative Menge wird abgelehnt | Feld «Menge»: '' |
| - | ===== Definitionen | + | ===== Gute Testdaten finden |
| - | === Testen ist ... === | + | Wir können nie alle möglichen Eingaben testen. Zwei einfache Techniken helfen, mit wenigen Testfällen viel abzudecken. |
| - | ... die gezielte Suche nach Fehlern in einem Programm. | + | |
| - | <WRAP center round info 60%> | + | ==== Äquivalenzklassen ==== |
| - | Keine Software der Welt ist völlig frei von Fehlern, es gibt nur Software, deren Fehler noch nicht gefunden oder behoben wurden.</ | + | Wir teilen die möglichen Eingaben in Gruppen (Klassen) ein, die das Programm gleich behandeln sollte. Aus jeder Klasse testen wir **einen** Vertreter. |
| - | Beim Testen geht es nicht darum, zu beweisen, dass ein Programm | + | Beispiel Feld «Betrag» im Programm |
| - | Das ist zum einen unmöglich und zum anderen wenig motivierend. | + | |
| - | > Testen ist das Ausführen eines Programms mit dem Ziel, Fehler zu finden. | + | |
| - | === Testfall === | + | ^ Klasse |
| - | Ein Testfall beschreibt die Daten, mit denen ein Test durchgeführt wird. | + | | Betrag bis 325' |
| - | Um ein Programm zu testen, benötigt man mehrere Testfälle. | + | | Betrag über 325' |
| + | | Betrag 0 oder negativ | ||
| + | | keine Zahl | formal falsch | ||
| + | | Zahl mit Tausendertrennzeichen | ||
| - | === Testprotokoll | + | ==== Grenzwerte ==== |
| - | Jedes Mal, wenn sie eine Reihe von Testfällen ausführen, wird ein separates Protokoll erstellt. | + | Fehler passieren besonders häufig an den **Grenzen** zwischen zwei Klassen, zum Beispiel |
| - | Dieses enthält Informationen über den Zeitpunkt, | + | Deshalb testen wir zusätzlich |
| - | === Blackbox-Test | + | ===== Psychologie des Testens ===== |
| - | Bei einem Blackbox-Test werden die Testfälle aus den Anforderungen generiert. | + | <WRAP center round tip 80%> |
| - | Die Struktur des Quellcodes wird nicht berücksichtigt. | + | * **Sei hart zum Programm:** Deine Aufgabe ist es, möglichst viele Fehler zu finden. |
| - | Das Programm wird als Blackbox betrachtet, die bei einer bestimmten Eingabe eine erwartete Ausgabe liefern soll. | + | * **Sei nett zum Menschen:** Du kritisierst die Arbeit, nicht die Person. |
| + | </ | ||
| - | Als Grundlage für die Testfälle dienen | + | Viele Programmierer fühlen sich angegriffen, |
| - | * Spezifikation der Anwendung | + | * Wir beschreiben **was** passiert, sachlich und nachvollziehbar. |
| - | * Zustandsdiagramme | + | * Wir schreiben keine Vermutungen, |
| - | === Glassbox-Tests === | + | ^ Gut ^ Schlecht |
| - | Bei einem Glassbox-Test (auch Whitebox-Test genannt) werden die Testfälle aus dem Quellcode generiert. | + | | Eingabe '' |
| - | Ziel solcher Tests ist es, dass möglichst jeder Befehl und jede Bedingung | + | | Bei Beträgen über 1 Mio. fehlen die Nachkommastellen. |
| - | Solche Testfälle sind ohne spezielle Software nur sehr aufwendig zu erstellen. | + | |
| + | Ausserdem gilt: Wer ein Programm geschrieben hat, sieht die eigenen Fehler schlecht. Deshalb ist es sinnvoll, wenn eine **andere Person** die Testfälle durchführt. | ||
| - | ==== Ablauf | + | ===== Blackbox und Glassbox |
| + | ^ ^ Blackbox-Test | ||
| + | ^ Grundlage | ||
| + | ^ Sicht auf das Programm | Wie eine schwarze Kiste: nur Eingabe und Ausgabe | ||
| + | ^ Typische Frage | Macht das Programm, was es soll? | Wurde jede Anweisung und jede Bedingung ausgeführt? | ||
| + | ^ Techniken | ||
| + | ^ Wer testet meistens? | ||
| + | Beide Arten ergänzen sich: Der Blackbox-Test findet fehlende Funktionen, der Glassbox-Test findet ungetesteten Code. | ||
| + | |||
| + | ===== Ablauf eines Tests ===== | ||
| {{: | {{: | ||
| - | - In der Analyse | + | - **Analyse:** Die Anforderungen an das Programm |
| - | - Nachdem der Programmierer | + | - **Testfälle erstellen: |
| - | - Dazu benötigt der Tester die zuvor erstellten Testfälle. Beim Testen startet man das Programm | + | - **Programmieren: |
| - | - Bei einem Testdurchlauf | + | - **Testdurchlauf:** Die Testerin führt |
| - | - Wenn alle Testfälle ausgeführt wurden, entscheidet der Tester: | + | - **Entscheid:** Nach dem Testdurchlauf entscheidet die Testerin, ob das Programm in Ordnung |
| - | | + | - **Korrektur und erneuter Test:** Muss das Programm überarbeitet werden, |
| - | | + | |
| - | - Wenn das Programm überarbeitet werden | + | |
| + | <WRAP center round info 80%> | ||
| + | Warum alle Testfälle und nicht nur die fehlgeschlagenen? | ||
| + | </ | ||
| - | ===== IEEE 829 ===== | + | ===== Normen: |
| {{https:// | {{https:// | ||
| - | Die Grafik zeigt die Dokumente und Prozessschritte nach [[wpde> | + | Die Norm [[wpde> |
| + | |||
| + | ^ Dokument | ||
| + | | Testkonzept / Testplan | ||
| + | | Testfallspezifikation | ||
| + | | Testprotokoll | ||
| + | | Testabschlussbericht | ||
| + | |||
| + | IEEE 829 wurde inzwischen durch die internationale Normenreihe ISO/ | ||
| + | |||
| + | ===== Begriffe ===== | ||
| + | ^ Begriff | ||
| + | | Testen | ||
| + | | Testfall | ||
| + | | Testdurchlauf | ||
| + | | Testprotokoll | ||
| + | | SOLL / IST | Erwartetes / tatsächliches Ergebnis. | ||
| + | | Positivtest | ||
| + | | Negativtest | ||
| + | | Regressionstest | ||
| + | |||
| + | ===== Kontrollfragen ===== | ||
| + | - Warum kann Testen nicht beweisen, dass ein Programm fehlerfrei ist? | ||
| + | - Eine Webseite zeigt bei Bestellungen am 29. Februar ein falsches Lieferdatum. Ist das eine Fehlhandlung, | ||
| + | - Bilden Sie Äquivalenzklassen für ein Eingabefeld «Alter» (ganze Zahl zwischen 0 und 120). Welche Grenzwerte testen Sie? | ||
| + | - Formulieren Sie den Satz «Die Validierung ist komplett falsch programmiert» so um, dass er in ein Testprotokoll passt. | ||
| + | - Warum werden nach einer Korrektur alle Testfälle erneut durchgeführt? | ||
| ---- | ---- | ||
| {{tag> | {{tag> | ||
| [[https:// | [[https:// | ||