Michael Kutz
Quality Engineer at REWE digital, Conference Speaker about QA & Agile, Founder of Agile QA Cologne meetup, Freelance QA Consultant
Entropy Data
Was die Datenwelt von der Testpyramide lernen muss – und umgekehrt
Michael Kutz OOP 2027 Februar 2027
OOP 2027 · 02.–05.02.2027
● ● ● dashboard.beispiel-shop.de/umsatz
● Zuletzt aktualisiert: vor 2 Minuten
Umsatz heute
48.230 € ▲ 12 %
Bestellungen
1.284 ▲ 8 %
Ø Warenkorb
37,55 € ▲ 3 %
OOP 2027 · 02.–05.02.2027
● ● ● dashboard.beispiel-shop.de/umsatz
● Zuletzt aktualisiert: vor 21 Tagen
Umsatz heute
— keine Daten
Bestellungen
— keine Daten
Ø Warenkorb
— keine Daten
⚠ Query failed
column "order_total" does not exist
OOP 2027 · 02.–05.02.2027
Team Checkout
besitzt Service & Datenbank
order_total → total_amount
✅ Eigene Tests grün · deployed
Daten-Pipeline
liest die Tabelle – nachts um 3
⚠ Query scheitert – ohne Alarm
📊 Dashboard – leer
🤖 ML-Modell – veraltet
👥 Nachbarteam – blockiert
Tag 0 – deployed, alles grün
Tag 1–20 – niemand merkt etwas
Tag 21 – der Fachbereich ruft an
⚠ Kein Vertrag · kein Test · kein Alarm
OOP 2027 · 02.–05.02.2027
OOP 2027 · 02.–05.02.2027
Daten für Tests
→ Heute nicht unser Thema
≠
Tests für Daten
→ Darum geht es heute
OOP 2027 · 02.–05.02.2027
Zweck
Geschäftsprozesse ausführen
Schnittstelle
Schmale API – definierte Operationen
Typischer Zugriff
Ein Datensatz, aktueller Zustand
Die Tabelle ist …
Implementierungsdetail – gekapselt
Konsumenten
Andere Services & Frontends
vs.
Zweck
Fragen beantworten – auch die von morgen
Schnittstelle
Query-Interface – SQL, Topics, Files
Typischer Zugriff
Millionen Zeilen, Historie, Joins
Die Tabelle ist …
Die Schnittstelle selbst – bewusst veröffentlicht
Konsumenten
Analysten, Dashboards, ML, KI-Agenten
Das Schema ist die API des Datenprodukts – und jede Schnittstelle braucht einen Vertrag.
OOP 2027 · 02.–05.02.2027
OOP 2027 · 02.–05.02.2027
OOP 2027 · 02.–05.02.2027
Risk Storming: ein Workshop-Format aus dem agilen Testen – das Team diskutiert am Kartendeck (TestSphere), welche Qualitätsaspekte für sein Produkt die riskantesten sind. Eine von 20 Qualitäts-Karten heißt „Daten“:
✓
Leistungsfähigkeit
✓
Schutzmaßnahmen
✓
Benutzerfreundlichkeit
◆
Daten
Für Datenprodukte fächert sich „Daten“ auf in:
01
Schema-Stabilität
Spalten & Typen – bricht wie eine API
◆
02
Aktualität
Wann kam die letzte Lieferung?
◆
03
Vollständigkeit
Alle Zeilen da? Wie viel null ist okay?
◆
04
Validität
Wertebereiche, Formate, Plausibilität
◆
05
Konsistenz
Passen die Zahlen zusammen – auch produktübergreifend?
◆
06
Semantik
Netto oder brutto? Bedeutung ist Teil der Qualität
◆
Genau diese Karten schreibt der Data Contract fest – maschinenlesbar und testbar.
OOP 2027 · 02.–05.02.2027
Zwischen Services lösen wir das so: Der Konsument schreibt seine Erwartungen als Vertrag auf – und beide Pipelines testen dagegen. Schritt für Schritt:
Consumer-Pipeline · Team Dashboard
Build & Unit-Tests
wie immer
Contract-Test
gegen einen Mock des Providers
Vertrag publizieren
an den Pact Broker
can-i-deploy ✓
dann Deploy
Pact Broker
verwahrt alle Verträge
Provider-Pipeline · Team Checkout
Build & Unit-Tests
wie immer
Verträge verifizieren
gegen alle Konsumenten-Verträge
Ergebnis melden
zurück an den Broker
can-i-deploy ✓
dann Deploy
Der Vertrag verbindet beide Pipelines – keiner deployt, was den anderen bricht.
OOP 2027 · 02.–05.02.2027
Fast dieselben Pipelines – mit einem Unterschied: Der Contract entsteht nicht in der Pipeline, sondern vorab und gemeinsam. Die Pipelines testen nur noch dagegen.
Consumer-Pipeline · Dashboard-Team
Build & Tests
wie immer
datacontract test ✓
prüft die gelieferten Daten
Ergebnis melden
zurück an die Registry
Deploy ✓
nur bei grünem Contract
Vorab · gemeinsam
Contract vereinbaren
Producer & Consumer, contract-first
Contract-Registry
verwahrt alle Contracts
Producer-Pipeline · Datenprodukt-Team
Build & Transform
z. B. dbt run – wie immer
datacontract test ✓
Schema & Qualität aller Contracts
Ergebnis melden
zurück an die Registry
Deploy ✓
nur bei grünen Contracts
Bricht das Schema, stoppt die Pipeline – nicht das Dashboard.
OOP 2027 · 02.–05.02.2027
Ein Vertrag regelt mehr als die Erwartungen der Konsumenten – beide Seiten versprechen, beide Seiten erwarten:
Der Produzent …
Der Konsument …
… verspricht
… erwartet
SLAs
Frische, Verfügbarkeit, Qualitätsregeln – zugesichert und testbar
ODCS: slaProperties
Sorgsamer Umgang
Klassifizierte Daten schützen, nicht weitergeben, im eigenen Output anonymisieren
heute meist nur Policy-Prosa
Terms of Use
Nutzungszweck, Grenzen und Pflichten der Verwendung
ODCS: terms
Consumer-Driven Contract
Der Ausschnitt, den der Konsument wirklich braucht – Spalten, Typen, Frische
Idee: ODCS am Input Port
Ein Format trägt alle vier Felder: ODCS – an Output- wie an Input-Ports.
OOP 2027 · 02.–05.02.2027
Ein Deployment ist nicht der einzige Weg, einen Contract zu brechen – Daten schaffen das auch ganz ohne. Deshalb prüft der Contract an zwei Stellen:
in der Pipeline · vor dem Deployment
Fängt die Known Knowns: Schema-Brüche, verletzte Qualitätsregeln – alles, was eine Änderung kaputt macht.
Unser order_total-Rename stirbt hier – im Code-Review, nicht im Dashboard.
CI/CD: datacontract test ✓
im Betrieb · kontinuierlich
Fängt die Known Unknowns: die kaputte Nachtlieferung, ausbleibende Daten, schleichenden Drift – ganz ohne Deployment.
Der Contract wird zum Monitor: SLAs laufend prüfen, verletzte Datensätze ausschleusen, Alarm an Producer und Konsumenten.
⚠ freshness: 26h > 24h → alert
Ein Contract, zwei Prüfpunkte: Die Pipeline schützt vor Änderungen, der Monitor vor der Wirklichkeit.
OOP 2027 · 02.–05.02.2027
So weit trägt die Analogie.
Jetzt wird es ehrlich.
Drei Dinge funktionieren bei Daten grundlegend anders.
OOP 2027 · 02.–05.02.2027
01
Ein Service kennt seine Aufrufer – bei Pact meldet sich jeder Consumer mit seinem Vertrag an.
Daten werden abgefragt: Jeder mit Leserechten kann konsumieren – und niemand merkt es.
→ Konsumenten sichtbar machen ist Teil des Problems: Registry statt stiller SELECTs.
02
Ein kaputtes Deployment rollst du zurück – der nächste Request ist wieder korrekt.
Drei Wochen falsche Daten stecken in jedem Downstream-System, Report und trainierten Modell.
→ Prävention schlägt Heilung: Der Test vor dem Deployment ist alles.
03
Bei einer API prüft der Compiler den Typ – total: Number ist entweder da oder nicht.
total = 47.11 ist ein valider Float – aber netto oder brutto? Mit oder ohne Storno?
→ Bedeutung gehört in den Contract: Definitionen, Semantik, Geschäftsbegriffe.
OOP 2027 · 02.–05.02.2027
Schon heute fragen LLMs und Agenten eure Datenprodukte ab – per MCP, direkt in SQL.
Ein Mensch stutzt, wenn die Zahlen seltsam aussehen, und fragt im Chat nach.
Ein Agent stutzt nicht. Er nimmt, was da ist – und antwortet selbstbewusst.
Der Data Contract wird damit zur einzigen Verteidigungslinie: Er sagt der Maschine, was die Daten bedeuten, wie frisch sie sind – und ob sie ihnen trauen darf.
🤖 „Wie lief der Umsatz letzte Woche?“
Ohne Contract
„48.230 €.“ – aus einer Tabelle, die seit 21 Tagen steht. Kein Zweifel, keine Warnung.
Mit Contract
„Achtung: Die Daten verletzen die zugesicherte Frische von 24 h – letzter Stand vor 21 Tagen.“
Der maschinenlesbare Vertrag über Bedeutung und Qualität wird vom Nice-to-have zur Voraussetzung.
OOP 2027 · 02.–05.02.2027
Drei Wochen früher, in der Pipeline von Team Checkout
✗ datacontract test – breaking change: order_total
Der Rename fliegt auf, bevor er deployed wird. Team Checkout sieht in der Registry, wen er getroffen hätte – und spricht vorher mit den Konsumenten.
Und auf dem Dashboard des Fachbereichs
48.230 € ▲ 12 %
● Zuletzt aktualisiert: vor 2 Minuten
Fangt am Montag an – mit einem einzigen Datenprodukt:
1
Schreibt den Vertrag auf, den es implizit schon hat – als ODCS-YAML
2
datacontract test in die Pipeline – Producer wie Consumer
3
Macht eure Konsumenten sichtbar – ein Contract, ein Ort, alle wissen Bescheid
OOP 2027 · 02.–05.02.2027
Kurze Einordnung des Themas in ein bis zwei Sätzen.
Kurze Einordnung des Themas in ein bis zwei Sätzen.
Kurze Einordnung des Themas in ein bis zwei Sätzen.
OOP 2027 · 02.–05.02.2027
Warum testen wir Daten nicht wie Code?
OOP 2027 · 02.–05.02.2027
DEMO
OOP 2027 · 02.–05.02.2027
Ihr wollt mehr wissen?
Schreibt mir
michael.kutz@entropy-data.com
Folien & mehr von mir
michael-kutz.de
Probiert Data Contracts aus
Auf www.entropy-data.com die 1-Click-Demo starten
By Michael Kutz
Viele Teams würden keinen Service ohne Tests ausliefern – doch dieselben Teams liefern täglich Daten an Dashboards, ML-Modelle und andere Teams: ohne Vertrag, ohne Test, ohne Garantie. Nach 15 Jahren in der Software-Qualität bin ich in die Datenwelt gewechselt und habe festgestellt: Sie steht dort, wo Testing vor 15 Jahren stand. Der Vortrag schlägt die Brücke – wie sich Consumer-Driven Contracts, Contract-Tests und Ports-and-Adapters-Denken auf Datenprodukte übertragen lassen, mit Data Contracts und ODCS. Und wo die Analogie bewusst bricht. Zielpublikum: Jeder, der mit Daten arbeitet oder von ihnen abhängtKeywords: Data Engineering, Contract Testing, ODCS Voraussetzungen: keine Level: Introductory Extended Abstract: Wir würden keinen Service ohne Tests in Produktion bringen. Wir kennen Consumer-Driven Contracts, wir mocken Ports und Adapter, wir versionieren APIs sorgfältig. Doch dieselben Teams liefern täglich Daten an nachgelagerte Konsumenten aus – an Dashboards, ML-Modelle, oder andere Teams – ganz ohne Vertrag, ohne Test, ohne Garantie. Bricht ein Schema, merkt es niemand, bis das Dashboard leer bleibt. Ich habe 15 Jahre lang an der Qualität von Software gearbeitet und bin dann in die Datenwelt gewechselt. Die ernüchternde Erkenntnis: Die Datenseite steht ungefähr dort, wo Software-Testing vor 15 Jahren stand. Die gute Nachricht: Wir müssen das Rad nicht neu erfinden.
Quality Engineer at REWE digital, Conference Speaker about QA & Agile, Founder of Agile QA Cologne meetup, Freelance QA Consultant