Dieses Bild zeigt eine moderne, grafische Collage, in der stilisierte Hände abgebildet sind, die mehrere Glühbirnen halten oder weiterreichen. Die Glühbirnen stehen symbolisch für Ideen und Innovationen, wobei ihre gelbe Farbe sofort ins Auge fällt und einen positiven, kreativen Eindruck vermittelt.

Dieser Artikel basiert auf einem Vortrag, den ich heute auf der International PHP Conference in München zum ersten Mal gehalten habe.

Die Softwareentwicklung durchläuft eine kontinuierliche Evolution. Während sich die Programmiersprachen technisch weiterentwickeln, bleiben die fundamentalen Prinzipien guter Softwareentwicklung konstant: sauberer, gut dokumentierter und getesteter Code. PHP als eine der wichtigsten Sprachen des modernen Webs hat in den letzten 30 Jahren eine bemerkenswerte Entwicklung durchlaufen: von Rasmus Lerdorfs ursprünglich einfachen CGI-Skripten zu einer modernen, leistungsstarken Sprache, die das Rückgrat des modernen Internets bildet.

Dokumentation

Dokumentation hat oft den Ruf, langweilig und staubtrocken zu sein. In einem meiner ersten Jobs, in dem ich für PHP-Programmierung bezahlt wurde, wurde tatsächlich viel dokumentiert: ausgedruckt, abgeheftet und anschließend nie wieder gelesen. Das war natürlich Unsinn.

Eine gute, lebendige und gepflegte Dokumentation zu zentralen Aspekten wie Architektur, Design und Qualitätszielen war schon immer sinnvoll, da sie den Projektbeteiligten Orientierung gibt. Heute ist sie wichtiger denn je, denn neben Menschen können auch KI-basierte Coding Agents sie als Wissensbasis nutzen.

Architecture Decision Records (ADRs) dokumentieren wichtige Architekturentscheidungen mit ihrer Begründung und den erwarteten Konsequenzen. Diese transparente Dokumentation ermöglicht es Teams, Entscheidungen nachzuvollziehen und bei Bedarf fundiert zu revidieren. Parallel dazu erfassen Technical Debt Records bewusst eingegangene technische Kompromisse und deren geplante Auflösung.

Quality Goals definieren messbare Qualitätsstandards für das gesamte Projekt. Sie schaffen Klarheit über Erwartungen und bilden die Basis für objektive Qualitätsbewertungen. Diese dokumentierten Standards sind besonders wichtig in Zeiten von KI-unterstützter Entwicklung, da sie als Leitlinien für automatisierte Codegenerierung dienen genutzt werden können.

Coding Guidelines

Bei Coding Guidelines geht es nicht primär um Formatierung: diese kann und sollte durch Werkzeuge wie PHP-CS-Fixer automatisiert werden. Der wahre Wert von Coding Guidelines liegt in der Dokumentation von Arbeitsweisen und Prinzipien, auf die sich das gesamte Team geeinigt hat. Kann sich ein Team nicht auf einheitliche Standards einigen, deutet das auf tieferliegende Kommunikationsprobleme hin.

Beispiele für sinnvolle Coding Guidelines:

  • Wir nutzen in diesem Projekt testgetriebene Entwicklung
  • Testabdeckung (Code Coverage) sollte erhalten oder verbessert werden
  • Eine Klasse muss entweder abstract oder final sein
  • Wir bevorzugen Immutability gegenüber Mutability
  • Wir bevorzugen Listen anstelle von Arrays

Diese Coding Guidelines schaffen ein gemeinsames Verständnis und reduzieren Reibungsverluste in der Teamarbeit.

Tests

PHPStan hat sich zum de-facto Standard für statische Codeanalyse in PHP entwickelt. Das Werkzeug analysiert Code ohne dessen Ausführung und identifiziert potenzielle Probleme bereits in frühen Entwicklungsphasen. PHPStan punktet besonders durch sein umfangreiches Ökosystem an Plugins und Erweiterungen. Für praktisch jedes populäre PHP-Framework existieren spezialisierte Erweiterungen, die Framework-spezifische Patterns verstehen.

Die Konfiguration erfolgt über verschiedene Level von 0 bis 10, was eine schrittweise Verschärfung der Analyse ermöglicht. Das ist besonders hilfreich bei der Integration in bestehende Projekte. Diese Flexibilität macht PHPStan auch und gerade zu einem wertvollen Werkzeug für Teams, die Legacy-Code modernisieren möchten.

PHPUnit ist und bleibt das führende Werkzeug für das automatisierte Testen von PHP-basierter Software. Heutzutage gilt es als unprofessionell, auf automatisierte Tests mit PHPUnit (oder einem anderen Framework für Testautomation) zu verzichten.

Mutation Testing kombiniert PHPStan und PHPUnit, um Tests zu testen. Hierzu werden kleine Mutationen in den Code injiziert, was zu fehlschlagenden Tests führen soll. Bleiben Mutationen unentdeckt, zeigt das Lücken in der Testsuite auf, die zumindest von der zeilenbasierten Code-Coverage nicht aufgedeckt werden können.

KI-Unterstützung

Der Einsatz von künstlicher Intelligenz führt derzeit in vielen Bereichen der Arbeitswelt zu einem tiefgreifenden Wandel: die Softwareentwicklung bildet dabei keine Ausnahme. Ausführlich habe ich darüber in diesem Artikel geschrieben.

Die praktische Erfahrung zeigt: Eine KI-unterstützte Entwicklung funktioniert nur dann gut, wenn das Projekt einen hohen Automationsgrad aufweist, eine umfassende Testabdeckung gewährleistet ist und zentrale Aspekte wie Architektur, Design und Qualitätsziele dokumentiert sind. Diese Kombination aus Wissensbasis und qualitätssichernden Maßnahmen erleichtert die Arbeit der Menschen im Projekt und macht sie für die Maschine überhaupt erst möglich:

  • Testgetriebene Entwicklung: Menschen schreiben die Tests, Coding Agent generiert den Produktivcode
  • Hohe Testabdeckung: Automatisierte Validierung der generierten Lösungen
  • Klare Richtlinien: Dokumentierte Standards für Code-Qualität und -Stil
  • Robuste Automatisierung: CI/CD-Pipelines für kontinuierliche Integration

In der testgetriebenen Entwicklung mit KI-Unterstützung schreiben ausschließlich Menschen die Tests, während der Coding Agent den Produktivcode generiert. Dieser Ansatz gewährleistet, dass die fachlichen Anforderungen korrekt verstanden und in aussagekräftige Tests umgesetzt werden, während die KI sich auf die technische Implementierung konzentriert.

Fazit

Moderne PHP-Entwicklung bedeutet nicht, den neuesten Trends blind zu folgen, sondern bewährte Prinzipien mit modernen Werkzeugen zu kombinieren. Wichtige Säulen einer nachhaltigen Entwicklungsstrategie sind Dokumentation und Coding Guidelines, statische Codeanalyse und automatisierte Tests. Eine solche Strategie stellt sowohl die technische Exzellenz als auch die menschliche Zusammenarbeit in den Mittelpunkt. Aufbauend auf diesen Säulen können KI-unterstützte Werkzeuge hilfreich sein, sofern sie von einem Profi bedient werden.