Software Testing und Qualitätssicherung

91
Software Technik Christian Baranowski HTWG Konstanz Software Testing

Transcript of Software Testing und Qualitätssicherung

Page 1: Software Testing und Qualitätssicherung

Software Technik

Christian Baranowski

HTWG Konstanz

Software Testing

Page 2: Software Testing und Qualitätssicherung

Requirement Analysis

Testing

System Design

Coding

Delivery

Wasserfallmodell

Page 3: Software Testing und Qualitätssicherung

WiederholungGrundlagen Software

Qualitätssicherung

Page 4: Software Testing und Qualitätssicherung

Was ist Software Qualität ?Funktionalität

Benutzbarkeit

Zuverlässigkeit

Portabilität

Wartbarkeit

Effizienz

Page 5: Software Testing und Qualitätssicherung

Was soll sichergestellt werden?

Fehlerwirkung (Failure)Nach außen sichtbare Fehlverhalten

Fehlerzustand (Bug)Zustand in der Anwendung der zu einer Fehlerwirkung führen kann.

Fehlhandlung (Error, Misstake)Irrtum bei der Software-Entwicklung.

FehlermaskierungWirkung eines Fehlers (Fehlerzustand) ist nach außen nicht sichtbar, weil er durch einen weiteren Fehler verborgen (überlagert / maskiert) wird.

Page 6: Software Testing und Qualitätssicherung

Wege zu guter Software

analytische Qualitätssicherung

konstruktive Qualitätssicherung

Methoden die dazu dienen eine Anwendung strukturiert (analytisch) nach Fehlerwirkungen, Fehlerzuständen und Fehlermaskierung zu untersuchen. Die Qualität wird gemessen. Anzahl der Fehlerwirkungen, Fehlerzuständen und Fehlermaskierung bestimmt.

Methoden die dazu dienen die Wahrscheinlichkeit für Fehlhandlungen zu minimieren. D.h. die Methoden führen dazu dass es zu einer geringeren Fehlerwahrscheinlichkeit im Projekt kommt.

Page 7: Software Testing und Qualitätssicherung

Software Tests

Page 8: Software Testing und Qualitätssicherung

Fragestellung beim Testen

ValidationIst es die richtige Software?

VerifikationDie Software ist richtig!

TestIst die Software richtig?

DebuggingWarum ist die Software nicht richtig?

Page 9: Software Testing und Qualitätssicherung

• dynamische Testverfahren

• statische Testverfahren

Testmethoden

Page 10: Software Testing und Qualitätssicherung

• Black-Box Testen

• Gray-Box Testen

•White-Box Testen

Testmethoden

Page 11: Software Testing und Qualitätssicherung

Testmethoden

Client tier Presentation tier Business logic tier

GU

I

Clie

nt lo

gic

Mar

shal

ling

De-

Mar

shal

ling

Pre

sent

atio

n

Ser

ializ

atio

n

De-

Ser

ializ

atio

n

Bus

ines

s lo

gic

O/R

map

ping

Database tier

Modul / Komponententest

Integrationstest

Systemtest

SUT (System Under Test)

Page 12: Software Testing und Qualitätssicherung

Systemtest

Komponententest

Integrationstest

Testmethoden

Page 13: Software Testing und Qualitätssicherung

Kosten zur Fehlerbehebung

Anforderungsanalyse Systementwurf Umsetzung Integrationstest Systemtest Betrieb

Kosten (€)

Fehler frühzeitig in einem Projekt (Entwicklungsprozess) zu finden spart Geld !!!

Page 14: Software Testing und Qualitätssicherung

Komponententests (Modultests) und Testabdeckung

Page 15: Software Testing und Qualitätssicherung

Komponententest Charakter •Was wird getestet ? (Testobjekt)

-Klasse / Komponente (mehre Klassen mit definierter Schnittstelle)

•Wer testet? (Tester)

-Entwickler (White-Box / Gray-Box) / Tester (Black-Box)

•Welche Qualitätseigenschaft (ISO9126) wird geprüft?

-Funktionalität, Robustheit, Effizienz

•Mit welchen Werkzeugen wird getestet?

-xUnit Frameworks und Coverage Messung z.B. Cobertura, Emma

Page 16: Software Testing und Qualitätssicherung

Test Design Pattern vier Phasen Test

Setup SUT in einen definierten Zustand bringen.

ExerciseSUT aufrufen mit Test Parametern (Daten).

Verify Prüfen ob das SUT im erwarteten Zustand ist.

Teardown SUT und Testumgebung aufräumen.

Page 17: Software Testing und Qualitätssicherung

JUnitpublic class QuicksortTest {

! Quicksort<Integer> quicksortSUT;

! @Before! public void setUp() {! ! quicksortSUT = new Quicksort<Integer>(new IntComperator());! }

! @Test! public void testSort() throws Exception {! ! quicksortSUT.sort(new Integer[] { 5, 8, 2, 4, 7 });! ! assertArrayEquals(new Integer[] { 2, 4, 5, 7, 8 }, values);! }

! @After! public void tearDown() {! ! quicksortSUT = null;! }

}

Phase 1: Setup

Phase 2: Exercise

Phase 3: Verify

Phase 4: tearDown

Page 18: Software Testing und Qualitätssicherung

White-Box Testen

Test Coverage / Testabdeckung

Page 19: Software Testing und Qualitätssicherung

Testabdeckung

„Als Testabdeckung bezeichnet man das Verhältnis an tatsächlich getroffenen Aussagen eines Tests gegenüber den theoretisch möglich treffbaren Aussagen bzw. der Menge der gewünschten treffbaren Aussagen.“ - Wikipedia

Page 20: Software Testing und Qualitätssicherung

Testabdeckung (100 %)public boolean aAndbOrC(boolean A, boolean B, boolean C) {! return (A && B) || C;}

Erwartet A B Cfalse false false falsetrue false false truefalse false true falsetrue false true truefalse true false falsetrue true false truetrue true true falsetrue true true true

Page 21: Software Testing und Qualitätssicherung

vollständige Testabdeckung

„Eine vollständige Testabdeckung stellt eine Ausnahme dar, weil die Anzahl möglicher Testfälle sehr schnell ungeheuer groß wird (durch kombinatorische Explosion). Ein vollständiger Funktionstest für eine einfache Funktion, die zwei 16-Bit-Werte als Argument erhält, würde schon 2^(16+16), also ca. 4 Milliarden Testfälle bedeuten, um die Spezifikation vollständig zu testen.“ - Wikipedia

Page 22: Software Testing und Qualitätssicherung

Testabdeckung beim White-Box Testen

Page 23: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

public static boolean aAndBOrC(boolean A, boolean B, boolean C) { if(A && B){ return true; } else if(C) { return true; } else { return false; } }

Page 24: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

A && B true

C true

false

Page 25: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

A && B true

C true

false

Erwartet A B C

true true true false

1.

1.

Page 26: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

A && B true

C true

false

Erwartet A B C

true true true false

true false false true

1.

2. 1.

2.

Page 27: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)100 %

A && B true

C true

false

Erwartet A B C

true true true false

true false false true

false false false false

1.

2.3.

1.

2.

3.

Page 28: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

public static boolean aAndBOrC(boolean A, boolean B, boolean C) { if(A && B || C){ return true; } else { return false; } }

Page 29: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)100%

A && B || C true

false

Erwartet A B C

true false false true

false false false false

1.

2.

1.

2.

Page 30: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

public static int sum(int values[], int offset){ int result = 0; for (int value : values) { if(offset > 0){ if(offset < value) result += offset; } result += value; } return result; }

Page 31: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)100%

result = 0

for (value : values)

offset > 0 offset < value

result += value

return result

result += offset

Erwartet values offset

3 [2] 1

Page 32: Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)100 %

result = 0

for (value : values)

offset > 0 offset < value

result += value

return result

result += offset

Erwartet values offset

3 [2] 1

Page 33: Software Testing und Qualitätssicherung

Branch Coverage 100 % (Zweigabdeckung)

result = 0

for (value : values)

offset > 0 offset < value

result += value

return result

result += offset Erwartet values offset

3 [2] 1

2 [2] 0

2 [2] 2

Page 34: Software Testing und Qualitätssicherung

100% Pfadabdeckung

100 % Pfadabdeckung wird in der Regel nicht erreicht (halting problem)

Page 35: Software Testing und Qualitätssicherung

Testabdeckung automatisiert bestimmen

Page 36: Software Testing und Qualitätssicherung

Übung 1I

•Erstellen Sie einen Unit Test für die Demo Quicksort Implementierung

•Messen Sie die Code Abdeckung in Eclipse

Page 37: Software Testing und Qualitätssicherung

Black-Box Testen

Page 38: Software Testing und Qualitätssicherung

Äquivalenzklassenbildung

„Ziel der Äquivalenzklassenbildung ist es, Äquivalenzklassen zu bilden und so eine hohe Fehlerentdeckungsrate mit einer möglichst geringen Anzahl von Testfällen zu erreichen.“ - Wikipedia

Page 39: Software Testing und Qualitätssicherung

Äquivalenzklassenbildung Beispiel Artikel verkaufen

Page 40: Software Testing und Qualitätssicherung

ÄquivalenzklassenbildungParameter Äquivalenzklasse Repräsentant

Basar Nummer gÄK1_01: [0,...,MAX_LONG] 100Basar Nummer

uÄK1_02: [-MAX_LONG,..., 0[uÄK1_03: NaN

-1„abc“

Preis gÄK2_01: [0,...,MAX_LONG]gÄK2_02: X,50 | X = [0,..., MAX_LONG]gÄK2_03: X,5 | X = [0,..., MAX_LONG]gÄK2_04: X,00 | X = [0,..., MAX_LONG]

100,500,511,00

Preis

uÄK2_05: [-MAX_LONG,...,0]uÄK2_06: X,Y | X = [-MAX_LONG,..., 0[ Y = [-MAX_LONG,..., MAX_LONG]uÄK2_07: X,Y | X = [0,..., MAX_LONG] Y = ]0,..., 5[uÄK2_08: X,Y | X = [0,..., MAX_LONG] Y = ]5,..., 50[uÄK2_09: X,Y | X = [0,..., MAX_LONG] Y = ]50,..., MAX_LONG[uÄK2_10: X,Y | X = [0,..., MAX_LONG] Y = NaNuÄK2_11: NaNuÄK2_12: X,Y | X = NaN Y = [0,..., MAX_LONG]

-1-1,100

100,2

100,40

100,510

100,“abc„

“abc„

“abc„,50

BeschreibunggÄK3_01: [NULL...TEXT] “abc„

Page 41: Software Testing und Qualitätssicherung

Äquivalenzklassenbildungabgeleitete TestfälleTestfall Basar Nummer Preis Beschreibung Summe (hinzugefügt)

1 100 10 abc 10 Euro

2 100 0,50 abc 0,50 Euro

3 100 0,5 abc 0,50 Euro

4 100 11,00 abc 11,00 Euro

5 -1 10 abc 0,00 Euro

6 abc 10 abc 0,00 Euro

7 100 -1 abc 0,00 Euro

8 100 -1,100 abc 0,00 Euro

9 100 100,2 abc 0,00 Euro

10 100 100,40 abc 0,00 Euro

11 100 100,510 abc 0,00 Euro

12 100 100,abc abc 0,00 Euro

13 100 abc abc 0,00 Euro

14 100 abc,50 abc 0,00 Euro

Tipp: gute Tester nutzen Sonderzeichen z.B. &“§$%äöü nicht abc!!!

Page 42: Software Testing und Qualitätssicherung

Statische TestverfahrenCode Reviews

Page 43: Software Testing und Qualitätssicherung

Walkthrough

•Autor stellt seinen Code Dokument vor.

•Autor ist der Moderator

•Vorteile:

•Wenig Vorbereitungsaufwand

•Prüfung findet durch spontane Fragen statt.

Page 44: Software Testing und Qualitätssicherung

Inspektion•Formalste Form eines Review

•oft formale Vorprüfung

•Gutachter bekommen die Dokumente vorab

•Gutachter prüfen erst einzeln

•Anschließende Sitzung mit Autor, Gutachtern und Moderator

Page 45: Software Testing und Qualitätssicherung

Technisches Review•Autor nimmt am Review nicht teil

•Gutachter stimmen ab

•Prüfen gegen Spezifikation

•Gutachter prüfen einzeln vorab

Page 46: Software Testing und Qualitätssicherung

Informelles Review

•Gutachter bekommt Dokument zum lesen und gibt schriftliche Rückmeldung

Page 47: Software Testing und Qualitätssicherung

Zusammenfassung Reviews

Grad der Formalisierung

geringster höchsten mittel gering

AnwesendAutorPrüfer

AutorGutachterModerator

GutachterModerator

einzelne Gutachter

AnwendbarkeitCode

DokumenteLernen

Dokumente Dokumente CodeDokumente

Vorbereitung kaum Formale Prüfung Formale Prüfung kaum

Walkthrough Inspektion TechnischesReview

InformellesReview

Page 48: Software Testing und Qualitätssicherung

Statische TestverfahrenNamens Konventionen

Page 49: Software Testing und Qualitätssicherung

Namens Konventionen

• Klassennamen • beginnt mit einem Großbuchstaben, danach in Kleinbuchstaben

weiter • beginnt ein neuer wesentlicher Teil des Klassennamens, wird er

mit einem Großbuchstaben verdeutlicht

• Beispiele• Color, Button, TextField, String

Page 50: Software Testing und Qualitätssicherung

Namens Konventionen

• Methodennamen • beginnt mit einem Kleinbuchstaben, weiter klein geschrieben• beginnt ein neuer wesentlicher Teil wird er mit einem

Großbuchstaben verdeutlicht

• Beispiele• equals(), setColor(), drawOval()...

Page 51: Software Testing und Qualitätssicherung

Namens Konventionen

• Konstantennamen • komplett in Großbuchstaben

• Beispiele• LEFT, PI, BLOD

Page 52: Software Testing und Qualitätssicherung

Integrationsstrategien

Test A Test B

Test C

Test D Test E

Test F

Test G Test A- G

Big-bang

Page 53: Software Testing und Qualitätssicherung

Integrationsstrategien

Test C Test E Test F Test G

Test A- G

Test B, E, F

Test D, G

Bottom-up

Page 54: Software Testing und Qualitätssicherung

Integrationsstrategien

DatabaseSeller DAOTest Treiber

Setup

execute

verify

SUT

Page 55: Software Testing und Qualitätssicherung

Integrationsstrategien

Page 56: Software Testing und Qualitätssicherung

Integrationsstrategien

Test A

Test A, B, C, D

Test A- G

Top-down

Page 57: Software Testing und Qualitätssicherung

Top-Down Integrationstest Pattern Test Doubles

gesamtes SUT dieses soll ohne die DB geprüft werden

Page 58: Software Testing und Qualitätssicherung

Top-Down Integrationstest Pattern Test Doubles

Test Doubles:- Dummy- Mock Object

TOP Down Integration

Page 59: Software Testing und Qualitätssicherung

Integrationsstrategien

Backbone Integration

Page 60: Software Testing und Qualitätssicherung

IntegrationsstrategienContinuous Integration

betrachten wir noch in einer der folgendenVorlesung

Page 61: Software Testing und Qualitätssicherung

Integrationstests

Page 62: Software Testing und Qualitätssicherung

Test Charakterisierung

•Was wird getestet ? (Testobjekt)

•Wer testet? (Tester)

•Welche Qualitätseigenschaft (ISO9126) wird geprüft?

•Mit welchen Werkzeugen wird getestet?

Page 63: Software Testing und Qualitätssicherung

Integrationstest Charakter •Was wird getestet ? (Testobjekt)

-Zusammenspiel von zwei oder mehrere Module.-Passen die Schnittstellen?

•Wer testet? (Tester)

-Entwickler (White-Box / Gray-Box) / dezidierte Tester (Black-Box)

•Welche Qualitätseigenschaft (ISO9126) wird geprüft?

-Robustheit, Portabilität,Funktionalität, Wartbarkeit, Effizienz

•Mit welchen Werkzeugen wird getestet?

-JUnit, DBunit, Mocking Frameworks

Page 65: Software Testing und Qualitätssicherung

Systemtests Charakter •Was wird getestet ? (Testobjekt)

-komplettes System (vollständiger Integrationstest)-bis zur Systemgrenze

•Wer testet? (Tester)

- dezidierte Tester (Black-Box)

•Welche Qualitätseigenschaft (ISO9126) wird geprüft?

-Funktionalität, Effizienz, Benutzbarkeit, Robustheit, Portabilität

•Mit welchen Werkzeugen wird getestet?

-JUnit, FIT, Selenium ... HP Test Runner, GUIdancer ...

Page 66: Software Testing und Qualitätssicherung

funktionale Systemtest / Akzeptanztests mit FIT

Page 67: Software Testing und Qualitätssicherung

Überblick Fit Framework for Integrated Tests

FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder...

Page 68: Software Testing und Qualitätssicherung

Motivation von Fit Tests

• Automatisierung von Akzeptanztests mittels Tabellen.

• Framework für Datengetriebene Tests – Data-Driven-Test (xUnit Test Patterns - Gerard Meszaros)

Page 69: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Tests für einen Beispiel Zinsrechner

Page 70: Software Testing und Qualitätssicherung

Betrag

10

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 71: Software Testing und Qualitätssicherung

Betrag Zinssatz

10 2,5

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 72: Software Testing und Qualitätssicherung

Betrag Zinssatz Laufzeit

10 2,5 2

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 73: Software Testing und Qualitätssicherung

Betrag Zinssatz Laufzeit Summe

10 2,5 2 10,51

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 74: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Betrag Zinssatz Laufzeit Summe()

10 2,5 2 10,51

Eingehende - Werte Prüfung eines Ergebnis

Testfall

Page 75: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Betrag Zinssatz Laufzeit Summe()

10 2,5 2 10,51

10 10 3 25,94

10 10 10 100000

... ... ... ...

Testfälle

Page 76: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Gelb =Ausnahme - Fehler im Test

Grün = erfolgreicher Test

Rot = Fehler in der Anwendung

Page 77: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Test als Action Tabelle

fit.Ac?onFixturefit.Ac?onFixturefit.Ac?onFixture

start ZinsenAc(onFixtureZinsenAc(onFixture

enter Betrag 10

enter Zinssatz 2,5

enter Laufzeit 2

press SubmitSubmit

check Summe 10,51

Anbindung an die Applikation (Java)

Argumente

Objekt / Auswahl / Target

Testfall

Befehle / Kommandos

Page 78: Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Test als Action Tabelle

Prüfung

Eingaben

Aktion - Zinsen Berechnen

Anwendung Starten

Page 79: Software Testing und Qualitätssicherung

Fit Designdrei Klassen Framework

Page 80: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

Page 81: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

onlinerechner.ZinsenFixtureonlinerechner.ZinsenFixtureonlinerechner.ZinsenFixtureonlinerechner.ZinsenFixtureBetrag Zinssatz Laufzeit Summe()10 2,5 2 10,5110 10 3 25,9420 10 10 100000... ... ... ...

Page 82: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

SUTAnbindung an SUT

Page 83: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

public class ZinsenFixture extends ColumnFixture {

private Zinsen zinsen = new Zinsen();

public double betrag; public double zinsatz; public double laufzeit;

public double summe() { zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }

Eingehende - Werte

SUT

Prüfung - Ausgabe

Basis Klasse für Fit Extension

Anbindung an SUT

Page 84: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

fit.Ac?onFixturefit.Ac?onFixturefit.Ac?onFixture

start onlinerechner.ZinsenAc(onFixtureonlinerechner.ZinsenAc(onFixture

enter Betrag 10

enter Zinssatz 2,5

enter Laufzeit 2

press berechneZinsenberechneZinsen

check Summe 10,51

GOF - Dekorierer-Muster

Page 85: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

Page 86: Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); }… public void berechneZinsen() { summe = zinsen.berechneZinsen(); } public double summe() { return summe; }}

Eingaben / Enter

Aktion / Press

Ausgabe Prüfung / Check

Page 87: Software Testing und Qualitätssicherung

OberflächentestsEinführung in Selenium

Selenium Core

Selenium IDE

Selenium RC

Page 88: Software Testing und Qualitätssicherung

Selenium Core

open /JugsBase/zinsrechner.jsp

type betrag 20.0

type zinsatz 22.0

type laufzeit 100.0

clickAndWait submit

assertTextPresent 8649939365.27  Euro

Action - TabelleSelenium Befehl

Target

Argumente

am Beispiel eines Zinsrechner

Page 89: Software Testing und Qualitätssicherung

Selenium IDECapture & Replay Tests mit Selenium

Action Tabelle

Page 90: Software Testing und Qualitätssicherung

Selenium Remote ControlAnbindung Selenium in Java Code als Test Treiber

JAVA, PHP...

Selenium Server

Selenium Core

HTTP Proxy SUTWebapplikation

BrowserFirefox, IE

Page 91: Software Testing und Qualitätssicherung

Übung 1I

•Erweitern Sie den Basar FIT Test so dass auch für den zweiten Kunden mehre Buchung durchgeführt werden.