+ All Categories
Home > Documents > Einführung Software Testing und Qualitätssicherung

Einführung Software Testing und Qualitätssicherung

Date post: 24-Jun-2015
Category:
Upload: christian-baranowski
View: 2,625 times
Download: 0 times
Share this document with a friend
90
Software Technik Christian Baranowski HTWG Konstanz Software Testing und Qualitätssicherung
Transcript
Page 1: Einführung Software Testing und Qualitätssicherung

Software Technik

Christian Baranowski

HTWG Konstanz

Software Testing und Qualitätssicherung

Page 2: Einführung Software Testing und Qualitätssicherung

WiederhlungJava Persistence API

Disk

Data

Page 3: Einführung Software Testing und Qualitätssicherung

Requirement Analysis

Testing

System Design

Coding

Delivery

Wasserfallmodell

Page 4: Einführung Software Testing und Qualitätssicherung

Basic Mappings@Table(name = "Adr")@Entitypublic class Address implements Serializable { @Id @Column(name = "ADDRESS_ID") @GeneratedValue(strategy = GenerationType.SEQUENCE) private long id; @Basic private String city; @Basic private String country; @Basic private String province; @Basic @Column(name = "P_CODE") private String postalCode; @Basic private String street;

Warum sollte eine Entity die Schnittstelle Serializable implementieren?

Page 5: Einführung Software Testing und Qualitätssicherung

Assoziationen / Relationen

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "ADDR_ID") private Address address; @ManyToOne(fetch = FetchType.LAZY) private JobTitle jobTitle;

@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MANAGER_ID") private Employee manager;

@OneToMany(mappedBy = "manager") private List<Employee> managedEmployees = new ArrayList<Employee>();

Page 6: Einführung Software Testing und Qualitätssicherung

@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true) private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name="EMP_ID") private List<Degree> degrees = new ArrayList<Degree>();

@ManyToMany @JoinTable(name = "PROJ_EMP", joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "PROJ_ID")) private List<Project> projects = new ArrayList<Project>();

Assoziationen / Relationen

Page 7: Einführung Software Testing und Qualitätssicherung

Entity

•Entity hat immer einen eindeutigen Schlüssel (ID) dieser identifiziert die Entität

•Equals auf Basis der ID...

Page 8: Einführung Software Testing und Qualitätssicherung

Entity Manager

•API bietet alle Funktion für den Datenbankzugriff:

•persist

•remove

•createQuery

•merge

•findXXX

•....

Page 9: Einführung Software Testing und Qualitätssicherung

Entity Manager

•Wenn die Objekte (Entity Klassen) auch als Daten Transfer Objekte genutzt werden sollen können sie vom Entity Manager gelöst werden man spricht von detached Entities!

Page 10: Einführung Software Testing und Qualitätssicherung

Detached Entities

•Managed Entities werden vom Entity Manager gelöst wenn:

•clear oder detach

•mittels rollback

•Entity Manager closed

Page 11: Einführung Software Testing und Qualitätssicherung

•Erweitern Sie Ihre Aufgaben Verwaltung um eine Datenbank Anbindung mittels JPA

•Schritt 1. Domain Modell markieren mit den JPA Annotationen für das OR Mapping...

•Schritt II. Repository Funktionen zum speichern und laden einer Aufgabe umsetzen...

Übungen I

Page 12: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Page 13: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Funktionalität - Software sollte die spezifizierten Use-Cases / Anforderungen implementieren.

4 + 4 = 9

Page 14: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Benutzbarkeit vorgegebenen Use-Cases lassen sich effektiv, effizient und zufriedenstellend bedienen.

Die Benutzbarkeit richtet sich nach dem Anwendungsfall...

Benutzbarkeit betrifft nicht nur grafische Benutzerschnittstellen z.B. auch APIs...

Page 15: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Zuverlässigkeit wie verlässlich eine Anwendung in einem Zeitintervall ihr Funktionalität erfüllt

Page 16: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Portabilität - der Grad der Plattformunabhängigkeit eines Computerprogramms

Portabilität - Die Anwendung läuft auf Linux, MAC und auf Ihrem Android Mobil Phone ...

Page 17: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Wartbarkeit - zeigt an, mit welcher Energie und welchem Erfolg Änderungen in einem Systemzusammenhang von Applikationen durchgeführt werden können.

Page 18: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?

Effizienz - Performance und verbrauchte Ressourcen

Page 19: Einführung Software Testing und Qualitätssicherung

Was ist Software Qualität ?Funktionalität

Benutzbarkeit

Zuverlässigkeit

Portabilität

Wartbarkeit

Effizienz

Page 20: Einführung 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 21: Einführung 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 22: Einführung 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 23: Einführung Software Testing und Qualitätssicherung

Komponententests (Modultests) und Testabdeckung

Page 24: Einführung 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 25: Einführung 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 26: Einführung 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 27: Einführung Software Testing und Qualitätssicherung

Test CoverageTestabdeckung

Page 28: Einführung 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 29: Einführung 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 30: Einführung 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 31: Einführung Software Testing und Qualitätssicherung

Testabdeckung beim White-Box Testen

Page 32: Einführung 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 33: Einführung Software Testing und Qualitätssicherung

Statement Coverage (Anweisungsüberdeckung)

A && B true

C true

false

Page 34: Einführung 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 35: Einführung 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 36: Einführung 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 37: Einführung 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 38: Einführung 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 39: Einführung 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 40: Einführung 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 41: Einführung 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 42: Einführung 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 43: Einführung Software Testing und Qualitätssicherung

100% Pfadabdeckung

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

Page 44: Einführung Software Testing und Qualitätssicherung

Testabdeckung automatisiert bestimmen

Page 45: Einführung Software Testing und Qualitätssicherung

Übung 1I

•Erstellen Sie einen Unit Test für die JPA Implementierung zum speichern der Aufgabe

•Messen Sie die Code Abdeckung in Eclipse

Page 46: Einführung Software Testing und Qualitätssicherung

Statische TestverfahrenCode Reviews

Page 47: Einführung 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 48: Einführung 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 49: Einführung 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 50: Einführung Software Testing und Qualitätssicherung

Informelles Review

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

Page 51: Einführung 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 52: Einführung Software Testing und Qualitätssicherung

Statische TestverfahrenNamens Konventionen

Page 53: Einführung 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 54: Einführung 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 55: Einführung Software Testing und Qualitätssicherung

Namens Konventionen

• Konstantennamen • komplett in Großbuchstaben

• Beispiele• LEFT, PI, BLOD

Page 56: Einführung 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 57: Einführung 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 58: Einführung Software Testing und Qualitätssicherung

Integrationsstrategien

Test A

Test A, B, C, D

Test A- G

Top-down

Page 59: Einführung Software Testing und Qualitätssicherung

Integrationsstrategien

Backbone Integration

Page 60: Einführung Software Testing und Qualitätssicherung

IntegrationsstrategienContinuous Integration

betrachten wir noch in einer der folgendenVorlesung

Page 61: Einführung Software Testing und Qualitätssicherung

Integrationstests

Page 62: Einführung 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: Einführung 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: Einführung 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: Einführung Software Testing und Qualitätssicherung

funktionale Systemtest / Akzeptanztests mit FIT

Page 67: Einführung Software Testing und Qualitätssicherung

Überblick Fit Framework for Integrated Tests

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

Page 68: Einführung 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: Einführung Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Tests für einen Beispiel Zinsrechner

Page 70: Einführung Software Testing und Qualitätssicherung

Betrag

10

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 71: Einführung Software Testing und Qualitätssicherung

Betrag Zinssatz

10 2,5

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 72: Einführung Software Testing und Qualitätssicherung

Betrag Zinssatz Laufzeit

10 2,5 2

Testen mit Fit TabellenFit Tests als Column Test Tabelle

Page 73: Einführung 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: Einführung 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: Einführung 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: Einführung 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: Einführung 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: Einführung Software Testing und Qualitätssicherung

Testen mit Fit TabellenFit Test als Action Tabelle

Prüfung

Eingaben

Aktion - Zinsen Berechnen

Anwendung Starten

Page 79: Einführung Software Testing und Qualitätssicherung

Fit Designdrei Klassen Framework

Page 80: Einführung Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

Page 81: Einführung 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: Einführung Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

SUTAnbindung an SUT

Page 83: Einführung 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: Einführung 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: Einführung Software Testing und Qualitätssicherung

Fit Tabellen und Applikation verknüpfen

Page 86: Einführung 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: Einführung Software Testing und Qualitätssicherung

OberflächentestsEinführung in Selenium

Selenium Core

Selenium IDE

Selenium RC

Page 88: Einführung 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: Einführung Software Testing und Qualitätssicherung

Selenium IDECapture & Replay Tests mit Selenium

Action Tabelle

Page 90: Einführung 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


Recommended