Putting TDD to the Test. Edwin Günthner, IBM Germany Development Lab

Ähnliche Dokumente
Test Driven Development

Thomas Schissler MVP Visual Studio ALM, artiso AG

Selbstorganisiert ein Ziel erreichen Analyse, Architektur und Design in agilen Software-Projekten

Design for Testability in der Praxis David Völkel, codecentric AG

Transparenz 2.0. Passive Nachverfolgung und Filterung von WebApps auf dem Prüfstand

Universität Bielefeld. Softwarepraktikum. Gernot A. Fink SS Rückblick extreme Programming (XP)

Sind wir nicht alle ein bisschen agil? Dipl.-Inform. Tammo Freese xpdays, Karlsruhe, 22. November 2004

ALM & DevOps Day. 24. September 2015, Zürich Oerlikon. 07. November, Zürich-Oerlikon

TDD. mit JUnit & Mockito. Tobias Trelle, codecentric

Scriptbasierte Testautomatisierung. für Web-Anwendungen

Private Cloud Management in der Praxis

SAP Simple Finance Die Finanz- und Risikomanagementlösung für die Digital Economy

Buchvorstellung Domain-Driven Design

IBM Cognos TM Die Neuigkeiten

FWP Komponentenorientierte Softwareentwicklung Test-Driven-Development mit Java

Extreme Programming ACM/GI Regionalgruppe Bremen,

netcim Boot-Stick erstellen Version 1.0 ( ) Netree AG CH-4658 Däniken

euronas Enterprise Virtualization OS

Wie Programm Neighborhood Agent mit Secure Gateway konfigurieren. von Stefan Müri

Agile Methoden. David Tanzer. Oliver Szymanski

Agile Softwareprozess-Modelle

IBM Demokratischere Haushalte, bessere Steuerung, fundierte Entscheidungen? Was leisten das neue kommunale Finanzwesen und Business Intelligence?

Iterativ. Inkrementell

Metro Design Principles

Password Management. Password Management Guide MF-POS 8

Benchmarking von Bilddatenstrukturen

Entwicklungsoptimierung mit einem ALM Tool Positionierung mit Fallstudie

Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius

Customer-specific software for autonomous driving and driver assistance (ADAS)

Windows 8 bereitstellen das Microsoft Deployment Toolkit. Heike Ritter

Advanced Availability Transfer Transfer absences from HR to PPM

JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Namics. Stefan Bechtold. Principal Software Engineer.

Extremes Programmieren

Agile Entwicklung und Architektur. Leon Fausten Grundseminar WS 2014/

Empirische Evidenz von agilen Methoden. Seminar in Software Engineering Wintersemester 03/04

Test-driven development JUnit-Test. Lars Varain

SQL Server Technischer Überblick. Patrick Heyde

Testers Architects Enterprise Dev Consultants Professionals VB6 Devs Part-Timers Hobbyists Students Enthusiasts Novices

TFS Customzing. in der Praxis. Thomas Gugler. seit 2005 bei ANECON. .NET seit 2002 (happy bday!) Schwerpunkte: MCPD.Net 4.0, MCTS TFS, Scrum Master,

Agile Methoden vs. Testen

Notice: All mentioned inventors have to sign the Report of Invention (see page 3)!!!

DIGICOMP OPEN TUESDAY AKTUELLE STANDARDS UND TRENDS IN DER AGILEN SOFTWARE ENTWICKLUNG. Michael Palotas 7. April GRIDFUSION

Automatisierter Java EE Entwicklungs-Lifecycle mit WebLogic Server 12c. Robin Müller-Bady Systemberater, Oracle Deutschland

Unit Testing, SUnit & You

OFFENE KOMMUNIKATION SCHLÜSSEL ZUM ERFOLG JUDITH ANDRESEN VORTRAG KARLSRUHE XP DAYS 27. NOVEMBER

Data Governance Informationen kontrolliert managen

CODE REVIEWS DONE RIGHT. Heiko Gramlich

A Business Platform for The 21 st Century. Glimpses into some Research Activities Dr. Albrecht Ricken November 24, 2015

Office 365 Partner-Features

Seit 25 Jahren ist PBS ein führender Anbieter von Ergänzungslösungen für die SAP-Datenarchivierung und das Information Lifecycle Management.

XML Template Transfer Transfer project templates easily between systems

Software Engineering. 4. Methodologien. Franz-Josef Elmer, Universität Basel, HS 2014

Rezension des Papers Recovery, Redemption and Extreme Programming von Peter Schuh

Mobile Application Development

I-Q SCHACHT & KOLLEGEN QUALITÄTSKONSTRUKTION GMBH ISO 26262:2011. Tabellen mit ASIL Zuordnungen

Extreme Programming. Universität Karlsruhe (TH) Fakultät für Informatik Lehrstuhl für Programmiersysteme. Forschungsuniversität gegründet 1825

IBM Cognos TM1 für Einsteiger

Dipl.-Inform. Harald Zinnen Senior Solution Specialist Datacenter Microsoft Deutschland GmbH

Value Delivery and Customer Feedback

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Dominik Stockem Datenschutzbeauftragter Microsoft Deutschland GmbH

Herkömmliche Softwareentwicklungsmodelle vs. Agile Methoden

A very very very very short intro to. Testing

Projektmanagement. Dokument V 1.2. Oliver Lietz - Projektmanagement. Probleme bei Projekten

Industrie 4.0 SAP 3D Visual Enterprise Quality Management App

Was funktioniert und was nicht? Agile Softwareentwicklung in der Praxis Martin Lippert,

Unit Tests mit Junit 4. Dario Borchers

SAP Software Engineering live Agile! Agiles Projektmanagement und Clean Code im SAP-Umfeld

A study on computer-aided design of PIN-diode phase modulators at microwave frequencies

Die neue Enterprise Project Management Strategie von Microsoft. Microsoft Deutschland GmbH

Design for Testability in der Praxis Referent: David Völkel

Präsentation einer agilen Methode

Test-Driven Design: Ein einfaches Beispiel

Lean Modeling - Software Systeme einfach und präzise mit natürlicher Sprache spezifizieren

Private Cloud. Hammer-Business Private Cloud. Ansgar Heinen. Oliver Kirsch. Datacenter Sales Specialist. Strategic Channel Development Private Cloud

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Agile Praktiken für das Service Transition Management. und wie IT Automation Ihre Service Transition Prozesse verändert - Change Management

-Migration ganz einfach von POP3/IMAP4 zu Exchange Online. Christoph Bollig, Technologieberater Office 365

Property Based Testing

Informationen zur Oracle DB SE2

Das Agile Team. Skills, Arbeitsweise, Umgebung

GURUCAD - IT DIVISION CATIA V5 PLM EXPRESS CONFIGURATIONS Hamburg, 16th February 2010, Version 1.0

CeBIT CARMAO GmbH

Das Who s Who der agilen Methoden Golo Roden

CONTINUOUS DELIVERY. Entmystifiziert. codecentric AG

Microsoft Software Assurance Home Use Program: Oktober 2009

Der Schutz-Garant. Das 1x1 des Kühlerschutzes

Die 7 Wege zum Clean Code

Cloud for Customer Learning Resources. Customer

Mindjet On-Premise Release Notes, Version 4.0

Smart Design Eigene Applikationen effizient und einfach entwickeln

Erfolgreich mit Partnern

Frank Solinske Senior Consultant TELTA Citynetz Eberswalde GmbH MVP Windows Server Security

07. November, Zürich-Oerlikon

MES - Manufacturing Execution System: Moderne Informationstechnologie Zur Prozessfähigkeit Der Wertschöpfung (German Edition)

RE bei agilen Methoden

Übersicht. Normung von Software in der Medizin. Vorstellung der DKE. Vorstellung der Normungsgremien. Normen im Bereich Software.

Test Gap Analyse bei der Munich RE Uwe Proft

Entwicklungswerkzeuge

Transkript:

Putting TDD to the Test Edwin Günthner, IBM Germany Development Lab

Zum Titel www.dict.cc: to put sb./sth. to the test jdn./etw. auf den Prüfstand stellen Java Forum Stuttgart 2017 2

Agenda Teil 1: Grundsätzliches, Begrifflichkeiten, Definitionen Teil 2: Ein (subjektiver) Reisebericht Teil 3: Eine (objektivere) Abrundung Java Forum Stuttgart 2017 3

Teil 1 Motivation Definitionen Java Forum Stuttgart 2017 4

Warum sind wir heute hier? Continuous attention to technical excellence and good design enhances agility. [ Agile manifesto, 9th principle ] Java Forum Stuttgart 2017 5

Definitionen: Unit Testing Unit Testing [ Wikipedia ]: Vereinfacht gesagt steht dort: Alles was man tut um zu testen ist ein Unit Test Nicht hilfreich Java Forum Stuttgart 2017 6

Definitionen: Unit Testing Hilfreich: https://de.wikipedia.org/wiki/modultest http://artofunittesting.com/definition-of-a-unit-test/ Kennzeichen guter Unit Tests sind zum Beispiel: Automatisierbarkeit Isolation Konsistenz Schnelligkeit Java Forum Stuttgart 2017 7

Definitionen: TDD TDD: Test driven development [ Wikipedia ]: Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases, then the software is improved to pass the new tests, only. Uns geht es hier um TDD und gute, echte Unit Tests Java Forum Stuttgart 2017 8

Teil 2 Evolution und Kontext Houston, we have a problem TDD to the rescue Erfahrungen und Ergebnisse Java Forum Stuttgart 2017 9

Evolution I 2012 Kollegen (und Java Forum Stuttgart) alles spricht über TDD Aber: dem Team einfach sagen: Wir machen jetzt alle TDD funktioniert nicht (besonders gut) Java Forum Stuttgart 2017 10

Evolution II Wir üben, üben, üben 2015 ergibt sich für mich die Chance, eine komplexe Funktionalität komplett mit TDD zu bearbeiten Java Forum Stuttgart 2017 11

Kontext Das ist ein Mainframe: ein großes SMP (symmetric multi-processing) System, auf dem Kunden virtuelle Maschinen betreiben Java Forum Stuttgart 2017 12

Kontext Das ist ein Mainframe: ein großes SMP (symmetric multi-processing) System, auf dem Kunden virtuelle Maschinen betreiben Die IBM zsystems Komponente DPM ermöglicht Kunden die zeitgemäße Verwaltung dieser VMs Java Forum Stuttgart 2017 13

Kontext (II) Kunde Management Console: Management Console (physikalisch) verteilte Anwendung xx Millionen Zeilen C, C++, Java historisch gewachsen, proprietär Java Forum Stuttgart 2017 14

Houston, we have a problem Ein wesentlicher Teil von DPM: das Starten/Stoppen der VMs Erster Code entsteht Frühjahr/Sommer 2015 Code Review Herbst 2015: Code ist bereits relativ komplex aber wichtige Funktionen fehlen noch Viel code duplication aber keine Unit Tests Das eigentliche Problem: Refactoring ist ohne Unit Tests zu teuer Java Forum Stuttgart 2017 15

Die Lösung: the big rewrite Anfang Dezember 2015: Kein Urlaub mehr 2015 also nutze ich die ruhigen Wochen zum Jahresende und überarbeite alles Und weil ich es besser machen will, mache ich alles mit TDD Java Forum Stuttgart 2017 16

Wie geht das nochmal mit TDD? Schreibe neuen Test Führe Test aus pass Huch?! fail Schreibe Produkt Code Führe alle Test aus pass Verbessere Code (Refactoring) fail Java Forum Stuttgart 2017 17

Die erste und wichtigste Erfahrung Die kurzen Test Code <--> Produkt Code Zyklen sind paradiesisch: Ich arbeite ausschließlich in meiner IDE ( versus: Code schreiben, Patch zusammenstellen, VM starten, Patch applizieren, Anwendung starten, ) Ich kann eine Idee/Vorstellung sofort ausprobieren und umsetzen Mit anderen Worten: Kein Wechseln des Kontexts Keine Wartezeiten Im Gegenteil: schnelle rot grün Iterationen stunden-, tagelang Java Forum Stuttgart 2017 18

Die zweite Erfahrung Nach 4 Wochen: ein erster funktionaler Test am echten System Huch, es tut nicht! Java Forum Stuttgart 2017 19

Die zweite Erfahrung Nach 4 Wochen: ein erster funktionaler Test am echten System Huch, es tut nicht! Analyse ergibt: Fehler beim Erstellen des Patches Neuer Patch: Test läuft erfolgreich durch Aber: da ist ein Fehler im Design der neuen Funktionalität Java Forum Stuttgart 2017 20

Die zweite Erfahrung Nach 4 Wochen: ein erster funktionaler Test am echten System Huch, es tut nicht! Analyse ergibt: Fehler beim Erstellen des Patches Neuer Patch: Test läuft erfolgreich durch Aber: da ist ein Fehler im Design der neuen Funktionalität Dank TDD und existierender Unit Tests: Fehler ist in wenigen Stunden behoben Java Forum Stuttgart 2017 21

All good things must come to an end Nochmal etliche Wochen später: coding complete Zeit für echte System Tests: Alle Tests laufen erfolgreich durch Java Forum Stuttgart 2017 22

All good things must come to an end Nochmal etliche Wochen später: coding complete. Zeit für echte System Tests: Alle Tests laufen erfolgreich durch Genauer gesagt: Keine Übertragungsfehler (alles was vorher funktioniert hat, funktioniert immer noch) Alle bekannten Probleme im alten Code sind ebenfalls beseitigt Große Mengen an nützlicher Zusatzfunktionalität wurden eingebaut und alles funktioniert auf Anhieb Java Forum Stuttgart 2017 23

In der Retrospektive Der neue Code wird seit 18 Monaten genutzt: keine Bugs gefunden Der neue Code wurde mehrmals erweitert (z. B. für andere Operationen wie Partition Update) ohne dass dabei Regressionen eingebaut wurden ( Wichtig: existierende Unit Tests helfen nur bedingt beim Implementieren neuer Funktionen ) Java Forum Stuttgart 2017 24

Teil 3 Alles gut? Ein Geheimtipp Effizienz Best Practices Empfehlungen und Anti-Pattern Java Forum Stuttgart 2017 25

Alles gut? Natürlich nicht. Aufwandsabschätzung (überraschenderweise: viel zu niedrig) Keine konsequente Umsetzung der eigenen Qualitätsansprüche (zum Beispiel: Keine Zeit für Reviews ) Funktionale Tests sind immer noch ein MUSS TDD ist kein silver bullet mit dem Anspruch, alle Probleme zu lösen! Java Forum Stuttgart 2017 26

Talking about silver bullets Unit Tests funktionieren für??? Java Forum Stuttgart 2017 27

Talking about silver bullets Unit Tests funktionieren für testbare Units! Java Forum Stuttgart 2017 28

Was macht eine Unit testbar? Zum Beispiel: Isolation Entkopplung Fokussierung (Single Responsibility Principle) die Prinzipien von Clean Code! Java Forum Stuttgart 2017 29

Die ärgerliche Konsequenz Es genügt nicht, Bücher über Unit Testing / TDD zu lesen, z. B.: JUnit-Profiwissen [ Michael Tamm ] xunit Test patterns [ Gerad Meszaros ] Working Effectively with Unit Tests [ Jay Fields ] Java Forum Stuttgart 2017 30

Die ärgerliche Konsequenz Es genügt nicht, Bücher über Unit Testing / TDD zu lesen, z. B.: JUnit-Profiwissen [ Michael Tamm ] xunit Test patterns [ Gerad Meszaros ] Working Effectively with Unit Tests [ Jay Fields ] Darüber hinaus muss man sich mit Code Qualität intensiv auseinandersetzen, z. B: Refactoring [ Kent Beck / Martin Fowler ] Clean Code, Agile principles [ Robert Martin, ] Java Forum Stuttgart 2017 31

So viel Aufwand? Und das rentiert sich? Ein Kollege hat mich gefragt: Wenn man all diese Tests schreiben muss, wird man dann nicht langsamer? Meine Antwort: Nein. Man wird schneller. Java Forum Stuttgart 2017 32

So viel Aufwand? Und das rentiert sich? Ein Kollege hat mich gefragt: Wenn man all diese Tests schreiben muss, wird man dann nicht langsamer? Meine Antwort: Nein. Man wird schneller. Wieso bin ich schneller wenn ich n Zeilen Produkt Code + m Zeilen Test Code schreiben muss anstatt nur n Zeilen? Java Forum Stuttgart 2017 33

Eine Frage der Effizienz Wieso bin ich schneller wenn ich n + m Code schreiben muss anstatt nur n Zeilen? Ganz einfach: weil ich in wenigen Sekunden 10, 50, 100 Tests ausführen kann! Unit Tests geben sofortiges Feedback über ausgeführten Code Java Forum Stuttgart 2017 34

Nützliche Tipps (Produkt Code) Unveränderliche Objekte machen das Leben viel einfacher! Sparsamer Einsatz von new und static dependency injection, siehe Google Tech Talks: Unit testing Üben, üben, üben: am Besten im Team Gemeinsame Code Reviews mit beispielhaften Schwerpunkten: Clean Code Prinzipien Testbarkeit Java Forum Stuttgart 2017 35

Nützliche Tipps (Test Code) Der ideale Test kommt ohne Mocking Framework aus Für Test Code gelten die gleichen Ansprüche an Qualität wie für Produkt Code Gemeinsame Standards und Vorgehensweisen im Team Clean Code (mit gewissen Einschränkungen) Java Forum Stuttgart 2017 36

Anti-Pattern für Tests Wir brauchen PowerMock(ito) : Bedeutet (fast) immer: Wir schreiben schlecht testbaren Code Tests bestehen (fast) nur aus Mocking Specs: wir wollen das WAS testen, nicht das WIE stattdessen: Fokussierung auf den public contract Tests fühlen sich zu groß/komplex/unhandlich an: vermutlich ist der Produkt Code zu kompliziert Zeit für echtes Refactoring! Java Forum Stuttgart 2017 37

Evolution III 2017 Die Lernkurve geht immer weiter, mit Fragen wie zum Beispiel: Sollte man Unit Tests auch mal löschen? Wie kann ich die Nützlichkeit eines Tests sinnvoll bewerten? (Stichwort: Return on Investment!) Java Forum Stuttgart 2017 38

Fragen? Antworten! Ansonsten einfach später an: edwin.guenthner ät de.ibm.com Vielen Dank für Ihre Aufmerksamkeit! Java Forum Stuttgart 2017 39

Copyright IBM Corporation 2017. All rights reserved. The information contained in this presentation is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. Java Forum Stuttgart 2017 40