جمعه , ۲۱ اردیبهشت ۱۴۰۳

Continuous Performance Testing در محیط‌های Agile

Continuous Performance Testing
Continuous Performance Testing

اجازه بدهید با حقیقتی مواجه شویم: Agile حقیقت زندگیست. شاید شما یک کارگاه Full Agile ندارید و یا ممکن است Continuous Integration-CI را انجام ندهید، یا حتی تا کنون در مورد DevOps صحبت هم نکرده باشید، اما واقعیت این است که فشارهای موجود در بازار باعث می­‌شود تا بسیاری از مزایا مانند کیفیت و سرعت، که جز ذات متدولوژی‌­های Agile یا شبه Agile هستند، را درک کنید.

هنگامیکه شما تبدیل شدن به Agile را آغاز می‌­کنید، توسعه‌­دهندگان کد را با سرعت بالایی به پیش می‌­برند، و اکثر تسترها تلاش می‌­کنند تا این سرعت را بالا نگاه دارند.  علاوه بر این، تسترها در تیم­‌های Agile اغلب مسئولیت تست اتومات، Unite Testing، Regression Testing، و همینطور Load Testing و Performance Testing را به عهده دارند. در این محیط، شما باید نگران بالا نگه داشتن سرعت توسعه باشید، در حالیکه چنین اجماعی انتظارات از کیفیت را افزایش می­دهد.

Performance Testing در Agile قدرتمندتر از محیط­‌های توسعه استاندارد است، چون شما می‌­توانید:

  1. از کشف دیرهنگام مشکلات Performance جلوگیری کنید: هنگامیکه Load Test و Performance Test تا انتهای چرخه توسعه، تحت فشار قرار دارند، اغلب زمان کمی(نزدیک به هیچ) برای توسعه­‌دهندگان برای اعمال تغییرات وجود دارد. این موضوع می‌تواند منجر به این شود که تاریخ انتشار نسخه را عقب انداخته و در تحویل امکانات مورد نیاز مشتری تاخیر ایجاد شود.
  2. تغییرات را هنگامی اعمال کنید که آنها ارزانتر هستند: با قرار گرفتن Load Test و Performance Test در فرآیند Continuous Integration Testing، سازمان قادر به در اختیار گرفتن سریع پیامدهای Performance قبل از اینکه برای اصلاح بسیار گران بشوند، خواهد بود. این موضوع به خصوص در هنگام کشف یک مشکل Performance، چند هفته بعد از انتشار نسخه، در تیم‌­های Agile صادق است، که می­‌تواند بدین معنی باشد که این کابوس از چند نسخه قبل وجود داشته و علت اصلیِ این مشکل است، که اکنون رفع آن هزینه­‌ای به مراتب بیشتر خواهد داشت.

به همین روش، ترکیب کردن Agile با Load Test می­‌تواند مزایایی خاص ایجاد نماید. این موضوع می‌­تواند تیم شما را با چالش­‌هایی منحصر به فرد که ممکن نیست در گذشته آنها را تجربه کرده باشید، روبرو کند، از جمله:

  1. چرخه­‌های کوتاهتر توسعه، نیازمند تست بیشتر در زمانی کم هستند: با استفاده از Agile، چرخه­‌های توسعه کوتاهتر شده، و Load Test و Performance Test تا روز آخر اسپرینت یا گاهی اوقات در هر کدام از اسپرینت­‌های بعدی با فشار انجام می‌­شوند. این موضوع غالبا بدین نتیجه منتهی می­‌شود که کد سیستم به اندازه کافی تست نشده و یا User Storyها به نسخه بعدی منتقل می‌شوند تا حداقل یک بار مورد تست قرار گیرند. راهکار Conceptual این است که تست را در چرخه توسعه سریعتر آغاز کنید، اما این موضوع به زبان ساده است، و زمانی سختیِ آن پررنگ‌تر می‌­شود که بدانید تیم‌­های زیادی وجود دارند که منابع و ابزار کافی برای انجام این کار ندارند.
  2. توسعه­‌دهندگان اکنون نیازمند بازخورد هستند: توسعه­‌دهندگان Agile باید حقایقی بیشتر از این موضوع که کُد آنها عامل پیامدهای Performance است بدانند: آنها باید بدانند چه زمانی کد آنها باعث آغاز مشکلات شده و چه داستانی در زمان شروع این مشکلات پیش خواهد آمد. این یک درد بزرگ برای توسعه­‌دهندگانیست که مجبور به بازگشایی و اصلاح کدی باشند که هفته‌­ها و ماه‌­های گذشته به درستی کار می‌کرده است. این موضوع علاوه بر این، بدین معنیست که آنها نمی‌­توانند وقت خود را صرف کار بر روی امکانات جدید کنند. باید مسائل Performance را در چرخه به سرعت تشخیص دهید، بنابراین شما می­‌توانید به منظور صرفه­‌جویی در هزینه­‌ها سریعا بازخوردهای مهمی را به توسعه‌­دهنده ارائه دهید.
  3. اتومات کردن هدایت کار از Dev به Ops می‌­تواند یک کار ریسکی باشد: در حالیکه DevOps و استقرار مداوم همچنان بخشی از Practiceهای جوانیست که منجر به احساس ترس و نگرانی توسط تیم­ بهره‌­برداری می‌­شود. علت این نگرانی در این موضوع نهفته شده است که مبادا تغییرات جدید در کد منجر به کاهش سرعت و یا حتی لغو برنامه در زمان استقرار در محیط Production شود. اتومات کردن برخی از تست­‌ها در فرآیند Continuous Integration-CI که می­‌تواند به رفع یا کاهش این نگرانی‌­ها کمک کند، بدون وجود Performance Testing کافی همچنان ریسکی واقعی در این زمینه را نوید می­‌دهد. تیم­‌های Ops تاثیر بزرگ خرابی اپلیکیشن روی Business را به خوبی می‌­دانند.

غلبه بر چالش‌ها

Best Practiceهای زیر درحالیکه در غلبه بر چالش­‌های Load Test در یک محیط Agile ایفای نقش می‌کنند، می‌­توانند در راستای به حداکثر رساندن امتیازات و مزایا نیز به شما کمک کنند.

Performance SLAها را روی Task Board قرار دهید

هر اپلیکیشنی باید حداقل توافقنامه سطح سرویس(SLA) را به منظور برآورده کردن داشته باشد، اما تیم­‌های Agile اغلب بیشتر روی افزودن امکانات و Functionality به یک اپلیکیشن متمرکز می‌­شوند تا بهبود Performance در اپلیکیشن. User Storyها معمولا از جنبه Functional و بدون در نظر گرفتن مشخصات نیازمندی­‌های Performance در اپلیکیشن، نوشته می­‌شوند. اگر تیم قصد دارد به Performance توجه داشته باشد، این موضوع باید در قسمتی از Task Board ثبت شده باشد.

همکاری نزدیک با توسعه‌دهندگان جهت پیش­بینی تغییرات

یکی از مزایای کار تسترها در یک محیط Agile این است که آنها معمولا در طول روز، بواسطه جلسات Stand up  یا جلساتی مشابه، در جریان به­‌روزرسانی‌­های کارهای Development قرار می‌­گیرند.

در راستای نائل شدن به حداکثر بهره از این سطح همکاری، تسترها باید به صورت مداوم در مورد چگونگی کد شدن داستان­‌هایی(User Story) که تست خواهند شد، تفکر کرده و اطلاعات بدست آورند. آیا نیاز به تست کامل و جدید روی Load وجود دارد؟ آیا آنها باعث ایجاد خطا در Test Scriptهای فعلی خواهند شد؟ اگر شما از قبل برنامه‌­ریزی کرده‌­اید، آیا می­‌توانید از تغییرات جزیی روی Test Scriptها جلوگیری کنید؟ اکثر اوقات، اینها تغییراتی کوچک هستند، بنابراین اگر تسترها خود را در تیم درگیر کنند، قادر خواهند بود به لحاظ عملیاتی جلو باشند.

یکپارچگی با Build Server

حتی اگر شما هنوز به طور کامل روی چرخ Agile حرکت نمی­‌کنید، احتمالا یک Build Server دارید که برخی از تست‌های اتومات، Unit Testها، Smoke Testها، Regression Testها، و غیره را اجرا می­‌کند. همانطور که اهداف Performance به Task Board افزوده شدند، Performance Testها هم باید در میان تست‌­هایی که در هر Build انجام می­‌شوند، اجرا گردند. این موضوع می­‌تواند به سادگیِ تنظیم یک تریگِر برای آغاز تست توسط Build Server باشد، اما بسته به میزان پیچیدگیِ Integration، می­‌تواند مشتمل بر نمایش Test Resultها در ابزار Build باشد. به صورت ایده­‌آل شما فردی را می‌خواهید که Build را به منظور رویت سریع نتایج اجرا کرده و بداند کدام تغییرات وارد Build می‌­شوند، آنچنانکه در صورت وجود مشکلاتی در Performance، آنها اصلاح شوند.

CI + Build شبانه + پایان اسپرینتِ Load Test

تفاوت میان Buildهای Continuous Integration، بیلدهای شبانه، و Buildهای تولید شده در پایان اسپرینت‌­ها می­تواند بسیار زیاد باشد. ما در مورد تفاوت میان یک تغییر منفردِ ارسال شده به سرور Version Control در مقابل تمام تغییرات ارسال شده در یک روز و نیز تمام تغییرات ارسال شده در طول یک اسپرینت، صحبت می­‌کنیم. با این زمینه ذهنی، شما باید Load Test خود را با انواع Buildهایی که اجرا می­‌کنید، تنظیم نمایید.

توسعه Agile، بهره‌­وریِ تیم‌­ها و کیفیت را افزایش می‌­دهد.

Best Practice در اینجا این است که کا را به صورت داخلی و کوچک آغاز کنید. برای CI Buildهایی که هرگاه شخصی یک تغییر را ارسال می‌کند آغاز می‌­شوند، شما می‌خواهید این تست‌ها به سرعت اجرا شده و سپس نتیجه را به توسعه‌­دهنده‌­ای که تغییراتش سیستم را متاثر کرده ارجاع دهید.  در نظر داشته باشید که اجرای یک تست Performance کوچک(که عمومی­‌ترین سناریوهای پوشش یافته با Load معمول روی اپلیکیشنِ شما را شامل شامل می‌شود)، از Load Generatorهای درونیِ خودتان استفاده می‌­کند. برای Buildهای شبانه، آنرا بالا ببرید تا چیزی بیش از سناریوهای Corner Case را شامل شود و Load را آنچنانکه در زمان­‌های پیک رویت می‌­کنید افزایش دهید تا بتوانید هر یک از مسائل Performance که در طول CI Test از دست رفته بودند را ببینید. در پایان اسپرینت، تولید Load از Cloud را مد نظر داشته باشید، تا ببینید هنگامیکه که کاربرها از طریق Firewall به اپلیکیشن شما دسترسی پیدا می‌­کنند، چه اتفاقی رخ می‌­دهد. مطمئن شوید که هر SLAای روی لیست محدودیت­‌ها، پاس شده است، آنچنانکه هر داستانی که در خلال اسپرینت تکمیل شده است، را بتوان به عنوان “انجام شده” علامت‌گذاری نمود.

جمع‌­بندی

Agile Development عبارتند از: افزایش بهره­‌وری تیم و کیفیت اپلیکیشن­‌ها. هنگام افزودن Load Test و Performance Test به این فرآیند، دقت کنید که Planning باید اجرا شود، تا از این موضوع که Performance یک اولویت در هر Iteration است، اطمینان یابید. برای اینکه از کسب بیشترین سود در راستای ترکیب متدولوژی­‌های Agile و Load Test مطمئن شوید، این توصیه‌­ها را مد نظر داشته باشید:

  1. از اینکه Performance SLAها روی Task Board شما یا در لیست محدودیت­‌ها قرار گرفته‌­اند اطمینان حاصل کنید. تا بدین ترتیب کارکرد خوبِ کُدِ مرتبط با Task را قبل از اینکه Task به صورت “انجام شده” علامت‌گذاری شود، گارانتی کنید.
  2. همکاری با توسعه­‌دهنده­‌ها جهت پیش­بینیِ زمانیکه تغییرات کُدِ جدید، نیازمند تغییراتی در سناریوهای Performance Test است.
  3. داشتن Performance Testهایی که به صورت اتوماتیک با هر Build جدیدی اجرا شده و روندهای Performance را Build به Build، پیگیری و Track می‌­کنند.

بالا بردن Load و پیچیدگی برای تسترها با اندازه Build، برای پایین نگاه داشتن زمان Build:

  • CI=> Performance Smoke Test
  •  Build شبانه<= Load Test کامل
  • پایان اسپرینت<= تست Stress با تولیدکننده­‌های Load از طریق Cloud
ابوالفضل خواجه دیزجی

همچنین ببینید

Test Data Bottleneck

تنگنای داده های تست و راهکار آن

زمان زیادی برای یافتن کیس های مناسب برای داده های تست هدر می شود، چندین …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *