Wie wird mein Code testbar? Referent: David Völkel

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

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

Test Driven Development

STRICT TDD DIE UNTERSCHÄTZTE WAFFE DES ENTWICKLERS


Michael C. Feathers. Legacy Code. Effektives Arbeiten mit. Refactoring und Testen bestehender Software

TDD. mit JUnit & Mockito. Tobias Trelle, codecentric

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

Inhaltsverzeichnis. Geleitwort Einleitung... 13

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

TDD für iphone OS. xpdays Tammo Freese

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

INTEGRATION TEST HELL ODER WIE INTEGRATIV SOLL ICH TESTEN?

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Inhalt. Design patterns Kernbereiche Creational patterns Factory method Abstract Factory Builder Structural patterns Adapter Facade Decorator

Record Refactor - Replay

SEQIS 10 things. Herzlich Willkommen! Alexander Weichselberger SEQIS Geschäftsleitung

Refactoring C# Legacy Code

Inhaltsverzeichnis. Vorwort 15

Design Patterns 2. Model-View-Controller in der Praxis

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

Skalierbare Enterprise Architekturen für Universal Windows Platform Apps

Test-driven development JUnit-Test. Lars Varain

Inhaltsverzeichnis. Teil I Erste Schritte 23. Vorwort zur zweiten Auflage Vorwort zur ersten Auflage Einleitung...

Prüfungsvorbereitungsfragen SE2

Iterativ. Inkrementell

Langlebige Softwarearchitekturen - technische Schulden beherrschen und abbauen

Softwaretests mit Junit

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Reengineering und Refactoring von Softwarearchitekturen

TDLCR Test Driven Legacy Code Refactoring

Unit Testing, SUnit & You

Code Retreat Softwerkskammer Stuttgart / JUGS 17. Nov. Oliver Böhm JUGS / Daniel Georges Softwerkskammer Stuttgart

Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET

Funktionales TDD. Alles gleich oder alles anders?

Inhalt. 3.1 Der inkrementelle Entwurf im Überblick Flache Aufwandskurve Qualitätskriterien für den inkrementellen Entwurf...

Refactorings in großen Softwareprojekten

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

Probeklausur. Lenz Belzner. January 26, Lenz Belzner Probeklausur January 26, / 16

PHP 6 Beliebte Webskriptsprache wird erwachsen. Linux User Group Bern René Moser <mail@renemoser.net>

Die Welt der SW-Qualität Ein Streifzug in 30 Minuten! Johannes Bergsmann Eigentümer

Fragen Arthur Zaczek. Dez 2015

PS Software Engineering WS 2018/19

Scriptbasierte Testautomatisierung. für Web-Anwendungen

Christoph Behounek, eggs unimedia

Info B VL 11: Innere Klassen/Collections

Was bringt TDD wirklich?

xii 5.3 Debugging Einplanung der Fehlersuche in Produkt und Prozess Vorbereitung und Ausführung des Debugging

Seminarprogramm Test-Driven Development mit ABAP OO Praktiken & Design Pattern Zeitmanagement Inhouse Seminare Webinare & elearning

The Art of Unit Testing

Software - Testung ETIS SS05

Factory Patterns und deren Auswirkung auf die Softwarearchitektur in der Praxis

FWP Komponentenorientierte Softwareentwicklung Test-Driven-Development mit Java

Testgetriebene Entwicklung

FORTGESCHRITTENE ANDROID ENTWICKLUNG Max Wielsch

Labor Datenverarbeitung SS 2006

7. Zusammenfassung (1)

The Art of Unit Testing

Testing Today - Seminar Sommersemester Dipl.-Math. Raphael Pham, Prof. Kurt Schneider

Die Kunst der kleinen Schritte. David Völkel XP Days Germany

Fabian Schmengler Pragmatisches Unit Testing. Meet Magento DE 2015

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Statt Banaware Java GUI Testautomatisierung

TDLCR Test Driven Legacy Code Refactoring

SASUnit in der Praxis: Aufbau eines Sicherheitsnetzes für angstfreie Änderungen an SAS Programmen

Effektives Arbeiten mit Legacy Code

Automatisierte Akzeptanztests und TDD für ios

Testgesteuert Entwickeln mit JUnit 4

Beispiel: DB-Mock (1/7)

Agilisierung von Testsystemen

Testbarkeit im Entwicklungsprozess

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

LavA OS: Ein Betriebssystem für konfigurierbare MPSoCs

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard

Technische Schulden in Architekturen erkennen und beseitigen

SEMINARPROGRAMM APPLIED ABAP OBJECTS TRANSFORMING TECHNICAL DEBT TDD WITH ABAP CLEAN CODE ABAP DESIGN PATTERNS WITH ABAP SAP POWER DAYS MAJER TRAINING

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Mocking Libraries Shootout

Viele Entwickler finden Testen langweilig.

ENTWURFSPRINZIPIEN DIE SOLID-PRINZIPIEN NACH ROBERT C. MARTIN 1 / 21. Markus Just Wissenschaftliche Vertiefung

Inhalt. TEIL I ABAP gestern, heute und morgen. 1 Qualität, Performance und Sicherheit in der aktuellen Softwareentwicklung... 23

Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung

Agile Methoden. David Tanzer. Oliver Szymanski

Langlebige Softwarearchitekturen der Weg aus den technischen Schulden

Build-Pipeline mit Jenkins

Wahlpflichtfach Design Pattern

Continuous Integration mit VSTS Dieter Rüetschi

Seminarprogramm Majer Training

Die Macht, die uns umgibt. Design Prinzipien. Schneller und besser Software entwickeln Jörg Bächtiger

Stabile GUI-Tests durch modulare Testarchitektur. Martin Moser

Code verifizieren mittels

Üble Gerüche aus der Entwicklerküche. Wann fängt Programmcode an (uns) zu stinken?

GI Fachgruppentreffen RE 2015

Unit Tests in der Testgetriebenen Entwicklung

Software Technologie Refactoring. Nutzungsverhalten der Entwickler bzgl. des Refactoring. Nguyen Hung

Legacy Code meistern in x einfachen Schritten

Transkript:

Wie wird mein Code testbar? Referent:DavidVölkel http://commons.wikimedia.org/wiki/file:pit_crew_hudson_valley.jpg http://commons.wikimedia.org/wiki/file:carservice.jpg

DavidVölkel

anti pattern hardtotestcode GuteTestbarkeit http://commons.wikimedia.org/wiki/file:pit_crew_hudson_valley.jpg http://commons.wikimedia.org/wiki/file:carservice.jpg

Überblick *Testbarkeit *TDDvs.Legacy *Isolation *Ciao accidentalcomplexity!

Testbarkeit Kriterien *operability *decomposability *observability *controllability http://commons.wikimedia.org/wiki/file:carservice.jpg

DesignforTestability(DfT) Designziel *wenigtestaufwand UrsprungE Technik *Testschnittstellen http://commons.wikimedia.org/wiki/file:carservice.jpg

TestDrivenDevelopment vs. Legacy

TestDrivenDevelopment writefailingtest (refactor) makethetest pass http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

TestDrivenDevelopment writefailingtest (refactor) (refactor) makethetest pass http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

TestDrivenDevelopment writefailingtest (refactor) (refactor) makethetest pass ExterneQualität Funktional http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

TestDrivenDevelopment writefailingtest (refactor) (refactor) makethetest pass ExterneQualität Funktional InterneQualität =>TestDrivenDesign

TestDrivenDesign Test *DriveDesign kontinuierlich minimalistisch(yagni) testbar<=>gutesdesign Code http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

TestDrivenDesign *DriveDesign kontinuierlich minimalistisch(yagni) testbar<=>gutesdesign *FeedbackaufDesign Listentoyourtests! (ZitatJohansen,2010) Test Code http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

LegacyCode =keinetests schlechttestbaresdesign *eigenercode *3rdPartyCode(Frameworks) http://commons.wikimedia.org/wiki/file:kopalnia_wieczorek_rozbite_okna_12.08.jpg?uselang=de

Legacy TDD Renovierung Doppeltschwierig *NochwenigKnowHowimTeam *SchwertestbarerCode http://commons.wikimedia.org/wiki/file:kopalnia_wieczorek_rozbite_okna_12.08.jpg?uselang=de http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg

Legacy TDD Renovierung * Lazy *FixierungmitSystemtests *Refactoring *UnittestsfürneueFeatures http://commons.wikimedia.org/wiki/file:kopalnia_wieczorek_rozbite_okna_12.08.jpg?uselang=de http://commons.wikimedia.org/wiki/file:bluebird_land_speed_record_car_1935_rc10413.jpg NachFeathers2004

Isolation

Isolation Ziele *KlarerFokus Test Testaufwandsinkt Fehlerlokalisierung einfacher *Performanz http://commons.wikimedia.org/wiki/file:cocks_in_separate_cages,_thailand.jpg

frontdoor *KEINEIsolation *roundtriptests Test *stateverification BegriffenachMeszaros2007 Testling dependedoncomponents (DOCs) http://commons.wikimedia.org/wiki/file:stork_hotel_door.jpg

backdoor Unittestsgegen Blätter Test Units mitdocs Mocks BegriffenachMeszaros2007 http://commons.wikimedia.org/wiki/file:dummy_of_a_police_car.jpg

Isolierbarkeit Test Problem: TestDoublesnichtsetzbar Refactorings Isolierbar Test Doubles

Beispiel:Logger

Probleme Controllability(INPUT) Observability(OUTPUT)

Ursachen statischeabhängigkeiten *Konstruktoraufrufe *Singletons

StatischerAufruf=>Objekte

StatischerAufruf=>Objekte Klasse <=> *wenigeraufwand * don'tmockconcrete classes ZitatausFreeman/Pryce2009 Interface *Abhängigkeiten expliziter geringer(isp) *SemantikdurchRollen

Setzbarkeit DependencyInjection *DOCssetzbar *Konstruktorvs.Setter *keinstatic http://commons.wikimedia.org/wiki/file:syringe_glove_01.jpg

StubmitBordmittel Controllability(INPUT) *Inputkontrollierbar *etwassperrig

StubmitMockframework einfacherbeibreitereninterfaces

TestSpymitBordmitteln Observability(OUTPUT)

TestSpymitMockframework *knapp * behaviorverification

TransitiveAbhängigkeiten trainwreckcode BegriffvonFreeman/Price2009... Problem:ImpliziteAbhängigkeiten GUI Test Service http://upload.wikimedia.org/wikipedia/commons/b/b5/durango_silverton_train.jpg?uselang=de

TransitiveAbhängigkeiten *Abhängigkeitexplizit *nurzu Nachbarn... GUI Test Service http://commons.wikimedia.org/wiki/file:1918trainwreck.jpg Begriff trainwreckcode vonfreeman/price2009

DependencyInjection Kontext Objekte Abhängigkeit http://commons.wikimedia.org/wiki/file:syringe_glove_01.jpg *kennennurnachbarn

Ciao accidentalcomplexity!

Ciao accidentalcomplexity! Problem: *komplexesetups *schlechterfokus http://commons.wikimedia.org/wiki/file:us_navy_040619 N 8704K 001_Boatswain_Mate_3rd_Class_Joanna_Saldana_cuts_the_rope_off_a_span_wire_aboard_the_aircraft_carrier_USS_John_F._Kennedy_ %28CV_67%29_during_an_underway_replenishment_.jpg?uselang=de

LogischeFehler *Schichten,z.B. Prod Code=>Test Code *Zyklen undvieleanderemehr! http://de.wikipedia.org/w/index.php?title=datei:lattenkiste_a.jpg&filetimestamp=20060723120820

decomposability BigBallofMud Separations of Concerns Systemkleinschneiden Alleshängtvonallemab

Fokus SRP=>Klasse http://commons.wikimedia.org/wiki/file:crossroads.jpg

Unfokussiert... 2Aspekteaufeinmal

ExtractClassRefactoring fokussierter... einfachertestbar...

http://commons.wikimedia.org/wiki/file:us_navy_040619 N 8704K 001_Boatswain_Mate_3rd_Class_Joanna_Saldana_cuts_the_rope_off_a_span_wire_aboard_t he_aircraft_carrier_uss_john_f._kennedy_ %28CV_67%29_during_an_underway_replenishment_.jpg?uselang=de DfT Strategie TDD Ciao accidentalcomplexity! Isolation http://commons.wikimedia.org/wiki/file:cocks_in_separate_cages,_thailand.jpg

Quellen http://www.testbarkeit.de http://en.wikipedia.org/wiki/design_for_testing PeterZimmer,2012:Testability ALevertoBuildSustainingSystems,OOP Conference2012 http://secs.ceas.uc.edu/~cpurdy/sefall11/testing_payneetal_1997.pdf SteveFreeman,NatPryce,2009: GrowingObject OrientedSoftwareguidedbyTests MichealFeathers,2004: Workingeffectivelywithlegacysystems RobertC.Martin,2009: CleanCode GerardMeszaros,2007: xunittestpatterns bzw. http://xunitpatterns.com/ ChristianJohansen,2010: Test DrivenJavaScriptDevelopment http://de.wikipedia.org/wiki/gesetz_von_demeter EricEvans,2003: DomainDrivenDesign

Fragen und Diskussion http://commons.wikimedia.org/wiki/file:carservice.jpg

LizensiertunterCreativeCommons3.0Attribution+Sharealikesiehe http://creativecommons.org/licenses/by sa/3.0/deed.de