NCA Social Media
Aktualisiert:
Autor:
Roland Golla
Grüne Isometrie mit Frau, Lupe und Roboter beim AI Code Review

Was AI Code Review für PHP Projekte bedeutet

AI Code Review für PHP Projekte prüft Code, den ein KI Agent geschrieben hat, gegen die Fachlogik, die Sicherheitsregeln und die Architektur eures Projekts. Der Code läuft, PHPStan ist grün und die Tests bestehen, und trotzdem kann er fachlich falsch sein.
Genau das macht das Review so schwer. Ein Agent schreibt in Minuten, was ein Mensch in Stunden prüft. Sebastian Bergmann, der Entwickler von PHPUnit, beschreibt diese Schieflage in seinem Artikel Schneller als Verstehen. Code, der richtig aussieht, verführt dazu, ihn nicht mehr kritisch zu lesen.
Patrick Schnell zeigt in seinem Artikel auf Developer World fünf typische Fehlermuster aus dem .NET Umfeld. Hier übertragen wir sie auf PHP und Symfony. Ihr seht, welches Quality Gate welches Muster abfängt und wo im Review ein Mensch mit Fachwissen gebraucht wird.
Inhalt
NCA KI Workshop für Developer

Agentic Coding im Team, nicht nur im Glossar

Ein Tag inhouse mit Benjamin Klein für Developer, Tester und Admins. Context Engineering, Harness, ADRs und zwei Hands on Blöcke mit KI Agenten in eurem Setup.

  1. 1
    Kostenloses Vorgespräch
    Stand, Rollen und Ziele klären
  2. 2
    Workshoptag bei euch
    Praxis am Vormittag, Hands on danach
  3. 3
    Praxistag optional
    Agenten im eigenen Projekt
Benjamin Klein
Benjamin Klein
Senior Consultant
Zum Workshop für Developer arrow_forward

AI Code Review mit NCA richtig einordnen

Bei Never Code Alone arbeiten wir täglich mit PHPStan, Psalm, Rector und PHPUnit, im Frontend mit Cypress. KI Code entsteht bei uns mit OpenCode und Open Weight Modellen. Roland Golla ist Cypress Ambassador und seit über 20 Jahren auf Testing und Refactoring spezialisiert. Wir kennen beide Seiten. Wir wissen, wie schnell ein Agent liefert und an welchen Stellen sein Code im Review durchrutscht.
Den Rahmen setzt unser PHP Consulting. Welche Regeln ein Agent vor dem ersten Commit kennen muss, steht in den NCA PHP AI Coding Guidelines. Gewachsene Codebasen sichern wir mit PHP Refactoring ab, die Tore laufen in der CI CD Pipeline mit Docker. Für bestehenden KI Code gibt es den Codebase Audit für KI generierten Code und den Vibe Coding Security Audit.

Warum grüne Tests bei KI Code nicht reichen

Ein Beispiel aus dem DWX Artikel zeigt das Problem gut. Ein Agent überarbeitet eine Umsatzauswertung pro Filiale. Der Pull Request sieht sauber aus, die Tests sind grün, der Code wird gemergt. Wochen später stimmen die Zahlen nicht. Der Join lief über die Filiale des Kunden und nicht über die Filiale der Bestellung. Die Tests prüften nur, ob überhaupt Daten zurückkamen.
Der Agent prüft sich selbst. Schreibt derselbe Agent Code und Tests, zeigen die Tests nur, dass die Umsetzung zu sich selbst passt. Sebastian Bergmann nennt das in Vertrauen ist nicht übertragbar geliehenes Vertrauen. Es fehlt ein unabhängiger Beleg.
Der Agent optimiert auf Grün. Ein Agent will die Testsuite grün sehen. Passt ein Test nicht zum neuen Code, ändert er im Zweifel den Test. Im Review ist deshalb jede geänderte Erwartung in einem bestehenden Test ein Warnsignal.
Der Maßstab muss vor dem Code stehen. Tests, die festlegen, was richtig ist, entstehen vor der Umsetzung. Sie kommen von Menschen, die die Fachlogik kennen. Dann hat das Review etwas, woran es den Agent Code messen kann.

Fünf Fehlermuster in KI Code für PHP und Symfony

Die Muster stammen aus dem DWX Artikel, die Beispiele haben wir auf PHP und Symfony übertragen. Die rechte Spalte zeigt, was den Fehler automatisch findet und wo ein Mensch gebraucht wird.
Fehlermuster So sieht es in PHP aus Wer es fängt
Falscher Join Der Doctrine QueryBuilder verknüpft über die falsche Relation, etwa über den Kunden statt über die Bestellung Functional Test mit Faker Daten, in denen Kunden in fremden Filialen bestellen
Übersehene Grenzfälle Retouren mit negativer Menge, null Werte, Rundung bei Rabatten, leere Listen PHPUnit mit Data Providern für Null, negative Werte und Grenzwerte, dazu Mutation Testing
Verschluckte Fehler Ein catch Block loggt eine Warnung und gibt false zurück, die Zahlung ist trotzdem gebucht Functional Test, der einen Ausfall nach der Belastung simuliert, Sentry in Staging
Sicherheitslücken Controller ohne IsGranted, keine Prüfung des Mandanten, SQL per String Verkettung Psalm Taint Analysis, Symfony Voter mit Tests, Review mit Blick auf Rechte
Architekturbruch Logik im Controller, direkter Zugriff auf den EntityManager, new DateTime statt Clock PHPStan Regeln, Deptrac oder phpat für Schichtgrenzen, Review gegen ADRs

So sehen die Fehlermuster im PHP Code aus

Der falsche Join. Beide Varianten laufen fehlerfrei. Nur eine liefert die richtigen Zahlen.
Code:
          

// Agent Code: gruppiert über die Stammfiliale des Kunden
$qb->select('b.name AS filiale, SUM(o.total) AS umsatz')
    ->from(Order::class, 'o')
    ->join('o.customer', 'c')
    ->join('c.homeBranch', 'b')
    ->groupBy('b.id');

// Richtig: gruppiert über die Filiale der Bestellung
$qb->select('b.name AS filiale, SUM(o.total) AS umsatz')
    ->from(Order::class, 'o')
    ->join('o.branch', 'b')
    ->groupBy('b.id');

Ein Test mit einem Kunden, der in seiner Stammfiliale bestellt, bleibt bei beiden Varianten grün. Den Fehler zeigt erst ein Test mit Daten, die ihn sichtbar machen, und mit einer Assertion auf konkrete Werte.
Code:
          

public function testUmsatzZaehltFilialeDerBestellung(): void
{
    $kunde = $this->kundeMitStammfiliale('Duisburg');
    $this->bestellung($kunde, filiale: 'Essen', betrag: 100);

    $umsatz = $this->report->umsatzProFiliale();

    self::assertSame(100, $umsatz['Essen']);
    self::assertArrayNotHasKey('Duisburg', $umsatz);
}

Der verschluckte Fehler. Die Karte wird belastet, danach scheitert das Speichern. Der catch Block meldet nur eine Warnung, die Bestellung bleibt offen und der Aufrufer glaubt, es sei nichts passiert.
Code:
          

try {
    $this->payment->charge($order);
    $order->markAsPaid();
    $this->entityManager->flush();
} catch (\Throwable $e) {
    $this->logger->warning($e->getMessage());

    return false;
}

Im Review lautet die Frage: Kann der catch Block eine halbe Ausführung verdecken? Wenn ja, gehört die Exception nach oben, und der Ablauf braucht eine Transaktion oder einen Ausgleich für die Zahlung.
Die fehlende Autorisierung. Der Agent hat die fachliche Aufgabe gelöst. Rechte, Mandanten und Eingaben standen nicht in der Aufgabe, also fehlen sie.
Code:
          

#[Route('/api/rechnungen/{nummer}')]
public function show(string $nummer, Connection $db): JsonResponse
{
    $rechnung = $db->fetchAssociative(
        "SELECT * FROM rechnung WHERE nummer = '" . $nummer . "'"
    );

    return $this->json($rechnung);
}

Die abgesicherte Variante lädt die Entity über Doctrine, prüft die Rechte mit einem Voter und lässt die Mandantenprüfung im Voter testen.
Code:
          

#[Route('/api/rechnungen/{nummer}')]
#[IsGranted('VIEW', subject: 'rechnung')]
public function show(
    #[MapEntity(mapping: ['nummer' => 'nummer'])] Rechnung $rechnung,
): JsonResponse {
    return $this->json($rechnung);
}

Psalm findet die String Verkettung bis zur SQL Abfrage mit der Taint Analysis. Ob der Voter den richtigen Mandanten prüft, zeigt nur ein Test mit einem fremden Mandanten. Mehr zu den Risiken steht bei den OWASP Top 10 für PHP und Symfony.

Die rote Phase bleibt beim Menschen

Der wichtigste Hebel im AI Code Review liegt vor dem Review. Wer zuerst den fehlschlagenden Test schreibt, legt fest, was richtig ist, bevor eine plausible Lösung existiert. Sebastian Bergmann beschreibt das in Die rote Phase gebe ich nicht ab. So sieht die Arbeitsteilung in der Praxis aus.
  • Rot schreibt der Mensch. Der fehlschlagende Test kommt aus dem Team, von jemandem mit Fachwissen.
  • Grün darf der Agent. Er schreibt die Umsetzung, bis der Test besteht.
  • Das Refactoring prüft der Mensch. Hier entscheidet sich, ob der Code zur Architektur passt.
  • Generierte Tests sind Entwürfe. Sie werden erst zum Akzeptanztest, wenn jemand sie gegen die Anforderung geprüft hat.
  • Bugfixes ergänzen Tests. Ein guter Fix fügt Erwartungen hinzu. Ändert er bestehende, fragt das Review nach dem Grund.
Den letzten Punkt hat Sebastian Bergmann an der Historie von PHPUnit untersucht, nachzulesen in Unveränderte Tests sind der halbe Beweis. Für Agent Code heißt das: Ein Pull Request, der bestehende Erwartungen umschreibt, braucht eine Erklärung.
Ob Tests aus dem Agenten Fehler wirklich finden, zeigt Mutation Testing. Das Infection Framework ist dafür geeignet. Es baut gezielt kleine Fehler in den Code ein. Bleiben die Tests grün, sichern sie diese Stelle nicht ab. Warum eine hohe Code Coverage allein wenig sagt, wird dabei schnell sichtbar.

Vier Stufen für AI Code Review in PHP Projekten

AI Code Review baut sich in Stufen auf. Jede Stufe nimmt dem Team eine Fehlerklasse ab. So bleibt im menschlichen Review Zeit für das, was nur Menschen können, also Fachlogik und Absicht. Die Tabelle zeigt die vier Stufen mit den passenden Werkzeugen, die Grafik darunter zeigt denselben Aufbau.

Die vier Stufen im Überblick

Stufe Was geprüft wird Werkzeuge
1 Statische Analyse Typen, tote Pfade, unsichere Datenflüsse, Coding Standards PHPStan, Psalm, PHP CS Fixer, Rector im Dry Run
2 Tests mit echten Erwartungen Fachregeln, Grenzfälle und konkrete Werte statt nur vorhandener Daten PHPUnit, Functional Tests mit Symfony, Faker Daten, Cypress E2E
3 KI Review Layer Auffälligkeiten im Diff, vergessene Fälle, Hinweise im Pull Request KI Review Tools in GitHub Actions oder GitLab CI
4 Review mit Fachwissen Fachlogik, Architektur, Rechte und die Absicht der Änderung Menschen im Team, Spezifikation, ADRs
Aufsteigendes Säulendiagramm der vier AI Code Review Phasen Analyse, Tests, KI Review und Fachwissen. Inhalt steht textuell in der Tabelle darüber.

Review Checkliste für Agent Code in PHP

Diese Fragen lenken den Blick im Pull Request auf die typischen Schwachstellen. Sie ersetzen kein gründliches Review, aber sie sorgen dafür, dass die wichtigen Stellen nicht durchrutschen.
  • Verknüpft jede Query über die richtige Relation, und prüft ein Test das mit passenden Daten?
  • Was passiert bei null, negativen Werten, Rundung und leeren Listen?
  • Kann ein catch Block eine halbe Ausführung verdecken?
  • Hat jeder neue Endpoint eine Autorisierung, einen Voter und eine Prüfung des Mandanten?
  • Laufen alle Eingaben über Parameter, ohne String Verkettung im SQL?
  • Liegt die Logik in der richtigen Schicht, und hängt sie an Uhrzeit, Zufall oder globalem Zustand?
  • Wurden bestehende Tests geändert, übersprungen oder gelöscht, und warum?
  • Gibt es eine Spezifikation oder einen Test, der vor dem Code da war?
Die ersten sechs Fragen lassen sich zu einem guten Teil an statische Analyse und Tests abgeben. Die letzten beiden braucht ein Mensch. Wie eine Spezifikation vor dem Code aussieht, beschreibt Spec Driven Development.

Wer im AI Code Review was findet

Kein Werkzeug deckt alles ab. Die Stärke liegt in der Kombination, und jede Stufe hat blinde Flecken, die eine andere schließt.
Prüfer Findet zuverlässig Übersieht
PHPStan und Psalm Typfehler, unsichere Datenflüsse, tote Pfade Falsche Fachlogik in typsicherem Code
PHPUnit und Functional Tests Abweichungen von festgelegten Erwartungen Fälle, für die niemand einen Test geschrieben hat
Cypress E2E Brüche im Ablauf aus Sicht der Nutzer Rechenfehler ohne sichtbare Folge in der Oberfläche
KI Review Tools Auffällige Muster im Diff, vergessene Fälle Projektwissen und Fachregeln außerhalb des Diffs
Mensch mit Fachwissen Absicht, Fachlogik, Architektur Fleißarbeit in sehr großen Diffs

KI Review Tools für PHP im Vergleich

Diese Tools decken Stufe 3 ab. CodeRabbit richten wir bei Teams ein, PR-Agent und SonarQube ordnen wir ein. Selbst nutzen wir keines davon produktiv, unser eigener Review Agent läuft mit OpenCode.
Tool Betrieb und Plattformen Einordnung für PHP Teams
CodeRabbit SaaS, Self Hosted nur im Enterprise Plan ab 500 Seats. GitHub, GitLab auch self managed, Azure DevOps, Bitbucket Review mit Kontext direkt im Pull Request, Regeln über die .coderabbit.yaml. Gut, wenn das Team keine eigene Infrastruktur pflegen will
PR-Agent Open Source, als CLI, GitHub Action, Docker oder Webhook. GitHub, GitLab, Bitbucket, Azure DevOps, Gitea Pipeline und Modell bleiben in eurer Hand. Die Qualität der Reviews hängt stark am gewählten Modell
SonarQube Server Self managed oder als SonarQube Cloud. Eigenes Quality Gate für KI Code Regelbasiert mit Taint Analysis für PHP. Eher eine starke Stufe 1 als ein KI Reviewer im Pull Request
Eigener Review Agent mit OpenCode In eurer Pipeline, mit Open Weight Modellen über EU Inferenz Regeln aus AGENTS.md und ADRs fließen direkt ein. Braucht Pflege der Prompts und klare Grenzen

Die rote Phase ist die einzige, die nicht delegiert werden darf.

Sebastian Bergmann, Entwickler von PHPUnit und Mitgründer von thePHP.cc – phpunit.expert

So setzt NCA AI Code Review in PHP Teams auf

Wir starten mit dem, was schon da ist. Gibt es Versionskontrolle, Tests und eine Pipeline, ziehen wir die Quality Gates zügig hoch. Fehlt das, bauen wir zuerst die Basis. Die Reihenfolge bleibt gleich: erst die Tore, dann der Agent. Wie die Tore im Detail funktionieren, zeigen die Quality Gates für KI Code.
Statische Analyse läuft bei uns mit PHPStan und Psalm, Modernisierung mit Rector PHP. Tests schreiben wir mit PHPUnit und als PHP Functional Test mit Symfony. Für Schichtgrenzen ist Deptrac geeignet. Den Ablauf aus Sicht der Nutzer sichern wir mit Cypress, das Wissen dazu bringt der Cypress Workshop ins Team.
Für den KI Review Layer richten wir Tools wie CodeRabbit in euren PHP und Symfony Projekten ein, abgestimmt auf eure Coding Standards und eure Pipeline. Selbst nutzen wir CodeRabbit nicht. Wie sich KI Review über PHP hinaus in die Pipeline bringen lässt, steht bei KI Code Review automatisieren.
Agent Code entsteht in lokalen Setups mit anonymisierten Daten aus Faker. Darin kann jede Coding KI arbeiten, auch aus der Cloud. Für gehostete Inferenz in Europa gibt es TensorX und als Enterprise Option unseren Duisburger Netzwerkpartner Conversis.
Zur Abrechnung: Nach einem kostenlosen Kennenlernen schätzen wir den Aufwand und rechnen minutengenau ab. Das sprachneutrale System dahinter sind die NCA Agentic AI Coding Guardrails, die Methodik steht in den Vibe Coding Best Practices.
CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.
Erreichen Sie unsere PHP Consultant Spezialisten

Wir arbeiten seit über 20 Jahren mit PHP und Symfony. Wir helfen bei PHP Updates und PHP Refactoring und beraten remote zu allen Fragen rund um PHP. Zuerst sichern Tests und statische Analyse den Code ab, dann räumen wir auf. Automatische CI/CD Deployments und eine stabile Docker Umgebung sorgen dafür, dass jede Änderung sicher live geht.

Häufige Fragen zum AI Code Review in PHP Projekten

Die wichtigsten Fragen zu AI Code Review, Quality Gates und Tests für KI Code in PHP und Symfony.
Was ist AI Code Review für PHP Projekte 2026?

AI Code Review für PHP Projekte ist die Prüfung von Code aus einem KI Agenten gegen Fachlogik, Sicherheit und Architektur. Es kombiniert statische Analyse mit PHPStan und Psalm, Tests mit echten Erwartungen, einen optionalen KI Review Layer und ein menschliches Review mit Fachwissen. Ziel ist Code, der fachlich stimmt und ins Projekt passt. Grüne Tests allein belegen das nicht.

Welche Fehler macht KI Code in PHP 2026 am häufigsten?

Typisch sind fünf Muster. Queries verknüpfen über die falsche Relation, Grenzfälle wie negative Mengen fehlen, catch Blöcke verschlucken halbe Ausführungen, Endpoints prüfen keine Rechte oder Mandanten, und Logik landet in der falschen Schicht. Allen gemeinsam ist, dass der Code korrekt aussieht. Der Fehler zeigt sich erst im Abgleich mit Fachlogik, Sicherheitsregeln oder Architektur.

Reichen KI Review Tools wie CodeRabbit 2026 für PHP aus?

Nein. KI Review Tools finden auffällige Muster im Diff und vergessene Fälle. Projektwissen und Fachregeln außerhalb des Diffs kennen sie nur begrenzt. Sie ergänzen statische Analyse, Tests und das menschliche Review, ersetzen aber keines davon. Sinnvoll sind sie als dritte Stufe, wenn PHPStan, Psalm und eine belastbare Testsuite schon in der Pipeline laufen.

Welche Quality Gates brauchen PHP Projekte für KI Code 2026?

Die Basis sind statische Analyse mit PHPStan oder Psalm, Coding Standards, PHPUnit Tests und Functional Tests mit Symfony. Dazu kommen Cypress E2E Tests für die wichtigsten Abläufe. Alle Tore laufen lokal, im Git Hook und in der Pipeline mit demselben Skript. Was lokal durchgeht, geht dann auch in GitHub Actions oder GitLab CI durch.

Wer sollte 2026 die Tests für KI Code schreiben?

Den ersten, fehlschlagenden Test schreibt ein Mensch mit Fachwissen. So steht fest, was richtig ist, bevor der Agent eine Lösung liefert. Der Agent darf danach die Umsetzung schreiben, bis der Test grün ist. Tests, die der Agent selbst erzeugt, sind Entwürfe. Sie werden erst zum Akzeptanztest, wenn jemand sie gegen die Anforderung geprüft hat.

Warum sind grüne Tests kein Beweis für korrekten Code?

Ein grüner Test zeigt nur, dass der Code die Erwartungen im Test erfüllt. Stammen Test und Code vom selben Agenten, prüft der Agent seine eigene Deutung gegen sich selbst. Fehlt ein Fall im Test, fehlt er auch im Beweis. Belastbar wird eine Testsuite erst, wenn die Erwartungen unabhängig vom Code aus der Anforderung kommen.

Was bringt Mutation Testing beim Review von KI Code?

Mutation Testing zeigt, ob Tests Fehler wirklich finden. Ein Werkzeug wie das Infection Framework verändert den Code gezielt, etwa ein Größer in ein Größer gleich. Bleiben die Tests trotzdem grün, sichern sie diese Stelle nicht ab. Gerade bei Tests aus einem Agenten wird so schnell sichtbar, welche Grenzen nur scheinbar geprüft werden.

Wie prüft man Doctrine Queries aus einem KI Agenten?

Mit Testdaten, die den Fehler sichtbar machen. Ein Test mit einem Kunden, der in seiner Stammfiliale bestellt, bleibt auch bei falschem Join grün. Erst Faker Daten mit Bestellungen in fremden Filialen, leeren Ergebnissen und Grenzwerten zeigen, ob über die richtige Relation verknüpft wird. Die Assertion prüft konkrete Werte und nicht bloß, ob Daten zurückkommen.

Wie findet man Sicherheitslücken in KI generiertem PHP Code?

Psalm verfolgt mit der Taint Analysis unsichere Datenflüsse bis zur SQL Abfrage. Rechte prüft man mit Symfony Votern und mit Tests, die einen fremden Mandanten simulieren. Im Review gehört zu jedem neuen Endpoint die Frage nach Authentifizierung, Autorisierung und Eingabevalidierung. Ein Agent setzt Sicherheit oft nur um, wenn sie ausdrücklich in der Aufgabe steht.

Darf ein KI Agent bestehende Tests ändern?

Nur mit gutem Grund, und dieser Grund gehört ins Review. Ein guter Bugfix fügt Erwartungen hinzu und lässt bestehende stehen. Ändert ein Agent einen Test, damit die Suite grün wird, kann er damit genau den Fehler verdecken. Geänderte Erwartungen, übersprungene Tests und neue Skip Markierungen sind deshalb Warnsignale im Pull Request.

Lohnt sich AI Code Review auch für Legacy PHP Projekte?

Ja, dort ist es besonders wichtig. In gewachsenem Code fehlen oft Tests, und ein Agent findet wenig Halt. Wir setzen zuerst Quality Gates mit statischer Analyse, Unit Tests, Functional Tests und Cypress. Danach wird manuell mit KI Unterstützung aufgeräumt. Für den Weg aus dem Legacy heraus setzen wir auf ein paralleles neues Projekt.

Wie lange dauert die Einführung von AI Code Review in einem PHP Team?

Bis zum ersten soliden Ergebnis vergehen realistisch 15 bis 30 Tage. Dann stehen Regeln und Rechte, die ersten Quality Gates laufen in der Pipeline und ein Review Agent arbeitet täglich mit. Das untere Ende setzt Versionskontrolle, Tests und Pipeline voraus. Danach begleiten wir einige Tage im Monat. Beides sind Schätzungen, ohne Festpreis.