Nanook: Open-Source Testdaten-Generierung mit Äquivalenzklassen
Manuelle Testdaten kosten Zeit und Nerven. Nanook generiert systematische Testdaten aus Excel-Tabellen — Open Source, CI/CD-ready und bei der Deutschen Bahn im Einsatz.

Das Problem: Testdaten sind der blinde Fleck der Softwareentwicklung
Jeder Entwickler kennt es. Das Feature ist fertig, die Unit-Tests laufen, alles grün. Dann geht es in die Produktion — und es knallt. Nicht weil der Code falsch war, sondern weil niemand an den einen Grenzfall gedacht hat. Die Bestellung mit negativer Menge. Das Datum im Februar mit 29 Tagen. Der Kundenname mit Sonderzeichen.
Das Problem liegt selten am Code. Es liegt an den Testdaten. Oder genauer: am Fehlen systematischer Testdaten.
Die meisten Teams erstellen Testdaten manuell. Ein paar Standardfälle, die offensichtlichen Fehlerfälle, und dann hoffen wir, dass es reicht. Spoiler: Es reicht nie.
Die Methode: Äquivalenzklassen-Tabellen
Bevor wir über das Tool reden, reden wir über die Methode. Denn Nanook ist nicht einfach ein weiterer Daten-Generator wie Faker.js. Es ist die Implementierung einer bewährten Testmethodik.
Äquivalenzklassenbildung ist ein Verfahren aus dem systematischen Software-Test. Die Idee: Statt jeden möglichen Eingabewert zu testen (unmöglich), teilen wir die Eingabewerte in Klassen ein. Werte innerhalb einer Klasse verhalten sich gleich — wenn einer funktioniert, funktionieren alle.
Ein Beispiel. Ein Alter-Feld akzeptiert Werte von 0 bis 150:
| Klasse | Werte | Erwartung |
|---|---|---|
| Gültig | 0–150 | Akzeptiert |
| Ungültig (zu klein) | < 0 | Abgelehnt |
| Ungültig (zu groß) | > 150 | Abgelehnt |
| Ungültig (kein Zahl) | "abc" | Abgelehnt |
| Grenzwert | 0, 150 | Akzeptiert |
Statt 150 Werte zu testen, testen wir 5. Systematisch. Vollständig. Nachvollziehbar.
Das Problem: Diese Tabellen zu erstellen ist einfach. Die passenden Testdaten daraus zu generieren ist mühsam. Genau hier setzt Nanook an.
Was Nanook macht
Nanook verbindet zwei Dinge, die bisher getrennt waren: die Planung von Testfällen und die Generierung von Testdaten.
Schritt 1: Testfälle planen — im Spreadsheet
Sie definieren Ihre Äquivalenzklassen in einer ganz normalen Tabelle. Excel, LibreOffice, Google Sheets — was Sie bevorzugen. Keine neue Software lernen, keine spezielle Syntax. Einfach Zeilen und Spalten.
Jede Spalte ist ein Eingabefeld. Jede Zeile definiert eine Klasse von Werten. Nanook versteht die Struktur und weiß, welche Kombinationen getestet werden müssen.
Schritt 2: Datengeneratoren zuweisen
Für jede Äquivalenzklasse definieren Sie, wie die konkreten Testdaten erzeugt werden sollen. Nanook bringt Generatoren für gängige Datentypen mit:
- E-Mail-Adressen (gültige und ungültige)
- Namen (verschiedene Zeichensätze und Längen)
- Datumsangaben (mit Grenzwerten und Formaten)
- Zahlen (Bereiche, Dezimalstellen, Vorzeichen)
Brauchen Sie etwas Spezielles? Kein Problem. Eigene Generatoren schreiben Sie in JavaScript. Ein IBAN-Generator, ein Artikelnummer-Generator nach Ihrem internen Schema, ein Generator für Ihre Domain-spezifischen Codes — alles möglich.
Schritt 3: Generieren und exportieren
Ein Befehl. Nanook liest die Tabelle, kombiniert die Äquivalenzklassen, ruft die Generatoren auf und schreibt die Ergebnisse. Wahlweise als JSON, CSV oder in ein eigenes Format über einen pluggable Writer.
npm install @xhubio/nanook-table
Das Ergebnis: Ein vollständiger Satz Testdaten, der systematisch alle relevanten Äquivalenzklassen abdeckt. Reproduzierbar. Versionierbar. CI/CD-fähig.
Warum nicht einfach Faker.js?
Faker.js ist großartig für das, was es tut: realistische Zufallsdaten erzeugen. Aber Faker.js löst ein anderes Problem.
| Faker.js | Nanook | |
|---|---|---|
| Ansatz | Zufällige Daten | Systematische Daten |
| Grundlage | Keine Methodik | Äquivalenzklassen |
| Ziel | Realistische Dummy-Daten | Vollständige Testabdeckung |
| Grenzwerte | Zufällig, wenn überhaupt | Explizit definiert |
| Reproduzierbar | Nur mit Seed | Immer |
| Planung | Im Code | Im Spreadsheet |
Faker.js füllt eine Datenbank mit Testdaten. Nanook stellt sicher, dass die richtigen Testfälle existieren. Beides hat seinen Platz — aber sie lösen unterschiedliche Probleme.
Im Einsatz: Deutsche Bahn
Nanook ist kein Hobbyprojekt. Das Toolkit wird bei der Deutschen Bahn eingesetzt, wo systematisches Testen keine Option, sondern eine Notwendigkeit ist. Wenn Buchungssysteme, Fahrplandaten und Kundeninformationen zusammenspielen müssen, reichen zufällige Testdaten nicht.
Die Kombination aus strukturierter Testplanung im Spreadsheet und automatisierter Datengenerierung hat sich in einem der komplexesten IT-Umgebungen Deutschlands bewährt.
CI/CD-Integration
Nanook ist ein Node.js-Modul. Das bedeutet: Es läuft überall, wo Node.js läuft. In Ihrer Pipeline, in Ihrem Pre-Commit-Hook, in Ihrem Nightly Build.
# In der CI-Pipeline
npx nanook generate --input tests/equivalence-tables/ --output tests/data/
Die generierten Testdaten werden Teil Ihres Repos. Änderungen an den Äquivalenzklassen-Tabellen erzeugen automatisch aktualisierte Testdaten. Keine manuellen Schritte. Keine vergessenen Updates.
Open Source und MIT-Lizenz
Nanook ist MIT-lizenziert. Kostenlos für persönliche und kommerzielle Nutzung. Keine versteckten Kosten, keine Enterprise-Tier-Einschränkungen.
Der komplette Quellcode liegt auf GitHub. Sie können es forken, erweitern, eigene Generatoren beitragen oder es einfach nutzen.
Für wen ist Nanook?
- QA-Teams, die systematische Testabdeckung brauchen, nicht nur Stichproben
- Entwickler, die Testdaten als Teil der CI/CD-Pipeline generieren wollen
- Testmanager, die Testfälle in einer verständlichen Form planen wollen (Spreadsheet statt Code)
- Enterprise-Teams, die nachweisbare, reproduzierbare Testabdeckung dokumentieren müssen
Jetzt ausprobieren
Nanook ist in wenigen Minuten einsatzbereit:
npm install @xhubio/nanook-table
Die vollständige Dokumentation, Tutorials und API-Referenz finden Sie auf nanook.xhub.io.
Der Quellcode auf GitHub.
Sie haben Fragen zum Einsatz von Nanook in Ihrem Projekt? Sprechen Sie mit uns — wir beraten Sie gerne, auch wenn Sie das Toolkit kostenlos nutzen.