نیک آموز > وبلاگ > مهندسی داده > ۴ روش مهم برای اضافه کردن تست به خطوط پردازش داده
۴ روش مهم برای اضافه کردن تست به خطوط پردازش داده

۴ روش مهم برای اضافه کردن تست به خطوط پردازش داده

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۱۳ بهمن ۱۴۰۰
آخرین بروزرسانی: 25 اسفند 1404
زمان مطالعه: 15 دقیقه
۵
(۱)

تست خطوط پردازش داده (Pipelines) با تست برنامه‌های کاربردی دیگر، مانند یک وب‌سایت، متفاوت است. اگر شما با چالش‌های زیر مواجه هستید:

مسئولیت خطوط پردازش داده را به عهده گرفته‌اید که هیچ تستی ندارد. باید اضافه کردن ویژگی‌های جدید به خطوط پردازش داده‌ای را شروع کنید که هیچ تستی ندارد. پس می‌توان گفت این مقاله از نیک آموز دقیقا مناسب شماست. ما در این مقاله به دو نوع تست کلی برای اطمینان از کیفیت و صحت داده‌ها می‌پردازیم:

  • تست کیفیت داده‌ها، پس از پردازش و قبل از اینکه در دسترس کاربران نهایی قرار گیرد.
  • تست‌های استاندارد، مانند تست سیستمی‌، تست واحد، تست ادغام و تست قرارداد.

ما همچنین به بحث نظارت و هشدار می‌پردازیم تا اطمینان حاصل کنیم که در مورد انحراف اندازه داده‌ها، شکست خطوط پردازش داده و غیره هشدار لازم را دریافت می‌کنیم.

 

 💡 با دوره Data Lakehouse مقدماتی یاد بگیرید چطور داده‌های پراکنده را به یک زیرساخت تحلیلی قدرتمند تبدیل کنید همین حالا شروع کنید.

 

تست خطوط پردازش داده

فرض می‌کنیم شما مسئولیت خطوط پردازش داده را به عهده گرفته‌اید که هیچ تستی ندارد. خیلی بعید است که زمان کافی برای نوشتن تست داشته باشید تا به پوشش کد به صد در صد برسد. در چنین مواردی، شناسایی و تست خروجی‌های کلیدی خطوط پردازش داده بسیار مهم است. یک دستورالعمل متداول برای اضافه کردن تست‌ها عبارتند از:

  • تست سیستمی انتها به انتها
  • تست کیفیت داده‌ها
  • نظارت و هشدار (از نظر فنی تست محسوب نمی‌شود، اما برای تشخیص انحراف اندازه داده‌ها، شکست خطوط پردازش داده و غیره ضروری است)
  • تست واحد و قرارداد

توجه داشته باشید که ابتدا کلیت سیستم را مورد تست قرار می‌دهیم و سپس تست‌هایی را به اجزای جداگانه اضافه می‌کنیم. در حالی که این ترتیب اجرای تست به طور کلی توصیه می‌شود، اما بسته به موقعیت شما، می‌توانید ترتیب اجرای این تست‌ها را نادیده بگیرید یا تغییر دهید و بر اساس شرایط روال تست را طراحی کنید.

فرض می‌کنیم شما مسئولیت خطوط پردازش داده را به عهده گرفته‌اید که روال‌های زیر را انجام می‌دهد:

  • داده‌های S3 را می‌خواند.
  • دو تبدیل پایتون و اسپارک را انجام می‌دهد.
  • داده‌های تبدیل یافته را به یک انبار داده بارگذاری می‌کند تا توسط کاربران نهایی استفاده شود.

     

     تست خطوط پردازش داده
    تست خطوط پردازش داده

 

۱) تست سیستمی انتها به انتها

همان‌طور که در حال شروع به اضافه کردن ویژگی‌های جدید هستید، دقت داشته باشید عملکرد موجود در اثر اضافه شدن ویژگی‌های جدید دچار شکست نشود. برای این منظور باید تست سیستمی انتها به انتها داشته باشید. برای تست سیستمی انتها به انتها می‌توان با استفاده از نمونه‌ای از داده‌های ورودی، اجرای مراحل پردازش داده‌ها با استفاده از نسخه توسعه یافته خط پردازش داده و در نهایت مقایسه خروجی با خروجی‌های مورد انتظار انجام داد.

 

تست سیستمی
تست سیستمی

 

 💡 در این راهنمای کامل، نصب آپاچی کافکا در ۱۱ مرحله؛ از راه‌اندازی تا بهینه‌سازی را یاد می‌گیرید و قدم‌به‌قدم با روش صحیح پیاده‌سازی و آماده‌سازی Kafka برای استفاده در پروژه‌های واقعی آشنا می‌شوید.

 

یک قطعه نمونه کد برای افزودن تست سیستم با استفاده از

Pytest
import pytest
from your.data_pipeline_path import run_your_datapipeline
class TestYourDataPipeline:
@pytest.fixtures(scope="class", autouse=True)
def input_data_fixture(self):
# get input fixture data ready
yield
self.tear_down()
def test_data_pipeline_success(self):
run_your_datapipeline()
result = {"some data or file"}
expected_result = "predefined expected data or file"
assert result == expected_result
def tear_down(self):
# remove input fixture data

این تست قبل از اینکه کد در شاخه اصلی ادغام شود در محیط توسعه اجرا می‌شود. این کار باعث می‌شود اطمینان حاصل کنید که خط پردازش داده شما هنگام اضافه کردن ویژگی‌های جدید دچار مشکل نمی‌شود.

۲) تست کیفیت داده‌ها

این نوع تست برای خطوط پردازش داده منحصر به فرد است. به‌ جای تست کد، داده‌های تبدیل‌شده را بررسی می‌کنیم و مطمئن می‌شویم که دارای ویژگی‌هایی است که ما انتظار داریم. ما می‌توانیم این کار را مطابق شکل زیر انجام دهیم.

 

تست کیفیت داده‌ها
تست کیفیت داده‌ها

 

ما تسک های زیر را به خط پردازش داده اضافه می‌کنیم:

  • تسک بارگذاری داده‌های تبدیل یافته در جدول یا مجموعه داده موقت.
  • تسک اطمینان از اینکه داده‌های جدول موقت مطابق با انتظاراتی است که از داده‌های پردازش شده داریم. این مرحله معمولاً شامل بررسی محدودیت‌های منحصربه‌فرد، مجموعه مقادیر مجاز، قوانین تجاری، بررسی داده‌های خارج از محدوده و غیره است.

توجه داشته باشید که چطور این تست هر بار بخشی از خط پردازش داده را مورد بررسی قرار می‌دهد، بر خلاف تست سیستمی انتها به انتها که کلیت خط پردازش داده را مورد بررسی قرار می‌دهد.

Dbt و Great Expectation عملکرد قدرتمندی را ارائه می‌دهند که انجام این نوع بررسی‌ها را آسان می‌کند. اگر بررسی کیفیت داده‌ها ناموفق باشد، یک هشدار برای تیم مهندسی داده صادر می‌شود و داده‌ها در جدول نهایی بارگذاری نمی‌شوند. این به مهندسان داده اجازه می‌دهد تا قبل از دادن حق دسترسی به کاربران نهایی، مسائل غیرمنتظره کیفیت داده را تشخیص داده و رفع کنند.

 

 💡 با دوره مهندسی داده مهارت طراحی و ساخت سیستم‌های داده مقیاس‌پذیر را یاد بگیرید و به یک مهندس داده حرفه‌ای تبدیل شوید.

 

  • نظارت و هشدار

با تست کیفیت داده‌ها، ما می‌توانیم به طور منطقی از کیفیت داده‌های خود مطمئن باشیم. اما ممکن است انحرافات غیرمنتظره‌ای در اندازه داده‌ها، انحرافات در تعداد ردیف‌های حذف شده و غیره وجود داشته باشد. برای آگاهی از تغییرات غیرمنتظره در اندازه داده‌ها، باید خط لوله داده خود را به سیستم نظارت و هشدار مجهز کنیم.

برای پیاده‌سازی نظارت و هشدار می‌توان با ارسال لاگ به سرویس‌هایی مانند newrelic یا datadog یا ارسال لاگ به پایگاه داده انجام داد.

ما می‌توانیم هشدارها را بر اساس لاگ در newrelic یا datadog تنظیم کنیم. اما دقت داشته باشید اگر لاگ‌ها را به یک پایگاه داده ارسال کنیم، به سرویس‌هایی مانند Looker یا Metabase نیاز داریم تا در صورت تغییر اندازه داده‌ها به ما هشدار دهند.

لاگ‌ها می‌توانند حتی شامل موارد ساده‌ای باشند. به عنوان مثال لاگ تعداد ردیف‌های پایگاه داده قبل و بعد از مرحله تبدیل.

// logs
{"start_datetime": "2021-06-15 04:55:55", "end_datetime": "2021-06-15 05:10:15", "run_id": "unique_run_id", "transformation_id": "transformation_step_unique_id", "row_count_before": 1000, "row_count_after": 700, "other_metadata": "some number"}

تنظیم یک هشدار برای داده‌های خارج از محدوده می‌تواند از طریق datadog یا newrelic انجام شود. اگر لاگ‌ها در یک پایگاه داده ذخیره می‌شوند، یک هشدار در Looker یا Metabase تنظیم کنید.

 

نظارت و هشدار
نظارت و هشدار

 

  • تست واحد و قرارداد

وجود تست انتها به انتها، تست کیفیت داده‌ها و سیستم نظارت و هشدار به شما این اطمینان را می‌دهد که سریع‌تر حرکت کنید و داده‌هایی با کیفیت خوب ارائه دهید. مرحله بعدی اضافه کردن تست‌های واحد استاندارد برای عملکردها و تست‌های قراردادی است که در آن خط پردازش داده با سیستم‌های خارجی تعامل دارد، مانند صدا زدن API برای یک میکروسرویس. این تست‌ها هنگام اصلاح منطق کد به شما اطمینان بیشتری می‌دهد و به طور کلی به جلوگیری از بروز اشکالات کمک می‌کند.

 

 💡 با دوره آموزش معماری میکروسرویس یاد بگیرید چگونه سیستم‌های نرم‌افزاری مقیاس‌پذیر، ماژولار و قابل توسعه طراحی و پیاده‌سازی کنید.

 

سخن پایانی خطوط پردازش داده 

 

امیدواریم این مقاله ایده خوبی در مورد نحوه شروع تست خط پردازش داده به شما داده باشد. داشتن این تست‌ها شما را قادر می‌سازد تا ویژگی‌ها را با اطمینان اضافه کنید. همچنین تضمین می‌کند که داده‌های خروجی با کیفیت هستند. برای جمع‌بندی، اضافه کردن تست‌ها و نظارت را به ترتیب زیر شروع کنید:

  1. تست سیستمی انتها به انتها
  2. تست‌های کیفیت داده‌ها
  3. نظارت و هشدار
  4. تست واحد و قرارداد

همچنین مشاهده کردید که دو نوع تست کلی برای اطمینان از کیفیت و صحت داده‌ها وجود دارد:

  1. تست کیفیت داده‌ها، پس از پردازش
  2. تست‌های استاندارد

ایده اصلی این است که شروع به تست خروجی‌های کلیدی خط پردازش داده کنید. از تست انتها به انتها شروع کنید و به سمت تست‌های واحد حرکت کنید.

 

 

سوالات متداول خطوط پردازش داده

 

۱. چرا تست خطوط پردازش داده با تست برنامه‌های کاربردی معمولی متفاوت است؟

زیرا در خطوط پردازش داده تمرکز اصلی علاوه بر کد، روی صحت و کیفیت داده‌های خروجی است. به همین دلیل علاوه بر تست‌های نرم‌افزاری استاندارد، تست کیفیت داده نیز انجام می‌شود.

۲. دو نوع تست کلی برای اطمینان از صحت داده‌ها در خطوط پردازش داده چیست؟

یکی تست کیفیت داده‌ها که پس از پردازش داده انجام می‌شود و دیگری تست‌های استاندارد نرم‌افزاری مانند تست سیستمی، تست واحد، تست ادغام و تست قرارداد.

۳. وقتی یک خط پردازش داده بدون تست در اختیار ما قرار می‌گیرد، اولین قدم برای شروع تست چیست؟

به دلیل محدودیت زمان برای رسیدن به پوشش کامل کد، ابتدا باید خروجی‌های کلیدی خط پردازش داده شناسایی شده و تست روی آن‌ها انجام شود.

۴. ترتیب پیشنهادی برای اضافه کردن تست‌ها در خطوط پردازش داده چیست؟

ابتدا تست سیستمی انتها به انتها انجام می‌شود، سپس تست کیفیت داده‌ها اضافه می‌شود، بعد از آن سیستم نظارت و هشدار پیاده‌سازی می‌شود و در نهایت تست‌های واحد و قراردادی اضافه می‌شوند.

۵. هدف تست سیستمی انتها به انتها در خطوط پردازش داده چیست؟

هدف این تست اطمینان از این است که با اضافه شدن ویژگی‌های جدید، عملکردهای قبلی خط پردازش داده دچار اختلال یا شکست نشوند.

۶. تست سیستمی انتها به انتها چگونه انجام می‌شود؟

با استفاده از یک نمونه داده ورودی، کل مراحل پردازش داده اجرا شده و در پایان خروجی تولید شده با خروجی مورد انتظار مقایسه می‌شود.

۷. تست کیفیت داده‌ها چه چیزی را بررسی می‌کند؟

در این تست داده‌های تبدیل‌شده بررسی می‌شوند تا مشخص شود آیا ویژگی‌های مورد انتظار مانند یکتایی داده‌ها، مقادیر مجاز، قوانین تجاری و محدوده داده‌ها رعایت شده است یا خیر.

۸. اگر تست کیفیت داده‌ها با شکست مواجه شود چه اتفاقی می‌افتد؟

یک هشدار برای تیم مهندسی داده ارسال می‌شود و داده‌ها در جدول نهایی بارگذاری نمی‌شوند تا مشکل کیفیت داده برطرف شود.

۹. سیستم نظارت و هشدار در خطوط پردازش داده چه کاربردی دارد؟

این سیستم برای شناسایی تغییرات غیرمنتظره مانند انحراف در اندازه داده‌ها، تعداد ردیف‌ها یا شکست مراحل پردازش استفاده می‌شود.

۱۰. تست‌های واحد و قراردادی در خطوط پردازش داده چه نقشی دارند؟

این تست‌ها عملکرد صحیح توابع و همچنین تعامل خط پردازش داده با سیستم‌های خارجی مانند APIها را بررسی می‌کنند و هنگام تغییر منطق کد از بروز خطا جلوگیری می‌کنند.

 

 

 

چند نکته مهم در ادامه مقاله منتظر شماست؛ حتما ادامه مطلب را ببینید:

 

 

منبع

 

 

https://www.startdataengineering.com/post/how-to-add-tests-to-your-data-pipeline

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

title sign
دانلود مقاله
۴ روش مهم برای اضافه کردن تست به خطوط پردازش داده
فرمت PDF
7 صفحه
حجم 1 مگابایت
دانلود مقاله
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
414 مقاله توسط این نویسنده
تیم فنی نیک آموز
title sign
معرفی محصول
دوره Data Lakehouse مقدماتی
حسن احمدخانی

دوره آنلاین Data Lakehouse مقدماتی

طلایی
55,750,000 تومان39,025,000 تومان
نقره‌ای
15,750,000 تومان11,025,000 تومان
title sign
دیدگاه کاربران