Framework-Qualit¨t: Tests als
                        a
                Gutesiegel
                  ¨

                  ...
¨
                                   Uber Mich


¨
Uber mich


                                 Volkswirt
                ...
Warum Framework-Qualit¨t?
                                                a



Warum sollte uns
Framework-Qualit¨t interes...
Warum Framework-Qualit¨t?
                                                a



Framework-Bugs


  1. Bugs in fremden Code ...
Wie Framework Qualit¨t messen?
                                          a



Wie Framework Qualit¨t messen?
             ...
Einstellung zu Tests & Qualit¨tssicherung
                                            a




       Einstellung zu Tests & ...
Einstellung zu Tests & Qualit¨tssicherung
                                            a              Zend Framework



Zen...
Einstellung zu Tests & Qualit¨tssicherung
                                            a              eZ Components



eZ C...
Einstellung zu Tests & Qualit¨tssicherung
                                            a              Symfony



Symfony


...
Einstellung zu Tests & Qualit¨tssicherung
                                            a              CakePHP



CakePHP


...
Große Zahl von Unittests




                         Große Zahl von Unittests




B. Eberlei (SimpleThings GmbH)         ...
Große Zahl von Unittests



Große Zahl von Unittests
Entwarnung: Alle großen Frameworks haben viele
Unittests!
         Ze...
Wahl des Unit-Testing Frameworks




               Wahl des Unit-Testing Frameworks




B. Eberlei (SimpleThings GmbH)   ...
Wahl des Unit-Testing Frameworks   PHPUnit



PHPUnit

         Integriert sich hervorragend in Continuous
         Integr...
Wahl des Unit-Testing Frameworks   Lime



Lime
         Eigenbau f¨r das Symfony Framework
                   u
         ...
Wahl des Unit-Testing Frameworks   SimpleTest



SimpleTest


         Wird verwendet von: CakePHP
         L¨uft ebenso w...
Hohe Code-Coverage der Tests




                   Hohe Code-Coverage der Tests




B. Eberlei (SimpleThings GmbH)       ...
Hohe Code-Coverage der Tests



Hohe Code-Coverage der Tests
Coverage ist Abh¨ngig von den installierten Extensions,
     ...
Wenig Code-Duplikation in Tests



Wenig Code-Duplikation in Tests


PHP Copy Paste Detector
pear channel - discover pear ...
Wenig Code-Duplikation in Tests



Wenig Code-Duplikation in Tests


         symfony: 1.48% Duplikate bei 18.823 Codezeil...
Subjektive Einsch¨tzung
                                                  a



Subjektive Einsch¨tzung
                 a
...
Tests als Dokumentation




                          Tests als Dokumentation




B. Eberlei (SimpleThings GmbH)          ...
Tests als Dokumentation



Tests als Dokumentation


         Tests erlauben Verst¨ndnis der API eines
                   ...
Tests als Dokumentation



Obskure und Gigantische Tests

         Obskure Tests sind sehr komplex und
         unverst¨nd...
Testing Bad-Practices




                                 Testing Bad-Practices




B. Eberlei (SimpleThings GmbH)       ...
Testing Bad-Practices   Testger¨che
                                                                u



Integration-, Web...
Testing Bad-Practices   Testger¨che
                                                                u



Web-Surfer-, Asse...
Testing Bad-Practices   Testger¨che
                                                                u



Global State
Zend...
Testing Bad-Practices   Testger¨che
                                                                u



Fragile and Indir...
Testing Bad-Practices   Testger¨che
                                                                u



Assertionless
Zen...
Testing Bad-Practices   Testger¨che
                                                                u



Erkenntnisse


  ...
Testing Bad-Practices   Testger¨che
                                                                u



Attribution
     ...
Testing Bad-Practices   Testger¨che
                                                                u




                ...
Nächste SlideShare
Wird geladen in …5
×

Framework-Qualität: Tests als Gütesiegel

1.701 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.701
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
9
Aktionen
Geteilt
0
Downloads
7
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Framework-Qualität: Tests als Gütesiegel

  1. 1. Framework-Qualit¨t: Tests als a Gutesiegel ¨ Benjamin Eberlei SimpleThings GmbH IPC Spring, Mai 2009 B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 1 / 33
  2. 2. ¨ Uber Mich ¨ Uber mich Volkswirt PHP seit 2001 Software Entwickler bei SimpleThings GmbH Zend Framework Contributor B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 2 / 33
  3. 3. Warum Framework-Qualit¨t? a Warum sollte uns Framework-Qualit¨t interesieren? a Framework soll Gewinn und keine Last sein Echten Mehrwert f¨r Programmierer u schaffen Aber: Auch Frameworks haben Bugs! B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 3 / 33
  4. 4. Warum Framework-Qualit¨t? a Framework-Bugs 1. Bugs in fremden Code schwer zu finden 2. Framework-Code ist schwer zu debuggen 3. Komplexit¨t und Wartungsaufwand durch Userland a Fixes 4. K¨nnen Fertigstellung von End-Anwendungen o massiv verz¨gern o B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 4 / 33
  5. 5. Wie Framework Qualit¨t messen? a Wie Framework Qualit¨t messen? a 1. Einstellung zu Tests & Qualit¨tssicherung a 2. Große Zahl von Unittests 3. Wahl des Unit-Testing Frameworks 4. Hohe Code-Coverage der Tests 5. Tests als Dokumentation 6. Testing Bad-Practices B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 5 / 33
  6. 6. Einstellung zu Tests & Qualit¨tssicherung a Einstellung zu Tests & Qualit¨tssicherung a B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 6 / 33
  7. 7. Einstellung zu Tests & Qualit¨tssicherung a Zend Framework Zend Framework Jede neue Komponente muss mindestens 80% Code-Coverage haben F¨r jeden Bug mindestens 1 Regression-Test u Wird leider nicht von allen Komponenten-Maintainern eingehalten Tests werden h¨ufig erst nach der kompletten a Entwicklung und wenige Tage vor dem Release geschrieben Coverage f¨r manche Komponenten sinkt nach u Release mit der Zahl neuer Features B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 7 / 33
  8. 8. Einstellung zu Tests & Qualit¨tssicherung a eZ Components eZ Components Aufw¨ndige Design- und Konzeptionsphase, gefolgt a von Test-Driven Development F¨r Bugs existieren Regression-Tests u Ausgefallene Teststrategien Nur Release wenn alle Bugs gefixed sind B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 8 / 33
  9. 9. Einstellung zu Tests & Qualit¨tssicherung a Symfony Symfony Alle Komponenten weitestgehend gestestet Keine Regression-Tests f¨r Bugfixes - die u vorhandene Testsuite soll nur nicht fehlschlagen Nur Release wenn keine Tests fehlschlagen Nicht nur Unit-Tests sondern auch eine Test-Anwendung f¨r Integrationstests u B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 9 / 33
  10. 10. Einstellung zu Tests & Qualit¨tssicherung a CakePHP CakePHP Erst seit CakePHP 1.2.x uberhaupt Tests ¨ Viele Tests r¨ckwirkend auf existierenden Code u aufgesetzt Positiv: Seitdem Regressiontests f¨r behobene Bugs u B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 10 / 33
  11. 11. Große Zahl von Unittests Große Zahl von Unittests B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 11 / 33
  12. 12. Große Zahl von Unittests Große Zahl von Unittests Entwarnung: Alle großen Frameworks haben viele Unittests! Zend Framework: 6000-10000 Tests (Je nach aktivierten Optionen) eZ Components: 6583 Tests Symfony: 500 Testsuites CakePHP: 88 Testsuites mit 1274 Tests Viele andere bekanntere Frameworks haben eine große Zahl von Unittests, z.B. FLOW3, Doctrine, Agavi, SolarPHP B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 12 / 33
  13. 13. Wahl des Unit-Testing Frameworks Wahl des Unit-Testing Frameworks B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 13 / 33
  14. 14. Wahl des Unit-Testing Frameworks PHPUnit PHPUnit Integriert sich hervorragend in Continuous Integration Tools Zahlreiche Qualit¨ts-Reports und zeilenweise a Code-Coverage Verwendet von: Zend Framework, eZ Components (sowie Agavi, FLOW3, Doctrine 2, SolarPHP, u.v.m.) eZ Components leider mit einem unhandlichem eigenen Test-Runner, der Zugang zu neueren Features von PHPUnit blockiert B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 14 / 33
  15. 15. Wahl des Unit-Testing Frameworks Lime Lime Eigenbau f¨r das Symfony Framework u Nur fern verwandt mit xUnit Testing Frameworks Code-Coverage nur auf Klassen-Ebene Un¨bersichtliche prozedurale Test-Skripte u $t = new lime_test (2 , new li me_out put_co lor () ) ; $v = new sfValidatorPass () ; $t - > diag ( ’ -> clean () ’) ; $t - > is ( $v - > clean ( ’ ’) , ’ ’ , ’ -> clean () always returns the value unmodified ’) ; $t - > is ( $v - > clean ( null ) , null , ’ -> clean () always returns the value unmodified ’) ; sfValidatorPassTest.php, SVN Revision 9991 B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 15 / 33
  16. 16. Wahl des Unit-Testing Frameworks SimpleTest SimpleTest Wird verwendet von: CakePHP L¨uft ebenso wie Cake auch unter PHP4 a CakePHP mit eigenem unausgereiften Test-Runner im Web-Browser Nur Klassen/Datei basierte Test-Coverage B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 16 / 33
  17. 17. Hohe Code-Coverage der Tests Hohe Code-Coverage der Tests B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 17 / 33
  18. 18. Hohe Code-Coverage der Tests Hohe Code-Coverage der Tests Coverage ist Abh¨ngig von den installierten Extensions, a Datenbank- und Serviceverbindungen Zend Framework: Viele Komponenten mit mehr als 80%, einige auch mit mehr als 90% Symfony: Durchschnitt 76% (Doctrine und Propel Plugins fast ungetestet) eZ Components: Alle Komponenten mit mehr als 80-90% CakePHP: Funktioniert nicht f¨r alle u Komponenten (Fatal Errors, Keine Ergebnisse) Coverage aber im Bereich 70-90% B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 18 / 33
  19. 19. Wenig Code-Duplikation in Tests Wenig Code-Duplikation in Tests PHP Copy Paste Detector pear channel - discover pear . phpunit . de pear install PHPUnit / PHPCPD Test auf kleine Mengen an Copy Paste Code zur Fixturegenerierung oder Assertions: phpcpd -- min - lines 4 -- min - tokens 20 . B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 19 / 33
  20. 20. Wenig Code-Duplikation in Tests Wenig Code-Duplikation in Tests symfony: 1.48% Duplikate bei 18.823 Codezeilen. Zend Framework: 6.04% Duplikate bei 238.844 Codezeilen CakePHP: 10.02% Duplikate bei 74.015 Codezeilen eZ Components (ohne ezcWebdav): 12.39% Duplikate bei 168.321 Codezeilen B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 20 / 33
  21. 21. Subjektive Einsch¨tzung a Subjektive Einsch¨tzung a Einstellung Unit-Tests Testing-Framework Coverage Code-Duplikation B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 21 / 33
  22. 22. Tests als Dokumentation Tests als Dokumentation B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 22 / 33
  23. 23. Tests als Dokumentation Tests als Dokumentation Tests erlauben Verst¨ndnis der API eines a Frameworks Special Cases meist nur in Tests dokumentiert Schwer verst¨ndliche Tests sind Argument gegen a Framework B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 23 / 33
  24. 24. Tests als Dokumentation Obskure und Gigantische Tests Obskure Tests sind sehr komplex und unverst¨ndlich a Giant Tests sind sehr groß und daher unverst¨ndlich a Beispiel: CakePHP Model Test Beispiel: Zend Soap AutoDiscover Beispiel: Symfony Form Test B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 24 / 33
  25. 25. Testing Bad-Practices Testing Bad-Practices B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 25 / 33
  26. 26. Testing Bad-Practices Testger¨che u Integration-, Web-Surfer-, Slow-Test Zend Service Amazon OnlineTest public function setUp () { $this - > _amazon = new Z en d _ Se r v ic e _ Am a z on ( TESTS_ZEND_SERVICE_AMAZON_ONLINE_ACCESSKEYID ); $this - > _query = new Z e n d _ S e r v i c e _ A m a z o n _ Q u e r y ( TESTS_ZEND_SERVICE_AMAZON_ONLINE_ACCESSKEYID ); $this - > _ ht tp Cl ie nt Ad ap te r = new Z e n d _ H t t p _ C l i e n t _ A d a p t e r _ S o c k e t () ; $this - > _amazon - > getRestClient () -> getHttpClient () -> setAdapter ( $this - > _h ttp Cl ie nt Ad ap te r ) ; // terms of use compliance : no more than one query per second sleep (1) ; } B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 26 / 33
  27. 27. Testing Bad-Practices Testger¨che u Web-Surfer-, Assertionless Zend Service Amazon OnlineTest public function t e s t I t e m S e a r c h M u s i c M o z a r t () { $resultSet = $this - > _amazon - > itemSearch ( array ( ’ SearchIndex ’ = > ’ Music ’ , ’ Keywords ’ = > ’ Mozart ’ , ’ ResponseGroup ’ = > ’ Small , Tracks , Offers ’ )); foreach ( $resultSet as $item ) { $this - > assertTrue ( $item instanceof Z e n d _ S e r v i c e _ A m a z o n _ I t e m ); } } B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 27 / 33
  28. 28. Testing Bad-Practices Testger¨che u Global State Zend Controller Action Helper ViewRendererTest protected function setUp () { $this - > request = new Z e n d _ C o n t r o l l e r _ R e q u e s t _ H t t p () ; $this - > response = new Z e n d _ C o n t r o l l e r _ R e s p o n s e _ H t t p () ; $this - > front = Z e n d _ C o n t r o l l e r _ F r o n t :: getInstance () ; $this - > front - > resetInstance () ; $this - > front - > add Mo du le Di re ct or y ( $this - > somePath ) -> setRequest ( $this - > request ) -> setResponse ( $this - > response ) ; $this - > helper = new Z e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r _ V i e w R e n d e r e r () ; Z e n d _ C o n t r o l l e r _ A c t i o n _ H e l p e r B r o k e r :: addHelper ( $this - > helper ) ; } B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 28 / 33
  29. 29. Testing Bad-Practices Testger¨che u Fragile and Indirect Tests ezcMvcToolsConfigurableDispatcherTest function t e s t E x t e r n a l R e d i r e c t () { $config = new s im p l eC o n fi g u ra t i on () ; $config - > route = ’ IRController ’; $dispatcher = new e z c M v c C o n f i g u r a b l e D i s p a t c h e r ( $config ) ; $dispatcher - > run () ; self :: assertEquals ( quot; BODY : Name : name , Vars : array ([ CR ] quot; . quot; ’ nonRedirVar ’ = > 4 ,[ CR ] quot; . quot; ’ ReqRedirVar ’ = > 4 ,[ CR ]) quot; , $config - > store ); } B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 29 / 33
  30. 30. Testing Bad-Practices Testger¨che u Assertionless Zend Pdf DrawingTest public function testDrawing () { $pdf = new Zend_Pdf () ; // Etwa 150 Zeilen Bilder , Text usw . hinzufuegen $pdf - > save ( dirname ( __FILE__ ) . ’/ _files / output . pdf ’) ; unset ( $pdf ) ; $pdf1 = Zend_Pdf :: load ( dirname ( __FILE__ ) . ’/ _files / output . pdf ’) ; $this - > assertTrue ( $pdf1 instanceof Zend_Pdf ) ; unset ( $pdf1 ) ; unlink ( dirname ( __FILE__ ) . ’/ _files / output . pdf ’) ; } B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 30 / 33
  31. 31. Testing Bad-Practices Testger¨che u Erkenntnisse Vor der Nutzung von Framework Komponenten in die Tests schauen Eigene Tests f¨r Anforderungen schreiben und wenn u m¨glich zum Framework beisteuern o Bei kritischen Business-Anwendungen eines schlecht getesteten Frameworks nach Alternativen umsehen oder selber implementieren B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 31 / 33
  32. 32. Testing Bad-Practices Testger¨che u Attribution Snetterton Classic Car Racing, Martin Pettitt http://www.flickr.com/photos/mdpettitt/2659028559/ House No More, nukeit1 http://www.flickr.com/photos/nukeit1/33325525/ March of the Baby Turtles, clearlyambiguous http://www.flickr.com/photos/clearlyambiguous/48185613/ Cannon and Meade, unforth http://www.flickr.com/photos/unforth/3414535842 Swiss Knife, airosan http://www.flickr.com/photos/airosan/2232394342 Pile of Paper, pburghstever http://www.flickr.com/photos/pburghstever/3328140917 B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 32 / 33
  33. 33. Testing Bad-Practices Testger¨che u Thank You! B. Eberlei (SimpleThings GmbH) Framework-Qualit¨t a IPC Spring, Mai 2009 33 / 33

×