Software-Test: Funktionstest

Ähnliche Dokumente
Software-Test: Funktionstest

Funktionale Testverfahren. Black Box-Tests. Unsystematisches Testen. Unsystematisches Testen (2) Überblick:

5 Produktqualität Komponenten: Testende Verfahren 2 [stark gekürzt]

Qualitätssicherung von Software (SWQS)

Software-Test: Strukturtest

Funktionales Testen. Software-Praktikum Andreas Zeller Universität des Saarlandes

ASIL-relevante SW-Module identifiziert! Was nun?

Fachgruppe Praktische Informatik

Programmiertechnik II

5.3 Korrektheit und Verifikation

Vorlesung. Softwaretestmethoden Version Dr. Carsten Gnörlich. Rechnerbetriebsgruppe. Kap. 2 - Datenbereichsbezogenes Testen

Software Engineering in der Praxis

Test-Strategien. Grundsätzliches Blackbox-Testen Whitebox-Testen Graybox-Testen Ablauf von Tests Zusammenfassung. HS Mannheim

Grenzwertanalyse. Domain-Testing. Ronny Schwierzinski, Bernd Rabe, Anna Bartwicki

Software Engineering in der Praxis

Software Engineering

5.3 Korrektheit und Verifikation

Software Engineering II (IB) Testen von Software / Modultests

White-Box-Test. Black-Box-Test. Testen. Testen. Vorlesung Methoden des Software Engineering. Martin Wirsing. Einheit D.2,

Softwaretechnik II. Sommersemester Grundlagen des Softwaretestens II. Stefan Berlik

Qualitätssicherung von Software

Mathematische Beweise und Symbolische Tests

Prof. Dr. Peter Knauber. Name:... Vorname:... Unterschrift:...

Systematischer Testfallentwurf als zentrales Element der Aufwandsteuerung

Qualitätssicherung von Software (SWQS)

OOSE_02E Testen mit BlueJ/JUnit 4

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

OOSE4 Testen mit BlueJ/JUnit 4

2 Funktionsorientierter Test

Taxi System. CheckUp Tutorial Version 4.3 Institut für Softwaretechnik und interaktive Systeme

Testfälle und Anderes aus Modellen generieren. Dr. Martin Beißer, sepp.med gmbh

Funktionales Testen. Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg

Programmiertechnik 1 FOR-SCHLEIFEN

etutor Benutzerhandbuch Relationale Algebra Benutzerhandbuch Georg Nitsche

Methoden des Software Engineering

Testdesign für Automationsskripte

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Property Based Testing

Programmiertechnik 1 FOR-SCHLEIFEN

Was ist Logik? Was ist Logik? Aussagenlogik. Wahrheitstabellen. Geschichte der Logik eng verknüpft mit Philosophie

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Verifizierende Testverfahren

Qualitätssicherung von Software

Wiederholung. Testen. Tests nach Methode zum Ableiten der Testfälle White Box Test Black Box Test

Beispiel: Schriftliche Addition

Testphase. Das Testen

Sichtbarkeiten, Klassenmember und -methoden

hue12 January 24, 2017

2 Funktionsorientierter Test

Begleittext: Einführung in das Programmieren in Java für Nichtinformatiker

Semestrale Softwaretechnik: Software-Engineering

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

Programmierpraktikum

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Kapitel 3 Ereignisdiskrete Systeme (III)

Klausur Softwaretechnik

In diesen Canvas können Punkte an gültigen Koordinaten gezeichnet werden.

Einführung in die Programmierung

Vorlesung Objektorientierte Programmierung Klausur

15 Der strukturierte Datentyp»set«(Mengen)

,$ -. "+0 *+*+ ! / -#$%$. #$%'' $ () 1 2$ #$%$! 1 2$3 )!

Schleifenanweisungen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Analyse der Kamerabewegung Video - Inhaltsanalyse

Testen - Konzepte und Techniken

Blocktutorium EidP. -Theorie II. EBNF Syntaxdiagramm Methodenüberladung

Intensivübung zu Algorithmen und Datenstrukturen

Sequenzgenerierung aus Klassifikationsbäumen

2.2 Syntax, Semantik und Simulation

Testen. SEPR Referat: Testen - Oliver Herbst

ECDL MODUL COMPUTING. Syllabus Version 1.0

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

"Spezifikationsbasierter Softwaretest" Test mit Matlab/Simulink/Stateflow

Software Entwicklung 2. Softwaretest

Theoretische Informatik I

Test-Suite Beurteilung

Statistik Testverfahren. Heinz Holling Günther Gediga. Bachelorstudium Psychologie. hogrefe.de

Testen mit Use Cases. Chris Rupp Dr. Stefan Queins

Strategien zur Testfallgenerierung aus UML-Zustandsautomaten

Einführung in C. EDV1-04C-Einführung 1

4.1 Der Blum-Blum-Shub-Generator

Ein Fragment von Pascal

Testen Prinzipien und Methoden

Transkript:

0/23 Software-Test: Funktionstest Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken

Funktionale Testverfahren 1/23 Funktionale Testverfahren testen gegen die Spezifikation und lassen die interne Programmstruktur unberücksichtigt. Komplementär zu white-box-verfahren Benötigen vollständige und widerspruchsfreie Spezifikation Problem: Testvollständigkeit schwierig zu messen

Funktionale Äquivalenzklassenbildung 2/23 Wertebereiche von Ein- und Ausgaben werden in Äquivalenzklassen eingeteilt Bildung der Äquivalenzklassen nur an der Spezifikation orientiert ( black box ) Äquivalenzklassen für gültige und ungültige Werte Getestet wird nur noch für jeweils einen Repräsentanten der Klasse

Regeln zur Äquivalenzklassenbildung 3/23 Jeder spezifizierte Eingabebereich induziert mindestens eine gültige und mindestens eine ungültige Klasse Beispiel: i muß kleiner oder gleich 10 sein. Gültige Klasse: i <= 10 Ungültige Klasse: i > 10. Jede Eingabebedingung der Spezifikation induziert eine gültige Klasse (= Bedingung erfüllt) und eine ungültige Klasse (= Bedingung nicht erfüllt) Beispiel: Das erste Zeichen muß ein Buchstabe sein. Gültige Klasse: Das erste Zeichen ist ein Buchstabe ungültige Klasse: Das erste Zeichen ist kein Buchstabe

Regeln zur Äquivalenzklassenbildung (2) 4/23 Bildet eine Eingabebedingung eine Menge von Werten, die unterschiedlich behandelt werden, ist für jeden Fall eine eigene gültige Äquivalenzklasse zu bilden und eine ungültige. Für Ausgaben werden analog Äquivalenzklassen gebildet Zum Testen wird irgendein Element der Äquivalenzklasse gewählt (am besten zufällig)

Beispiel: ZaehleZchn 5/23 Wir betrachten die Spezifikation von ZaehleZchn: void ZaehleZchn(int&, int& ); // Lese Zeichen von der Tastatur, bis ein Zeichen // gelesen wird, das kein Großbuchstabe ist, oder // INT MAX erreicht. // Ist das eingelesene Zeichen ein Großbuchstabe, // wird um 1 erhöht; // ist der Großbuchstabe ein Vokal, // wird auch um 1 erhöht.

Beispiel: ZaehleZchn (2) 6/23 ZaehleZchn verhält sich in den folgenden Äquivalenzklassen unterschiedlich: Klasse 1 0 < INT MAX Klasse 2 = INT MAX Klasse 3 0 < INT MAX Für das eingelesene Zeichen Zchn gilt außerdem: Klasse 4 Zchn ist kein Großbuchstabe (Zchn < A oder Zchn > Z ) Klasse 5 Zchn ist ein Großbuchstabe Klasse 6 Zchn ist ein großer Vokal ( A, E,..., U )

Beispiel: ZaehleZchn (3) 7/23 Die Äquivalenzklassen können noch weiter verfeinert werden: Eingaben Gültige Äquivalenzklassen 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX Zchn 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U

Beispiel: ZaehleZchn (4) 8/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit drei Repräsentanten decken wir alle Äquivalenzklassen ab: Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse:

Beispiel: ZaehleZchn (4) 8/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit drei Repräsentanten decken wir alle Äquivalenzklassen ab: Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1, 3, 4a, 5, 6a 6e 100 50 X, A, E, I, O, U, 5 106 5

Beispiel: ZaehleZchn (4) 8/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit drei Repräsentanten decken wir alle Äquivalenzklassen ab: Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1, 3, 4a, 5, 6a 6e 100 50 X, A, E, I, O, U, 5 106 5 2 1, 3, 4b 1 1 a 1 1

Beispiel: ZaehleZchn (4) 8/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit drei Repräsentanten decken wir alle Äquivalenzklassen ab: Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1, 3, 4a, 5, 6a 6e 100 50 X, A, E, I, O, U, 5 106 5 2 1, 3, 4b 1 1 a 1 1 3 2, 3 INT MAX 50 INT MAX 50

Grenzwertanalyse 9/23 Grundidee: Repräsentanten sollen am Rand der Äquivalenzklasse gewählt werden Beispiel: Gegeben seien drei Äquivalenzklassen 1 <= aktuellermonat <= 12 (gültig), aktuellermonat < 1 (ungültig), 13 <= aktuellermonat (ungültig). Dann sind 0, 1, 12 und 13 geeignete Repräsentanten. Hintergrund: Grenzbereiche werden besonders häufig fehlerhaft verarbeitet

Beispiel: ZaehleZchn 10/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit vier Repräsentanten decken wir alle Grenzwerte ab (U = untere Grenze, O = obere Grenze) Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse:

Beispiel: ZaehleZchn 10/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit vier Repräsentanten decken wir alle Grenzwerte ab (U = untere Grenze, O = obere Grenze) Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1U, 3U, 4aO, 5U, 5O, 6a 6e 0 0 A, E, I, O, U, Z, @ 6 5

Beispiel: ZaehleZchn 10/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit vier Repräsentanten decken wir alle Grenzwerte ab (U = untere Grenze, O = obere Grenze) Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1U, 3U, 4aO, 5U, 5O, 6a 6e 0 0 A, E, I, O, U, Z, @ 6 5 2 2, 3O INT MAX INT MAX INT MAX INT MAX

Beispiel: ZaehleZchn 10/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit vier Repräsentanten decken wir alle Grenzwerte ab (U = untere Grenze, O = obere Grenze) Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1U, 3U, 4aO, 5U, 5O, 6a 6e 0 0 A, E, I, O, U, Z, @ 6 5 2 2, 3O INT MAX INT MAX INT MAX INT MAX 3 1, 3U 50 0 50 0

Beispiel: ZaehleZchn 10/23 1 0 < INT MAX 2 = INT MAX 3 0 < INT MAX 4a Zchn < A 4b Zchn > Z 5 A Zchn Z 6a Zchn = A 6b Zchn = E 6c Zchn = I 6d Zchn = O 6e Zchn = U Mit vier Repräsentanten decken wir alle Grenzwerte ab (U = untere Grenze, O = obere Grenze) Testfall Getestete Äquivalenzklasse Zchn Soll-Ergebnisse: 1 1U, 3U, 4aO, 5U, 5O, 6a 6e 0 0 A, E, I, O, U, Z, @ 6 5 2 2, 3O INT MAX INT MAX INT MAX INT MAX 3 1, 3U 50 0 50 0 4 1, 3, 4bU 100 50 [ 100 50

Zufallstest 11/23 Füttern des Programms mit zufälligen Werten Einfachstes funktionales Testverfahren Erreicht Gleichbehandlung aller Eingabedaten ohne Beachtung menschlicher Präferenzen Bietet sich an in Ergänzung zu anderen Verfahren (z.b. zur Auswahl von zufälligen Repräsentanten aus einer Äquivalenzklasse)

Test von Zustandsautomaten 12/23 Ist das Verhalten durch einen Zustandsautomaten spezifiziert, können daraus Testfälle abgeleitet werden Ziel: Abdeckung aller Zustandsübergänge (z.b. mindestens 1 ) bereit Beispiel: Parkhaus Geld eingeworfen [reicht aus]/ Karte ausgeben wartet auf Geld Geld eingeworfen [reicht nicht]/ Restbetrag anzeigen Karte eingeschoben/ Betrag anzeigen

Test von Zustandsautomaten 12/23 Ist das Verhalten durch einen Zustandsautomaten spezifiziert, können daraus Testfälle abgeleitet werden Ziel: Abdeckung aller Zustandsübergänge (z.b. mindestens 1 ) Beispiel: Parkhaus Geld eingeworfen [reicht aus]/ Karte ausgeben bereit wartet auf Geld Geld eingeworfen [reicht nicht]/ Restbetrag anzeigen Karte eingeschoben/ Betrag anzeigen Der Testfall Karte eingeschoben Geld eingeworfen [reicht nicht] Geld eingeworfen [reicht aus] deckt alle Zustände und Übergänge 1 ab

Der Testprozeß 13/23 Nur ein Testverfahren alleine reicht nicht aus: Strukturtests können keine fehlende Funktionalität entdecken Funktionstests berücksichtigen die vorliegende Implementierung nur unzureichend (z.b. Zweigabdeckung < 70%) Daher kombiniertes Vorgehen: 1. Funktionstest (mit Grenzwertanalyse + Zufallstests) 2. Strukturtest (der Abschnitte, die noch nicht im Funktionstest abgedeckt wurden) 3. Regressionstest (nach Fehlerkorrektur)

Mutationstesten 14/23 Mutationstesten ist ein weiteres Verfahren, die Güte von Testdatensätzen zu bestimmen: Annahme: Programme sind fast richtig (competent programmer hypothesis) Kleine Änderungen am Programm sollten bei hinreichend umfassenden Testdatensätzen zu beobachtbaren Verhaltensänderungen führen Die möglichen kleinen Änderungen (Mutationen) kann man systematisch erzeugen und die Mutanten mit den Testdatensätzen füttern

Mutationstesten (2) 15/23 Anteil aufgedeckter Mutanten kann als Testgütemaß verwendet werden: Der Testdatensatz hat nur 60% aller Mutanten gekillt. Wir brauchen also noch mehr Testfälle Ein perfekter Testdatensatz sollte alle Mutanten erkennen

Mutationsoperatoren 16/23 beschreiben Erzeugung semantisch veränderter, aber syntaktisch korrekter Programmversionen Für jede Fehlerklasse gibt es spezielle Operatoren Jeder Mutant enthält nur eine Abweichung

Mutationsoperatoren (2) Berechnungsfehler Ändern von arithmetischen Operatoren (+ statt ) Löschen von arithmetischen (Teil-) Ausdrücken Ändern von Konstanten Schnittstellenfehler Vertauschen / Ändern von Parametern Aufruf anderer Prozeduren eines Moduls Kontrollflußfehler Ersetzen von logischen (Teil-) Ausdrücken durch T und F Ändern von logischen und relationalen Operatoren (AND statt OR, statt <) Aufruf anderer Prozeduren Löschen von Anweisungen 17/23

Mutationsoperatoren (3) 18/23 Initialisierungsfehler Ändern von Konstanten Löschen von Zuweisungen / Initialisierungsanweisungen Datenflußfehler Durchtauschen von Variablen in einem Sichtbarkeitsbereich Änderungen in der Indexberechnung

Validierung des Testdatensatzes 19/23 Bestimmung der Mutantenkillquote zu vorgegebener Mutantenzahl Schon bei kleiner Mutantenzahl muß ein hoher Prozentsatz Mutanten (>90%) entdeckt werden, ansonsten ist die Testsuite zu klein (= zu wenig Testfälle)

Schätzung der Restfehlerzahl 20/23 Gesucht: Restfehlerzahl E Es werden N Mutationen eingeführt und M Fehler entdeckt Davon seien X Mutanten. Mithin gilt ungefähr also X M = N E + N E = (M X) N X Analogie: Ich setze in einem Teich N = 100 markierte Forellen aus. Später fische ich M = 10 Forellen; davon sind X = 2 markiert. Also schätze ich die Zahl der nicht-markierten Forellen auf E = (10 2) 100/2 = 400. Aber: mit Vorsicht zu genießen, da die Werte stark von N abhängen.

Fazit: Mutationstesten 21/23 Verfahren zur Beurteilung von Testdatensätzen weitgehend automatisierbar explizite Fehlerorientierung Modellierung anderer Verfahren möglich (z.b. Anweisungsüberdeckung, special value testing) es werden nur einfache Fehler erzeugt es wird angenommen, daß komplexe Fehler Kombinationen einfacher Fehler sind diese Hypothese ist nicht bewiesen

Zusammenfassung 22/23 Die wichtigsten funktionalen Testverfahren sind Funktionale Äquivalenzklassenbildung Grenzwertanalyse Zufallstest Test von Zustandsautomaten Da sowohl Funktionstest als auch Strukturtest Nachteile haben, empfiehlt sich ein kombiniertes Vorgehen. Mutationstesten hilft, die Güte von Testdatensätzen zu bestimmen

Literatur 23/23 Lehrbuch der Softwaretechnik, Band 2 (Balzert) Wissensbasierte Qualitätsassistenz zur Konstruktion von Prüfstrategien für Software-Komponenten (P. Liggesmeyer, 1993)