Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Aktualisiert:
- Autor:
- Roland Golla
Was ist Patch Coverage?
Patch Coverage misst, wie viel Prozent der neu geschriebenen oder geänderten Code-Zeilen durch Tests abgedeckt sind. Im Gegensatz zur Project Coverage, die das gesamte Codebase bewertet, fokussiert Patch Coverage ausschließlich auf den Diff eines Pull Requests oder Commits. Das Ergebnis: Entwickler sehen sofort, ob ihre Änderungen getestet sind, unabhängig davon, wie viele Legacy-Zeilen noch ohne Tests existieren.
Viele PHP-Teams messen Code Coverage nur auf dem Gesamtprojekt und übersehen dabei, dass neue Features ungetestet in Production gehen. Patch Coverage löst genau dieses Problem: Sie prüft ausschließlich die Zeilen, die du gerade geändert hast. Das Ziel von 100% Patch Coverage ist realistischer als 100% Project Coverage und direkt erreichbar, ab dem nächsten Pull Request.
Tools wie PHPUnit in Kombination mit Xdebug oder PCOV generieren die Coverage-Reports. Codecov oder Scrutinizer lesen diese Reports aus und berechnen den Patch-Anteil automatisch im CI/CD-Workflow. Merges ohne ausreichende Testabdeckung können damit automatisch blockiert werden.
Lass uns sprechen
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Starten Sie Ihre Anfrage
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.
Anfrage-Konfiguration
Worauf liegt dein Fokus?
Wähle die Expertise, die dein Projekt jetzt am dringendsten benötigt.
PHPUnit und Xdebug: Coverage-Report generieren
Patch Coverage benötigt einen maschinenlesbaren Coverage-Report. PHPUnit unterstützt dafür mehrere Formate. Das Clover-Format (XML) ist am weitesten verbreitet und wird von Codecov, Scrutinizer und GitLab CI direkt unterstützt.
Für die Coverage-Erfassung ist Xdebug (Coverage-Modus) oder PCOV nötig. PCOV ist schneller, liefert aber nur Line Coverage. Xdebug liefert zusätzlich Branch- und Path-Coverage:
composer require --dev phpunit/phpunit ^13.0
composer require --dev pcov/clobber
# Coverage-Report als Clover-XML generieren:
vendor/bin/phpunit --coverage-clover coverage.xml
# Alternativ mit Xdebug:
XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-clover coverage.xml
Die phpunit.xml definiert, welche Dateien in die Coverage-Analyse einbezogen werden. Nur den eigenen Quellcode einschließen, nicht Vendor-Pakete:
<coverage>
<include>
<directory>src</directory>
</include>
<exclude>
<directory>vendor</directory>
<directory>tests</directory>
</exclude>
</coverage>
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.
Codecov in GitHub Actions integrieren
Codecov berechnet die Patch Coverage automatisch für jeden Pull Request und zeigt an, welche neu hinzugefügten Zeilen nicht durch Tests abgedeckt sind. Die Integration in GitHub Actions ist in wenigen Schritten erledigt:
name: PHPUnit mit Patch Coverage
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
coverage: xdebug
- run: composer install --no-interaction
- run: vendor/bin/phpunit --coverage-clover coverage.xml
- uses: codecov/codecov-action@v4
with:
files: ./coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
Nach dem ersten Upload zeigt Codecov im Pull Request automatisch drei Werte:
- Head Coverage: Gesamtabdeckung des aktuellen Branches
- Patch Coverage: Abdeckung der geänderten Zeilen
- Change: Differenz zur Base-Branch-Abdeckung
Mit einer codecov.yml lässt sich ein Mindest-Schwellenwert für Patch Coverage setzen. Unterschreitet ein PR diesen Wert, blockiert der Status-Check automatisch den Merge:
coverage:
status:
patch:
default:
target: 80%
threshold: 0%
Patch vs. Project Coverage: Die richtige Metrik im Legacy-Projekt
Legacy-PHP-Projekte haben oft eine Gesamt-Coverage von 20 bis 40 Prozent. Den Wert auf 80 Prozent zu heben würde Monate dauern und blockiert neue Features. Patch Coverage durchbricht dieses Dilemma: Statt das Erbe aufzuräumen, sicherst du ab sofort jede neue Zeile ab. In 6 bis 12 Monaten steigt die Project Coverage automatisch mit.
- Project Coverage: Gesamtanteil getesteter Zeilen im kompletten Codebase, sinnvoll als langfristiger Trend-Indikator
- Patch Coverage: Abdeckung nur der geänderten Zeilen, direkt steuerbar und im PR sichtbar
- Change: Differenz der Project Coverage zwischen Base- und Head-Branch, zeigt ob ein PR die Gesamtabdeckung verbessert oder verschlechtert
NCA konfiguriert eure CI/CD-Pipeline so, dass Merges ohne ausreichende Patch Coverage automatisch blockiert werden. Symfony, GitHub Actions, Codecov und GitLab CI aus einer Hand. Kein ungetesteter Code mehr in Production, ohne monatelange Vorarbeit an Legacy-Tests.
Coverage ist dabei nur ein Gate von mehreren. Wie die komplette Strecke aussieht, von der statischen Analyse über PHPUnit bis zur Preview URL pro Feature Branch, zeigt unsere CI CD Pipeline mit Docker und Staging. Den Weg dahin begleitet das PHP Consulting von NCA.
Patch Coverage: Fragen und Antworten
Die wichtigsten Fragen rund um Patch Coverage, PHPUnit-Konfiguration und CI/CD-Integration.
Was ist Patch Coverage und wie funktioniert sie 2026?
Patch Coverage misst den Anteil neu geänderter oder hinzugefügter Code-Zeilen, die durch automatisierte Tests abgedeckt sind. Tools wie Codecov vergleichen den Coverage-Report mit dem Git-Diff des Pull Requests und berechnen daraus den Patch-Anteil automatisch.
Was ist der Unterschied zwischen Patch Coverage und Project Coverage 2026?
Project Coverage misst die Gesamtabdeckung des kompletten Codebases. Patch Coverage misst nur die geänderten Zeilen eines Commits oder PRs. Für Legacy-Projekte ist Patch Coverage der pragmatischere Ansatz: 100% Patch Coverage ist sofort erreichbar, unabhängig vom Zustand des bestehenden Codes.
Welche Tools messen Patch Coverage in PHP-Projekten 2026?
Die gaängigsten Tools sind Codecov (SaaS, kostenlos für Open Source), Scrutinizer CI und GitLab CI mit integrierter Coverage-Auswertung. Alle drei unterstützen das Clover-XML-Format von PHPUnit und berechnen Patch Coverage automatisch pro Pull Request.
Wie richte ich Patch Coverage mit PHPUnit und GitHub Actions 2026 ein?
PHPUnit mit --coverage-clover coverage.xml ausführen, dann den Codecov Action in der GitHub Actions Workflow-Datei einbinden. Codecov liest das XML aus, vergleicht es mit dem PR-Diff und zeigt Patch Coverage direkt im Pull Request an. Das Setup dauert unter einer Stunde.
Ist 100% Patch Coverage realistisch 2026?
Ja, 100% Patch Coverage ist deutlich realistischer als 100% Project Coverage. Jeder neu geschriebene Code kann sofort getestet werden. Das Ziel: Jede Zeile, die ich schreibe, wird auch getestet. Legacy-Zeilen bleiben zunächst ausgeklammert und werden schrittweise nachgerüstet.
Kann Patch Coverage Merges automatisch blockieren?
Ja. In Codecov lässt sich ein Mindest-Schwellenwert definieren (z.B. 80%). Unterschreitet ein Pull Request diesen Wert, schlägt der Status-Check fehl und der Merge wird blockiert. Das funktioniert in GitHub Actions, GitLab CI und Bitbucket Pipelines.
Welche PHP-Extension wird für Coverage-Reports benötigt?
PHPUnit unterstützt zwei Extensions: PCOV (nur Line Coverage, schneller) und Xdebug im Coverage-Modus (auch Branch- und Path-Coverage). Für Patch Coverage in CI/CD-Pipelines ist PCOV ausreichend und empfohlen, da es signifikant schneller ist als Xdebug.
Wie konfiguriere ich PHPUnit für Patch Coverage in phpunit.xml?
In der phpunit.xml das source-Element mit include/exclude konfigurieren: nur den src-Ordner einschließen, vendor und tests ausschließen. So werden ausschließlich eigene Quellcode-Zeilen in die Coverage-Analyse einbezogen und das Ergebnis ist aussagekräftig.
Was kostet Codecov für PHP-Projekte 2026?
Codecov ist für Open-Source-Projekte (public Repositories) kostenlos. Für private Repositories gibt es einen kostenlosen Plan mit eingeschränkten Features sowie bezahlte Pläne ab ca. 10 USD pro Monat. Alternativ bietet GitLab CI eine eingebaute Coverage-Analyse ohne zusätzliche Kosten.
Kann NCA die Patch Coverage Pipeline für unser Team einrichten?
Ja. NCA richtet die komplette Pipeline ein: PHPUnit-Konfiguration, Xdebug oder PCOV, Codecov-Integration und Merge-Blockierung bei unzureichender Abdeckung. Das funktioniert für Symfony, Laravel und Sulu CMS. Kontakt: roland@nevercodealone.de oder +49 176 24747727.
Verbessert Patch Coverage automatisch die Project Coverage?
Ja, indirekt. Wenn jeder neue Pull Request 100% Patch Coverage hat, steigt die Project Coverage kontinuierlich an. Nach 6 bis 12 Monaten konsequenter Anwendung verbessern sich auch Legacy-Bereiche, weil Refactorings und Fehlerbehebungen neue Tests mitbringen.
Gibt es Alternativen zu Codecov für Patch Coverage 2026?
Ja: Scrutinizer CI (besonders für PHP optimiert), Coveralls (kostenlos für Open Source), CodeClimate und GitLab CI mit integrierter Coverage-Auswertung. Für DSGVO-konforme Setups empfiehlt sich eine selbstgehostete Lösung oder ein europäischer Anbieter.