Skip to content

Testing in der Softwareentwicklung

Kurzüberblick / Definition

Testing bezeichnet den systematischen Prozess zur Überprüfung von Software, um Fehler zu finden und sicherzustellen, dass sie den Anforderungen entspricht.

Ziele:

  • Fehler frühzeitig erkennen
  • Qualität sicherstellen
  • Stabilität und Zuverlässigkeit erhöhen
  • Wartbarkeit verbessern

Testing ist kein einmaliger Schritt, sondern ein kontinuierlicher Bestandteil des gesamten Softwareentwicklungsprozesses.


Kernerklärung

1. Grundprinzipien des Testings (ISTQB)

Die klassischen Testprinzipien bilden die Grundlage für professionelles Testing:

Prinzip Erklärung
1. Testing zeigt die Anwesenheit von Fehlern Tests können Fehler finden, aber nie beweisen, dass keine existieren
2. Vollständiges Testen ist unmöglich Alle möglichen Eingaben und Zustände zu testen ist nicht praktikabel
3. Frühes Testen Fehler sollten so früh wie möglich entdeckt werden
4. Fehlerhäufung Viele Fehler treten oft in wenigen Modulen auf
5. Pestizid-Paradoxon Immer gleiche Tests finden irgendwann keine neuen Fehler mehr
6. Testen ist kontextabhängig Teststrategie hängt vom System ab
7. Trugschluss der Fehlerfreiheit Fehlerfreie Software ist nutzlos, wenn sie falsche Anforderungen erfüllt

2. FIRST-Prinzip (für gute Unit-Tests)

Dieses Prinzip beschreibt die Qualitätskriterien für gute automatisierte Tests:

Buchstabe Bedeutung Erklärung
F – Fast Schnell Tests müssen schnell ausführbar sein
I – Independent Unabhängig Tests beeinflussen sich nicht gegenseitig
R – Repeatable Wiederholbar Gleiche Ergebnisse bei jeder Ausführung
S – Self-validating Selbstprüfend Automatische Auswertung, kein manuelles Prüfen
T – Timely Rechtzeitig Tests werden früh geschrieben, zum Beispiel bei TDD

Einordnung:

  • Ergänzt die ISTQB-Prinzipien
  • Fokus auf Entwicklerperspektive
  • Besonders wichtig für Unit-Tests und TDD

3. Funktionale und nicht-funktionale Anforderungen im Testing

Softwaretests prüfen, ob eine Software ihre Anforderungen erfüllt. Dabei ist für die IHK-Prüfung besonders wichtig, zwischen funktionalen Anforderungen und nicht-funktionalen Anforderungen zu unterscheiden.

Art Leitfrage Bedeutung Beispiel
Funktionale Anforderungen Was soll das System tun? Beschreiben konkrete Funktionen oder Verhalten des Systems Ein Benutzer kann sich einloggen
Nicht-funktionale Anforderungen Wie gut oder unter welchen Bedingungen soll das System funktionieren? Beschreiben Qualitätsmerkmale des Systems Der Login muss innerhalb von 2 Sekunden erfolgen

Funktionale Anforderungen

Funktionale Anforderungen beschreiben die Funktionen, die ein System bereitstellen muss.

Beispiele:

  • Benutzer können sich registrieren
  • Benutzer können sich einloggen
  • Eine Rechnung kann erstellt werden
  • Produkte können gesucht werden
  • Ein Passwort kann zurückgesetzt werden

Passende Tests:

  • Unit-Tests
  • Integrationstests
  • Systemtests
  • Akzeptanztests
  • Black-Box-Tests

Nicht-funktionale Anforderungen

Nicht-funktionale Anforderungen beschreiben Qualitätsmerkmale eines Systems. Sie legen fest, wie gut eine Funktion funktionieren soll oder unter welchen Bedingungen das System arbeiten muss.

Beispiele:

  • Die Anwendung soll schnell reagieren
  • Das System soll auch bei vielen Benutzern stabil bleiben
  • Daten sollen sicher gespeichert und übertragen werden
  • Die Oberfläche soll benutzerfreundlich sein
  • Das System soll gut wartbar sein
  • Die Anwendung soll eine hohe Verfügbarkeit haben

Passende Tests:

  • Lasttests
  • Performancetests
  • Sicherheitstests
  • Usability-Tests
  • Stresstests
  • Wartbarkeitstests

Zusammenhang mit Testarten

Testart Prüft hauptsächlich Beispiel
Unit-Test Funktionale Anforderungen Eine Methode berechnet den richtigen Wert
Integrationstest Funktionale Anforderungen Zwei Module arbeiten korrekt zusammen
Systemtest Funktionale und nicht-funktionale Anforderungen Das gesamte System erfüllt die Anforderungen
Akzeptanztest Funktionale und nicht-funktionale Anforderungen Kunde prüft, ob das System fachlich passt
Lasttest Nicht-funktionale Anforderungen System bleibt bei 500 gleichzeitigen Benutzern stabil
Sicherheitstest Nicht-funktionale Anforderungen Passwörter sind geschützt
Usability-Test Nicht-funktionale Anforderungen Benutzer können die Anwendung intuitiv bedienen

Merksatz:

  • Funktional → Was macht das System?
  • Nicht-funktional → Wie gut macht das System das?

Beispiel:

Anforderung Art
„Der Benutzer kann sich einloggen.“ Funktional
„Der Login darf maximal 2 Sekunden dauern.“ Nicht-funktional
„Das System erstellt automatisch eine Rechnung.“ Funktional
„Das System muss 99,5 % der Zeit verfügbar sein.“ Nicht-funktional

Für die Prüfung ist wichtig:
Testing prüft nicht nur, ob eine Funktion vorhanden ist, sondern auch, ob sie zuverlässig, sicher, schnell und benutzerfreundlich funktioniert.


4. Testarten nach Testebene

Testart Beschreibung
Unit-Test Testet einzelne Funktionen oder Methoden isoliert
Integrationstest Testet Zusammenspiel mehrerer Komponenten
Systemtest Testet das gesamte System als Einheit
Abnahmetest Prüft, ob Anforderungen des Kunden erfüllt sind

5. Testarten nach Ziel

Testart Ziel
Regressionstest Sicherstellen, dass Änderungen nichts kaputt machen
Lasttest Verhalten unter hoher Belastung
Sicherheitstest Aufdecken von Schwachstellen
Usability-Test Benutzerfreundlichkeit prüfen

Einordnung nach Anforderungen:

Testart Bezug zu Anforderungen
Regressionstest Prüft, ob bestehende funktionale Anforderungen nach Änderungen weiterhin erfüllt werden
Lasttest Prüft nicht-funktionale Anforderungen zur Belastbarkeit und Performance
Sicherheitstest Prüft nicht-funktionale Anforderungen zur Sicherheit
Usability-Test Prüft nicht-funktionale Anforderungen zur Benutzerfreundlichkeit

6. Testarten nach Durchführung

Kategorie Beschreibung
Statische Tests Ohne Programmausführung, zum Beispiel Codeanalyse oder Reviews
Dynamische Tests Mit Programmausführung
Manuelle Tests Durch Menschen durchgeführt
Automatisierte Tests Durch Tools ausgeführt

Dynamische Tests: White-Box vs. Black-Box

Ansatz Beschreibung Beispiel
White-Box-Test Kennt den internen Code, also Struktur, Logik und Pfade Unit-Tests mit Fokus auf Codeabdeckung
Black-Box-Test Kennt nur Ein- und Ausgaben, nicht den Code Systemtests, UI-Tests

Merksatz:

  • White-Box → Wie funktioniert der Code intern?
  • Black-Box → Was macht das System von außen?

7. Testabdeckung (Coverage)

  • Gibt an, wie viel Prozent des Codes durch Tests geprüft werden
  • Hohe Coverage ≠ fehlerfreie Software
  • Ziel: kritische Bereiche zuverlässig absichern

Wichtig:
Testabdeckung sagt nur aus, wie viel Code ausgeführt wurde, aber nicht automatisch, ob die Tests fachlich sinnvoll sind oder ob alle Anforderungen korrekt geprüft wurden.

Beispiel:

  • Eine Methode wird durch einen Test ausgeführt
  • Der Test prüft aber nicht den richtigen Erwartungswert
  • Dann steigt zwar die Coverage, aber die Testqualität bleibt schlecht

Test-Driven Development (TDD)

Konzept

Tests werden vor dem eigentlichen Code geschrieben.

TDD hilft dabei, Anforderungen genauer zu verstehen, weil zuerst überlegt werden muss:

  • Was soll die Funktion tun?
  • Welche Eingaben gibt es?
  • Welches Ergebnis wird erwartet?
  • Welche Sonderfälle müssen berücksichtigt werden?

Ablauf (Red-Green-Refactor-Zyklus)

graph LR
A[Red: Test schreiben<br>→ schlägt fehl] --> B[Green: Minimalen Code schreiben<br>→ Test besteht]
B --> C[Refactor: Code verbessern<br>→ Test bleibt grün]
C --> A

Vorteile

  • Klare Anforderungen
  • Hohe Testabdeckung
  • Bessere Codequalität
  • Fördert sauberes Design

Verbindung zu FIRST

  • Fast → Tests laufen häufig und schnell
  • Independent → Tests sind voneinander unabhängig
  • Repeatable → stabile Ergebnisse
  • Self-validating → automatische Verifikation
  • Timely → Tests entstehen früh

Praktisches Beispiel

Ohne Test

int add(int a, int b) {
    return a + b;
}

Mit TDD

1. Test schreiben (Red)

@Test
void testAdd() {
    assertEquals(5, add(2, 3));
}

2. Implementierung (Green)

int add(int a, int b) {
    return a + b;
}

3. Refactoring

  • Code optimieren, falls nötig
  • Test bleibt erfolgreich

Beispiel: Funktionale und nicht-funktionale Anforderungen

Ausgangssituation

Ein Kunde möchte eine Login-Funktion für eine Webanwendung.

Anforderung Art der Anforderung Möglicher Test
Benutzer können sich mit E-Mail und Passwort anmelden Funktional Unit-Test, Integrationstest, Systemtest
Bei falschem Passwort erscheint eine Fehlermeldung Funktional Black-Box-Test, Systemtest
Der Login darf maximal 2 Sekunden dauern Nicht-funktional Performancetest
Das System muss 500 gleichzeitige Logins verarbeiten können Nicht-funktional Lasttest
Passwörter dürfen nicht im Klartext gespeichert werden Nicht-funktional Sicherheitstest
Die Login-Seite muss einfach bedienbar sein Nicht-funktional Usability-Test

Erklärung

Die funktionalen Anforderungen beschreiben, welche Funktionen vorhanden sein müssen.
Die nicht-funktionalen Anforderungen beschreiben, welche Qualitätsmerkmale diese Funktionen erfüllen müssen.

Eine Login-Funktion kann also fachlich korrekt sein, aber trotzdem mangelhaft, wenn sie:

  • zu langsam ist
  • unsicher ist
  • bei vielen Benutzern abstürzt
  • schwer bedienbar ist

Deshalb reicht es nicht aus, nur funktionale Tests durchzuführen.


Warum ist Testing wichtig?

1. Fehlererkennung

  • Früh erkannte Fehler sind günstiger zu beheben

2. Qualitätssicherung

  • Software funktioniert wie erwartet

3. Wartbarkeit

  • Änderungen verursachen weniger unerwartete Fehler

4. Erweiterbarkeit

  • Neue Features können sicher integriert werden

5. Benutzerzufriedenheit

  • Stabilere und zuverlässigere Software

6. Effizienz & Kosten

  • Automatisierte Tests sparen Zeit
  • Frühe Fehler = geringere Kosten

7. Gemeinsame Verantwortung

  • Testing ist nicht nur Aufgabe von Testern
  • Entwickler müssen aktiv Tests schreiben, zum Beispiel Unit-Tests

8. Prüfung von funktionalen und nicht-funktionalen Anforderungen

  • Funktionale Tests prüfen, ob die geforderten Funktionen korrekt umgesetzt wurden
  • Nicht-funktionale Tests prüfen Qualitätsmerkmale wie Performance, Sicherheit, Benutzbarkeit und Stabilität

Exam Relevance (IHK)

Wichtige Prüfungsaspekte:

  • Die 7 ISTQB-Testprinzipien
  • Das FIRST-Prinzip für gute Unit-Tests
  • Unterschiede zwischen Unit-, Integrations-, System- und Akzeptanztests
  • Verständnis von statischen vs. dynamischen Tests
  • Unterschied White-Box vs. Black-Box
  • Bedeutung von Testabdeckung
  • Ablauf und Vorteile von TDD
  • Unterschied zwischen funktionalen und nicht-funktionalen Anforderungen
  • Zuordnung passender Testarten zu funktionalen und nicht-funktionalen Anforderungen
  • Wirtschaftliche Bedeutung von Testing

Typische Fragen:

  • „Warum können Tests keine Fehlerfreiheit beweisen?“
  • „Was zeichnet gute Unit-Tests aus?“
  • „Erklären Sie FIRST.“
  • „Was ist der Unterschied zwischen White- und Black-Box?“
  • „Was ist der Unterschied zwischen funktionalen und nicht-funktionalen Anforderungen?“
  • „Nennen Sie Beispiele für nicht-funktionale Anforderungen.“
  • „Welche Testarten eignen sich zur Prüfung nicht-funktionaler Anforderungen?“
  • „Warum ist Testing wirtschaftlich sinnvoll?“

Prüfungsnahe Merksätze

Thema Merksatz
Testing allgemein Tests zeigen Fehler, beweisen aber keine Fehlerfreiheit
Funktionale Anforderungen Beschreiben, was das System tun soll
Nicht-funktionale Anforderungen Beschreiben, wie gut das System funktionieren soll
Coverage Hohe Testabdeckung bedeutet nicht automatisch hohe Qualität
TDD Erst Test schreiben, dann Code implementieren
FIRST Gute Unit-Tests sind schnell, unabhängig, wiederholbar, selbstprüfend und rechtzeitig erstellt

Häufige Fehler & Missverständnisse

Missverständnis Richtigstellung
„Tests beweisen, dass Software fehlerfrei ist.“ Tests können nur Fehler aufzeigen, nicht Fehlerfreiheit beweisen
„Hohe Testabdeckung = fehlerfreie Software.“ Coverage misst Quantität, nicht Qualität
„Testing ist nur Aufgabe von Testern.“ Entwickler sind mitverantwortlich, insbesondere für Unit-Tests
„Tests dürfen langsam sein.“ Widerspricht FIRST: Fast
„Tests hängen voneinander ab.“ Widerspricht FIRST: Independent
„Testing kommt am Ende.“ Testing ist ein kontinuierlicher Prozess
„Funktionale Anforderungen und nicht-funktionale Anforderungen sind dasselbe.“ Funktionale Anforderungen beschreiben Funktionen, nicht-funktionale Anforderungen beschreiben Qualitätsmerkmale
„Lasttests prüfen normale Funktionen.“ Lasttests prüfen vor allem nicht-funktionale Anforderungen wie Belastbarkeit und Performance
„Usability ist nicht prüfbar.“ Usability kann durch Usability-Tests geprüft werden
„Sicherheit ist nur ein technisches Detail.“ Sicherheit ist eine wichtige nicht-funktionale Anforderung

Fazit

Testing kombiniert:

  • Theorie (ISTQB-Prinzipien) → Verständnis von Testing allgemein
  • Praxis (FIRST-Prinzip) → Qualität von Unit-Tests
  • Anforderungsprüfung → funktionale und nicht-funktionale Anforderungen werden überprüft

Nur zusammen ergibt sich professionelles Testing.

Wichtigste Kernaussagen:

  • Tests zeigen Fehler, aber beweisen nie Fehlerfreiheit
  • Gute Tests sind schnell, unabhängig, stabil, automatisch und frühzeitig
  • Funktionale Anforderungen beschreiben, was ein System tun soll
  • Nicht-funktionale Anforderungen beschreiben, wie gut ein System funktionieren soll
  • Testing verbessert Qualität, senkt Kosten und erhöht Wartbarkeit