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