Softwaretest - dbis.informatik.hu-berlin.de · Test: Ist die Software richtig? H. Schlingloff,...
Transcript of Softwaretest - dbis.informatik.hu-berlin.de · Test: Ist die Software richtig? H. Schlingloff,...
Softwaretest Methoden, Werkzeuge, Vorgehensweisen
Prof. Dr. Holger Schlingloff
Humboldt-Universität zu Berlin und
Fraunhofer FIRST
Folie 2 H. Schlingloff, Ringvorlesung Semesterprojekte
• Warum Testen? • Teststufen • Komponententests mit JUnit • Oberflächentests mit Selenium • Überdeckung
Folie 3 H. Schlingloff, Ringvorlesung Semesterprojekte
Warum Testen?
Prüfen = Testen einer Serie gleichartiger Objekte
Experimentieren = Ausführen einzelner Versuche zur Erlangung einer neuen Erkenntnis
Probieren = experimentelles Feststellen der Qualität eines Objekts
Testen = systematisches Probieren nach verschiedenen Qualitätskriterien
Abgrenzung
Folie 4 H. Schlingloff, Ringvorlesung Semesterprojekte
VVT & D
Verifikation: Die Software ist richtig!
Debugging: Warum ist die Software
nicht richtig?
Validation: Ist es die richtige Software?
Test: Ist die Software richtig?
Folie 5 H. Schlingloff, Ringvorlesung Semesterprojekte
w-Fragen
• warum • was • wer • wozu • wie • wann sollen wir testen?
Folie 6 H. Schlingloff, Ringvorlesung Semesterprojekte
• Projekt läuft nicht è kein Schein • Mangelnde Qualität kostet Geld:
• Benutzerakzeptanz, Kundenverlust
• Fehlerkorrektur- und Folgekosten
• Gewährleistung, Produkthaftung • Sicherheitsprobleme
Warum sollen wir testen?
Folie 7 H. Schlingloff, Ringvorlesung Semesterprojekte
• Qualität = Übereinstimmung mit den Anforderungen
z.B.: Funktionalität, Zweckdienlichkeit, Robustheit, Zuverlässigkeit, Sicherheit, Effizienz, Benutzbarkeit, Geschwindigkeit, Preisgünstigkeit, ...
Was sollen wir testen?
Folie 8 H. Schlingloff, Ringvorlesung Semesterprojekte
• unabhängige Anforderungsanalyse
• Quantifizierung der Anforderungen
nicht: „akzeptable Antwortzeiten sind wichtig“
sondern: „Antwortzeit höchstens 5 Sekunden,
in 80% der Fälle kleiner als 3 Sekunden“
• Kategorisierung der Anforderungen
(unerläßlich / wichtig / erwünscht / irrelevant / unerwünscht)
Folie 9 H. Schlingloff, Ringvorlesung Semesterprojekte
Tester und Entwickler sind verschiedene Rollen
• „Bugs“ schleichen sich nicht ein, sie werden gemacht
• Niemand kennt das Produkt so genau wie der Entwickler
• Motivation des Entwicklers: Debugging und Verifikation
• Motivation des Testers: Fehler identifizieren
Wer soll testen?
Folie 10 H. Schlingloff, Ringvorlesung Semesterprojekte
Individualverantwortlichkeit • Diskriminierungen
• Schuldzuweisungen
• verminderte Produktivität
Teamverantwortung • Kooperation
• Qualitätsbewußtsein
• Produktverbesserung
Fehlervermeidung statt Fehlererkennung!
Wozu sollen wir testen?
Folie 11 H. Schlingloff, Ringvorlesung Semesterprojekte
• Konzentration auf Benutzersicht (Relevante Testfälle, Benutzbarkeitsprobleme)
• Systematische Vorgehensweise (Testplanung und -dokumentation)
• Einbeziehung aller Komponenten (auch: Dokumentation, Installationsroutinen usw.)
• Automatisierung wo möglich
Wie sollen wir testen?
Folie 12 H. Schlingloff, Ringvorlesung Semesterprojekte
Analyse
System- Entwurf
Implementierung
System-Integration
Einsatz
Wann sollen wir testen?
Modul- dekomposition
Modul- integration
Anforderungstest
Designtest
Komponententest
Systemtest
Akzeptanztest
Modultest
In jeder Phase!
Folie 13 H. Schlingloff, Ringvorlesung Semesterprojekte
Folie 14 H. Schlingloff, Ringvorlesung Semesterprojekte
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
Folie 15 H. Schlingloff, Ringvorlesung Semesterprojekte 2.2 Funktionstest
Ziele des Komponententests
• Aufdeckung von Fehlern in Funktionen § 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, …
Folie 16 H. Schlingloff, Ringvorlesung Semesterprojekte
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
Folie 17 H. Schlingloff, Ringvorlesung Semesterprojekte
TDD, XP &c
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
Folie 18 H. Schlingloff, Ringvorlesung Semesterprojekte
Ein Beispiel
Beispiel: Yoonsik Cheon, University of Texas at El Paso, www.cs.utep.edu/~cheon/cs3331/notes/unit-testing.ppt
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; } }
/** 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)); } }
Folie 19 H. Schlingloff, Ringvorlesung Semesterprojekte
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?
Folie 20 H. Schlingloff, Ringvorlesung Semesterprojekte
JUnit
• Kontrollierte Testausführung und -auswertung
• Public domain (www.junit.org)
• sofort einsetzbar, in viele IDEs integriert
• unterstützt „Test durch Entwickler“ Paradigma
• Testautomatisierung!
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 Testsuite() { return new TestSuite(IMathTest.class); } public static void main (String[] args) { junit.textui.TestRunner.run(suite()); } }
Folie 21 H. Schlingloff, Ringvorlesung Semesterprojekte
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)
Folie 22 H. Schlingloff, Ringvorlesung Semesterprojekte
Folie 23 H. Schlingloff, Ringvorlesung Semesterprojekte
Oberflächentests
• Capture-Replay-Technik • kommerziell: Mercury WinRunner bzw. QuickTest
Professional, IBM Rational Robot
• frei: Selenium IDE
• Idee § Aufzeichnung von Benutzerinteraktionen § Abspielen mit Vergleich auf Änderungen
• Erweiterungen § GUI-Map, Scripting Wizard § Alternativen, Wiederholungen § Checkpoints, Komparatoren
Folie 24 H. Schlingloff, Ringvorlesung Semesterprojekte
Vorgehensweisen GUI-Test
• pragmatisch § Aufzeichnung von Experimenten, Replay bei neuen Produktversionen
• systematisch § Festlegung von Testzielen (Qualitätskriterien, Requirements) § Definition von Testfällen und Testsuiten § Umsetzung (Implementierung) der Testfälle § automatische Durchführung, Ergebnisabgleich und Korrektur
• Vor- und Nachteile Testautomatisierung von Oberflächen § minimaler Aufwand für Regressionstests § systematische Überdeckung der Anforderungen § erhöhter Anfangsaufwand, Toolkosten
Folie 25 H. Schlingloff, Ringvorlesung Semesterprojekte
Aufzeichnung GUI-Test
• Umgebung aufsetzen, Aufzeichnungsoptionen setzen • Aufzeichnung starten • Wiederholung (experimentell oder nach Plan):
§ Testfälle durchführen § Beobachtungspunkte einfügen, Testverdikte festlegen § Kontrollpunkte setzen
• Aufzeichnung beenden • entstandene Skripte editieren
§ Fallunterscheidungen, Verzweigungen § Wiederholungen, Datenbereiche
Folie 26 H. Schlingloff, Ringvorlesung Semesterprojekte
Wiedergabe GUI-Test
• Testskripte zu Testsuite zusammenstellen • Umgebung aufsetzen, Wiedergabeoptionen setzen • Wiedergabe mit Aufzeichnung der Ergebnisse
§ ggf. sofortige Korrektur von Skriptfehlern
• Auswertung der Ergebnisse § Für jeden nicht durchgelaufenen Testfall
- manuelle Anpassung der Testskripte und erneute Durchführung oder - Eintrag von Items in Fehlerverfolgungssystem
§ Erzeugung eines Testreports (manuell oder automatisch)
Folie 27 H. Schlingloff, Ringvorlesung Semesterprojekte
Folie 28 H. Schlingloff, Ringvorlesung Semesterprojekte
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
Folie 29 H. Schlingloff, Ringvorlesung Semesterprojekte
Ä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)
Folie 30 H. Schlingloff, Ringvorlesung Semesterprojekte
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
Folie 31 H. Schlingloff, Ringvorlesung Semesterprojekte
Vorgehensweise zur Testfallauswahl
• 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)
Äq1 Äq2 Äq3 … Par1 Wert1.1 Wert1.2 Par2 Wert2.1 … …
ParN