آشنایی با فانکشنال تستینگ – Functional Testing

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

فانکشنال تستینگ رو می‌شه در زمینه تست رابط کاربری، API، دیتابیس، امنیت و… بکار برد. همچنین هم به صورت دستی و هم به‌صورت تست خودکار می‌تونیم فانکشنال تستینگ رو پیاده‌سازی کنیم.

اهداف فانکشنال تستینگ

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

  • تست تمام قابلیت‌های نرم‌افزار: تمام قابلیت‌ها و کاربردهای نرم‌افزار براساس خروجی‌ها و ورودی‌های معتبر تست می‌شود. هر شکلی از ناسازگاری یا خروجی پیش‌بینی نشده در این مرحله باید پیدا شود.
  • تست نقاط اصلی ورودی: نقاط اصلی ورود مانند فرم لاگین و یا ثبت‌نام باید تست شده و مطابق با سازوکار از پیش تعریف شده عمل کند.
  • تست جریان رابط کاربری: در این مرحله فرایند کاری رابط کاربری و GUI اپلیکیشن تست می‌شود. هدف این است که کاربر بتواند به سادگی و با در نظر گرفتن سازوکارهای از پیش تعریف شده در اپلیکیشن Navigate کند.

چه چیزهایی در فانکشنال تستینگ بررسی می‌شوند؟

مواردی که در فانکشنال تستینگ، تست می‌شود

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

  • کاربردپذیری پایه (Basic Usability): بررسی اینکه کاربر بتواند بدون مشکل در اپلیکیشن حرکت کند و تجربه روانی داشته باشد.
  • عملکردهای اصلی (Main Functions): اطمینان از اینکه ویژگی‌های اصلی اپلیکیشن دقیقاً مطابق انتظار کار می‌کنند.
  • دسترس‌پذیری (Accessibility): بررسی اینکه اپلیکیشن برای همه کاربران، حتی افراد دارای معلولیت، قابل استفاده باشد و امکانات دسترس‌پذیری درست عمل کنند.
  • مدیریت خطا (Error Handling): بررسی نحوه‌ی واکنش اپلیکیشن در شرایط خطا. برای مثال آیا پیام‌های خطای مناسب نمایش داده می‌شوند و کاربر به‌درستی مطلع می‌شود؟

فرآیند انجام فانکشنال تستینگ

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

مرحله ۱: شناسایی ورودی‌های تست

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

مرحله ۲: تعیین خروجی‌های مورد انتظار

بعد از مشخص شدن ورودی‌ها، باید خروجی مورد انتظار را براساس نیازمندی‌های عملکردی سیستم تعریف کنیم.
مثلاً:

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

مرحله ۳: اجرای تست‌ها

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

مرحله ۴: مقایسه خروجی واقعی با خروجی مورد انتظار

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

انواع تکنیک‌های فانکشنال تستینگ

روش‌ها و تکنیک‌های انجام تست فانکشنال

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

  • Unit Testing (تست واحد): تست ماژول‌ها یا بخش‌های مستقل برنامه برای اطمینان از درست کار کردن هر بخش.
  • Integration Testing (تست یکپارچه‌سازی): تست ماژول‌های ترکیب‌شده به‌عنوان یک گروه برای شناسایی خطاهای تعامل بین آن‌ها. در واقع وقتی تست واحد انجام شد، حالا نوبت این می‌رسه که کار کردن همشون در کنار همدیگه رو تست کنیم.
  • System Testing (تست سیستم): تست کل سیستم یکپارچه‌شده برای بررسی انطباق با نیازمندی‌های تعریف‌شده. در این تست، کامپوننت‌های تست واحد که با موفقیت تست شدند به عنوان ورودی در نظر گرفته میشن.
  • User Acceptance Testing – UAT (تست پذیرش کاربر): بررسی اینکه نرم‌افزار نیازهای کسب‌وکار را برآورده کرده و آماده انتشار است. کاربران نهایی نرم‌افزار را در محیط واقعی تست می‌کنند.
  • Regression Testing (تست رگرسیون): اطمینان از اینکه تغییرات کد باعث اختلال در عملکردهای موجود نشده‌اند.
  • Smoke Testing (تست دود): بررسی عملکردهای پایه و حیاتی اپلیکیشن برای اطمینان از اینکه بخش‌های اصلی درست کار می‌کنند.
  • Sanity Testing (تست سلامت): زیرمجموعه‌ای از تست رگرسیون برای بررسی اینکه تغییرات جدید کد همان‌طور که انتظار می‌رود عمل می‌کنند.
  • End-to-End Testing (تست سرتاسری): تست کل نرم‌افزار از ابتدا تا انتها همراه با بررسی ارتباط با سیستم‌ها و واسط‌های خارجی، برای اطمینان از یکپارچگی داده و صحت تعاملات.

مقایسه Functional Testing vs Non-Functional Testing

ویژگیFunctional TestingNon-Functional Testing
هدفبررسی درست کار کردن قابلیت‌ها و عملکردهای نرم‌افزار مطابق نیازمندی‌هابررسی کیفیت‌های غیرعملکردی مثل کارایی، امنیت، قابلیت استفاده
تمرکز اصلیروی چه کاری نرم‌افزار انجام می‌دهدروی چگونه نرم‌افزار آن کار را انجام می‌دهد
روش‌هاتست واحد (Unit)، تست یکپارچه‌سازی، تست سیستم، UAT، رگرسیون، دود (Smoke)، سلامت (Sanity)، End-to-Endتست کارایی (Performance)، بار (Load)، فشار (Stress)، امنیت (Security)، قابلیت استفاده (Usability)
نوع تستمعمولاً جعبه سیاه (Black Box)هم جعبه سیاه و هم جعبه سفید بسته به نوع تست
ورودی و خروجیورودی مشخص داده می‌شود و خروجی با نیازمندی‌ها مقایسه می‌شودشرایط محیطی یا سناریوهای خاص بررسی می‌شوند (مثلاً تعداد زیاد کاربر همزمان)
مثال‌هاتست لاگین، ثبت‌نام، پرداخت، جریان رابط کاربریتست سرعت پاسخ، تحمل بار زیاد، امنیت داده‌ها، تجربه کاربری

ابزارهای فانکشنال تستینگ

در فرآیند تست نرم‌افزار، ابزارهای مختلفی برای اجرای Functional Testing وجود دارد که هرکدام کاربرد خاصی دارند:

1. Selenium

  • یک پروژه متن‌باز شامل مجموعه‌ای از ابزارها و کتابخانه‌ها برای اتوماسیون مرورگرها.
  • امکان نوشتن اسکریپت‌های تست در زبان‌هایی مثل روبی، جاوا، NodeJS و غیره را فراهم می‌کند.
  • دارای ابزار Playback برای طراحی و اجرای تست‌های عملکردی روی اکثر مرورگرهای مدرن.

2. QTP (UFT)

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

3. JUnit

  • یک فریمورک متن‌باز برای تست واحد (Unit Testing) در زبان برنامه‌نویسی جاوا.
  • توسط توسعه‌دهندگان جاوا برای نوشتن و اجرای تست‌های خودکار استفاده می‌شود.
  • می‌تواند همراه با Selenium WebDriver برای تست اپلیکیشن‌های وب به کار رود.
  • دارای Annotations برای شناسایی متدهای تست و Test Runner برای اجرای آن‌ها.

4. SoapUI

  • یکی از ابزارهای پیشرو برای تست SOAP و Web Services.
  • امکان طراحی و اجرای سریع تست‌های فانکشنال، رگرشن و لود را فراهم می‌کند.
  • رابط کاربری گرافیکی ساده و محیط تست بدون نیاز به کدنویسی دارد.
  • قابلیت ساخت تست‌های پیچیده با Drag & Drop.
  • امکان تحلیل پویا برای بررسی پوشش تست‌های عملکردی روی سرویس‌های SOAP و REST.

5. Cucumber

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

مزایا فانکشنال تستینگ

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

محدودیت‌ها فانکشنال تستینگ

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

جمع‌بندی

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

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

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