Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und...

43
Agilisierung von Testsystemen Von der Eistüte zur Testpyramide ObjektForum Stuttgart, 15.09.2014 Daniel Knapp

Transcript of Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und...

Page 1: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

Agilisierung von Testsystemen Von der Eistüte zur Testpyramide ObjektForum Stuttgart, 15.09.2014 Daniel Knapp

Page 2: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

2

© 2014 andrena objects ag

Typische Probleme in historisch gewachsenen Systemlandschaften §  Ausgedehnte QS- und Stabilisierungsphasen

§  Dadurch Verzögerung der Auslieferung

Ø  Hohe Time-to-Market

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 3: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

3

Warum ist das so?

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Relative Kosten zur Beseitigung von Fehlern

100

10

3

1 Anforderungen

Code

Test

Produktion

§  Tests werden historisch bedingt fast ausschließlich nach der Entwicklungsphase durchgeführt:

§  Hohe Testaufwände, da Testfälle das Gesamtsystem adressieren, selbst wenn nur Teilaspekte getestet werden sollen.

§  Hohe Fehlerbehebungskosten, da Fehler spät gefunden werden

Systemtests

Integrationstests

Unit- Tests

Page 4: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

4

© 2014 andrena objects ag

Konsequenz

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

time

spen

t on

feat

ures

bu

g-fix

ing

Ø  Mit fortlaufender Lebensdauer entstehen immer höhere Wartungsaufwände, dadurch wenig Zeit für neue Features

Page 5: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

5

© 2014 andrena objects ag

Ziel

Geringe Time-to-Market bei hoher Qualität

§  Stabiles und erweiterbares Gesamtsystem

§  Wenige Bugs

§  Effiziente Entwicklungs- und Testaufwände

§  Kontinuierlich testbares System

§  Permanente Lieferfähigkeit

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Wie erreichen wir diese Ziele ?

Page 6: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

6 Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Zielbild

§  Agilisierung von Testsystemen

§  Erfahrungsberichte

§  Fazit

Agenda

Page 7: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

7

© 2014 andrena objects ag

Agile Software-Entwicklung

Ziel: §  fertige Software zum Ende

des Entwicklungszyklus ausliefern

§  hohe Entwicklungsgeschwindigkeit bei effizientem Aufwand

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Product Backlog

Sprint Backlog

Product Increment

2-4 weeks

24 hours

SPRINT

Was bedeutet das für den Test?

Page 8: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

8

© 2014 andrena objects ag

Agilisierung von Testsystemen

Ziel: Kurze, effiziente Testzyklen, frühes Erkennen von Bugs

Ø  erfordert zeitlich enge Verzahnung von Testen und Entwickeln Ø  erfordert eine Absicherung der entwickelten Funktionalität gegen

Seiteneffekte über den Entwicklungszyklus hinaus (hohe Testabdeckung)

Ø  erfordert einen hohen Testautomatisierungsgrad und eine effiziente Verteilung der Tests

Ergebnis:

§  Stabiles und erweiterbares System

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 9: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

9

Effiziente Verteilung der Tests

§  Entwicklertests entstehen fortlaufend während des Entwicklungsprozesses und decken die Erweiterungen vollständig ab

§  Automatisierte Akzeptanztests motivieren bzw. sichern neben den Entwicklertests das bestehende Verhalten

§  Die automatisierten Tests laufen mindestens nächtlich, besser beim Einchecken

§  verbleibende manuelle Tests werden nach schlankem Verfahren durchgeführt

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 10: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

10

System-

tests

Integrationstests

Unit-Tests

Effiziente Verteilung der Tests: Die Testpyramide

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Dauer Anzahl

Page 11: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

11

© 2014 andrena objects ag

Testpyramide: Risiken und Nebenwirkungen

Wichtig:

§  Anwender und Entwickler arbeiten (auf höheren Ebenen) gemeinsam

§  Überschneidungen vermeiden

§  Lernorientierung bei manuellen Tests: Gelerntes zur Verbesserung heranziehen

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Pro Testebene Fokus auf das Testziel: Was testen, und was nicht?

§  Systemtest: Das Gesamtsystem funktioniert exemplarisch als Ganzes

§  Integrationstests: Die Bestandteile funktionieren im Zusammenspiel fachlich korrekt

§  Unit-Tests: Alle Einzelteile funktionieren technisch

Page 12: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

12

© 2014 andrena objects ag

Ergebnis: Hohe Qualität, geringe Time-to-Market

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

time

spen

t on

feat

ures

bu

g-fix

ing

time

spen

t on

feat

ures

bu

g-fix

ing

geringe Testautomatisierung, nachgelagerte Tests

agile Entwicklung

Page 13: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

13 Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Zielbild

§  Agilisierung von Testsystemen

§  Erfahrungsberichte

§  Fazit

Agenda

Page 14: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

14

© 2014 andrena objects ag

Agilisierung von Testsystemen

1.  Bestandsaufnahme Ist-Aufnahme zu Stand von Test-Abläufen und Test-Umsetzung

2.  Diagnose und Ableiten von Maßnahmen Ist-Zustand bewerten und Maßnahmenkatalog ableiten

3.  Umsetzung der Maßnahmen Testsystem agilisieren

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 15: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

15

© 2014 andrena objects ag

Gibt es vor der Auslieferung Konsolidierungs-/

Stabilisierungsphasen?

Bestandsaufnahme

Ziel: §  Ist-Aufnahme zu Stand von Testabläufen und Testumsetzung

Vorgehen: §  Interviews mit den Beteiligten und stichprobenartige Code/Test Reviews

§  Typische Fragen:

§  …

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Wie hoch sind die manuellen

Testaufwände?

Wie lange dauert ein kompletter Systemtest?

Wie ist das Verhältnis von Entwicklungsaufwand zu

Testaufwand?

Wie hoch ist die Abdeckung durch Unit Tests?

Page 16: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

16

© 2014 andrena objects ag

Diagnose und Ableiten von Maßnahmen

Ziel: §  Ist-Zustand bewerten und Maßnahmenkatalog ableiten

Vorgehen: §  Identifizieren der Verbesserungspotentiale

§  Priorisierung (auch gemäß Erfordernissen aus dem Projekt)

§  Maßnahmen definieren mit überprüfbaren Metriken

§  Ebenen: Organisation, Prozess, Engineering

Wichtig: §  Kosten/Nutzen-Verhältnis berücksichtigen

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 17: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

17

© 2014 andrena objects ag

Engineering

Organisation/Prozess

Typische Diagnose-Ergebnisse (und –cluster)

§  QA nachgelagert

§  QA nicht bei Team

§  Umgedrehte Testpyramide

§  Hoher Anteil an manuellen Tests

§  Keine Unit-Tests

§  Geringe Testabdeckung

§  Unwartbare Testsuiten

§  Lange Testlaufzeiten

§  Keine klaren Testzuständigkeiten

§  Keine reproduzierbaren Testergebnisse

§  Große Bug-Lebensdauer

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Test- abdeckung

Test- automatisierung

Test- effizienz

Testorganisation

Page 18: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

18

Wie drehen wir die Testpyramide um?

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Prinzip: §  Hoher Automatisierungsgrad / effiziente Laufzeit

§  Hohe Testabdeckung

Verschiedene Szenarien denkbar:

1.  Dedizierte Sanierungsphase: Fokus auf Umdrehen der Testpyramide

§  Sinnvoll bei Entwicklungsstillstand durch langsame Tests

Ø  Hoher Invest, kurzfristige Agilisierung

2.  Inkrementell, Sanierung im laufenden Betrieb

§  Sinnvoll falls noch Kapazität für Weiterentwicklung vorhanden

Ø  Geringer Invest, Umstellung erfolgt nebenbei, mittelfristige Agilisierung

System-

tests

Integrationstests

Unit-Tests

Page 19: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

19

© 2014 andrena objects ag

Maßnahmen

Vorgehen:

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Test- abdeckung

Test- automatisierung

Test- effizienz

Testorganisation §  (Bestehende) Testverteilung und –zuständigkeiten hinterfragen und definieren

§  Agile Software-Entwicklungspraktiken im Team etablieren

§  Refactoring der Testlandschaft

§  Testorganisation bestehender und neu zu erstellender automatisierter Tests

Wichtig: §  Regelmäßige Bewertung der Maßnahmen und bei Bedarf nachjustieren

Page 20: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

20

© 2014 andrena objects ag

Grundvoraussetzung (1): Agile Software Entwicklung

§  Agile Entwicklungstechniken (XP, Clean Code) innerhalb des Entwicklungsteams

§  automatisierte Tests auf verschiedenen Ebenen

§  konsequente Refactorings zur Vermeidung technischer Schulden

§  Testisolationswerkzeuge und -techniken einsetzen, um wiederholbare Tests zu produzieren und Testlaufzeiten zu verkürzen.

§  Wichtig: an Test-Code gelten mindestens die gleichen Anforderungen wie an Produktiv-Code!

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 21: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

21

© 2014 andrena objects ag

Grundvoraussetzung (2): Entwicklungsprozess

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Testabdeckungsgrad einer Software sollte ermittelt werden können, um

§  Testlücken gezielt schließen zu können

§  Refactorings gefahrlos durchführen zu können

§  Ergebnis der automatisierten Tests muss für Entwickler sichtbar sein

§  Stichwort: „Continuous Integration“

§  Stichwort: „Early Feedback“

§  Rasches Gegensteuern im Fehlerfall

Page 22: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

22

System-

tests

Integrationstests

Unit-Tests

Pattern zur Agilisierung der Testsysteme

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Im folgenden stellen wir sieben verschiedene Pattern vor, die Stück für Stück die Agilisierung der Testsysteme vorantreiben

§  Dabei gehen wir nach den Ebenen der Testpyramide und nach den Diagnoseclustern vor

Test- abdeckung

Test- automatisierung

Test- effizienz

Testorganisation

Page 23: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

23

Pattern: Testverlagerung auf niedrigere Ebenen der Testpyramide

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Es existiert eine Vielzahl komplexer Systemtests mit vielen Varianten, die

verschiedene Aspekte unterliegender Komponenten testen

§  Bestehende Tests haben eine hohe Laufzeit

Ziel

§  Testeffizienz und -wartbarkeit erhöhen

§  Reduktion der Testdurchführungsdauer

Vorgehen §  Komplexe Systemtests nach fachlichen und technischen

Aspekten auf untere Ebenen der Pyramide verlagern

§  Mittels Unit-Tests oder weniger komplexer Integrations-Tests Varianten testen.

§  Fokus auf wenige aussagekräftige Systemtests

Test- effizienz Testorganisation

#1/7

System-

tests

Integrationstests

Unit-Tests

Page 24: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

24

Pattern: Refactoring für Testbarkeit

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Das System ist historisch gewachsen. Es existieren keine Komponenten,

Klassen sind nicht isoliert testbar.

Ziel

§  Refactoring des Systems hinsichtlich Test- und Erweiterbarkeit

§  Testeffizienz ermöglichen

§  Testabdeckung sukzessive erhöhen

Vorgehen §  Bestehendes Verhalten grob durch Integrationstests sichern

§  Refactoring und Neuaufbau nach Testpyramide

Test- abdeckung

Test- automatisierung

Test- effizienz

#2/7

System-

tests

Integrationstests

Unit-Tests

Page 25: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

25

Pattern: Test Isolation

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Das System hat viele Abhängigkeiten zu externen Systemen/Infrastruktur

§  Hohe Testlaufzeiten, schlechte Reproduzierbarkeit von Ergebnissen

Ziel

§  Stabile Testergebnisse

§  Kürze Durchführungsdauer

Vorgehen

§  Externe Systeme/Infrastruktur durch Testdoubles ersetzen

§  Datenbank durch In-Memory-DB ersetzen

§  Services durch Attrappen ersetzen

Achtung: §  Nicht vergessen, auch ohne Testdoubles zu testen!

Test- abdeckung

Test- automatisierung

Test- effizienz

#3/7

System-

tests

Integrationstests

Unit-Tests

Page 26: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

26

Pattern: Manuelle Tests automatisieren

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Bestehende manuelle Regressionstests sind nur mit großem Aufwand und

langer Laufzeit ausführbar

Ziel

§  Testlaufzeit und -aussagekraft erhöhen

Vorgehen §  Sinnhaftigkeit der Tests überprüfen, Strukturierung

§  Automatisierte Akzeptanztests schreiben, Vorbedingungen automatisiert herstellen

Achtung:

§  Ggf. weiterhin manuelle Tests nötig und sinnvoll

§  Kosten/Nutzen-Betrachtung wichtig!

Test- automatisierung

#4/7

System-

tests

Integrationstests

Unit-Tests

Page 27: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

27

Pattern: Tests auf einzelne Fachlichkeiten fokussieren

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Es existieren diverse Varianten komplexer Systemtests, die redundant sämtliche

Aspekte einer Vielzahl von Komponenten testen. Der Testfokus ist unklar.

§  Beim Vorliegen von Fehlern schlagen alle Tests an denselben Stellen fehl

Ziel

§  Aussagekräftige Systemtests erstellen

§  Testorganisation verbessern

Vorgehen §  Testfälle auf einzelne Fachlichkeiten fokussieren

§  Irrelevante Werte aus dem Test ausblenden

§  Tests möglichst orthogonal aufbauen

Test- effizienz Testorganisation

#5/7

System-

tests

Integrationstests

Unit-Tests

Page 28: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

28

Pattern: GUI-Tests automatisieren/strukturieren

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituationen §  Bestehende manuelle GUI-Tests sind nur mit großem Aufwand und langer

Laufzeit ausführbar.

§  Die Testskripte sind nicht wartbar und anfällig gegen strukturelle Änderungen.

Ziel

§  Testlaufzeit und -aussagekraft verbessern

§  Wartbarkeit und Wiederverwendbarkeit der Tests

Vorgehen §  Masken durch Page Objects modellieren. Vorteile:

§  Wartbarkeit: GUI-Struktur in Page Objects gekapselt

§  Abstraktion: Tests greifen funktional auf GUI zu

Achtung: Kosten/Nutzen-Betrachtung wichtig!

Test- abdeckung

Test- automatisierung

Test- effizienz

#6/7

System-

tests

Integrationstests

Unit-Tests

Page 29: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

29

Pattern: Exploratives Testen

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Verbleibende manuelle Tests effizient und planbar durchführen

Vorgehen §  Exploratives Testen

§  Zutaten: Scope, Timebox, Testprotokoll

§  Beispiele: Testtouren: Anti-Social Tour, Fed Ex Tour, Supermodel Tour

Test- abdeckung

Test- effizienz

#7/7

System-

tests

Integrationstests

Unit-Tests

Page 30: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

30 Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Zielbild

§  Agilisierung von Testsystemen

§  Erfahrungsberichte

§  Fazit

Agenda

Page 31: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

31

© 2014 andrena objects ag

Erfahrungsbericht 1: Sanierung im laufenden Betrieb

Ausgangspunkt §  Übernahme eines Softwareprojekts zur Weiterentwicklung

§  Schlechte Wartbarkeit des Codes, wenig Unit-Tests

Vorgehen

§  Sanierung im laufenden Betrieb

§  Keine eigenen Refactoring-Tasks

Ergebnisse

§  Schrittweise Erhöhung der Softwarequalität

§  Weiterentwicklungen konnten schneller durchgeführt werden

§  Reduzierung der Bugs, geringere Time-to-Market

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 32: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

32

© 2014 andrena objects ag

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 33: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

33

© 2014 andrena objects ag

Erfahrungsbericht 2: QA in Team integrieren, automatisieren Ausgangssituation: •  QA nachgelagert, größtenteils manuell, keine Unit-Tests; Umstellung auf agil

§  Kommunikation mit vielen externen Systemen Maßnahmen (Zeitraum: 1 Jahr) §  QA in Team verlagern

§  Konsequent Unit-Tests schreiben bei Änderungen, Testsupportcode zentral §  Mocks für externe Systeme

§  Manuelle Tests automatisieren Ergebnisse: §  Unit-Testabdeckung 30%, manuelle Tests größtenteils automatisiert

§  Nachgelagerte QA-Aktivitäten deutlich reduziert §  Monatliche Releases möglich

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 34: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

34

© 2014 andrena objects ag

Erfahrungsbericht 3: Fokus auf Agilisierung

Ausgangssituation: §  Unwartbares System, keine Weiterentwicklung möglich.

§  Ausschließlich manuelle Systemtests

Maßnahmen (Zeitraum: 1/2 Jahr)

§  Automatisierung stichprobenartiger Integrationstests zum Sicherstellen des bestehenden Verhaltens

§  Refactoring/Neuentwicklung von Komponenten, um Testen gemäß Testpyramide zu ermöglichen.

§  Konsequenter Einsatz agiler Entwicklungspraktiken

§  Tester ins Sprint-Team verlagert

Ergebnis: §  System wart- und erweiterbar, QA-Phasen drastisch reduziert

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 35: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

35 Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

§  Zielbild

§  Agilisierung von Testsystemen

§  Erfahrungsberichte

§  Fazit

Agenda

Page 36: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

36

© 2014 andrena objects ag

Fazit

Die Agilisierung von Testsystemen überführt historisch gewachsene Systemlandschaften in stabile und erweiterbare Systeme

Kernpunkte:

§  Effiziente Verteilung der Testaktivitäten gemäß der Testpyramide

§  Einsatz von agilen Entwicklungspraktiken im Projekt

§  Gezielter Einsatz der Patterns zur Agilisierung

Ergebnis:

§  Team erreicht wieder hohe Entwicklungsgeschwindigkeit

§  Geringe Time-to-Market

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 37: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

37

© 2014 andrena objects ag

Anhang

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Page 38: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

38

Pattern: Neuentwicklung separieren

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Ein neues (kleines) Feature ist zu entwickeln;

bestehende Klassen sind sehr groß und schlecht testbar

Ziel

§  Neuentwicklung gemäß Testpyramide

Vorgehen §  Neuen Code neben bestehendem Code entwickeln

§  TDD vorgehen, kleine Klassen (Single Responsibility)

§  Auch Tests schreiben, die den Aufruf des neuen Codes sicherstellen

System-

tests

Integrationstests

Unit-Tests

Test- abdeckung

Page 39: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

39

Pattern: Bei Bug-Fixing Testabdeckung ausbauen

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Es ist ein Bug aufgetreten.

Ziel §  Testabdeckung erhöhen

§  ähnliche Bugs finden

§  Verhaltenssicherung (Regressionstest)

Vorgehen

§  Bug zunächst durch einen (Unit-)Test nachstellen. Dieser sollte rot sein.

§  Bug beheben, Test sollte grün werden

§  Je nach Kritikalität/Aufwand weitere Tests schreiben (Bugs sind sozial)

System-

tests

Integrationstests

Unit-Tests

Test- abdeckung

Page 40: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

40

Pattern: Vorbereitendes Refactoring

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Für ein neues Feature könnte bestehender Code wiederverwendet werden.

Allerdings muss er dazu noch verallgemeinert werden.

Ziel

§  Absicherung für Strukturverbesserung

Vorgehen §  Bestehenden Code durch Tests abdecken.

§  Refactoring durchführen

§  Die Unit-Tests müssen am Ende nach wie vor grün sein!

System- tests

Integrationstests

Unit-Tests

Test- abdeckung

Page 41: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

41

Pattern: Eigene DSL für Aufbau von Testobjekten

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Oft müssen für Tests komplexe Objektstrukturen aufgebaut werden.

Ziel §  Komplexität im Test-Setup reduzieren (Clean Test)

§  Explizite Formulierung relevanter Testdaten

§  Wartbarkeit und Wiederverwendbarkeit der Tests

Vorgehen

§  Hilfsklassen zum Aufbau der Strukturen entwickeln (inkrementell)

§  z.B. Fluent API:

§  einzelPerson(„Hans“,“Müller“) .mitAdresse(strasse(„Hauptstraße“,5), ort(10678,“Berlin“)) .mitGeburtsdatum(„1970-02-02“)

System-

tests

Integrationstests

Unit-Tests

Test- effizienz

Page 42: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

42

Pattern: Akzeptanztests für neues Feature

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Ein neues Feature hat eine hohe fachliche Komplexität und oder Kritikalität.

Tester und/oder Fachler sind verfügbar.

Ziel

§  Verhaltenssicherung, Testabdeckung erhöhen

Vorgehen §  Automatisierte Akzeptanztests schreiben (idealerweise sogar vor Umsetzung)

§  Kann durch Fachler/Tester geschehen, Entwickler unterstützt

§  Herausforderung: passende DSL für die Testfälle entwickeln

§  Wichtig: Testfokus berücksichtigen; wenig Überschneidung

Achtung: §  Kosten/Nutzen-Betrachtung wichtig!

System-

tests

Integrationstests

Unit-Tests

Test- abdeckung

Regressions- Test

Page 43: Von der Eistüte zur Testpyramide - JUGS · " erfordert zeitlich enge Verzahnung von Testen und Entwickeln " erfordert eine Absicherung der entwickelten Funktionalität gegen Seiteneffekte

© 2014 andrena objects ag

43

Pattern: Page-Objects für GUI-Tests

Daniel Knapp | Agilisierung von Testsystemen | ObjektForum 2014, Stuttgart

Ausgangssituation §  Ein neues Feature enthält auch einen GUI-Anteil.

Ziel §  Komplexität im Test-Setup reduzieren (Clean Test)

§  Explizite Formulierung relevanter Testdaten

§  Wartbarkeit und Wiederverwendbarkeit der Tests

Vorgehen

§  Zunächst Abgrenzung: was soll getestet werden (und was nicht?)

§  Betrachtete Masken der GUI durch Page Objects

modellieren

System-

tests

Integrationstests

Unit-Tests

Test- abdeckung

Test- automatisierung

Test- effizienz