Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Aktualisiert:
- Autor:
- Roland Golla
Was bedeutet Tests als lebende Spezifikation?
Lebende Spezifikation mit NCA: Schnelle Hilfe vom Experten
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 jede andere Dokumentation lügt
Die vier Ebenen einer lebenden Spezifikation
Wie ein Test zur Spezifikation wird
public function testCalculate(): void
{
self::assertSame(0, $this->service->calc(5000, 0));
}
public function testVersandIstFreiAbFuenfzigEuroWarenwert(): void
{
$versandkosten = $this->service->berechneVersand(
warenwertInCent: 5000,
gutscheinInCent: 0,
);
self::assertSame(0, $versandkosten);
}
Lebende Spezifikation als Grundlage für sicheres Refactoring
Was das für KI Coding Agents bedeutet
Wo lebende Spezifikation an Grenzen stößt
Documentation has always been a source of frustration for everyone in software development.
Was Martraire damit meint
Quality Gates für KI generierten Code: Linting, Tests, Review Agents und CI Pipelines setzen CLAUDE.md Regeln automatisch durch. Praxiswissen von NCA
Mehr erfahrenAus der NCA Praxis: Der Testname ist die Dokumentation
Roland Golla ist Entwickler aus Leidenschaft – seit über 20 Jahren. Er hat hunderte Projekte begleitet, von Legacy-Refactoring bis KI-Integration. Bei Vibe Coding verbindet er das Beste aus beiden Welten: Die Geschwindigkeit von KI-generiertem Code mit der Qualität professioneller Softwareentwicklung. Kein Bullshit, keine Agentur-Floskeln – direkte Hilfe von jemandem, der selbst täglich im Code steckt.
Häufige Fragen zu Tests als lebende Spezifikation
Eine lebende Spezifikation ist eine Sammlung ausführbarer Tests, die beschreibt, was die Software leisten soll, und diese Beschreibung bei jedem Lauf überprüft. Sie kann nicht stillschweigend veralten, weil eine Abweichung sofort einen roten Build erzeugt. Der englische Begriff dafür ist Living Documentation.
Weil ein KI Coding Agent eine Abbruchbedingung braucht. Ohne sie iteriert er weiter, bis irgendetwas läuft. Mit einer lebenden Spezifikation ist die Bedingung eindeutig: Die benannten Tests sind grün und kein bestehender Test ist rot geworden. Das macht aus einem offenen Auftrag einen prüfbaren.
Nur teilweise. Tests dokumentieren Verhalten, nicht Entscheidungen. Warum ein Team eine bestimmte Datenbank oder Architektur gewählt hat, gehört weiterhin in Architecture Decision Records. Alles, was sich als konkreter Fall formulieren lässt, gehört dagegen in Tests, weil es dort nicht veralten kann.
Nicht mit Vollständigkeit, sondern mit Risiko. Zuerst die Stellen absichern, an denen ein Fehler Geld oder Vertrauen kostet: Preise, Berechtigungen, Abrechnung. Dazu statische Analyse als schnelle erste Stufe. Erst wenn dieses Netz steht, wird refactored oder ein Agent auf die Codebasis gelassen.
Nicht ganz. BDD ist die Praxis, aus Gesprächen und Beispielen Tests abzuleiten. Die lebende Spezifikation ist das Ergebnis davon. Man kann sie auch ohne Gherkin und ohne Cucumber erreichen, mit gut benannten PHPUnit oder Pytest Tests. Entscheidend ist die fachliche Benennung, nicht das Framework.
Der Name beschreibt die fachliche Regel in einem Satz, nicht die technische Methode. Statt testCalculate also testVersandIstFreiAbFuenfzigEuroWarenwert. Wenn dieser Test rot wird, steht im Protokoll direkt der Satz, der nicht mehr stimmt. Das spart beim Debuggen mehr Zeit, als das Umbenennen kostet.
Unter Führung ja, danach nein. Lässt man den Agenten zuerst implementieren und dann Tests schreiben, entstehen Tests, die zur Implementierung passen und nicht zur Anforderung. Das ist eine Bestätigung, keine Spezifikation. Die Tests gehören vor die Implementierung und gegen die fachliche Regel formuliert.
Sofort und konsequent. Ein Test, der sporadisch rot wird, zerstört das Vertrauen in die gesamte Suite. Sobald ein Team anfängt, rote Builds wegzuklicken, ist die Spezifikation tot, auch wenn sie technisch noch läuft. Entweder wird der Test stabilisiert oder er fliegt raus, ein Dazwischen gibt es nicht.
Sie beantworten die Frage, die kein Unit Test beantworten kann: Kann ein Mensch die Aufgabe tatsächlich erledigen. Wir setzen dafür Cypress mit Cypress Cloud ein. Gerade bei KI generiertem Code ist diese Ebene wichtig, weil einzelne Bausteine korrekt sein können, während der Ablauf als Ganzes nicht funktioniert.
Nein. Bei uns gilt: Coding aus der Cloud, Datenverarbeitung aus dem eigenen Netzwerk. Coding Modelle laufen nicht auf Kundenhardware, deshalb arbeiten Agenten immer gegen lokale Entwicklungsumgebungen mit Fake Daten. Für souveräne Inferenz mit Zero Data Retention gibt es EU Anbieter, etwa TensorX oder Conversis in Duisburg.
Die Prozentzahl ist die falsche Frage. Eine Suite mit 90 Prozent Abdeckung, die die Preislogik auslässt, ist wertlos. Sinnvoller ist die Frage, ob jede fachliche Regel mindestens einen Test hat, der ihren Grenzfall trifft. Abdeckung misst Zeilen, Spezifikation misst Regeln.
Für Prototypen nicht. Wer in wenigen Stunden prüft, ob eine Idee trägt, braucht Tempo statt Spezifikation. Sobald das Projekt aber in Betrieb geht und mehr als eine Person daran arbeitet, kippt die Rechnung. Ab dem Moment kostet fehlende Spezifikation mehr, als sie je gespart hat.