PHP- QA -Tools

2,562 views

Published on

Präsentation auf der PHP-Usergroup Hamburg. Differenzierung von QA und QM, Tipps für PHPUnit, Nutzen von Build Skripten, Ant, Diverse Tools.

http://www.meetup.com/phpughh/events/64048332/

Published in: Technology
  • Be the first to comment

PHP- QA -Tools

  1. 1. PHP – QA - Toolsv13.06.2012; Melwin Meyer; Präsentation - PHP-Usergroup Hamburg
  2. 2. HalloKurz etwas über mich:• Melwin Meyer• aufgewachsen in Bochum• lebe in Hamburg• Softwareentwickler mit Schwerpunkt Medieninf.• arbeite bei der mindworks GmbH• war lange Zeit bei Gruner + Jahr im Qualitätsmanagement14. Juni 2012 Seite 2
  3. 3. ÜberblickPräsentationsüberblick• QA vs. QM• Tools• PHP Unit Tipps• Automatisierung• CI-Server Tipps• Projekt Qualitätsroadmap14. Juni 2012 Seite 3
  4. 4. Aufgaben QAAufgaben QA (quality assurance)• Schreiben von Unit Tests• Reinhaltung der Code-Formatierung und Struktur• Schreiben von Dokumentation• Durchführung von Code Reviews• Kontinuierliche Akzeptanztests14. Juni 2012 Seite 4
  5. 5. Aufgaben QMAufgaben QM (quality management)• Definieren und Evaluieren von QA Werkzeugen und Aufgaben• Tracken und Auswerten der Qualität• Aufsetzen und Warten von CI/CD Systemen• Akzeptanztests im Leerlauf14. Juni 2012 Seite 5
  6. 6. Werkzeuge (Auswahl)Von uns genutzte Tools im PHP-Umfeld• Jenkins (CI-Server)• MediaWiki (Doku Space)• Clover (Auswertung von UnitTests • (Coverage und Metriken)• PHP Unit• PHP Depend (PHP MessDetector)• PHP CPD• APIGen• CodeSniffer• Symfony 2 Browser (Frontend Tests)14. Juni 2012 Seite 6
  7. 7. PHP UnitPHP Unit• White-Box-Test• Was wird getestet? • Nur eigener Code • Keine Vendors• Welche Testentwicklungen können angewandt werden? • Test driven • Test last • Und Test during14. Juni 2012 Seite 7
  8. 8. PHP UnitTipps für den EinsatzAusführung• XML-Configuration (Test Setup) • Bootstrap • In- und Excludes von Tests • Konstanten • PHP Environment• --filterAnnotations• @covers • nur auf Klassenebene • in der Konfiguration: forceCoversAnnotation=" true"• @depends14. Juni 2012 Seite 8
  9. 9. PHP UnitTipps für den EinsatzAuch in Unit Tests Vererbung nutzen• extends BaseUnitTestSetup• function setUp()• zentrale Objekte erzeugen• Fixtures ladenTearDown• function tearDown()• Fixtures wieder entfernen14. Juni 2012 Seite 9
  10. 10. PHP UnitTipps für den EinsatzAls nicht fertig implementiert Markieren• $this->markTestIncomplete(Testen auf XYZ);• findet Verwendung bei Test First oder Test DuringAls übersprungen Markieren• $this->markTestSkipped (Datenbank nicht verbunden);• den eigentlichen Unit Test trifft keine Schuld.Test Listener• Start, Ende, Error, Incomplete, Skipped• Registrieren über XML-Config• Z.B. zum Zählen von API Calls14. Juni 2012 Seite 10
  11. 11. PHP UnitTipps für den EinsatzExceptions prüfen• @expectedException• $this->setExpectedException(RunetimeException);• alternativ für mehrere Exceptions ein TryCatch Konstrukt verwenden14. Juni 2012 Seite 11
  12. 12. Automatisierung mit Build SkripteVorteile von Build Skripten• one click Installation• one click Testing• dokumentiert Test und Installationsabläufe• leichte Einbindung in CI-Server• keine langen Konsolen-Kommandos • Es werden keine Tests vergessen • Anstatt "phpunit --configuration=... --d=memory... --coverage-html= ... usw." nur "ant –f unitTest.xml"14. Juni 2012 Seite 12
  13. 13. Automatisierung mit Build SkripteEine Auswahl• In der PHP-Welt ist ANT, PHING, MVN und das klassische Shell Script am weitesten verbreitet.• wir präferieren ANT • Sprachenunabhängig • kann viel nützliches • gut lesbar • einfach zu erlernen • und erweiterbar14. Juni 2012 Seite 13
  14. 14. Automatisierung mit ANTStruktur (Muster)/build.xml/unit-test.xml/ui-test.xml/testing/phpUnit.xml/testing/selenium.xml/testing/phpDepend.xml/testing/codeSniffer.xml/integration/install.xml/integration/database.xml/deployment/deploy.xml• bei kleinen Projekten genügt auch ein einziges Ant Skript14. Juni 2012 Seite 14
  15. 15. Automatisierung mit ANTMögliche Anweisungen• Dateien: Löschen, Erstellen, Rechte ändern• Befehle ausführen• usw…• (Beispiel)14. Juni 2012 Seite 15
  16. 16. CI ServerTipps für den CI-Server• Build Skripte verwenden!• E-Mail-Benachrichtigungen einrichten• Artefakte erreichbar machen • Zum Beispiel um immer die aktuelle API-Referenz zu erhalten• Build Trigger durchdenken • Standard ist bei Commit • Bei API, Last oder Security Tests ist ein Rhythmus sinnvoll • Test Monitoring• Wallboard für die Überwachung und Motivation14. Juni 2012 Seite 16
  17. 17. Qualitätsroadmap1. Arbeiten mit Versionsverwaltungssystem > Svn, Git2. Entwickeln von PHP Unit Tests (lokales Testen) > PHPUnit3. regelmäßiges durchführen von Code Reviews > GitHub, Crucible4. regelmäßiges durchführen von Wetware Tests (Browser oder CLI)5. Schreiben von outsource Dokumentation > MediaWiki, Confluence6. Definieren von Coding Standards7. Einrichten einer CI-Umgebung > Jenkins, Bamboo, Sismo, Xinc8. Quality - Monitoring (CI-Wallboard, E-Mails) > Sonar, Jenkins Wall Display, (Div. Hardware Gadgets)9. kontinuierliches ausführen von Unit Tests14. Juni 2012 Seite 17
  18. 18. Qualitätsroadmap10. kontinuierliches generieren der Code-Dokumentation > ApiGen, DocBlox11. Anbindung von div. weiteren Tools wie PHPMD oder CodeSniffer > PHPMD, PHPCPD, PHPCodeSniffer, PHPLint, LiveTest12. Continius Deployment (Integrations Tests), ist für folgende notwendig. > BuildSkripte13. kontinuierliche JavaScript Tests > JsTestDriver, Jasmine, Sinon, JsUnit14. kontinuierliche Frontend Tests (Functional Tests) > WebDriver, Selenium, Windmill, Watir, sahi, WET15. kontinuierliche Security Tests > w3af, burp, metasploit16. kontinuierliche Last Tests > JMeter, Pylot, Apache AB17. automatische Prüfung von Validität > LiveTest + w3af18. Usability Tests > ClickHeat, SMT, Google Analytics19. ...to infinity and beyond… Buzz Lightyear14. Juni 2012 Seite 18
  19. 19. wwwPHP Unit: https://github.com/sebastianbergmann/phpunitPHP CPD: https://github.com/sebastianbergmann/phpcpdPHP MD: http://phpmd.orgPHP Depend: http://pdepend.orgPHP CodeSniffer: pear.php.net/PHP_CodeSniffer• CodeSniffer SF2 Standard: https://github.com/opensky/Symfony2-coding-standardJenkins: jenkins-ci.orgApigen: apigen.orgANT: ant.apache.org14. Juni 2012 Seite 19
  20. 20. Fragen ? Diskussionsrunde!14. Juni 2012 Seite 20

×