Qualitätssicherung von Software

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Prüfung objektorientierter Programme -1
Integrations- und Funktionstests im Rahmen des V-Modelles
Phasen und ihre Workflows
Qualitätssicherung von Software
Qualitätssicherung von Software (SWQS)
Qualitätssicherung von Software (SWQS)
Qualitätssicherung von Software (SWQS)
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Imperative Programmierung -Entwicklungswerkzeuge
Prof. Dr. Holger Schlingloff
Qualitätssicherung von Software (SWQS) Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FOKUS : Software Model Checking.
Qualitätssicherung von Software
Qualitätssicherung von Software Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FIRST.
Qualitätssicherung von Software
Prof. Dr. Holger Schlingloff
Qualitätssicherung von Software
Qualitätssicherung von Software
Ausnahmen HS Merseburg (FH) WS 06/07.
Dynamische Testverfahren
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
SWITCH - Anweisung.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Imperative Programmierung Funktionen und Parameter
Das Test-Framework JUnit
Automatisches Testen und Bewerten von Java-Klassen
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
Fehlerabdeckung/ Regressionstest1 Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Fehlerabdeckung/ Regressionstest Vortragende:
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Thema: Fibonacci-Zahlen
Bestimmung des ggT zweier Zahlen
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Whitebox Testen mit JUnit
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Einführung in die Programmierung
2.4 Rekursion Klassifikation und Beispiele
Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller.
Blackbox-Testverfahren
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Testtechniken-Praktikum WS 2005/06 1 Arbeiten mit JUnit Andreas Höfer Dr. Matthias Müller Mit Beiträgen von Johannes Link.
JUnit Grundkonzept Gruppe Markt. JUnit: Ziele Einfachheit: –Leicht erlernbare, bekannte Tools –Möglichst wenig Aufwand für die Implementierung von Testfällen.
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Java Programme nur ein bisschen objektorientiert.
 Präsentation transkript:

Qualitätssicherung von Software Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FIRST

Bücher zum Testen Myers, Glenford J.: The Art of Software Testing. Wiley & Sons (1979) (auch in deutsch erhältlich: „Methodisches Testen von Programmen“; Neuauflage in Vorbereitung) Andreas Spillner, Tilo Linz: Basiswissen Softwaretest. DPUNKT Verlag (2003) (für ASQF Zertifizierung) Bart Broekman, Edwin Notenboom: Testing Embedded Software, Addison-Wesley (2003) (DC) Harry Sneed, Mario Winter: Testen objektorientierter Software. Hanser (2002) Edward Kit: Software Testing in the Real World – Improving the process. Addison-Wesley (1995) Dorothy Graham, Mark Fewster: Software Test Automation - Effective Use of Test Execution Tools. Addison-Wesley (2000) Cem Kaner, Jack Falk, Hung Q. Nguyen: Testing Computer Software. Wiley (2 ed. 1999) Marnie L. Hutcheson: Software Testing Fundamentals - Methods and Metrics. Wiley (2003) Georg E. Thaller: Software-Test. Heise (2002) 2. Testverfahren 5.11.2004

Kapitel 2. Testverfahren 2.1 Testen im SW-Lebenszyklus 2.2 funktionsorientierter Test Modul- oder Komponententest Integrations- und Systemtests 2.3 strukturelle Tests, Überdeckungsmaße 2.4 Test spezieller Systemklassen Test objektorientierter Software Test graphischer Oberflächen Test eingebetteter Realzeitsysteme 2.5 automatische Testfallgenerierung 2.6 Testmanagement und -administration http://qse.ifs.tuwien.ac.at/courses/skriptum/script.htm 2. Testverfahren 5.11.2004

Modul- oder Komponententest erste Teststufe im analytischen Teil des V-Modells erstmaliger Test der ausführbaren Softwarebausteine nach der Programmierung Prozeduren, Funktionen (imperativ) Module, Units, Klassen, Interfaces (objektorientiert) Blöcke (in der modellbasierten Entwicklung) Bausteine dürfen auch verschachtelt sein Jeder einzelne Baustein wird unabhängig von den anderen getestet keine externen Einflüsse oder Wechselwirkungen klare Fehlereingrenzung und -lokalisierung 2.2 Funktionstest 5.11.2004

Ziele des Komponententests Aufdeckung von Fehlern im Modul falsche Berechnungen fehlende Programmpfade Sonderfallbehandlung unzulässige Ein- und Ausgabewerte Robustheit gegenüber falscher Benutzung sinnvolle Fehlermeldungen bzw. Ausnahmebehandlung nichtfunktionale Gesichtspunkte sind sekundär Effizienz, Platz- und Zeitverbrauch Spezifikation und Dokumentation Wartbarkeit, Änderbarkeit, … 2.2 Funktionstest 5.11.2004

Vorgehensweise Bottom-up Ansatz Start mit Klassen die von keinen anderen abhängen Alle Funktionen der Klasse müssen getestet werden, alle Datenfelder verwendet und alle Zustände durchlaufen werden Dann Test von Klassen die auf bereits getesteten aufbauen Schichtenartige Architektursicht; Aggregation von Einzeltests in Testsuiten 2.2 Funktionstest 5.11.2004

eXtreme Programming Wann soll man Modul-Tests schreiben? Wenn die Klasse fertig ist? testen bevor andere damit konfrontiert werden Parallel zur Implementierung der Klasse? testen um eigene Arbeit zu erleichtern Vor der Implementierung der Klasse! Tests während Implementierung immer verfügbar Konzentration auf Interface statt Implementierung durch Nachdenken über Testfälle Design-Fehler finden 2.2 Funktionstest 5.11.2004

Ein Beispiel public final class IMath { /* /** A class to test the class IMath. */ public class IMathTestNoJUnit { /** Runs the tests. */ public static void main(String[] args) { printTestResult(0); printTestResult(1); printTestResult(2); printTestResult(3); printTestResult(4); printTestResult(7); printTestResult(9); printTestResult(100); } private static void printTestResult(int arg) { System.out.print(“isqrt(“ + arg + “) ==> “); System.out.println(IMath.isqrt(arg)); public final class IMath { /* * Returns an integer approximation * to the square root of x. */ public static int isqrt(int x) { int guess = 1; while (guess * guess < x) { guess++; } return guess; Beispiel: Yoonsik Cheon, University of Texas at El Paso, www.cs.utep.edu/~cheon/cs3331/notes/unit-testing.ppt 2.2 Funktionstest 5.11.2004

Fragen zum Beispiel Was ist die Ausgabe der Tests? Vorteile gegenüber manuellem Test? Welche Fehler werden (nicht) gefunden? Probleme mit dieser Art zu testen? Was kann verbessert werden? 2.2 Funktionstest 5.11.2004

JUnit (vgl. Übung!) Kontrollierte Testausführung und -auswertung import junit.framework.*; public class IMathTest extends TestCase { public void testIsqrt() { assertEquals(0, IMath.isqrt(0)); assertEquals(1, IMath.isqrt(1)); … assertEquals(10, IMath.isqrt(100)); } public static Test suite() { return new TestSuite(IMathTest.class); public static void main (String[] args) { junit.textui.TestRunner.run(suite()); Kontrollierte Testausführung und -auswertung Public domain (www.junit.org) sofort einsetzbar, in viele IDEs integriert unterstützt „Test durch Entwickler“ Paradigma Testautomatisierung! 2.2 Funktionstest 5.11.2004

JUnit (Forts.) Typisch für eine Reihe ähnlicher Tools Vorteile der Verwendung automatisierte, wiederholbare Tests (nach jedem „Build“!) kombinierbar zu Testklassen und Testsuiten Einbeziehung von Testdaten automatische Testauswertung Möglichkeit des Tests von Ausnahmen Möglichkeit der Verwendung interner Schnittstellen Was JUnit dem Tester nicht abnimmt Testentwurf (Auswahl und Beurteilung der Testfälle) 2.2 Funktionstest 5.11.2004

Komponententest-Entwurf sehr entwicklungsnahe Testarbeit, oftmals direkt am ausführbaren Code Problematik der Spezifikation (Wozu eine Spezifikation, wenn der Code selbst vorliegt?) fließender Übergang zum Debugging; oft von den Entwicklern selbst durchgeführt Problematik der Zielsetzung (Fehler finden oder Ablauffähigkeit demonstrieren?) Problematik des Hintergrundwissens aus der Entwicklung (für den Testentwurf oft notwendig, aber stillschweigende Annahmen behindern die Objektivität bzw. Abdeckung) 2.2 Funktionstest 5.11.2004

Ein “klassisches” Beispiel (Myers) Funktion mit drei int-Eingabewerten (x,y,z), die als Längen von Dreiecksseiten interpretiert werden Berechnet, ob das Dreieck gleichseitig, gleichschenklig oder ungleichseitig ist Schreiben Sie für diese Funktion Testfälle auf! (jetzt!) 2.2 Funktionstest 5.11.2004

Auswertung nach Punkten (1) Haben Sie einen Testfall für ein zulässiges gleichseitiges Dreieck? Haben Sie einen Testfall für ein zulässiges gleichschenkliges Dreieck? (Ein Testfall mit 2,2,4 zählt nicht.) Haben Sie einen Testfall für ein zulässiges ungleichseitiges Dreieck? (Beachten Sie, dass Testfälle mit 1,2,3 und 2,5,10 keine Ja-Antwort garantieren, da kein Dreieck mit solchen Seiten existiert.) Haben Sie wenigstens drei Testfälle für zulässige, gleichschenklige Dreiecke, wobei Sie alle drei Permutationen der beiden gleichen Seiten berücksichtigt haben? (z.B. 3,3,4; 3,4,3; 4,3,3) 2.2 Funktionstest 5.11.2004

Auswertung nach Punkten (2) Haben Sie einen Testfall, bei dem eine Seite gleich Null ist? Haben Sie einen Testfall, bei dem eine Seite einen negativen Wert hat? Haben Sie einen Testfall mit 3 ganzzahligen Werten, in dem die Summe zweier Zahlen gleich der dritten ist? (D.h., wenn das Programm 1,2,3 als ungleichseitiges Dreieck akzeptiert, so enthält es einen Fehler.) Haben Sie wenigstens drei Testfälle für Punkt 7, wobei Sie alle drei Permutationen für die Länge jeweils einer Seite als Summe der beiden anderen Seiten berücksichtigt haben? (z.B. 1,2,3; 1,3,2; 3,1,2.) Haben Sie einen Testfall mit drei ganzzahligen Werten größer Null, bei dem die Summe aus zwei Zahlen kleiner als die dritte ist? (z.B. 1,2,4 oder 12,15,30) 2.2 Funktionstest 5.11.2004

Auswertung nach Punkten (3) Haben Sie wenigstens drei Testfälle für Punkt 9, wobei Sie alle drei Permutationen berücksichtigt haben? (z.B. 1,2,4; 1,4,2; 4,1,2.) Haben Sie einen Testfall, in dem alle drei Seiten gleich Null sind (d.h. 0,0,0)? Haben Sie wenigstens einen Testfall mit nichtganzzahligen Werten? Haben Sie wenigstens einen Testfall, in dem Sie eine falsche Anzahl von Werten angeben (z.B. zwei statt drei ganzzahlige Werte)? Haben Sie zusätzlich zu jedem Eingangswert in allen Testfällen die erwarteten Ausgabewerte angegeben? 2.2 Funktionstest 5.11.2004

Zusatzpunkte Test mit maximalen Werten Test auf Zahlbereichs-Überlaufbehandlung Test mit unzulässigen Eingabezeichenfolgen 2.2 Funktionstest 5.11.2004

Reflexion Durchschnittswerte erfahrener Programmierer: 7-8 „Diese Übung sollte zeigen, dass das Testen auch eines solch trivialen Programms keine leichte Aufgabe ist. Und wenn das wahr ist, betrachten Sie die Schwierigkeit, ein Flugleitsystem mit 100.000 Befehlen, einen Compiler oder auch nur ein gängiges Gehaltsabrechnungsprogramm zu testen.“ (1979) Heute: 1-10 MLoC 2.2 Funktionstest 5.11.2004

Pause! 2.2 Funktionstest 5.11.2004

Testentwurf im Komponententest Aus Komplexitätsgründen ist es nicht möglich, alle Eingabewerte(-folgen) zu testen Problem: Welche Untermenge aller denkbaren Testfälle bietet die größte Wahrscheinlichkeit, möglichst viele Fehler zu finden? Techniken zur Testdaten- und Testfallbestimmung Äquivalenzklassenbildung Auswahl „repräsentativer“ Daten Grenzwertanalyse Wertebereiche und Bereichsgrenzen Entscheidungstabellen und Klassifikationsbäume 2.2 Funktionstest 5.11.2004

Äquivalenzklassenbildung 1. Schritt: Partitionierung des Eingabedatenraumes in eine endliche Zahl von Äquivalenzklassen (bezüglich des vermuteten Ausfallverhaltens) im Beispiel: „drei gleiche Eingaben größer Null“ 2. Schritt: Auswahl der Testfälle anhand je eines Repräsentanten der Äquivalenzklasse im Beispiel: (2,2,2) 2.2 Funktionstest 5.11.2004

Vorgehensweise zur Äquivalenzklassenbildung Betrachten der Definitionsbereiche für Ein-/Ausgabewerte Für jeden Wert ergeben sich gültige und ungültige Klassen Wertebereiche, Aufzählungen: enthalten oder nicht enthalten Eingabewerte, die (möglicherweise) unterschiedlich verarbeitet werden: für jeden Wert eine gültige und insgesamt eine ungültige Klasse Ausgaben, die auf verschiedene Weise berechnet werden: je eine Klasse, die auf diese Ausgabe führt Eingabebedingungen, die vorausgesetzt werden: je eine gültige und eine ungültige Klasse Aufspaltung einer Klasse in kleinere Klassen, falls Grund zur Annahme besteht, dass nicht alle Elemente gleich behandelt werden Tabellierung der zu jedem Parameter gehörigen Klassen 2.2 Funktionstest 5.11.2004

Vorgehensweise zur Testfallauswahl Äq1 Äq2 Äq3 … Par1 Wert1.1 Wert1.2 Par2 Wert2.1 ParN Vollständig: Kartesisches Produkt der Klassen meist nicht praktikabel Heuristisch: Auswahl gemäß folgender Strategie Bildung von Testfällen, die möglichst viele noch nicht behandelte gültige Klassen abdecken Bildung von Testfällen, die genau eine ungültige Klasse abdecken Paarweise Kombination von Repräsentanten im Beispiel: (2,2,3) und (-7,1,2), (5,“a“,2) 2.2 Funktionstest 5.11.2004