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

Testen\small \lrarrQualitä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

💡
Siehe 6. Vorlesung für vollständige Version

Agiles / flexibles Testen (zB in SCRUM)

Kurze Zyklen

selbstorganisierende Teams

Schreiben von Beschreibung vor Umsetzung des Source-Codes

Test Driven Development TDD

  1. Think

    – Auswahl der Anforderungen die implementiert werden sollen – Testfall-Spezifikation

  1. Red

    Implementierung und Ausführung der Testfälle

    – Alle Tests müssen fehlschlagen

  1. 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

  1. 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

  1. Planung & Steuerung (Vorbereitung von “Test-Masterplan”)

    von Teststufen: zB Modultest, Integrationstest, Akzeptanztest

    von Testmethoden: Test von funktionalen Anforderungen, nicht-funktionalen Anforderungen

  1. Analyse / Design (Spezifikation)
  1. Realisierung und Durchführung (Testläufe)
  1. Auswertung und Bericht (Testergebnisse)
  1. 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

  1. Zu testende Funktion bestimmen
  1. Eingabe-Vektoren (Faktoren) finden (A, B, C, ...):

    explizit: Parameter

    implizit: globale Variablen, Systemzustand, Datenbankzustand, ...

  1. 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, ...

  1. 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