Wie können Sie TDD-Methoden für ETLs und Berichterstellungsprojekte verwenden?

12

ETL - Projekte sind Projekte, die mit einem ETL - Tool (Extract - Transform - Load) wie SSIS, PowerCenter usw. Erstellt wurden

Dazu gehören normalerweise das Lesen von Daten aus einer externen Quelle, das Laden in eine Staging-Datenbank, das Durchführen bestimmter Transformationen und das Laden in eine endgültige Datenbank

Ein einfaches Beispiel wäre die Verwendung von SSIS, um von Schullehrern mit SSIS bereitgestellte Excel-Dateien zu lesen und in eine Datenbank zu laden. Schreiben Sie dann gespeicherte Prozeduren oder mehrere SSIS-Pakete, um die Noten jedes Schülers zu berechnen und diese Daten in ein Data Mart \ Warehouse zu laden

Anschließend erstellen Sie gespeicherte Prozeduren auf dem Mart, um eine Ausgabe zu generieren, die von Berichtstools (SSRS \ Excel \ etc) zum Generieren von Visualisierungen verwendet wird.

Ich versuche zu verstehen, wie TDD und ordnungsgemäße Komponententests in diesem Szenario durchgeführt werden. Bei ETL-Tests geht es hauptsächlich darum, sicherzustellen, dass die in die Staging-Tabellen geladenen Daten der richtigen Teilmenge der Daten aus der Quelle entsprechen. Wenn Sie also einen Test dafür implementieren, wird eine Mini-Version der ETL implementiert. Die Ausgabe der Bericht-SPs hängt von den Daten in den Tabellen selbst ab. Ohne einen Wartungs-Alptraum kann man also keinen stabilen Satz von Ausgabedaten haben, selbst wenn Sie eine Datenbank erstellen, die bereinigte Testdaten enthält

Beispiel:

Sprint 1: Die Schülertabelle enthält Name, Alter und Note

Sie erstellen Testdaten für diese Tabelle und darauf aufbauend Unit-Tests

Sprint 2: Ein Geschlechtsfeld wird zur Tabelle hinzugefügt.

Wenn Sie jetzt die Daten im Schülerfeld aktualisieren, um das Attribut gender zu füllen, werden die Testfälle ungültig, da sich die Daten geändert haben. Und wenn Sie dies nicht tun, können Sie keine Testfälle erstellen, für die die Geschlechterspalte erforderlich ist

user87166
quelle
Es ist kein TDD, wenn das von Ihnen getestete Tool bereits vorhanden ist. Schreiben Sie einfach normale Tests.
Robert Harvey
@RobertHarvey Tatsächlich unterscheidet sich das ETL-Tool beim Schreiben von C # -Code nicht vom .Net Framework. Das Tool ist also auf die gleiche Weise wie das .Net-Framework vorhanden, Sie können jedoch TDD in C #
user87166 am
Ich würde auch keine Framework-Methoden testen. Ich gehe davon aus, dass sie bereits funktionieren. Wenn Sie eine Konfiguration für ein ETL-Tool testen, müssen Sie die Logik im ETL-Tool nicht neu erstellen. benutze einfach das Tool.
Robert Harvey
1
Schreiben Sie dann die Tests mit den Erwartungen, die Sie von der ETL erwarten, den vorgeschlagenen Daten und der vorgeschlagenen Konfiguration. Machen Sie konzeptionelle Tests, wenn Sie möchten, aber die Funktionalität ist bereits vorhanden. Reine "Test First" -Entwicklung ist für Dinge gedacht, die es noch nicht gibt. Was auch immer Sie tun, erfinden Sie das ETL-Tool nicht neu!
Robert Harvey
2
"Seitdem sich das Alter in den Basisdaten geändert hat" - was ist so schwer daran, stabile Testdaten als Eingabe bereitzustellen? Wenn zeitabhängige Berechnungen erforderlich sind, deaktivieren Sie den Referenz-Timer.
Doc Brown

Antworten:

2

Was ich in der Vergangenheit getan habe, ist die Verwendung von Acceptance Test Driven Development . ETL-Code wird häufig über verschiedene Phasen / Sprachen und Technologien verteilt UND ist eng miteinander verbunden. Die meisten ETL-Prozesse hängen von der Reihenfolge der Transformationen in der Pipeline ab.

Das Risiko bei der Verwendung von Unit-Tests nur in ETL besteht darin, dass die Integrationen nicht abgedeckt werden. Die Reihenfolge der Transformationen entspricht in vielen ETLs der tatsächlichen Transformation. Wenn ich Ressourcen für die Erstellung einer automatisierten Testsuite aufwenden würde, würde ich sicherstellen, dass diese auch die Sequenzierung abdeckt.

Ich würde mich für jede einzelne Transformationssequenz auf TDD konzentrieren oder diese Tests zumindest in eine größere Testsuite aufnehmen. Wenn es zu viele Kombinationen gibt, müssen Sie möglicherweise auswählen, welche Sequenzen getestet werden sollen. Die Idee ist, die ETL-Pipeline für die Datensätze zu validieren, auf denen sie verwendet werden soll. Stellen Sie außerdem sicher, dass Sie Testabdeckung für Ihren gesamten Code haben.

dietbuddha
quelle
0

ETL kann mit TDD durchgeführt und ähnlich wie die meisten Projekte getestet werden, d. H

schreibe einen Test, der fehlschlägt (rot) behebe den Fehler (grün) mache die Code-Perforation & wartbar (refactor)

Für ETL könnte das also sein:

  • Schreiben Sie ein Skript, um 1 Datensatz zu laden
  • fehlgeschlagen (keine Datenquelle definiert)
  • Quelle definieren [grün]
  • Kein Refactor nötig
  • Schreiben Sie einen Test, um 1 Datensatz mit nur 1 ausgefülltem Feld zu laden
  • fail (für dieses Feld wurde kein Code geschrieben)
  • Definieren Sie Codedetails für dieses Feld
  • Refaktor
  • Fehlgeschlagene Tests definieren, die nach Attributen mit gültigen Werten suchen [rot]
  • etc
Michael Durrant
quelle
Die ersten 8 Schritte haben nichts mit TDD zu tun, da sie keine Tests hinterlassen. Der Rest ist nicht klar.
Bulat