Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Aktualisiert:
- Autor:
- Roland Golla
Was PHP Quality Gates sind
PHP Quality Gates sind automatische Prüfungen in der CI Pipeline, die jeder Commit bestehen muss, bevor er gemergt wird. Typische Gates sind statische Analyse mit PHPStan, ein Rector Trockenlauf, PHPUnit Tests mit Coverage und E2E Tests mit Cypress.
Fällt ein Gate durch, wird der Merge blockiert. Das klingt streng, macht Refactoring aber erst sicher. Wer Code umbaut, braucht eine Instanz, die sofort meldet, wenn sich Verhalten oder Typen ungewollt ändern. Die Pipeline übernimmt diese Rolle bei jedem Push, ohne müde zu werden und ohne Ausnahmen für Freitagnachmittag. Diese Seite zeigt, welche Gates in welcher Reihenfolge sinnvoll sind und wie sie in GitHub Actions und GitLab CI aussehen.
Quality Gates mit NCA, schnelle Hilfe vom Experten
Bei uns entscheidet die Pipeline über jeden Livegang. Unsere Symfony und Sulu Plattform läuft durch PHPStan, Psalm, Rector und PHPUnit, die Oberfläche durch Cypress mit Cypress Cloud. Wir nutzen GitHub Actions und GitLab CI täglich und richten beide in Kundenprojekten ein. Roland Golla ist Cypress Ambassador und hat mit dem NCA TESTIFY Plugin einen Basistest für Websites gebaut, der mit einer Zeile in der Pipeline läuft.
Im PHP Consulting bauen wir eure Pipeline Schritt für Schritt auf. Beim PHP Refactoring sorgen die Gates dafür, dass jeder Umbau prüfbar bleibt. Für die Oberfläche begleiten wir euch im Bereich Cypress Testing. Die Werkzeuge stehen im Glossar zu PHPStan, PHPUnit und GrumPHP.
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
Warum Refactoring ohne Gates zum Glücksspiel wird
Refactoring heißt, Struktur zu ändern und Verhalten zu behalten. Ob das gelingt, weiß man nur, wenn etwas prüft. Ohne Pipeline hängt die Qualität davon ab, ob jemand daran denkt, lokal die Tests laufen zu lassen. Unter Zeitdruck passiert genau das nicht.
Quality Gates machen aus guten Absichten feste Regeln. Sie gelten für alle gleich, für den Senior Entwickler genauso wie für den Code, den ein KI Agent geschrieben hat. Und sie geben dem Team Mut. Wer weiß, dass die Pipeline Fehler sofort meldet, traut sich auch an alte Klassen, die seit Jahren niemand anfassen wollte.
Wichtig ist das Zusammenspiel. Kein einzelnes Werkzeug fängt alle Fehler. Statische Analyse findet Typfehler, Tests finden falsches Verhalten, E2E Tests finden kaputte Abläufe in der Oberfläche. Erst die Kombination ergibt ein Netz, durch das kaum noch etwas fällt.
Die richtige Reihenfolge der Gates
Gute Pipelines prüfen zuerst das Schnelle und Billige und erst danach das Langsame und Teure. Fällt die Syntaxprüfung nach Sekunden durch, muss niemand zehn Minuten auf E2E Tests warten. Die Tabelle zeigt die Reihenfolge, die wir in PHP Projekten einsetzen.
Quality Gates für PHP Projekte in der Pipeline
Quality Gates in GitHub Actions
In GitHub Actions legt ihr die Gates als Schritte in einem Workflow an. Jeder Schritt, der fehlschlägt, stoppt den Lauf. Mit einer Branch Protection Regel blockiert der rote Lauf den Merge des Pull Requests.
name: quality-gates
on: [push, pull_request]
jobs:
php:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
coverage: pcov
- run: composer install --no-progress
- run: vendor/bin/parallel-lint src tests
- run: vendor/bin/ecs check
- run: vendor/bin/phpstan analyse --no-progress --error-format=github
- run: vendor/bin/rector --dry-run
- run: vendor/bin/phpunit --coverage-clover coverage.xml
Die Cypress Tests laufen am besten in einem eigenen Job, der erst startet, wenn die schnellen Gates grün sind. Mit Cypress Cloud seht ihr Videos, Screenshots und instabile Tests über viele Läufe hinweg.
npx cypress run --record --key $CYPRESS_RECORD_KEY
Quality Gates in GitLab CI
In GitLab CI ordnet ihr die Gates in Stages. Alle Jobs einer Stage laufen parallel, die nächste Stage startet erst, wenn die vorige grün ist. So bekommt ihr schnelles Feedback und spart Rechenzeit.
stages:
- analyse
- test
default:
image: php:8.4
before_script:
- composer install --no-progress
phpstan:
stage: analyse
script:
- vendor/bin/phpstan analyse --no-progress --error-format=gitlab > phpstan.json
artifacts:
reports:
codequality: phpstan.json
rector:
stage: analyse
script:
- vendor/bin/rector --dry-run
phpunit:
stage: test
script:
- vendor/bin/phpunit
Das GitLab Format von PHPStan schreibt einen Code Quality Report. Die Meldungen erscheinen dadurch direkt im Merge Request. Im echten Projekt braucht das Image noch Composer und die passenden PHP Erweiterungen, die ihr am besten in einem eigenen Docker Image vorbereitet.
Lokal prüfen und Coverage richtig messen
Die Pipeline ist die letzte Schranke, nicht die erste. Schneller ist es, wenn Fehler gar nicht erst gepusht werden. GrumPHP hängt sich als Git Hook vor jeden Commit und führt die schnellen Prüfungen lokal aus. Die langsamen Tests bleiben in der Pipeline.
Bei Legacy Projekten ist die Gesamtabdeckung oft niedrig und lässt sich nicht über Nacht heben. Eine feste Grenze für die Gesamtabdeckung würde jeden Merge blockieren. Besser ist Patch Coverage: Sie misst nur, ob die neuen und geänderten Zeilen durch Tests abgedeckt sind. So wird jeder Pull Request ein Stück besser, ohne dass das Team an den Altlasten scheitert.
Wer wissen will, ob die Tests auch wirklich etwas prüfen, ergänzt Mutation Testing mit Infection. Es verändert den Code gezielt und schaut, ob die Tests das bemerken. Weil es langsam ist, läuft es meist nachts oder nur für geänderte Dateien.
Warum KI Code die Gates noch dringender braucht
KI Coding Agents erzeugen Code schneller, als ein Mensch ihn lesen kann. Das ist ihre Stärke und gleichzeitig das Risiko. Ein Agent kann Logik beim Umbauen vereinfachen, Typen aufweichen oder Fehlermeldungen mit Ignore Kommentaren zum Schweigen bringen. Im Diff fällt das zwischen hundert Zeilen kaum auf.
Die Pipeline schaut sich jede Zeile an, egal wer sie geschrieben hat. Deshalb gilt bei uns die Reihenfolge: erst Quality Gates, dann KI im Alltag. Ohne grüne Pipeline gibt es keinen Agenten im Repository. Mit ihr wird KI zu einem echten Beschleuniger, weil jede Änderung sofort gegen Tests und statische Analyse läuft.
Ein zusätzliches Gate lohnt sich für KI Code besonders: eine Regel, die neue Ignore Kommentare und Einträge in der Baseline meldet. So fällt sofort auf, wenn ein Fehler versteckt statt behoben wurde. Mehr dazu beschreiben wir im Vibe Coding Consulting und beim AI Code Refactoring.
No single technique is sufficient.
Patch Coverage: PHP Tests im CI/CD richtig messen 2026
Patch Coverage misst ob neue Code-Zeilen durch Tests abgedeckt sind. So richtest du PHPUnit, Xdebug und Codecov in deiner CI/CD-Pipeline ein.
Mehr erfahrenDie NCA Erfahrung mit Pipelines
Wir bauen Pipelines für PHP Projekte seit vielen Jahren und betreiben sie für unsere eigene Plattform täglich. Die Bausteine findet ihr im Glossar.
Syntax prüft PHP Parallel Lint, den Stil Easy Coding Standard und der PHP Codesniffer. Statische Analyse läuft mit PHPStan und Psalm, Architekturregeln mit Deptrac. Modernisierung prüft Rector PHP im Trockenlauf. Tests laufen mit PHPUnit, parallel mit Paratest, gemessen über Patch Coverage und hinterfragt durch das Infection Framework. Testberichte macht otr-report lesbar. Lokal fängt GrumPHP Fehler vor dem Commit ab, Sicherheitslücken in Abhängigkeiten meldet Composer Audit. Ausgeliefert wird mit dem PHP Deployer.
Erreichen Sie unsere PHP Consultant Spezialisten
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
Häufige Fragen zu PHP Quality Gates
Was Teams beim Aufbau einer Pipeline für PHP Projekte am häufigsten fragen.
Statische Analyse mit PHPStan und PHPUnit Tests für die wichtigsten Abläufe. Beides sollte bei jedem Pull Request laufen und den Merge blockieren, wenn es rot ist. Danach lohnen sich ein Rector Trockenlauf, Patch Coverage und E2E Tests mit Cypress für die kritischen Wege durch die Oberfläche.
Beide eignen sich gut für PHP Quality Gates. Entscheidend ist, wo euer Code liegt. GitHub Actions punktet mit vielen fertigen Actions, GitLab CI mit Stages, Code Quality Reports und guter Eignung für selbst betriebene Instanzen. Die Gates selbst sind in beiden Systemen dieselben Befehle.
Vom Schnellen zum Langsamen. Zuerst Syntax und Code Stil, dann statische Analyse und Rector Trockenlauf, danach Unit und Functional Tests, zum Schluss E2E Tests. So scheitert ein Fehler früh und billig, und niemand wartet auf lange Testläufe für Code, der ohnehin nicht durchkommt.
Mit Baseline und Patch Coverage. Die PHPStan Baseline friert alte Fehler ein, Patch Coverage prüft nur neue und geänderte Zeilen. So wird die Pipeline sofort grün und jeder Pull Request macht den Code etwas besser. Kritische Bereiche sichert ihr zusätzlich mit Characterization Tests ab.
Sie brauchen dieselben Gates, nur konsequenter. Ein zusätzlicher Check auf neue Ignore Kommentare und wachsende Baseline Einträge lohnt sich, weil Agents Fehler gern verstecken statt beheben. Ohne grüne Pipeline sollte kein Coding Agent im Repository arbeiten.
Der Trockenlauf meldet Code, der noch nicht den vereinbarten Regeln entspricht, ohne etwas zu ändern. Fällt er rot aus, hat jemand Code eingecheckt, den Rector umbauen würde. So bleibt der Modernisierungsstand stabil und alte Muster schleichen sich nicht wieder ein.
Patch Coverage misst, wie viele der neuen oder geänderten Zeilen eines Pull Requests durch Tests abgedeckt sind. Anders als die Gesamtabdeckung ist sie auch in Legacy Projekten erreichbar. Jede Änderung muss getestet sein, ohne dass das Team vorher den ganzen Altbestand testen muss.
Die wichtigsten schon. Login, Checkout oder zentrale Formulare sollten bei jedem Pull Request laufen. Lange Suiten lassen sich parallelisieren oder nachts komplett ausführen. Cypress Cloud zeigt Videos, Screenshots und instabile Tests, damit Fehler schnell nachvollziehbar sind.
Die schnellen Gates sollten in wenigen Minuten durch sein, damit Entwickler im Fluss bleiben. Als Richtwert gilt oft eine Grenze von etwa zehn Minuten für den Hauptlauf. Langsame Prüfungen wie Mutation Testing oder vollständige E2E Suiten laufen in eigenen Jobs oder nachts.
GrumPHP prüft vor jedem Commit lokal und fängt Fehler ab, bevor sie gepusht werden. Das spart Pipeline Läufe und Wartezeit. Die Pipeline bleibt trotzdem nötig, weil sich lokale Hooks umgehen lassen und weil dort auch die langsamen Tests laufen.
Schrittweise. Zuerst die Gates, die sofort grün sind, dann mit Baseline und Patch Coverage die strengeren. Jedes neue Gate wird vorher im Team besprochen. So entsteht Vertrauen in die Pipeline, und niemand empfindet sie als Hindernis.
Wir richten die Gates direkt in eurem Repository ein, in GitHub Actions oder GitLab CI, und bringen dem Team bei, damit zu arbeiten. Am Anfang steht ein kostenloses Kennenlernen. Danach schätzen wir den Aufwand und rechnen transparent nach Minuten ab, ohne Pakete und ohne Mindestlaufzeit.