Softwaretest - TU Chemnitz: Fakultät für Informatik

Verlässliche Systeme – Test von Software
9.1 Grundlagen
Verlässliche Systeme
Wintersemester 2015/2016
9.1 Grundlagen
Nochmals: Verifikation und Test in der SW-Entwicklung
Fehler
Verlässliche Systeme
Test
keine
Fehler
gefunden
9. Kapitel
Vorstellung
des
Kunden
Test von Software
Anforderungsspezifikation
Formale
Spezifikation
Programmentwurf
Prof. Matthias Werner
Verifikation
korrekt
Professur Betriebssysteme
Fehler
WS 2015/2016 · M. Werner
Verlässliche Systeme – Test von Software
9.1 Grundlagen
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.1 Grundlagen
Existenz von Fehlern
Herausforderungen
I
Neue Technologien vergrößern (auch) oft die Komplexität des Testens
I
Merke
I
Softwaretests beweisen nie die Korrektheit von Programmen, sondern höchstens die
Existenz von Fehlern!
I
I
Dynamisches Verhalten
Nebenläufige Ausführung
Komplexe Sprachen
Paradigmen wie Objektorientierung
I
Trotzdem werden Software-Tests häufiger eingesetzt als Software-Verifikation:
I
I
I
Zu großer Aufwand für Verifikation
I
Mangelnde Fähigkeit/Kenntnis der Verifikationsmethoden
I
Keine klare Spezifikation (Programmierer weiß“ ja, was gemeint ist...)
”
I
3 / 22
osg.informatik.tu-chemnitz.de
Nachnutzung getesteter Komponenten in einem anderen Kontext
Vererbung
...
In diesem Kapitel
I
I
I
WS 2015/2016 · M. Werner
2 / 22
Überblick
Ansätze
Testautomatisierung
WS 2015/2016 · M. Werner
4 / 22
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.1 Grundlagen
Verlässliche Systeme – Test von Software
9.1 Grundlagen
Grundidee
Fehler-Test-Korrelation
I
I
Erzeuge irgendwelchen Input
I
Lasse Programm laufen
I
Vergleiche Ergebnis mit dem erwarteten Ergebnis
I
Probleme:
I
I
I
Die Wahrscheinlichkeit für die Existenz von Fehlern nimmt nicht mit der Zahl der
gefundenen Fehler ab
Welcher Input?
Abdeckung?
Wann genug?
á es ist i.d.R. unmöglich, alle möglichen Eingabevarianten zu testen (Komplexität!)
I Ausnahme: erschöpfendes Testen
I
Testen findet üblicherweise spät im Projekt statt
Quelle: G.J. Myers, The Art of Software Testing, John Wiley & Sons (2004)
I
WS 2015/2016 · M. Werner
5 / 22
osg.informatik.tu-chemnitz.de
Achtung: Abstumpfungsgefahr
WS 2015/2016 · M. Werner
Verlässliche Systeme – Test von Software
9.1 Grundlagen
6 / 22
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.2 Ansätze
9.2 Ansätze
Frühes Testen
Whitebox vs. Blackbox
I
Je später ein Fehler entdeckt wird, deso höher sind die entstehenden Kosten
I
Beispiel: Kostenfaktor für Fehleraufdeckung in verschiedenen Phasen des
Entwicklungsprozesses*
Phase im
Entwicklungsprozess
Spezifikation
Spezifikation
Fehler in...
Entwurf
Implementation
1
Whitebox á Unit-Tests
I
Konzept: Bei möglichst kleinen Komponenten möglichst viele Pfade testen
I
Vorteil: Kenntnis interner Vorgänge bringt höchste Fehleraufdeckung
Nachteil:
I
Entwurf
3
1
Implementation
5 – 10
10
I
1
I
Systemtest
10
15
10
Post-Release
10 – 100
25 – 100
10 – 25
Test werden i.d.R. vom Programmierer entworfen (jemand anders durchschaut den
Code nicht)
Aber: Jemand, der einen Fehler macht, erkennt ihn selten (Vorbelastung)
* Quelle: STEVE MCCONNELL, Code Complete (2nd ed.),Microsoft Press, 2004
WS 2015/2016 · M. Werner
7 / 22
osg.informatik.tu-chemnitz.de
WS 2015/2016 · M. Werner
8 / 22
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.2 Ansätze
Verlässliche Systeme – Test von Software
9.2 Ansätze
Whitebox vs. Blackbox (Forts.)
Whitebox vs. Blackbox (Forts.)
Blackbox á Funktionstests
I
I
Konzept: Übereinstimmung mit externer Spezifikation testen
I
Vorteil: Tester werden nicht durch die Kenntnis des internen Designs beeinflusst
Nachteile:
I
I
I
I
I
I
Explizite Spezifikation wird benötigt
Deckt i.d.R. nur einen kleinen Teil der möglichen Fälle ab
WS 2015/2016 · M. Werner
9 / 22
I
osg.informatik.tu-chemnitz.de
Software testing still remains an art, since the first day. We still don’t know how to
”
make it a science.“
J. PAN, CMU
Dies gilt insbesondere für die Generierung von Testfällen
Problem: Vorwissen
I
Vorwissen hilft kritische Fälle zu erkennen und damit Fälle einzuschränken
Vorwissen verhindert die Erkennung kritischer Fälle und eleminiert sie
In der Regel ist die Komponente oder die Voraussetzung fehlerhaft, an der keiner
”
gezweifelt hat.“
Software-Engineering Ableitung vom FINAGLES 3. Korollar zu MURPHYS Gesetz
WS 2015/2016 · M. Werner
11 / 22
osg.informatik.tu-chemnitz.de
Generierung von Testfällen und -kriterien (Forts.)
I
I
10 / 22
Verlässliche Systeme – Test von Software
9.2 Ansätze
Generierung von Testfällen und -kriterien
I
verwendete Algorithmen
interne Datenstrukturen
Modul-Strukturen und -abhängigkeiten
WS 2015/2016 · M. Werner
Verlässliche Systeme – Test von Software
9.2 Ansätze
I
In der Praxis wird meist eine Mischung aus Blackbox- und Whitebox-Test
angewendet
Graybox Testing: Blackbox mit zusätzlichen Informationen über
osg.informatik.tu-chemnitz.de
Unabhängig von der nötigen Intuition und Kreativität gibt es
Standardherangehensweisen, z.B.:
WB
Szenario-basiertes Testen
Risikobasiertes Testen
Bedingungstabellen
BB
X
X
X
Pfadabdeckung
X
Statementabdeckung
X
Branch-Abdeckung
X
Datenflußanalyse
Grenzwertanalyse
All pairs
X
X
X
X
X
Adhoc-Tests
X
X
WS 2015/2016 · M. Werner
Idea
wähle Testfälle nach Einsatzszenarien aus
wähle Testfälle nach Auswirkung
beschreibe Ursache-Wirkungskorrelation mit Hilfe
von Bedingungstabellen
wähle Testfälle so, dass jeder Ausführungspfad abgedeckt ist
wähle Testfälle so, dass jedes Statement abgedeckt
ist
wähle Testfälle so, dass bei jeder Verzweigung jeder
Weg mindestens einmal getestet wird
teste entlang des Datenflusses
teste beide Seiten von Unstetigkeitspunkten
teste für eine Menge von Features alle Zweierkombinationen
nutze Intuition und gesunden Menschenverstand
12 / 22
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.2 Ansätze
Verlässliche Systeme – Test von Software
9.2 Ansätze
Testphasen
Integrationstest
Systemtest
I
Komponententest
I
Integrationstest
Releasetest
Idee: Stückweise Vergrößerung des Testobjekts
Hauptansätze:
I
I
I
typischerweise
durchgeführt von:
Unabhängigen
Testteams
Entwickler
WS 2015/2016 · M. Werner
13 / 22
osg.informatik.tu-chemnitz.de
WS 2015/2016 · M. Werner
Verlässliche Systeme – Test von Software
9.2 Ansätze
Steuerprogramm wird zuerst getestet
I
Module werden nacheinander integriert
I
Schwerpunkt auf Interfaces
Vorteile:
I
I
I
Frühe Erkennung der Funktionsfähigkeit
I
Schwerpunkt auf (Modul-)Funktionalität und Performance
Vorteile:
I
Es wird kein Test-Treiber (Integrationsframework) benötigt
Interface-Fehler werden früh aufgedeckt
I
I
15 / 22
I
osg.informatik.tu-chemnitz.de
Es werden keine Module-Stubs benötigt
Kritische Komponentenfehler werden früh erkannt
Nachteile:
I
Es werden Module-Stubs benötigt
Kritische Komponentenfehler werden spät erkannt
WS 2015/2016 · M. Werner
I
I
Nachteile:
I
osg.informatik.tu-chemnitz.de
Bottom-up Integrationstest
I
I
14 / 22
Verlässliche Systeme – Test von Software
9.2 Ansätze
Top-down Integrationstest
I
Top-down Integrationstest
Bottom-up Integrationstest
Regressionstest
Es werden Test-Treiber (Integrationsframework) benötigt
Interface-Fehler werden spät erkannt
WS 2015/2016 · M. Werner
16 / 22
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.2 Ansätze
Verlässliche Systeme – Test von Software
9.2 Ansätze
Regressionstest
I
I
Testet die Auswirkungen von neuen Änderungen auf gesamten bisher integrierten
Code
Gemeinhin werden zwei Testmengen definiert: Gesamttest und kritische
Untermenge
I
I
I
I
I
Gesamttest wird gelegentlich durchgeführt
Kritische Untermenge bei jedem Durchlauf
Neben der funktionalen Korrektheit spielen auch nichtfunktionale Eigenschaften
eine Rolle
Testkategorien in diesem Bereich:
I
I
I
Schnellere Eingrenzung von Fehlerursache
I
Nachteil:
I
Performance-Tests
Stresstests
I
Vorteil:
I
I
Nichtfunktionale Eigenschaften
I
Lasttests
Speichererschöpfungstests
Sicherheitstest
Robustheitstest
Es ist schwer zu entscheiden, was zur kritischen Untermenge gehört
1
WS 2015/2016 · M. Werner
17 / 22
osg.informatik.tu-chemnitz.de
WS 2015/2016 · M. Werner
Verlässliche Systeme – Test von Software
9.3 Automatisierung
Verlässliche Systeme – Test von Software
9.3 Automatisierung
What ADLT Is Not
9.3 Automatisierung
Beispiel: ADL
Automatisierung
I
Testen beinhaltet häufig wiederkehrende Vorgänge
I
Nur kleinere Projekte sollten zu Fuß“ getestet werden
”
Automatisierung des Testvorganges
Verschiedene Teile des Testvorganges können (semi-)automatisiert werden:
I
I
I
I
I
I
Assertion Definition
While ADLT is a powerful unit-testing tool, it cannot do all tasks associated
with testing. ADLT was specifically designed not to be a test harness or
debugger. ADLT relies upon the Test Environment Toolkit (TET) test harness to
Language
(ADL) Translation
Systemand clean-up structure.
provide
test management,
building, execution,
Formal Specification
of Software Component
(ADL File)
I
I
ADLT helps in the18implementation
of new software
by generating header
/ 22
osg.informatik.tu-chemnitz.de
files containing declarations of the elements in the specified
component—the constituent functions, variables, constants, and type
definitions. Since ADL specifications are not embedded in the components
to be tested or documented, ADLT can be used with either new software or
existing, already-compiled components.
Generierung von Test(mustern)
Instrumentierung des Codes
Testdurchführung und -protokollierung
Testauswertung
Es existieren jede Menge Tools, die eine Automatisierung von einer oder mehrere
Phasen des Testvorgangs unterstützen
á Liste auf http://www.testingstuff.com/tools.html
ADLT
Implementation
of
Functions Under Test
19 / 22
osg.informatik.tu-chemnitz.de
Test Code
Data Factory
and
Auxiliary Functions
Test Program
Programmer-Supplied
File
WS 2015/2016 · M. Werner
Formal Test Data
Description
(TDD File)
WS 2015/2016 · M. Werner
Figure 1-1
ADLT-Generated
File
High-level view of ADLT test generation.
20 / 22
Executable File
osg.informatik.tu-chemnitz.de
Verlässliche Systeme – Test von Software
9.3 Automatisierung
Verlässliche Systeme – Test von Software
9.3 Automatisierung
Beispiel: Testdurchführung in Java
Beispiel: Testdurchführung in Java (Forts.)
I
I
Verschiedene Tools, z.B. JUnit, TestNG, JTiger
I
Dabei ist JUnit am ältesten und daher auch vermutlich am bekanntesten und hat
die meisten Erweiterungen/Plugins, z.B. Cactus, DJUnit, Infinitest
I
Vorgehen:
I
I
I
I
I
Asserts“ werden abgefangen und ausgewertet
”
Nutzung von Java-Annotationen zur Definition und der Verwebung“ von
”
Test-Routinen
Automatische Testdurchführung
Integration in Eclipse
Test von Ausnahmebedingungen
Zusicherung (Assertion):
import java.util.*;
...
public void test average simple ()
{
Vector nums = new Vector();
nums.add(new Integer(3));
assertTrue(MathOps.average(nums) == 3.0);
}
I
Exception-Test:
@Test(expected= IndexOutOfBoundsException.class)
public void empty() {
new ArrayList<Object>().get(0);
}
á mehr in der Übung
WS 2015/2016 · M. Werner
21 / 22
osg.informatik.tu-chemnitz.de
WS 2015/2016 · M. Werner
22 / 22
osg.informatik.tu-chemnitz.de