Informatik · Klasse 5–13 · aktualisiert
Komponententests: Testfälle und Isolation verstehen
Du lernst, wie Komponententests einzelne Programmteile prüfen, wie man Testfälle bildet und warum man Tests nach Änderungen wiederholt.
0 von 9 Aufgaben gelöst
Kurz gesagt
Ein Komponententest (auch Modultest oder Unittest) prüft einzelne, abgrenzbare Teile eines Programms. Dafür bildest du Äquivalenzklassen und leitest Testfälle mit Soll-Ergebnis ab. Mock-Objekte ersetzen andere Teile. Nach Änderungen wiederholt man Testfälle als Regressionstest.
Stell dir vor, du baust ein Spiel und änderst nur eine kleine Stelle. Plötzlich geht an einer ganz anderen Stelle etwas kaputt. Damit das nicht unbemerkt passiert, testen Entwickler ihre Programme in Stufen. Hier lernst du, wie das geht und wo Tests an ihre Grenzen stoßen.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Ein Programm besteht aus vielen Teilen. Solche Teile sind zum Beispiel Klassen oder Unterprogramme. Man prüft sie in Stufen.
Der Komponententest prüft einzelne, abgrenzbare Teile der Software. Er heißt auch Modultest oder Unittest (englisch „unit“ heißt „Einheit“). Diese Tests führt häufig der Software-Entwickler selbst durch. Sie sollen zeigen, dass ein Teil technisch läuft und korrekte Teilergebnisse liefert.
Der Integrationstest prüft die Zusammenarbeit voneinander abhängiger Komponenten. Sein Schwerpunkt liegt auf den Schnittstellen. Das sind die Stellen, an denen Teile Daten austauschen.
Der Systemtest prüft das gesamte System gegen die gesamten Anforderungen. Er findet gewöhnlich auf einer Testumgebung statt. Die soll der Umgebung des Kunden möglichst ähnlich sein.
Die Stufen sind in der Praxis oft nicht scharf voneinander getrennt.
Definition
Komponententest
Ein Komponententest prüft einzelne, abgrenzbare Teile eines Programms, zum Beispiel Klassen oder Unterprogramme. Andere Namen dafür sind Modultest und Unittest.
| Teststufe | Was wird geprüft? | Schwerpunkt |
|---|---|---|
| Komponententest | einzelne, abgrenzbare Teile | technische Lauffähigkeit, korrekte Teilergebnisse |
| Integrationstest | voneinander abhängige Komponenten | Schnittstellen zwischen den Komponenten |
| Systemtest | das gesamte System | die gesamten Anforderungen |
Beispiel: Taschenlampe (ausgedachtes Beispiel)
- 1Ein Gerät wird erst als Ganzes getestet, wenn seine Einzelteile als gesichert gelten.
- 2Ausgedacht: Du prüfst erst die Glühbirne allein. Das entspricht dem Komponententest.
- 3Dann prüfst du Birne und Batterie zusammen. Das entspricht dem Integrationstest.
- 4Zuletzt prüfst du die ganze Lampe. Das entspricht dem Systemtest.
Teste dich
Du kannst nicht jede mögliche Eingabe testen. Darum sortierst du die Eingaben in Gruppen. Eine Gruppe heißt Äquivalenzklasse. Man erwartet, dass sich alle Werte einer Klasse gleichartig verhalten. Deshalb nimmt man an, dass jeder Wert der Klasse die gleichen Fehler findet wie jeder andere. Ziel ist, mit wenigen Testfällen möglichst viele Fehler zu finden.
Es gibt gültige und ungültige Äquivalenzklassen. Gültige Klassen enthalten gültige Eingaben, ungültige Klassen enthalten ungültige Eingaben. Tests mit gültigen Eingaben heißen Positivtests, Tests mit ungültigen Eingaben heißen Negativtests.
So gehst du vor: Zuerst schaust du, welche Eingaben erlaubt sind. Dann bildest du die Klassen. Dann wählst du für jede Klasse einen Wert aus. Zu jedem Testfall gehören die Eingabe und das erwartete Ergebnis. Das erwartete Ergebnis heißt Soll-Ergebnis. Besonders interessant sind die Grenzwerte, denn dort erwartet man ein anderes Verhalten.
Definition
Äquivalenzklasse
Eine Äquivalenzklasse ist eine Gruppe von Eingaben, bei denen man erwartet, dass sie sich gleichartig verhalten. Für jede Klasse wählt man einen Wert als Testfall aus.
| Klasse (Monat) | Art | Soll-Ergebnis |
|---|---|---|
| 0 und kleiner | ungültig | wird zurückgewiesen |
| 1 bis 12 | gültig | wird akzeptiert |
| 13 und größer | ungültig | wird zurückgewiesen |
Merke: Teste nicht nur gültige, sondern auch ungültige Klassen. Zu jedem Testfall gehört ein Soll-Ergebnis.
Teste dich
Ein Komponententest prüft einen Teil isoliert, also weitgehend ohne Zusammenarbeit mit anderen Teilen. Andere Teile wie eine Datenbank, Dateien oder Unterprogramme werden deshalb oft durch Hilfsobjekte nachgebildet.
Ein Mock-Objekt (auch Attrappe) ist so ein Platzhalter für echte Objekte. Es liefert keine Echtdaten, sondern vorher zum Testfall passend festgelegte Werte. Ein Stub liefert unabhängig von der Eingabe immer die gleiche Ausgabe.
Man nimmt Mock-Objekte zum Beispiel, wenn das echte Objekt bei jedem Aufruf andere Ergebnisse liefert (etwa die aktuelle Uhrzeit), langsam oder sehr komplex ist, noch nicht existiert oder Prozesse anstößt, die man schwer rückgängig machen kann (etwa Dateien löschen).
Trotzdem können Fehler unentdeckt bleiben. Haben Testobjekt und Hilfsobjekt dieselbe falsche Annahme, merkt der Test nichts. Auch wenn der Autor der Tests zugleich der Autor des Programmteils ist, können Denkfehler im Test wieder auftauchen. Ein Test, der „grün“ ist, beweist deshalb nicht, dass der Teil fehlerfrei ist. Vollständige Tests mit den echten Teilen folgen später in Integrations- und Systemtests.
Definition
Mock-Objekt
Ein Mock-Objekt ist ein Platzhalter für ein echtes Objekt. Es liefert vorher festgelegte Werte und wird bei Modultests verwendet.
Beispiel: Jacke oder keine Jacke (ausgedachtes Beispiel)
- 1Ausgedacht: Ein Programmteil sagt „Jacke“, wenn die Temperatur unter 10 Grad liegt.
- 2Die echte Temperatur ändert sich ständig. Darum liefert ein Mock-Objekt fest 5 Grad.
- 3Testfall: Eingabe 5 Grad vom Mock → Soll-Ergebnis „Jacke“.
- 4Angenommen, Programmteil und Mock gehen beide von der falschen Einheit aus. Der Test bleibt grün.
- 5Der Fehler sollte erst im Integrationstest mit dem echten Sensor auffallen.
Merke: Ein grüner Komponententest ist nicht unbedingt fehlerfrei. Jeder Test findet nur die Fehler, für die er geeignet ist.
Teste dich
Jeder Komponententest hat meist denselben Aufbau. Erst stellst du einen Ausgangszustand her. Dann führst du die zu testende Operation aus. Zuletzt vergleichst du das Ist-Ergebnis mit dem Soll-Ergebnis. Das Ist-Ergebnis ist das, was das Programm wirklich liefert. Das Soll-Ergebnis ist der Sollwert, der aus der Spezifikation abgeleitet wird. Die Spezifikation beschreibt genau, was der Teil leisten soll.
Stimmen beide überein, lautet das Testergebnis „ok“. Weichen sie ab, liegt eine Abweichung vor, zum Beispiel ein Fehler. Sie wird bearbeitet und führt in der Regel nach der Klärung zu Testwiederholungen.
Ein Regressionstest ist die Wiederholung von Testfällen. Er soll sicherstellen, dass Änderungen in bereits getesteten Teilen keine neuen Fehler („Regressionen“) verursachen. Solche Änderungen entstehen regelmäßig bei der Pflege, Änderung und Korrektur von Software. Weil man oft wiederholt, ist es sinnvoll, die Tests zu automatisieren. Wird ein gefundener Fehler mit einem Test abgesichert, wird verhindert, dass er erneut auftritt.
Werden Tests nur unverändert wiederholt, decken sie keine neuen Fehlerwirkungen mehr auf. Darum soll man die Testfälle regelmäßig prüfen und ergänzen.
Beispiel: Addieren prüfen (ausgedachtes Beispiel)
- 1Ausgedacht: Ein Programmteil soll 2 und 3 addieren. Testfall: Eingabe 2 und 3 → Soll-Ergebnis 5.
- 2Erster Lauf: Ist-Ergebnis 5. Soll und Ist stimmen überein, das Testergebnis ist ok.
- 3Danach wird der Programmteil geändert. Der Testfall wird wiederholt.
- 4Zweiter Lauf: Ist-Ergebnis 6. Das weicht vom Soll 5 ab. Die Änderung hat einen neuen Fehler verursacht.
Merke: Nach einer Änderung wiederholst du die Testfälle als Regressionstest, damit alte, funktionierende Teile nicht unbemerkt kaputtgehen.
Teste dich
Alles auf einen Blick
Komponententest
Komponententest
prüft einzelne, abgrenzbare Teile; heißt auch Modultest oder Unittest
Teststufen
Komponententest, Integrationstest (Zusammenarbeit der Teile), Systemtest (gesamtes System)
Äquivalenzklassen
gültige und ungültige Gruppen von Eingaben, pro Klasse wählt man einen Wert als Testfall
Mock-Objekt
Platzhalter, der vorher festgelegte Werte liefert, damit ein Teil isoliert getestet wird
Grenze
Ein grüner Test beweist keine Fehlerfreiheit, zum Beispiel bei gleichen Falschannahmen
Regressionstest
Testfälle nach einer Änderung wiederholen und Ist mit Soll vergleichen
Musteraufgabe · Schritt für Schritt
Ticketautomat prüfen (ausgedachtes Beispiel)
- 1Ausgedachte Regel: Man darf 1 bis 4 Tickets kaufen. Andere Zahlen werden zurückgewiesen.
- 2Klassen bilden: 0 und kleiner (ungültig) · 1 bis 4 (gültig) · 5 und größer (ungültig)
- 3Testfälle mit Soll: Eingabe 3 → akzeptiert · Eingabe 0 → zurückgewiesen · Eingabe 7 → zurückgewiesen
- 4Die Grenzwerte 1 und 4 sind besonders interessant und können als weitere Testfälle dienen.
- 5Ausführen: Das Programm liefert für 3 „akzeptiert“, für 0 „zurückgewiesen“, für 7 „akzeptiert“.
- 6Vergleichen: Bei 3 und 0 stimmen Soll und Ist überein. Bei 7 weicht das Ist („akzeptiert“) vom Soll („zurückgewiesen“) ab. Dieser Testfall hat einen Fehler gefunden.
Fehler finden
Prüfe die Aussagen zu den Tageswerten 1 bis 31 In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Falsches Soll-Ergebnis: 40 liegt in einer ungültigen Klasse. Richtig: Die Eingabe 40 wird zurückgewiesen.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Bei einem Testfall vergleichst du das Ergebnis, das das Programm wirklich liefert, mit dem erwarteten Ergebnis. Das wirkliche heißt . Im Monatsbeispiel sind nur die Zahlen 1 bis 12 gültig, deshalb liegt die Eingabe 13 in einer Äquivalenzklasse. Wenn man nach einer Änderung Testfälle wiederholt, um sicherzustellen, dass keine neuen Fehler entstehen, nennt man das .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback