Làm thế nào để bạn kiểm tra đơn vị \ sử dụng các phương pháp TDD cho các dự án và báo cáo của ETL?


12

Các dự án ETL là các dự án được tạo bằng công cụ ETL (Trích xuất - Chuyển đổi - Tải) như SSIS, PowerCenter, v.v.

Chúng thường liên quan đến việc đọc dữ liệu từ nguồn bên ngoài, tải nó vào cơ sở dữ liệu dàn, thực hiện các biến đổi nhất định và tải nó vào cơ sở dữ liệu cuối cùng

Một ví dụ đơn giản là sử dụng SSIS để đọc các tệp excel được cung cấp bởi các giáo viên sử dụng SSIS và tải chúng vào cơ sở dữ liệu. Sau đó viết các thủ tục được lưu trữ hoặc nhiều gói SSIS hơn để tính điểm của từng học sinh và tải dữ liệu đó vào một kho dữ liệu

Sau đó, bạn xây dựng các quy trình được lưu trữ trên đỉnh mart để tạo đầu ra được sử dụng bởi các công cụ báo cáo (SSRS \ Excel \ etc) để tạo trực quan hóa.

Tôi đang cố gắng hiểu làm thế nào để thực hiện TDD và kiểm tra đơn vị thích hợp trong kịch bản này. Các thử nghiệm cho ETL chủ yếu là về việc đảm bảo dữ liệu được tải trong các bảng phân tầng khớp với tập hợp con của dữ liệu từ nguồn. Vì vậy, việc thực hiện một thử nghiệm cho nó dẫn đến việc thực hiện một phiên bản mini của ETL. Đầu ra của SP báo cáo phụ thuộc vào chính dữ liệu trong các bảng, do đó, người ta không thể có một bộ dữ liệu đầu ra ổn định mà không gặp ác mộng bảo trì ngay cả khi bạn tạo cơ sở dữ liệu chứa dữ liệu kiểm tra được lọc

Thí dụ:

Sprint 1: Bảng học sinh chứa Tên, Tuổi, Lớp

Bạn tạo dữ liệu thử nghiệm cho bảng này và thử nghiệm đơn vị dựa trên đó

Sprint 2: Một trường giới tính được thêm vào bảng.

Bây giờ, nếu bạn làm mới dữ liệu trong trường sinh viên để điền thuộc tính giới tính, các trường hợp kiểm tra sẽ bị vô hiệu do dữ liệu thay đổi. Và nếu bạn không, bạn không thể tạo các trường hợp kiểm tra yêu cầu cột giới tính


Đó không phải là TDD nếu công cụ bạn đang thử nghiệm đã tồn tại. Chỉ cần viết bài kiểm tra bình thường.
Robert Harvey

@RobertHarvey Thực tế, công cụ ETL không khác với .Net Framework khi viết mã C # phải không? Vì vậy, công cụ tồn tại giống như cách tồn tại .Net framework, nhưng bạn có thể thực hiện TDD trong C #
user87166

Tôi cũng sẽ không kiểm tra các phương thức Framework. Tôi cho rằng họ đã làm việc. Nếu bạn đang kiểm tra cấu hình cho một công cụ ETL, bạn không cần phải tạo lại logic trong công cụ ETL để làm điều đó; chỉ cần sử dụng công cụ.
Robert Harvey

1
Sau đó viết các bài kiểm tra, sử dụng các kỳ vọng mà bạn mong đợi nhận được từ ETL, dữ liệu được đề xuất và cấu hình được đề xuất. Làm cho họ kiểm tra khái niệm, nếu bạn thích, nhưng chức năng đã tồn tại. Phát triển "thử nghiệm đầu tiên" thuần túy là dành cho những thứ chưa tồn tại. Dù bạn làm gì, đừng phát minh lại công cụ ETL!
Robert Harvey

2
"kể từ khi tuổi trong dữ liệu cơ sở thay đổi" - việc cung cấp dữ liệu kiểm tra ổn định làm đầu vào có gì khó khăn ? Nếu có các tính toán phụ thuộc thời gian liên quan, giả định bộ đếm thời gian tham chiếu ra.
Doc Brown

Câu trả lời:


2

Những gì tôi đã làm trong quá khứ là sử dụng Phát triển theo hướng chấp nhận thử nghiệm . Mã ETL thường được phân phối trên các giai đoạn / ngôn ngữ và công nghệ khác nhau VÀ được kết hợp chặt chẽ. Hầu hết quá trình ETL phụ thuộc vào chuỗi biến đổi trong đường ống.

Rủi ro khi sử dụng thử nghiệm đơn vị chỉ trong ETL là nó sẽ không bao gồm các tích hợp. Trình tự các phép biến đổi là một phần bằng với các phép biến đổi thực tế trong nhiều ETL. Nếu tôi đang dành tài nguyên cho việc tạo một bộ kiểm tra tự động, tôi sẽ đảm bảo rằng nó cũng bao gồm cả trình tự.

Tôi sẽ tập trung vào TDD cho từng chuỗi biến đổi duy nhất hoặc ít nhất là bao gồm các thử nghiệm này trong một bộ thử nghiệm lớn hơn. Nếu có quá nhiều kết hợp, bạn có thể phải chọn và chọn chuỗi nào để kiểm tra. Ý tưởng là xác nhận đường ống ETL cho (các) tập dữ liệu mà nó sẽ được sử dụng. Cũng như đảm bảo rằng bạn có phạm vi kiểm tra trên tất cả các mã của bạn.


0

ETL có thể được thực hiện với TDD và kiểm tra khá giống với hầu hết các dự án, tức là

viết một bài kiểm tra không thành công (màu đỏ) sửa lỗi (màu xanh lá cây) làm cho mã đục lỗ & duy trì (tái cấu trúc)

Vì vậy, đối với ETL có thể là:

  • viết một kịch bản để tải 1 bản ghi
  • thất bại (không có nguồn dữ liệu được xác định)
  • xác định nguồn [xanh]
  • không cần tái cấu trúc
  • viết một bài kiểm tra để tải 1 bản ghi chỉ với 1 trường được điền vào
  • thất bại (không có mã được viết cho trường đó)
  • xác định chi tiết mã cho trường đó
  • cấu trúc lại
  • xác định các thử nghiệm thất bại tìm kiếm các thuộc tính có giá trị hợp lệ [đỏ]
  • Vân vân

8 bước đầu tiên không liên quan gì đến TDD, vì họ không để lại bất kỳ thử nghiệm nào. Phần còn lại không rõ ràng.
Bulat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.