Professionelles Entwickeln mit PHP

Getestete und qualitativ hochwertige PHP-Anwendungen entwickeln

In agilen Teams und schnelllebigen Arbeitsumgebungen ist es eine Herausforderung für ständig funktionierende Software zu sorgen. Von Web-Applikations-Entwicklern wird erwartet, dass sie schnell neue Features entwickeln können und Fehler zeitnah beheben. Anschließend sollen diese Änderungen innerhalb von Minuten einem globalen Publikum zu Verfügung gestellt werden. Wie kann man das erreichen?

Kontinuierliches & automatisiertes Testen ist dabei essentiell für die Entwicklung moderner Software. Das reduziert die Anzahl von Fehlern in Software drastisch. Später im Entwicklungs-Prozess ist es viel aufwändiger und teurer einen Fehler zu beheben. Bei einem Bug der während der Anforderungs- oder Architektur-Phase eingeführt wird kostet die Behebung in Produktion schnell hundertmal so viel wie eine sofortige Behebung. Entsprechend müssen so viele Probleme wie möglich so früh wie möglich erkannt und behoben werden.

Continuous Integration bedeutet, dass die Software kontinuierlich überprüft wird ohne das der Entwickler dazu selbst handeln muss. Nach jedem Commit, nach jedem Push. Das gibt Entwicklern und Product Owner ein gutes Gefühl für die Stabilität der eigenen Software und das Wissen sie jederzeit releasen zu können.

Die Verwendung von Continuous Delivery Methoden wie Versionskonktrolle, Continuous Integration und Test-Automatisierung führen zu besserer IT-Performance. Kurz: Continuous Delivery senkt messbar den Schmerz beim Entwickeln und Team-Burnout.

In dieser Schulung lernen Sie die Tools kennen, die Sie und Ihr Team bei Continuous Delivery unterstützen. Und wie diese Tools bei der Entwicklung von Webanwendungen und -services mit PHP zusammenspielen und damit produktiver machen.

Trainer und Dozenten

Qafoo betreut Kunden, von kleinen Agenturen bis zu großen Konzernen, in der Umsetzung von Tests & Refactorings bis hin zu Continuous Delivery. Wir haben viele Jahre Erfahrung in der Umsetzung der verschiedenen Test-Strategien und deren effiziente Integration in den Arbeitsalltag.

Voraussetzungen

Der Kurs richtet sich an Programmierer, die bereits mit PHP vertraut sind und die Sprache als Entwicklungsbasis für den "täglichen Gebrauch" nutzen.

Der Kurs wird keine Grundlagen vermitteln, auch Kenntnisse der Objektorientierten Programmierung mit PHP werden vorausgesetzt. Die Verwendung von Versionskontrollsystemen sollte ebenfalls bekannt sein, ansonsten ist ein Kurs zu Subversion oder Git empfehlenswert.

Inhalt

Test-Strategien und PHPUnit

Wir beginnen mit einem Überblick über verschiedene Test-Strategien und setzen uns anschließend intensiv mit Unit-Tests in PHPUnit auseinander. Mit diesem Wissen wird neue selbstgeschriebene Software getestet.

  • Die Grundlagen von Unit-Tests mit PHPUnit erlernen
  • Test-Doubles und Integration-Tests erlernen
  • Tests für ein neues Projekt entwickeln

S.O.L.I.D., Clean Code

Nach dem Verstehen von Unit-Tests zeigt sich dass existierende Software oft nicht einfach mit Unit-Tests testbar ist weil sie nicht den Prinzipien des Objektorientierten Designs folgt. Daher schauen wir uns jetzt S.O.L.I.D. und Clean Code und die Ideen dahinter an. Wenn diese Prinzipien auf realen existierenden Code angewandt werden, realisieren die Entwickler schnell dass diese Art zu programmieren sie effektiver macht – insbesondere in Projekten mit langer Laufzeit. Der Workshop folgt dabei der folgenden Agenda:

  • Verstehen der Software-Design-Prinzipien
  • Gemeinsames Design einer Software-Komponente
  • Aufzeigen dass die Prinzipien zu testbarem Code führen

Funktionale Tests

Dann zeigen wir eine Alternative zu Unit-Tests auf: Funktionale Tests. Dabei werden Browser instrumentiert um das Frontend direkt zu testen. Dies ist einmal eine gute Grundlage um Geschäftsprozesse zu validieren. Aber auch eine gute Basis für die Refaktorisierung bestehender Applikationen.

  • Einführung von funktionalen Tests auf Basis von PHPUnit & Mink
  • Einführung von Behaviour Driven Development mit Behat
  • Entwicklung funktionaler Tests für eine bestehende Anwendung

Refaktorisieren

Bisher wurde im Verlaufe des Kurses gezeigt, wie saubere und testbare Software entwickelt werden kann. Doch in den seltensten Fällen wird Software vollständig neu entwickelt, sondern existierende Software wird modifiziert wird. Daher zeigen wir nun, wie wir Software so refaktorisieren können, dass diese den neuen Ansrprüchen genügt.

Mit Refaktorisieren ist die Technik gemeint, die internen Strukturen von Source-Code zu verbessern ohne das Verhalten der Software zu ändern. Wir können so Probleme beheben und Seiteneffekte ausräumen, während die Software weiter wie zuvor ihren Dienst verrichtet. Der positive Effekt sind einfachere Änderungen und entsprechend günstigere Weiterentwicklung der Software – und oft sogar schnellerer Code.

  • Einfache Refaktorisierungs-Techniken
  • Was sind die üblichen Probleme mit gewachsenem Code?
  • Welche Tools können uns die wichtigen und problematischen Stellen aufdecken?
  • Fortgeschrittene Refaktorisierungs-Techniken

Continuous Delivery

Continuous Delivery baut auf Continuous Integration auf und bedeutet, dass die Software regelmäßig automatisch oder halb-automatisch deployed wird. In vielen Szenarios ist es möglich, dass die Software mehrfach täglich oder sogar mehrfach pro Stunde live geht. Dafür müssen die in den letzten Tagen entwickelten Tests automatisch auf einem sogenannten Build-Server ausgeführt werden. Der von uns im Workshop nachvollzogene Weg ist:

  • Einrichten einer Build-Umgebung
  • Tests automatisiert ausführen
  • Verstehen und Umsetzen von Software-Migrationen
  • Integration der Software auf einem Build-Server
  • Deployments auslösen