31
Testen Prinzipien und Methoden ALP 2 SS2002 4.7.2002 Natalie Ardet

Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Embed Size (px)

Citation preview

Page 1: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

TestenPrinzipien und Methoden

ALP 2 SS20024.7.2002

Natalie Ardet

Page 2: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Definition

Im folgenden gilt:

Software =

Programm + Daten + Dokumentation

Page 3: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Motivation

• Software wird immer mehr in Bereichen eingesetzt, wo ein Versagen zu wirtschaftlichen Verlusten führt und Menschenleben gefährdet wird.

• 50 % der Ausfälle im industriellen Sektor sind auf Software-Fehler zurückzuführen

Was sind die Folgen?=> Zunehmende Qualitätsanforderungen

Page 4: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Beispiel

Das akzeptieren eines 0,1%-Defektniveaus bedeutet:- Pro Jahr: 20.000 fehlerhafte Medikamente

300 versagende Herzschrittmacher- Pro Woche: 500 Fehler bei med. Operationen- Pro Tag: 16.000 verlorene Briefe in der Post

18 Flugzeugabstürze- Pro Stunde: 22.000 Schecks nicht korrekt gebucht

Page 5: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Verifikation vs. Validation

• Mittels Verifikation wird festgestellt ob ein Programm seiner Spezifikation entspricht.=> z.B. mit dem Hoare-Kalkül.

Die Verifikation beantwortet die Frage: „Erstellen wir das Produkt richtig?“ Boehm (1979)

Wie beantworte ich die Frage „Erstelle ich das richtige Produkt?“ ? => Validierung

Page 6: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

V&VProblem

Implementierung

FormalisierungValidierung

Spezifikation ProgrammVerifikation

Page 7: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Das Testen

• Das Testen ist ein Validierungsverfahren, um festzustellen ob ein Programm/Komponente seinen Zweck erfüllt.

• Das Testen ist ein dynamisches Verfahren.• Als „Nebeneffekt“ kann das Vorkommen von

Fehlern in dem Programm festgestellt werden. • Die Fehlerbehebung ist ein Vorgang, der diese

Fehler lokalisiert und korrigiert.

Page 8: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Prinzip

SpezifikationTestdaten

Testergebnisse

Programm Testorakel

ErwarteteErgebnisseIst-Soll-Vergleich

Page 9: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

QuizEin Programm wird getestet. Die

Ausgaben entsprechen den Erwartungen.

Ist das Programm fehlerfrei?

Page 10: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Kernaussage

• Tests zeigen das Vorhandensein, nicht die Abwesenheit von Programmfehlern.

Erläuterung:Wirklich vollständige Tests, bei denen jeder denkbare Ablauf der Ausführung eines Programms getestet wird, sind praktisch undurchführbar.

Page 11: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Äquivalenzklassen

• Ein systematischer Ansatz des Testens beruht auf die Partitionierung der Eingabedaten in Klassen.

• Die Programme verhalten sich für alle Mitglieder einer Klasse auf vergleichbare Weise.

• Wegen dieses äquivalentes Verhalten werden diese Klassen Äquivalenzklassen genannt.

• Die Testfälle werden so entworfen, dass die Eingaben mindestens ein Element jeder Klasse beinhalten.

Page 12: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Grenzwerte

• Eine gute Richtlinie, an der man sich bei der Auswahl der Testdaten orientieren kann, besteht darin, zum einen Testdaten an den Grenzen von Klassen und zum anderen solche auszuwählen, die in der Mitte der Klasse liegen.

Page 13: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Beispiel

Weniger als 4 Zwischen 4 und 10 Mehr als 10

3 4 7 10 11

Page 14: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Testverfahren

• Funktionales Testen• Strukturelles Testen

– Kantenüberdeckungstest– Pfadüberdeckungstest

Page 15: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Funktionales Testen

•Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation abgeleitet werden.

•Das System ist eine „Black Box“, deren Verhalten nur durch die Untersuchung ihrer Eingaben und der dazugehörigen Ausgaben festgestellt werden kann.

•Funktionales Testen beschäftigt sich nur mit der Funktionalität und nicht mit der Implementierung.

Page 16: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Strukturelles Testen

• Testansatz, bei dem die Tests aus der Kenntnis der Implementierung abgeleitet wird.

• Auch „White-Box-Test“, „Glass-Box-Test“ oder „Clear-Box-Test“ genannt.

• Für kleine Programmeinheiten geeignet (z.B. eine Methode)

• Der Code wird analysiert, dadurch wird die Ablaufstruktur bekannt.

• Die Testdaten werden aus der Ablaufstruktur abgeleitet.

Page 17: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Kantenüberdeckungstest

Definition:Kantenüberdeckungstests sind eine Strategie des strukturellen Testens, deren Ziel darin besteht alle Anweisungen im Programm oder in der Komponente wenigstens einmal im Verlauf des Testprozesses auszuführen

Page 18: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Pfadüberdeckungstest

Definition:Pfadüberdeckungstests sind eine Strategie des strukturellen Testens, deren Ziel in der Erprobung jedes einzelnen unabhängigen Ausführungspfades eines Programms oder einer Komponente besteht.

Page 19: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Fehlerbehebung

• Es muss sichergestellt werden, dass der „vermeintlicher“ Fehler ein „tatsächlicher“ Fehler ist.

• Es muss sichergestellt werden, dass die Fehlerbehebung keine neuen Fehler zur Folge hat => Regressionstest

Page 20: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Prioritätsebene eines Fehlers

1. Kritisch: Der Betrieb der Anwendung ist unterbrochen.

2. Hohe Priorität: ein signifikantes Problem, aber das Programm läuft noch.

3. Mittlere Priorität: Das Problem wirkt sich kaum auf den Betrieb der Anwendung aus.

4. Niedrige Priorität: Das Problem hat keinerlei Einfluss auf den Betrieb der Anwendung.

Page 21: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Fehlerlebenszyklusmodell

OFFENNEU

ABGESCHLOSSEN

ZURÜCKGESTELLT

IN BEARBEITUNG

KORRIGIERT

ZUGEWIESEN

Page 22: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Dokumentation eines Fehlers

• Die Priorität des Fehlers bestimmen• Jedem Fehler einen eindeutigen Bezeichner

zuordnen• Testverfahren und Softwareversion dem

Fehler zuordnen• Datum an dem der Fehler berichtet wurde• Status des Fehlers protokollieren

Page 23: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Testaufwand

Der Testaufwand lässt sich dadurch verringern, dass man die Fehler mittels Verfahren entdeckt die keine Fehlerlokalisierung benötigen, wie:

• Code-Inspektionen (Vier-Augen-Prinzip)und die Fehleranzahl reduziert:• Selbstkontrolliertes Programmieren

Page 24: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Selbstkontrolliertes Programmieren

Programmspezifikation Katalog von Programmierregeln

Programm

Fehleranalyse

Programmieren

Versagen

Der Regelkreis des selbstkontrolliertes Programmierens(nach Gram 1990)

Erfolg

Page 25: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Testphasen

• Komponententest (Entwickler)• Integrationstest (Entwickler)• Systemtest (Entwickler, Benutzer)• Abnahmetest (Benutzer)

– Alpha-Test (für individuelle Software)– Beta-Test (für Software Produkte)

Page 26: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Komponententest

• Eine logische Einheit wird getestet (z.B. eine Klasse).

• Ein Testtreiber muss implementiert werden um das System zu simulieren.

Page 27: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Integrationstest

• Das „Zusammenspiel“ der getestetenKomponenten wird getestet.

• Der Integrationstest sollte inkrementell sein:keine „Big-Bang Integration“

• Fehlende Komponenten werden durch Testtreiber oder Stubs simuliert. Diese sind Platzhalter und verfügen über eine geringere Funktionalität als die fehlenden Komponenten.

Page 28: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Beispiel

• A verwendet B und A soll getestet werden=> es wird ein Stub für B geschrieben, der das Verhalten von B simuliert.

• B verwendet A und A soll getestet=> es wird ein Testtreiber geschrieben, der die Interaktion mit B simuliert.

Page 29: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Testplanung

Reihenfolge der Testplanung

1. Abnahmetest2. System & Integrationstest3. Komponententest

Page 30: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Neue Testformen

• Ursprünglich diente das Testen der Validation einer Software im Ganzen:=> Validation gegen Benutzeranforderungen

• Heutzutage wird Test-Driven Development betrieben, wo jede Komponente eines Programms intensiv getestet wird.=> Validation/Verifikation gegen

Entwickleranforderungen Beispiel: eXtreme Programming & Unit Testing

Page 31: Verifikation & Validation - inf.fu- · PDF fileFunktionales Testen •Funktionale Tests stellen einen Testansatz dar, bei dem die Tests von der Programm- oder Komponentenspezifikation

Literatur/Quellen

• Theorie: Software Engineering (Kap.7) W.Zuser et. Al., Pearson Studium 2001.

• Praxis: Effective Methods for Software Testing, W.E.Perry, Wiley 1999

• Software: Junit, www.junit.org