37
Automatisierte Entwicklertests Erfahrungen und Ergebnisse einer Prozessanpassung Michael Borgwardt - 29.04.2008

Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Automatisierte Entwicklertests

Erfahrungen und Ergebnisse einer Prozessanpassung

Michael Borgwardt - 29.04.2008

Page 2: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ablauf

1.Voraussetzungen / Umfeld2.Umsetzung / Hürden3.Ergebnisse / Lessons learned

Page 3: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ablauf

1.Voraussetzungen / Umfeld2.Umsetzung / Hürden3.Ergebnisse / Lessons Learned

Page 4: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Das Projekt

• Großer IT-Dienstleister im Finanzsektor• Hochintegrierte Anwendung (Fat Client)• Hausintern entwickeltes Java-Framework• Teilprojekt Wertpapierhandel• Hauptsächlich GUI-Abläufe und -Logik sowie

Backend-Integration• Ca. 43 MB Code in 5400 Klassen• Ca. 35 Mitarbeiter, davon 12 Entwickler

Page 5: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Der Prozess

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

PflichtenhefteAnalyse

Design

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

Modul A, UC 1 & 2

Modul B, UC 1, 2 & 3

Modul A, UC 3 + CRs

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

Modul B, UC 1, 2 & 3

• Hausinternes Vorgehensmodell• Paralleler Betrieb, Support und Weiterentwicklung

mehrerer Versionen

Page 6: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

DeutlicheWasserfall-Spuren...

PflichtenhefteAnalyseDesign

Implem

entierungTestSupport

Page 7: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

...aber auch inkrementell

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

PflichtenhefteAnalyseDesignImplem

entierungTestSupport

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

PflichtenhefteAnalyse

DesignImplementierung

TestSupport

Page 8: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Probleme

• Überlastung des Testteams mit manuellen Tests (bes. durch verschiedene Versionen)

• Bei Zeitmangel kann nicht genug getestet werden – es muss an der Qualität gespart werden

• Immer wieder unbrauchbare Releases durch Nebenwirkungen von Änderungen – besonders in kritischen Phasen

Page 9: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Lösungsansatz

• Automatisierung mit Capture/Replay-Tools zweimal evaluiert und verworfen:– mangelnde Stabilität, – Keine Kontrolle über Daten im Backend

• Alternativansatz: automatisierte Entwicklertests• Allgemeine Qualitätsverbesserung• Vermeidung von Nebenwirkungen bei

Änderungen in kritischen Phasen• Ablauf als Teil der Entwicklungsarbeit (z.B. vor

Releasebau)

Page 10: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ablauf

1.Voraussetzungen / Umfeld2.Umsetzung / Hürden3.Ergebnisse / Lessons Learned

Page 11: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Technische Hürden

• Problem: Framework nicht auf isolierte Testbarkeit ausgelegt, fehlende Eingriffsmöglichkeiten

• Originalumgebung sehr umfangreich und dadurch langsam

Framework Anwendungslogikpublic interface PfadeVertragsdaten{ public static String[] DATUM_ENDE = { UIVertragsdaten.PNL_AUFTRAGSDATEN, PnlAuftragsdaten.AT_ENDE }; // weitere Pfade}public class ReiterVertragsdaten extends UIController implements PfadeVertragsdaten{

GUI

BedienerModel

Backend-Systeme

Page 12: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Lösung

• Entwicklung eines eigenen Testframeworks• Tests als Programmcode auf JUnit-Basis, GUI-

zentriert (Manipulation & Prüfung)• Einfache und bequeme Erstellung durch Entwickler

Test-Framework Anwendungslogikpublic interface PfadeVertragsdaten{ public static String[] DATUM_ENDE = { UIVertragsdaten.PNL_AUFTRAGSDATEN, PnlAuftragsdaten.AT_ENDE }; // weitere Pfade}public class ReiterVertragsdaten extends UIController implements PfadeVertragsdaten{

GUI

Model

Testcodepublic void testRadiobutton() { initialize(); assertValueEquals(AUSFUEHRUNG, Sparplan.AUSFUEHRUNG_UNBEFRISTET); assertLocked(DATUM_ENDE, true); assertValueRequired(DATUM_ENDE, false); setValue(AUSFUEHRUNG, Sparplan.ENDET); assertLocked(DATUM_ENDE, false); assertValueRequired(DATUM_ENDE, true);}

SimuliertesBackend

Page 13: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Natur der Lösung

• Näher an Integrationstests als an klassischen Unit-Tests

• Angepasst an Gegebenheiten und Bedürfnisse des Projekts

• Hohe Geschwindigkeit (1000 Testmethoden in 2 Minuten), dadurch kurzer Feedbackzyklus

• Somit gut als Teil der Entwicklungsarbeit nutzbar

Page 14: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Allgemeingültige Tests

• Zusätzliche neue Möglichkeit: Überwachung von Konventionen und häufig gemachten Fehlern

• z.B. Einheitlichkeit von Tastaturshortcuts

• Allgemeingültige Tests - nur einmal zu erstellen, kein Aufwand pro Usecase UC 1 UC 2 UC 3

Test B

Test A

Test ב

Test א

Test β

Test α

Allgemeingültiger Test ♣

Test ♣ Test ♣ Test ♣

Page 15: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Organisatorische Hürden

• Kein etablierter Schritt im Prozess• Keine formelle Anpassung des Prozesses auf

Projektebene vorgesehen• Managementunterstützung nur als Experiment• Gefahr:

– Schreiben der Tests gilt als lästig– wird unter Zeitdruck vernachlässigt– Tests werden nicht regelmäßig gestartet– scheiternde Tests werden ignoriert

• Am Ende ist wieder alles beim Alten

Page 16: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ansatzpunkte im Prozess

Review

Pflichtenhefte

Analyse

Design

Implementierung

Test

Support

A)Nach Analyseende Review durch Tester und Implementierer, noch Zeit bis Implementierungsbeginn

B)Vor Implementierungsbeginn des nächsten Releases oft wenig Arbeit für Implementierer

A B

Page 17: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Review

Einfügen in den Prozess

1. Vorläufige Testerstellung (nur GUI-Manipulation) nach Analyseende, vor Implementierungsbeginn

2. Ausimplementierung der Tests (mit Daten und Backend-Aufrufen) während der Implementierung

3. Verbesserung der Codeabdeckung in Ruhephasen

Pflichtenhefte

Analyse

Design

Implementierung

Test

Support

1. 3.2.

Pflichtenhefte

Analyse

Design

Page 18: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Vorteile

• Vorläufige Testerstellung auf Basis der Analysedokumente wirkt als detailliertes Review – findet mehr Unstimmigkeiten

• Tests wirken während der Imple-mentierung als Gerüst und Erinnerung

• Ruhephasen können zur Verbesserung der Testabdeckung (d.h. der Qualität zukünftiger Releases) produktiv genutzt werden

Page 19: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Testfallspezifikation

• Vorgaben für Umfang der Tests:– Mindestens ein Testfall pro Maske– Abdeckung aller Pfade der

Aktivitätsdiagramme (wichtigste Analysedokumente)

– In Phase 3 dann Verbesserung auf Basis der Code-Abdeckung

Page 20: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Testframework

Aufgabenverteilung

Vorbild-Tests

Weitere TestsWeitere TestsWeitere TestsWeitere Tests

Teststatus

Code-Abdeckung

passt an, erweitert erstellt

überwacht

sammelnErfahrungen

Doku-mentationDoku-mentationDoku-mentation

Weitere Entwickler

Entwickler des Testframeworks

Feed

back

Coaching

erstellen

Page 21: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Schleppende Adaption

• Akzeptanz durch Entwickler zunächst begrenzt, befürchtete Konsequenzen traten ein

• Besserung durch stetige Überzeugungsarbeit und Erfahrungen

• Sehr positive Reaktionen auf allgemeingültige Tests

• Schlüsselerlebnis: 2 fehlerhafte Releases an einem Tag, wäre jeweils durch vorhandene Tests abgefangen worden, die jedoch nicht gestartet wurden

Page 22: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergänzung: Continuous Build

Anwendung

Tests

Code-Abdeckung

compiliert

führt aus

macht Änderungen

berechnetMeldet per E-Mail:•Compilefehler•verletze Modul-abhängigkeiten•scheiternde Tests

EntwicklerContinuousBuild Server

• Alle 4 Stunden oder auf Knopfdruck• Projektintern, unabhängig von offiziellem Release• Verwendetes Produkt: Cruise Control

Page 23: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Abstimmung mit manuellen Tests

• Arbeitsteilung mit manuellen Tests verworfen, da:– Testframework nicht identisch zu Produktions-

umgebung: keine absoluten Aussagen zur Fehlerfreiheit möglich

– Durch automatische Tests voll abdeckbares Verhalten oft nicht deutlich von nur manuell testbarem Verhalten getrennt

– Änderungen hier während Entwicklung möglich– Frühzeitige Aufteilung daher schwierig

• Hätte wesentlich weitreichendere Prozessanpassung erfordert

Page 24: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ablauf

1.Voraussetzungen / Umfeld2.Umsetzung / Hürden3.Ergebnisse / Lessons Learned

Page 25: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse allgemein

• Generell positives Gefühl bei den Entwicklern, größere Sicherheit

• Auch bei Testern eine gefühlte Abnahme der Bugs, besonders Nebenwirkungen bei Fehlerbehebungen

• Nach positiven Erfahrungen vom Manamgement als fester Teil des Entwicklungsprozesses etabliert

Page 26: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Qualität

• Analyse der manuell gefundenen Bugs (je Usecase und Release) in Relation zum Umfang der automatisierten Tests

• Zahlen variieren stark, keine deutliche Korrelation– Entwicklerkompetenz– Unterschiedliche Rahmenbedingungen – keine Trennung zw. Frontend und Backend– Fehlerhafte Erfassung/Aufbereitung der

Daten

Page 27: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Grafik

Umfang der autom. Tests

Man

uell

gefu

nden

e B

ugs

Punkte:je 1 Usecase in einem best. Release

Linie:lineare Interpolationder Datenpunkte

X-Achse:autom. Tests (kB) / Code (kB)

Y-Achse:# Bugs (gew.) / Δ Code (kB) / # man. Tests

➔ Ucs mit bester Testabdeckung: durchschnittlich 50% weniger manuell gefundene Bugs!

Page 28: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Umfrage

• Umfrage unter den Entwicklern• Ergebnisse: Subjektive Einschätzungen• 7 Teilnehmer

Page 29: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Umfrage

• Aufwand für Testerstellung relativ zur eigentlichen Entwicklung: ca. 40%

• Dafür aber Einsparungen durch besseres Review und weniger Fehler

Page 30: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Aufwand vs. Einsparungen

• Mittelgroßer Usecase:ca. 20 PT Entwicklungsaufwand

• Normal ca. 100 Bug-Reports, jeweils ca. 1h Aufwand.

➔ Insgesamt kaumMehraufwand!

ohne mit0

5

10

15

20

25

30

35

40

BugreportsEntwickler-testsReviewImplemen-tierung

autom. Entwicklertests

Page 31: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Umfrage

Nützlichkeit der Entwicklertests

Entdeckung von sonst unerkannten Fehlern

Aufwand für die Entwicklertests

Arbeit mit dem Testframework

Analyse scheiternder Tests

Korrektur scheiternder Tests

Sehr nützlichÜberflüssig

Schnell erledigt

Sehr aufwändig

Bei jeder ÄnderungNie

EinfachUmständlich

Sehr einfachSehr schwierig

Sehr aufwändig

Schnell erledigt

Page 32: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Anwendungs-logikTestdatenTestframeworkSonstiges

Ergebnisse: Umfrage

• Aufwände bei der Testerstellung

➔ Hoher Aufwand für Testdaten

Page 33: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Ergebnisse: Umfrage

Anforderungs-änderungenDetailände-rungenImplementie-rungsfehlerSonstiges

• Gründe für scheiternde Tests

➔ Gute Stabilität der Tests

Page 34: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Was ist noch zu verbessern?

• Organisationsweite Verwendung anstreben (in Arbeit)

• Integration mit Originalframework (in Arbeit)

• Abstimmung mit Testabteilung erarbeiten• Bessere Dokumentation und

Organisation der Entwicklertests anstreben

Page 35: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Lessons learned

1.Automatisierte Entwicklertests steigern Qualität deutlich und meßbar, Zusatzaufwand wird durch Einsparungen ausgeglichen

2.Sind bei Anpassung an Projekt überall möglich3.Es muß einen motivierten Verantwortlichen

geben, der die Umsetzung vorantreibt und überwacht

4.Continuous Build ist eine hochprofitable Ergänzung, wenn nicht sogar Voraussetzung für sinnvolle automatische Tests

Page 36: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Lessons learned

5.Schon mit kleinem Aufwand lassen sich die schwersten und häufigsten Fehler eliminieren -Möglicher Ansatz: zur Einführung nur minimale Tests (Aufruf der Funktion und allgemeine Prüfungen) – wenig Arbeit pro Usecase

6.Testerstellung läßt sich als detailliertes Review nutzen: Erzwingt Nachvollziehen statt Überfliegen der Analysedokumente. Dabei fallen wesentlich mehr Ungereimtheiten auf

Page 37: Automatisierte Entwicklertests - Erfahrungen und …...Tests Code-Abdeckung compiliert führt aus macht Änderungen berechnet Meldet per E-Mail: •Compilefehler •verletze Modul-abhängigkeiten

Noch Fragen?