Testing untestable code - PHPUGFFM 01/11

Stephan Hochdörfer
Stephan HochdörferHead of Technology at bitExpert AG
Testing untestable code Stephan Hochdörfer, bitExpert AG "Quality is a function of thought and reflection -  precise thought and reflection. That’s the magic." Michael Feathers
Agenda ,[object Object]
Theorie
Wie man untestbaren PHP Code testet
Testbaren Code generieren
Fazit
Fragen?
Über mich ,[object Object]
Department Manager Research Labs
PHP Fanboy seit 1999
[email_address]
@shochdoerfer
Keine Entschuldigung für schlechten Code!
Nutzung auf eigene Gefahr...
Theorie "There is no secret to writing tests, there  are only secrets to write testable code!" Miško Hevery
Theorie Was ist untestbarer Code?
Theorie Was ist untestbarer Code?
Theorie Was ist untestbarer Code?
Theorie "...our test strategy requires us to have more control or  visibility of the internal behavior of the system under test." Gerard Meszaros, xUnit Test Patterns: Refactoring Test Code
Theorie Test Klasse Unittest abhäng. Klasse abhäng. Klasse
Theorie Test Klasse Unittest abhäng. Klasse abhäng. Klasse Datenbank ext. Ressource abhäng. Klasse abhäng. Klasse Webservice
Theorie Test Klasse Unittest abhäng. Klasse abhäng. Klasse Datenbank ext. Ressource abhäng. Klasse abhäng. Klasse Webservice
Theorie Wie bekomme ich testbaren Code?
Theorie Wie bekomme ich testbaren Code? Refactoring
Theorie "Before you start refactoring, check that you  have a solid suite of tests." Martin Fowler, Refactoring
„ untestbaren“ PHP Code testen Ran an die Arbeit...
„ untestbaren“ PHP Code testen Sicherheitsanweisung Bestehenden Programmcode nicht  verändern!
„ untestbaren“ PHP Code testen | __autoload
„ untestbaren“ PHP Code testen | __autoload Wie die Abhängigkeit auflösen? ,[object Object]
„ untestbaren“ PHP Code testen | __autoload
„ untestbaren“ PHP Code testen | include_path
„ untestbaren“ PHP Code testen | include_path Wie die Abhängigkeit auflösen? ,[object Object]
„ untestbaren“ PHP Code testen | include_path
„ untestbaren“ PHP Code testen | include_path Alternative Quelle: Alex Netkachov, http://www.alexatnet.com/node/203
„ untestbaren“ PHP Code testen | include_path Alternative
„ untestbaren“ PHP Code testen | Namespaces
„ untestbaren“ PHP Code testen | Namespaces Wie die Abhängigkeit auflösen? ,[object Object]
„ untestbaren“ PHP Code testen | vfsStream
„ untestbaren“ PHP Code testen | vfsStream Wie die Abhängigkeit auflösen? ,[object Object]
„ untestbaren“ PHP Code testen | vfsStream
„ untestbaren“ PHP Code testen „ I have no idea how to unit-test procedural code. Unit-testing assumes that I can instantiate a piece of my application in isolation.“ Miško Hevery
„ untestbaren“ PHP Code testen | Funktionen testen
„ untestbaren“ PHP Code testen | Funktionen testen Wie testen? ,[object Object]
PHPUnit kann den globalen Zustand speichern/wiederherstellen
„ untestbaren“ PHP Code testen | Interne Funktionen überschreiben
„ untestbaren“ PHP Code testen | Interne Funktionen überschreiben Wie testen? ,[object Object]
Problem: mail() ist Teil des PHP Kerns
„ untestbaren“ PHP Code testen | Interne Funktionen überschreiben Wie testen? ,[object Object]
„ untestbaren“ PHP Code testen | Interne Funktionen überschreiben
1 of 49

Recommended

Testing untestable code - Herbstcampus12 by
Testing untestable code - Herbstcampus12Testing untestable code - Herbstcampus12
Testing untestable code - Herbstcampus12Stephan Hochdörfer
772 views73 slides
Testing untestable code - DCHH by
Testing untestable code - DCHHTesting untestable code - DCHH
Testing untestable code - DCHHStephan Hochdörfer
852 views74 slides
Testing untestable code - gearconf11 by
Testing untestable code - gearconf11Testing untestable code - gearconf11
Testing untestable code - gearconf11Stephan Hochdörfer
667 views71 slides
Unit testing mit Javascript by
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascriptjoergreichert
315 views34 slides
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst... by
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Stephan Hochdörfer
2.7K views122 slides
AdvancedTdd by
AdvancedTddAdvancedTdd
AdvancedTddjlink
1.1K views60 slides

More Related Content

Viewers also liked

Testing untestable code - STPCon11 by
Testing untestable code - STPCon11Testing untestable code - STPCon11
Testing untestable code - STPCon11Stephan Hochdörfer
721 views58 slides
Testing untestable code - phpconpl11 by
Testing untestable code - phpconpl11Testing untestable code - phpconpl11
Testing untestable code - phpconpl11Stephan Hochdörfer
1.3K views74 slides
Facebook für PHP Entwickler - phpugffm by
Facebook für PHP Entwickler - phpugffmFacebook für PHP Entwickler - phpugffm
Facebook für PHP Entwickler - phpugffmStephan Hochdörfer
2.8K views50 slides
Simplify your external dependency management - DPC11 by
Simplify your external dependency management - DPC11Simplify your external dependency management - DPC11
Simplify your external dependency management - DPC11Stephan Hochdörfer
9.6K views86 slides
Offline Strategies for HTML5 Web Applications - ipc13 by
Offline Strategies for HTML5 Web Applications - ipc13Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13Stephan Hochdörfer
2.1K views98 slides
Phing for power users - frOSCon8 by
Phing for power users - frOSCon8Phing for power users - frOSCon8
Phing for power users - frOSCon8Stephan Hochdörfer
1.7K views106 slides

Viewers also liked(10)

Simplify your external dependency management - DPC11 by Stephan Hochdörfer
Simplify your external dependency management - DPC11Simplify your external dependency management - DPC11
Simplify your external dependency management - DPC11
Stephan Hochdörfer9.6K views
Offline Strategies for HTML5 Web Applications - ipc13 by Stephan Hochdörfer
Offline Strategies for HTML5 Web Applications - ipc13Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13
Stephan Hochdörfer2.1K views
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015 by Innomatic Platform
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Innomatic Platform7.9K views
How to build customizable multitenant web applications - IPC11 Spring Edition by Stephan Hochdörfer
How to build customizable multitenant web applications - IPC11 Spring EditionHow to build customizable multitenant web applications - IPC11 Spring Edition
How to build customizable multitenant web applications - IPC11 Spring Edition
Stephan Hochdörfer16.3K views

Similar to Testing untestable code - PHPUGFFM 01/11

PHPUnit - Eine kurze Einführung by
PHPUnit - Eine kurze EinführungPHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze Einführungfrankstaude
682 views7 slides
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt by
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtOSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtNETWAYS
368 views26 slides
Advanced Refactoring Patterns - Dev Day 2018 by
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Hendrik Lösch
592 views40 slides
Advanced Refactoring Patterns by
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring PatternsHendrik Lösch
298 views41 slides
Testgetriebene Softwareentwicklung by
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklungjlink
1.5K views64 slides
Einführung Vorgehensmodelle und Agile Software Entwicklung by
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
1.1K views58 slides

Similar to Testing untestable code - PHPUGFFM 01/11(20)

PHPUnit - Eine kurze Einführung by frankstaude
PHPUnit - Eine kurze EinführungPHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze Einführung
frankstaude682 views
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt by NETWAYS
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtOSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
NETWAYS368 views
Advanced Refactoring Patterns - Dev Day 2018 by Hendrik Lösch
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
Hendrik Lösch592 views
Advanced Refactoring Patterns by Hendrik Lösch
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
Hendrik Lösch298 views
Testgetriebene Softwareentwicklung by jlink
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
jlink1.5K views
Einführung Vorgehensmodelle und Agile Software Entwicklung by Christian Baranowski
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
Software-Tests in PHP-Anwendungen by Gjero Krsteski
Software-Tests in PHP-AnwendungenSoftware-Tests in PHP-Anwendungen
Software-Tests in PHP-Anwendungen
Gjero Krsteski1.1K views
Continuous Integration / Deployment mit Jenkins CI by Florian Bosselmann
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
Florian Bosselmann1.7K views
Test-driven Development mit TYPO3 by oliverklee
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
oliverklee651 views
Software Entwicklung im Team by brandts
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
brandts1.5K views
JavaScript und trotzdem Softwerker by Dennis Wilson
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem Softwerker
Dennis Wilson374 views
Das funktionierte doch schon einmal! - JUnit Testing in XPages by Christian Güdemann
Das funktionierte doch schon einmal! - JUnit Testing in XPagesDas funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Der Agile Qualitätsbaukasten - PHP Unconference 2014 by WebcsonsultsEU
Der Agile Qualitätsbaukasten - PHP Unconference 2014Der Agile Qualitätsbaukasten - PHP Unconference 2014
Der Agile Qualitätsbaukasten - PHP Unconference 2014
WebcsonsultsEU1.9K views
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core by Gregor Biswanger
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Gregor Biswanger213 views
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit by Nico Orschel
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitUI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
Nico Orschel863 views
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test) by Florian Wolters
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Florian Wolters79 views

More from Stephan Hochdörfer

Offline strategies for HTML5 web applications - frOSCon8 by
Offline strategies for HTML5 web applications - frOSCon8Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8Stephan Hochdörfer
9.5K views103 slides
Offline Strategies for HTML5 Web Applications - oscon13 by
Offline Strategies for HTML5 Web Applications - oscon13Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13Stephan Hochdörfer
2.8K views84 slides
Real World Dependency Injection - oscon13 by
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Stephan Hochdörfer
3.6K views72 slides
Dependency Injection in PHP - dwx13 by
Dependency Injection in PHP - dwx13Dependency Injection in PHP - dwx13
Dependency Injection in PHP - dwx13Stephan Hochdörfer
2.3K views103 slides
Offline Strategien für HTML5 Web Applikationen - dwx13 by
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Stephan Hochdörfer
2K views103 slides
Your Business. Your Language. Your Code - dpc13 by
Your Business. Your Language. Your Code - dpc13Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13Stephan Hochdörfer
1.2K views77 slides

More from Stephan Hochdörfer(20)

Offline strategies for HTML5 web applications - frOSCon8 by Stephan Hochdörfer
Offline strategies for HTML5 web applications - frOSCon8Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8
Stephan Hochdörfer9.5K views
Offline Strategies for HTML5 Web Applications - oscon13 by Stephan Hochdörfer
Offline Strategies for HTML5 Web Applications - oscon13Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13
Stephan Hochdörfer2.8K views
Offline Strategien für HTML5 Web Applikationen - dwx13 by Stephan Hochdörfer
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13
Your Business. Your Language. Your Code - dpc13 by Stephan Hochdörfer
Your Business. Your Language. Your Code - dpc13Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13
Stephan Hochdörfer1.2K views
Offline-Strategien für HTML5 Web Applikationen - wmka by Stephan Hochdörfer
Offline-Strategien für HTML5 Web Applikationen - wmkaOffline-Strategien für HTML5 Web Applikationen - wmka
Offline-Strategien für HTML5 Web Applikationen - wmka
Stephan Hochdörfer1.9K views
Offline-Strategien für HTML5 Web Applikationen - bedcon13 by Stephan Hochdörfer
Offline-Strategien für HTML5 Web Applikationen - bedcon13Offline-Strategien für HTML5 Web Applikationen - bedcon13
Offline-Strategien für HTML5 Web Applikationen - bedcon13
Stephan Hochdörfer1.8K views
Offline strategies for HTML5 web applications - ConFoo13 by Stephan Hochdörfer
Offline strategies for HTML5 web applications - ConFoo13Offline strategies for HTML5 web applications - ConFoo13
Offline strategies for HTML5 web applications - ConFoo13
Stephan Hochdörfer38.1K views
Offline-Strategien für HTML5Web Applikationen - WMMRN12 by Stephan Hochdörfer
Offline-Strategien für HTML5Web Applikationen - WMMRN12Offline-Strategien für HTML5Web Applikationen - WMMRN12
Offline-Strategien für HTML5Web Applikationen - WMMRN12
Stephan Hochdörfer1.1K views
Offline strategies for HTML5 web applications - IPC12 by Stephan Hochdörfer
Offline strategies for HTML5 web applications - IPC12Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12 by Stephan Hochdörfer
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Stephan Hochdörfer1.1K views
Offline strategies for HTML5 web applications - pfCongres2012 by Stephan Hochdörfer
Offline strategies for HTML5 web applications - pfCongres2012Offline strategies for HTML5 web applications - pfCongres2012
Offline strategies for HTML5 web applications - pfCongres2012
Wie Software-Generatoren die Welt verändern können - Herbstcampus12 by Stephan Hochdörfer
Wie Software-Generatoren die Welt verändern können - Herbstcampus12Wie Software-Generatoren die Welt verändern können - Herbstcampus12
Wie Software-Generatoren die Welt verändern können - Herbstcampus12
Stephan Hochdörfer1.3K views

Testing untestable code - PHPUGFFM 01/11

Editor's Notes

  1. Wow so viele Leute hier. Gibt es so viel schlechten Code oder seid ihr nur zum Spass hier?
  2. Wer seit ihr? Wer hat schon untestbaren Code geschrieben? Wer hat versucht solchen Code zu testen?
  3. Zwei grundsätzliche Indikatoren
  4. Starke Kopplung - Tight coupling Abhängigkeiten zu konkreten Implementierungen „new“ Zu viele Abhängigkeiten zu anderen Klassen, besser Interfaces Keine Möglichkeit der Kontrolle der Abhängigkeiten
  5. Ungewissheit Globale Variablen, Singleton, Registry, Globaler Zustand Statische Methodenaufrufe Businesslogik im Konstruktor Ergebnis ist nicht vorhersehbar. Brauchen Kontrolle!
  6. Prozess den Quellcode zu verändern ohne das externe Verhalten zu beeinflussen. Verbessert die nonfunctionalen Attributes der Software Verbessert die Lesbarkeit des Programmcodes Komplexität reduzieren, Wartbarkeit optimieren Durch stetiges Verbesseren des Designs erleichtern wir die tägliche Arbeit mit dem Code.
  7. Henne ↔ Ei Problem – Zum Refactoren brauchen wir Tests die wir nicht bauen können ohne zu refactoren. Alternativen? UI Testing? - Nicht jeder Zustand der Applikation muss in der UI sichtbar sein.
  8. ...denn jede Änderungen an vorhandenem Programmcode kann Fehler zur Folge haben. Das wollen wir vermeiden!
  9. Traits in PHP5 – Include für Methoden :) Mehrfachvererbung, irgendwie
  10. Funktionen die nicht den globalen Zustand verändern sind einfach und testbar.
  11. Frames: Marvin Minski in 1970s In the field of Artificial Intelligence, a frame is a data structure for representing knowledge. ICs need to know to to build itself depending on configuration
  12. Code transformations that can be done
  13. „ Smarty on steriods“
  14. Wie wichtig ist die Applikation für mich? Welcher Business value steckt dahinter? Wie kompliziert ist es Tests zu schreiben? Wie viele Fehler treten tatsächlich täglich auf?
  15. This demo should inspire you to think about technoloy and other cool stuff. Your limit is the imagination.