3 - Testen I: Definition, Vorgehensmodelle, Planung, Äquivalenzklassen, Grenzwerte
Definition
Testen
Testen
Analytische QS-Methode
Konstruktiver Prozess: Produkt wird nicht “zerstört” - Fehler finden spart Fehlerkosten.
Ausführen von Programm mit der Absicht:
– Fehler finden, verhindern – Vertrauen, Zuversicht bezüglich Softwarequalität bekommen – Informationen für Entscheidungen bereitstellen
Nicht mit der Absicht:
– Lokalisierung und Entfernung (Debugging) – Nachweis von Fehlerfreiheit (Formaler Korrektheitsbeweis)
Überprüfung vom Laufzeitverhalten von Systemteilen:
– Funktionen, Modelle, Qualitätsmerkmale – Ausgangsbasis: Anforderungen, Umgebung, Argumente, innere Systemstruktur
TestenQualität
Umsetzung von Qualität benötigt:
– Testbare Anforderungen (Definition von Funktionen, Qualitäten) – Testbare Produkte (zur Verfolgung der Entwicklung von Anforderungen)
Test-Driven Development TDD
– Testfälle vor der Implementierung erstellen für automatischen Retest – Früher Review von wichtigen Akzeptanztestfällen
Test First Ansatz
– Spezifikation vor detaillierten Entwurf testen
Fehler, Verifikation, Validierung
Fehler
Abweichung von Spezifikation
Abweichung von Nutzer-Anforderungen
Verifikation
Test gegen Spezifikation (Pflichtenheft, ...)
Nach jeder Phase durchführen
“Bauen wir das Produkt richtig?”
Validierung
Test gegen Nutzeranforderungen
Zu Beginn: Validierung des Pflichtenhefts, der Spezifikation
Am Ende: Validierung der erstellten Software
“Bauen wir das richtige Produkt?”
Testen im Vorgehensmodell
Testen in traditionellen Vorgehensmodellen
Traditionelles Testen im V-Modell
Testen in traditionellen Vorgehensmodellen
Lange Zyklen
Schwierige Fehlersuche
Testen in agilen Vorgehensmodellen
Agiles / flexibles Testen (zB in SCRUM)
Kurze Zyklen
selbstorganisierende Teams
Schreiben von Beschreibung vor Umsetzung des Source-Codes
Test Driven Development TDD
- Think
– Auswahl der Anforderungen die implementiert werden sollen – Testfall-Spezifikation
- Red
Implementierung und Ausführung der Testfälle
– Alle Tests müssen fehlschlagen
- Green
Implementierung der Komponenten und Klassen und Ausführung der Testfälle
– erfolgreich → weiter bei Schritt 4, Refactor – schlägt fehlt → weiter bei Schritt 3, Green
- Refactor
Optimierung der Implementierung ohne Änderung der Funktionalität, Ausführung der Testfälle.
– Testfälle dürfen nicht fehlschlagen. – Auswahl der nächsten Anforderung (weiter zu Schritt 1)
Continuous Integration and Test (CI&T Environment)
= ein System, das bei Änderungen (neue Version im Versionsverwaltungssystem) automatisch die zusammenhängenden Tools (CI Pipeline) nutzt um eine Routine automatisch durchzuführen:
– testen, Metriken berechnen (zB Testabdeckung) – builden – zusammenführen (integrating) – Testbericht erstellen im Dashboard und an Teammitglieder schicken
In maven ohne pipeline zB mit ”Cruise Control“, ”Apache Continuum“ und Bug-Tracking tools.
Ziel von Testautomatisierung
– repetitive manuelle Tätigkeiten reduzieren – Die Effizienz des Testens zu steigern: Hohe Anzahl an Tests in angemessener Zeit ausführen – Tests durchführen, die man nicht manuell durchführen kann (z.B. Last-Tests) – Automatisch Reports der Testergebnisse generieren
Testprozess, Testplanung
Testprozess
Testprozess Phasen
Ist eingebettet in Projektplan
-
Planung & Steuerung
(Vorbereitung von “Test-Masterplan”)
von Teststufen: zB Modultest, Integrationstest, Akzeptanztest
von Testmethoden: Test von funktionalen Anforderungen, nicht-funktionalen Anforderungen
- Analyse / Design (Spezifikation)
- Realisierung und Durchführung (Testläufe)
- Auswertung und Bericht (Testergebnisse)
- Abschluss (zB Archivierung)
Aufbau von Testfällen
Testfall
Tests bestehen aus einer Menge Testfälle ( = Testsuite )
Testfall bestehen aus einer Menge (V, E, A, R)
V: Vorbedingungen (zB Systemzustand, DB-Zustand)
E: Eingabewerte
A: Aktionen zur Eingabe der Werte
R: Erwartete Ergebnisse (Orakel)
Testfall Typen
- NF Normalfall soll bei korrekter Implementierung funktionieren
- SF Spezialfall Grenze zwischen Normalfall und Fehlerfall
- FF Fehlerfall soll bei korrekter Implementierung Fehlermeldung werfen
Auswahl von Testfällen:
Minimale Anzahl, Qualität, Risiko der Systemfunktionalität
Testerfolg
Wenn Fehler gefunden wird
Tests die keine Fehler aufdecken bieten Information über Produktqualität durch systematische Testüberdeckung
Wert von Fehlern / Testfällen → Value based Testing
Value-Based-Testing beruht darauf dass nicht alle Testfälle bzw. alle Fehler gleich viel Wert sind.
Requirements-Based Welche Anforderungen bringen den meisten Mehwert für Kunden?
Risk-Based Welche Risiken gefährden den Nutzen am meisten? (zB dependencies)
Test Case Selection Testfälle finden die all diese Risiken und Nutzen abdecken
Äquivalenzklassen, Grenzwerte
Äquivalenzklassen-Zerlegung
Zerlegung von Datenmenge (Input oder Output) in Untermengen (Klassen) basierend auf erwartetes Verhalten
Klassen müssen äquivalente Ergebnisse und Wirkungen produzieren
Dadurch sinkt Testaufwand
Jede Klasse muss 1x getestet werden
Äquivalenzklassen-Zerlegung: Schritte
- Zu testende Funktion bestimmen
-
Eingabe-Vektoren (Faktoren) finden (A, B, C, ...):
explizit: Parameter
implizit: globale Variablen, Systemzustand, Datenbankzustand, ...
-
Für jeden Faktor seine gültigen, ungültigen Äquivalenzklassen finden und aus jeder Klasse einen Wert wählen
A → A1, A2, ...
B → B1, B2, ...
-
Eine Kombination wählen
die Wahl bestimmt die Intensität
Grenzwertanalyse
Erweiterung der Äquivalenzklassenzerlegung für bessere Überdeckung
Grenzwerte für jede Klassengrenze und dazu je ein Testfall
Ist eine Vertiefung der Äquivalenzklassenzerlegung, bei der gezielt die Ränder (= Grenzwerte) von den einzelnen Klassen überprüft werden, da dort am häufigsten Fehler (zB falscher Vergleichsoperator, oder Index one-off Fehler) auftreten.
Beispiele