یکی از مسائلی که پیرامون آزمون کارایی احساس میشود، تفاوت در استفاده از عبارات فنی در منابع و مقالات مختلف است. در این نوشتار با استفاده از کتاب «راهنمای آزمون کارایی نرمافزارهای وب» میکروسافت مروری خواهیم داشت بر مهمترین تعاریف مربوط به آزمون کارایی. هرچند راهکارهای ارائه شده در این کتاب چندان بروز نیست، سعی آن در دقت و جامعیت تعاریف مفید است. اگرچه دانستن این تعاریف بیشتر برای کسانی مفید است که قصد دارند در همین باره بنویسند، در مصاحبههای فنی نیز بیکاربرد نیست! پس اگر مصاحبهکننده از شما پرسید «تفاوت تست استرس با تست لود چیست؟» بعد از آن که تفاوت را بر اساس یک تعریف رایج توضیح دادید، میتوانید به این نکته اشاره کنید که این اصطلاحات باید در همبافت هر پروژهای بازتعریف شود چرا که تحت تاثیر فضای سیال نرمافزار قرار دارد.
به عقیدهی نویسندگان این کتاب، آزمون کارایی ما را یاری میکند تا گلوگاههای سیستم را شناسایی کنیم و یک خطمشی برای آزمونهای پیشرو طراحی نماییم، همچنین به تلاشهای بهبود کارایی جهت میدهد و در نهایت وضعیت ما را در قبال اهداف و نیازمندیهای طراحیشده برای کارایی [به عنوان معماری سامانه] نشان میدهد.
گنجاندن آزمون کارایی در چرخهی توسعهی نرمافزار از همان مراحل آغازین، ارزش قابلتوجهی برای پروژه ایجاد خواهد کرد. برای موفقیت یک پروژهی آزمون کارایی، آزمون باید با همبافت (Context) پروژه به خوبی سازگار شده باشد تا تمرکز توسعه به مواردی که واقعا ارزش ایجاد میکنند هدایت شود. اگر عملکرد سیستم در شاخصههای کارایی قابل پذیرش نبود، طبیعتا تمرکز تیم باید به بهینهسازی کارایی اپلیکیشن هدایت شود تا زمانی که عملکرد سیستم به سطح قابل قبولی ارتقا یابد. همچنین برای کاهش منابع مورد نیاز اجرای نرمافزار نیز علاقمندیم تمرکز تیم را به بهینهسازی انتقال دهیم.
تعاریف
آزمون کارایی (Performance Testing): آزمون کارایی نوعی آزمون است که هدف آن آزمودن پاسخدهی (Responsiveness)، گذرداد (Throughput)، اتکاپذیری (Reliability) و یا مقیاسپذیری (Scalability) یک سیستم در بار کاری (Workload) مشخص است.
ظرفیت (Capacity): ظرفیت یک سیستم مقدار مجموع بار کاریای که میتواند تحمل کند بدون آن که ملاکهای اساسی پذیرشکارایی (Key Performance Acceptance Criteria) را نقض کرده باشد.
آزمون ظرفیت (Capacity Test): آزمونی است که با اعمال بارکاری بالا روی سیستم نقطهی شکست (Failure Point) آن را مشخص میکند. این آزمون تیم توسعه را در جهت برنامهریزی برای افزایش منابع سختافزاری و شبکهای لازم در هنگام افزایش تعداد کاربران یاری میکند.
آزمون سازه (Component Test): هر آزموی کارایی که یکی از سازههای معماری سامانه را هدف قرار داده است. مانند: سرورها، پایگاهدادهها و ...
آزمون تابآوری (Endurance Test): نوعی از آزمون بار است که رفتار سیستم را در بار کاری مشخص در یک بازهی زمانی طولانی میسنجد.
کاوش (Investigation): فعالیتی است بر پایهی بررسی نتایج و دادههای آزمون کارایی برای افزایش کیفیت سیستم. معمولا با اثبات یا رد یک فرضیه پیرامون یک مسالهی کارایی همراه است.
تاخیر (Latency): معیاری است برای سنجش پاسخدهی سیستم که برابر است با زمان انجام شدن یک درخواست.
سنجه (Metric): مقادیری که انتظار میرود از یک آزمون کارایی حاصل آید مانند تاخیر، نرخ بهرهبرداری از پردازنده و حافظه.
کارایی: به اطلاعاتی پیرامون زمان پاسخ، گذرداد و نرخ بهرهبرداری از منابع در یک سیستم اشاره دارد.
بودجهی کارایی (Performance Budget or Performance Allocation): محدودیتهایی که توسعهدهندگان در استفاده از منابع برای اجرای سیستم با آن روبرو هستند.
اهداف کارایی (Performance Goal): معیارهایی کارایی که تیم توسعهدهندگان قصد دارند سیستم آنها را ارضا کند. معمولا برای انتشار(Release) یک نسخه از نرمافزار تعیین میشوند و قابل مسامحه هستند.
نیازمندیهای کارایی (Performance Requirements): معیارهایی که به شکل مطلق و غیرقابل مذاکره و معمولا به شکل یک قرارداد یا توافق در سطح سرویس (Service Level Agreement) تعیین شده و از تیم توسعه انتظار میرود آن را براورده کند.
بهرهبرداری از منابع (Resource Utilization): هزینهای است که برای تامین منابع سیستم در پروژه مورد نیاز است. منابع اولیه در این تعریف شامل پردازنده، حافظه، دیسک، ورودی و خروجی (I/O) و شبکه است.
زمان پاسخ (Response Time): سنجهای است که نشاندهندهی میزان پاسخدهی اپلیکیشن در برابر درخواستهاست.
اشباع (Saturation): به نقطهای اشاره دارد که منابع به بهرهبرداری حداکثری میرسند.
مقیاسپذیری (Scalability): به توانایی یک سیستم برای پاسخ دادن به بار کاری اضافه گفته میشود به گونهای که همچنان کیفیت مناسب حفظ شود. این کار با افزایش منابع سختافزاری تخصیص یافته همراه است.
سناریو (Scenario): در همبافت آزمون کارایی، سناریو ترتیبی از گامهایی است که در اپلیکیشن اتفاق میافتد. یک سناریو میتواند از یک مورد کاربرد استخراج شود.
آزمون دود (Smoke Test): اجرای اولیهی آزمون کارایی است به گونهای که از عملکرد صحیح سیستم اطمینان حاصل شود.
آزمون تیر (Spike Test): نوعی از آزمون تنش است که با افزایش ناگهانی بار کاری سیستم در بازهی زمانی کوتاه انجام میگیرد.
پایایی (Stability): در همبافت آزمون کارایی، پایایی به اتکاپذیری کلی، استحکام، یکپارچگی کارکردی و دادهای، فراهمی، انسجام و یا پاسخدهی سیستم در تنوعی از شرایط اشاره دارد.
آزمون تنش (Stress Test): نوعی از آزمون کارایی است که قصد آن آزمودن رفتار سیستم است هنگامی که بار کاری از مقدار معمولی و مقدار شلوغی نیز بالاتر رود. هدف آزمون تنش آشکار کردن خطاهاییست که در بار کاری بالا نمایان میشوند. مسائلی مانند همگام سازی، شرایط مسابقه و از نشتی حافظه. در این نوع آزمون میخواهیم نقطهضعفهای اپلیکیشن را در بارکاری بسیار زیاد پیدا کنیم.
گذرداد (Throughput): تعداد کاری که در یک واحد زمان انجام میشود. برای مثال: تعداد درخواستها در ثانیه، تعداد فراخوانی در ثانیه، تعداد تراکنش در ثانیه.
آزمون واحد (Unit Test): در همبافت آزمون کارایی، یک آزمون واحد یک واحد که زیرمجموعهای معین از کد سیستم است را مورد هدف قرار میدهد تا سنجههای کارایی آن را صحتسنجی کند. این واحد به طور معمول از این قرار است: تابع، پردازه، روتین، متد و کلاس. به طور معمول توسط همان توسعهدهندگان کد پیادهسازی میشود.
بهرهبرداری (Utilization): در همبافت کارایی، بهرهبرداری درصدی از زمان است که منبع مورد نظر مشغول سرویس دادن به یک درخواست است. باقی زمان به عنوان زمان بیکاری در نظر گرفته میشود.
آزمون صحتسنجی (Validation Test): یک آزمون صحتسنجی محصول مورد نظر را تحت شرایط مشخصشده میآزماید تا از برآورده شدن انتظاراتی که از محصول مورد نظر میرود، اطمینان حاصل کند.
بار کاری (Workload): بار کاری محرکی است که به سیستم، اپلیکیشن یا سازهی مورد نظر وارد میآید تا مطابق الگوی استفاده، از لحاظ همروندی و یا دادههای ورودی، مورد آزمایش قرار گیرد. بار کاری شامل این موارد است: تعداد کل کاربران، تعداد کاربران همزمان فعال، حجم داده و حجم تراکنشها (Transactions) در یک ترکیب تراکنشی. در مدلسازی کارایی، باید توصیف بار کاری با یک سناریو مشخص همراه شود.