مطالبات منحصر به فرد تست Asynchronous در مهندسی

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

چالش های اصلی در تست توابع Asynchronous

دانلود بازی Timing-Dependent Flakiness

توابع ناهمزمان به محرک های خارجی مانند انقضای زمان، پاسخ شبکه یا وقفه های سخت افزاری متکی هستند. تستی که به یک پنجره زمان خاص بستگی دارد ممکن است به یک دونده CI سریع منتقل شود اما در یک ماشین توسعه دهنده کندتر شکست بخورد، به عنوان مثال، یک آزمایش setTimeout] با یک 100 متر تاخیر ممکن است در یک محیط زیست کامل شود و مکانیسم های اثبات آن در زمان بسیار دشوار است.

دانلود بازی Cut Test and Teardown

تست یک تابع ناهمزمان اغلب نیازمند ارکستر چندین عملیات همزمان است: شروع کارگران پس زمینه، گوش دادن به پخش کنندگان رویداد، به مسخره کردن خدمات خارجی و تمیز کردن دستگیره های دائمی، مهندسان باید وعده ها، تماس ها، یا یک سینتکس / یک صبر کنند در حالی که اطمینان حاصل می کنند که همه منابع به درستی پس از هر تست آزاد می شوند.

شرایط نژادی و عدم تنش

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

پیچیدگی های پیچ و شبیه سازی

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

دانلود موسیقی متن فیلم The Layage and Hang Trial

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

راه حل ها و استراتژی های اثبات شده

استفاده از چارچوب های تست با پشتیبانی Native Async

در این میان، در این زمینه، به صورت زیر به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت زیر، به صورت مستقیم به صورت زیر، به صورت زیر و رو، به صورت زیر، به صورت زیر، به صورت زیر به صورت زیر و رو می آید.

پیاده سازی تعیین کننده و جوشکاری

جایگزین وابستگی های ناهمزمان با الگوهای تعیین کننده که به مقادیر کنترل شده در زمان های قابل پیش بینی بازمی گردند. [برای مثال، به جای انتظار برای درخواست HTTP واقعی، لایه شبکه را با یک مدل که بلافاصله حل می کند، کتابخانه هایی مانند sinon]، به عنوان مثال، در پروتکل های خاص مهندسی پورت (FLT:2.3)، اجازه می دهد تا پاسخ های دقیق و یا (F3) را شبیه سازی کنند، بدون محدودیت های فنی، به تأخیر انداختن پاسخ های فنی، و واکنش های فنی واقعی، به تأخیر در شرایط خاص، و یا سیستم های مهندسی پورت.

استفاده از تایمر و برنامه ریزی برای Synchronization

حتی با مسخره کردن، برخی از تست ها نیاز به زمان واقعی دارند.استفاده از زمان های عاقلانه (در Jest یا Testing Library) که به عملیات اجازه می دهد تا تکمیل شود، بسیاری از چارچوب های تست، خدمات مانند waitFor را فراهم می کنند، که به طور خاص به بررسی یک وضعیت تا زمانی که درست شود یا یک وقفه زمانی پیچیده تر، استفاده از یک روش مجازی یا زمان حذف (F) به طور خاص اجازه دهید.

اتخاذ هرم تست برای کد Async

همه تست های async نیاز به تست یکپارچه سازی کامل ندارند: تست های واحد زیادی را بنویسید که عملکردهای فردی async را با استفاده از مسخره ها جدا کنند؛ تعداد متوسط تست های ادغام که تعاملات بین چند جزء چند جزء را تأیید می کنند؛ و چند آزمون نهایی که به عنوان خط لوله کامل تمرین می کنند، این رویکرد به حداقل می رسد ککسیness به دلیل تست های واحد تعیین کننده، در حالی که تست های نهایی استفاده می شوند و منطق استراحت مجدد شامل می شوند.

پیاده سازی زمان بندی و الگوهای تمیز کننده

همیشه زمان سنجی های تست شده را تنظیم کنید و از پس از هر استفاده کنید تا منابع یک کامپوزیت را تمیز کنید، به عنوان مثال، در Node.js، تمام اتصالات پایگاه داده باز را ببندید یا سرورهای مسخره را پس از هر تست متوقف کنید.از ساختارهای سازگار برای تشخیص استفاده کنید: یک عملیات با یک زمان که عملیات طولانی را رد می کند، اگر این کار را به طور کامل انجام دهد، این کار را انجام نمی دهد.

برنامه های کاربردی و مطالعات موردی

سیستم های کنترل زمان واقعی

در سیستم هایی مانند کنترل کننده های منطقی قابل برنامه ریزی (PLC) یا رباتیک، توابع ناهمسان کنترل جوش سنسور و دستورات محرک.یک تست شکست ممکن است اجازه دهد یک سنسور تاخیر خواندن یک ارزش جدیدتر را بازنویسی کند، که منجر به حالت های خطرناک می شود. تیم ها در شرکت هایی مانند (FLT:0NI (Stand) [F1 استفاده از سخت افزار سخت افزاری سخت افزاری با شبیه سازی های تست کننده ترکیب شده به دستگاه های تست های سطح میکرو ثانیه بدون زمان بندی زمان بندی فیزیکی.

خرید داده ها و پلتفرم های IoT

نرم افزار مهندسی که داده های جریان را از هزاران دستگاه IoT می بلعد باید بسته های خارج از سفارش، اتصالات کاهش یافته و تأخیر متغیر را کنترل کند. [۳] چنین سیستم هایی نیازمند سرورهای پیچیده ای هستند که رفتار دستگاه را در شرایط شبکه متنوع شبیه سازی می کنند، با استفاده از ابزارهایی مانند WireMock [FLT ۱: ۱] یا سفارشی [F:2Async] [F۳]

محاسبات علمی و شبیه سازی

توابع همزمان در شبیه سازی های علمی اغلب محاسبات موازی، فایل I/O و ارتباطات متقابل پردازش را مدیریت می کنند. تست های Flaky در این محیط ها می توانند اعتماد به نفس را در نتایج شبیه سازی کاهش دهند. بهترین روش شامل جدا کردن I / O با با با بافرهای درون و استفاده از برنامه ریزی های تعیین کننده برای کنترل سفارش وظایف همزمان است.

ایجاد فرهنگ تست قوی

غلبه بر چالش های تست async تنها یک تلاش فنی نیست. تیم های مهندسی باید فرهنگی را پرورش دهند که قابلیت اطمینان آزمون را دارد.

  • ] سرمایه گذاری در ثبات CI: [ [FLT 1 ] تست های یک کامپوزیت را در ظروف جدا شده با تخصیص منابع سازگار برای کاهش گرفتگی محیط زیست اجرا کنید.
  • تست های ضعیف را به عنوان اشکالاتی انجام دهید: بلافاصله بررسی و اصلاح شکست های متناوب به جای نادیده گرفتن آنها.
  • توسعه رفتار محور (BDD): تست نوشتن که بر رفتار سیستم قابل مشاهده تمرکز می کند به جای جزئیات زمان بندی داخلی.
  • یادگیری مداوم: به طور منظم الگوهای تست و به روز رسانی را بررسی کنید، زیرا سیستم تکامل می یابد.

نتیجه گیری

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