Bagaimana Anda menguji unit \ menggunakan metode TDD untuk proyek ETL dan pelaporan?

12

Proyek ETL adalah proyek yang dibuat menggunakan alat ETL (Extract - Transform - Load) seperti SSIS, PowerCenter, dll

Ini biasanya melibatkan membaca data dari sumber eksternal, memuatnya ke basis data pementasan, melakukan transformasi tertentu dan memuatnya ke basis data akhir

Contoh sederhana adalah menggunakan SSIS untuk membaca file excel yang disediakan oleh guru sekolah menggunakan SSIS dan memuatnya ke dalam database. Kemudian tulis prosedur tersimpan atau lebih banyak paket SSIS untuk menghitung nilai setiap siswa dan muat data itu ke dalam gudang data

Anda kemudian membangun prosedur tersimpan di atas mart untuk menghasilkan output yang digunakan oleh alat pelaporan (SSRS \ Excel \ dll) untuk menghasilkan visualisasi.

Saya mencoba memahami cara melakukan TDD dan pengujian unit yang tepat dalam skenario ini. Tes untuk ETL sebagian besar tentang memastikan data yang dimuat dalam tabel pementasan cocok dengan bagian yang tepat dari data dari sumber. Jadi menerapkan tes untuk itu mengarah pada penerapan versi mini ETL. Output dari laporan SP tergantung pada data dalam tabel itu sendiri, sehingga orang tidak dapat memiliki set data output yang stabil tanpa mimpi buruk pemeliharaan bahkan jika Anda membuat database yang berisi data tes scrubbed

Contoh:

Sprint 1: Tabel siswa berisi Nama, Usia, Kelas

Anda membuat data uji untuk tabel ini, dan tes unit berdasarkan itu

Sprint 2: Bidang gender ditambahkan ke tabel.

Sekarang, jika Anda me-refresh data di bidang siswa untuk mengisi atribut gender, kasus uji tidak valid karena data berubah. Dan jika tidak, Anda tidak dapat membuat kasus uji yang memerlukan kolom gender

pengguna87166
sumber
Ini bukan TDD jika alat yang Anda uji sudah ada. Tulis saja tes biasa.
Robert Harvey
@RobertHarvey Efeknya alat ETL tidak berbeda dari .Net Framework saat menulis kode C # bukan? Jadi, alat ini ada dengan cara yang sama dengan kerangka. Net ada, namun Anda dapat melakukan TDD di C #
user87166
Saya juga tidak akan menguji metode Framework. Saya menganggap mereka sudah bekerja. Jika Anda menguji konfigurasi untuk alat ETL, Anda tidak perlu membuat kembali logika di alat ETL untuk melakukan itu; cukup gunakan alat ini.
Robert Harvey
1
Kemudian tulis tes, menggunakan harapan yang Anda harapkan dari ETL, data yang diusulkan, dan konfigurasi yang diusulkan. Buat mereka tes konseptual, jika Anda suka, tetapi fungsi sudah ada. Pengembangan "ujian pertama" murni adalah untuk hal-hal yang belum ada. Apa pun yang Anda lakukan, Jangan menemukan kembali alat ETL!
Robert Harvey
2
"sejak usia dalam data dasar berubah" - apa yang sulit untuk menyediakan data uji yang stabil sebagai input? Jika ada perhitungan tergantung waktu yang terlibat, mengejek penghitung waktu referensi.
Doc Brown

Jawaban:

2

Apa yang telah saya lakukan di masa lalu adalah menggunakan Acceptance Test Driven Development . Kode ETL sering didistribusikan di berbagai tahap / bahasa dan teknologi DAN digabungkan secara ketat. Sebagian besar proses ETL bergantung pada urutan transformasi dalam pipa.

Risiko menggunakan unit test hanya dalam ETL adalah tidak akan mencakup integrasi. Urutan transformasi adalah bagian yang sama dengan transformasi aktual di banyak ETL. Jika saya menghabiskan sumber daya untuk membuat test suite otomatis saya akan memastikan itu mencakup urutannya juga.

Saya akan fokus pada TDD untuk setiap urutan transformasi yang unik atau setidaknya menyertakan tes ini dalam test suite yang lebih besar. Jika ada terlalu banyak kombinasi, Anda mungkin harus memilih dan memilih urutan mana yang akan diuji. Idenya adalah untuk memvalidasi pipa ETL untuk set data yang akan digunakan. Serta memastikan Anda memiliki cakupan pengujian pada semua kode Anda.

dietbuddha
sumber
0

ETL dapat dilakukan dengan TDD dan menguji cukup mirip dengan sebagian besar proyek, yaitu

tulis tes yang gagal (merah) perbaiki kegagalan (hijau) buat kode performen & terpelihara (refactor)

Jadi untuk ETL itu mungkin:

  • tulis skrip untuk memuat 1 catatan
  • gagal (tidak ada sumber data yang ditentukan)
  • tentukan sumber [hijau]
  • tidak perlu refactor
  • tulis tes untuk memuat 1 catatan dengan hanya 1 bidang isian
  • gagal (tidak ada kode yang ditulis untuk bidang itu)
  • tentukan detail kode untuk bidang itu
  • refactor
  • mendefinisikan tes gagal yang mencari atribut yang memiliki nilai valid [merah]
  • dll
Michael Durrant
sumber
8 langkah pertama tidak ada hubungannya dengan TDD, karena mereka tidak meninggalkan tes apa pun. Selebihnya tidak jelas.
Bulat