رفتن به محتوای اصلی

تست عملکردی (Functional Testing) چیست؟ انواع، مراحل و مثال

Functional Testing یا تست عملکردی را با تفاوت از Performance، انواع، مراحل، تکنیک‌ها، ابزارها و مثال ثبت سفارش یاد بگیرید.

محمد عسکری ۹ دقیقه مطالعه به‌روزرسانی
فهرست مطالب
  1. فهرست مطالب
  2. تست عملکردی (Functional Testing) چیست؟
  3. تفاوت Functional Testing و Performance Testing
  4. تفاوت تست عملکردی و غیرعملکردی
  5. تست عملکردی در سطوح مختلف
  6. تست واحد یا Component
  7. تست یکپارچگی
  8. تست سیستم
  9. تست پذیرش
  10. انواع رایج تست عملکردی
  11. Smoke Testing
  12. Sanity Testing
  13. Regression Testing
  14. Confirmation Testing یا Retest
  15. API Functional Testing
  16. UI و End-to-End Testing
  17. Exploratory Functional Testing
  18. مراحل اجرای تست عملکردی
  19. ۱. تحلیل نیازمندی و ریسک
  20. ۲. استخراج Test Condition
  21. ۳. انتخاب سطح و تکنیک
  22. ۴. طراحی تست و داده
  23. ۵. آماده‌سازی محیط
  24. ۶. اجرا و ثبت شواهد
  25. ۷. مدیریت عیب
  26. ۸. گزارش پوشش و ریسک
  27. تکنیک‌های طراحی تست عملکردی
  28. تقسیم‌بندی هم‌ارزی و مقدار مرزی
  29. جدول تصمیم
  30. تست انتقال حالت
  31. Use Case Testing
  32. Error Guessing و Checklist
  33. مثال عملی: تست عملکردی ثبت سفارش
  34. قواعد اصلی
  35. نمونه تست‌کیس‌ها
  36. مواردی که Functional نیستند اما لازم‌اند
  37. ابزارهای تست عملکردی
  38. شاخص‌های مفید
  39. اشتباهات رایج
  40. چک‌لیست تست عملکردی
  41. سوالات متداول
  42. تست عملکردی چیست؟
  43. آیا Functional Testing همان Performance Testing است؟
  44. آیا تست عملکردی فقط Black-box است؟
  45. آیا تست عملکردی را می‌توان خودکار کرد؟
  46. اول Functional Test یا Non-functional Test؟
  47. جمع‌بندی
تست عملکردی (Functional Testing) چیست؟ انواع، مراحل و مثال

اگر کاربر روی «پرداخت» بزند و سفارش دوبار ثبت شود، نرم‌افزار از نظر کارکردی شکست خورده است—even اگر صفحه در یک ثانیه باز شود. تست عملکردی یا دقیق‌تر، تست کارکردی (Functional Testing) بررسی می‌کند سیستم چه کاری انجام می‌دهد و آیا خروجی آن با نیازمندی و انتظار کسب‌وکار سازگار است.

در فارسی، «تست عملکردی» گاهی با Performance Testing اشتباه می‌شود. این مقاله تفاوت را روشن می‌کند و سپس انواع، سطوح اجرا، تکنیک‌های طراحی، مراحل انجام، ابزارها و یک مثال عملی از فرایند سفارش فروشگاه اینترنتی را توضیح می‌دهد.

تست عملکردی (Functional Testing) چیست؟

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

نمونه‌ها:

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

Functional Test بیشتر بر «چه کاری» تمرکز دارد تا «چگونه پیاده‌سازی شده». بسیاری از تست‌های عملکردی با رویکرد Black-box طراحی می‌شوند، اما در سطح Unit یا Component دانش ساختار داخلی نیز می‌تواند استفاده شود.

تفاوت Functional Testing و Performance Testing

در ترجمه فارسی، واژه «عملکرد» برای Function و Performance هر دو به‌کار می‌رود. برای کاهش ابهام می‌توان Functional Testing را «تست کارکردی» و Performance Testing را «تست کارایی» نامید.

معیارتست عملکردی / کارکردیتست کارایی / Performance
پرسشآیا سیستم کار درست را انجام می‌دهد؟سیستم با چه سرعت و ظرفیتی کار می‌کند؟
نمونه معیارتخفیف ۱۰٪ درست محاسبه شودصدک ۹۵ زمان پاسخ زیر آستانه باشد
دادهسناریو و Rule کسب‌وکارWorkload، کاربر هم‌زمان و حجم داده
نتیجهخروجی، State، پیام و اثر جانبیLatency، Throughput، Error Rate و Resource
ابزار نمونهJUnit، Postman، Playwrightk6، JMeter، Gatling

یک قابلیت ممکن است از نظر Functional درست باشد اما زیر بار کند شود؛ یا سریع پاسخ دهد اما مبلغ اشتباه برگرداند. هر دو نوع تست لازم‌اند. راهنمای تست غیرکارکردی کیفیت‌هایی مانند کارایی، امنیت و کاربردپذیری را پوشش می‌دهد.

تفاوت تست عملکردی و غیرعملکردی

  • Functional: رفتار، Rule، ورودی/خروجی، State و مجوز؛
  • Non-functional: ویژگی‌های کیفیت مانند سرعت، امنیت، قابلیت اطمینان، دسترس‌پذیری، کاربردپذیری و سازگاری.

این مرز همیشه کاملاً جدا نیست. مثلاً «کاربر بدون مجوز نباید داده را ببیند» یک Rule عملکردی مرتبط با امنیت است، در حالی که ارزیابی عمیق آسیب‌پذیری و مقاومت امنیتی غیرکارکردی محسوب می‌شود. برنامه تست باید هر دو زاویه را روشن کند.

تست عملکردی در سطوح مختلف

Unit، Integration، System و Acceptance «سطح تست» هستند، نه صرفاً انواع Functional Testing. رفتار عملکردی را می‌توان در هر سطح بررسی کرد. توضیح کامل را در راهنمای سطوح تست نرم‌افزار بخوانید.

تست واحد یا Component

تابع، کلاس یا جزء کوچک را در برابر قراردادش بررسی می‌کند؛ مانند محاسبه تخفیف، اعتبارسنجی فرمت یا تغییر State. سریع و نزدیک به علت شکست است.

تست یکپارچگی

تعامل میان جزءها، پایگاه داده و سرویس را می‌سنجد؛ مانند ثبت سفارش و رزرو موجودی یا تبدیل پاسخ درگاه به وضعیت داخلی.

تست سیستم

رفتار سامانه کامل را از دید ورودی/خروجی و مسیر کاربر ارزیابی می‌کند؛ مانند Checkout از سبد تا نتیجه پرداخت آزمایشی.

تست پذیرش

بررسی می‌کند قابلیت با نیاز و معیار کسب‌وکار برای استفاده آماده است. UAT باید Outcome و زمینه واقعی را ببیند، نه فقط تکرار تست سیستم.

انواع رایج تست عملکردی

Smoke Testing

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

Sanity Testing

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

Regression Testing

بررسی می‌کند تغییر جدید رفتار قبلی را خراب نکرده است. انتخاب رگرسیون باید بر اساس تحلیل اثر و ریسک باشد؛ اجرای کورکورانه همه تست‌ها بازخورد را کند می‌کند.

Confirmation Testing یا Retest

عیب مشخصِ اصلاح‌شده را با همان شرایط و نسخه جدید دوباره بررسی می‌کند. Retest با Regression فرق دارد: اولی Fix را تأیید می‌کند، دومی اثر جانبی تغییر را می‌سنجد.

API Functional Testing

Endpoint، Auth، Schema، Rule، Status Code و اثر داده را بررسی می‌کند. API Test معمولاً سریع‌تر و پایدارتر از UI است. برای شروع، راهنمای مبانی تست API را ببینید.

UI و End-to-End Testing

تعامل کاربر و همکاری چند جزء را از رابط تا Backend می‌سنجد. این تست‌ها ارزشمند اما کندتر و شکننده‌ترند؛ تعداد محدود مسیر حیاتی بهتر از Suite بزرگ و Flaky است.

Exploratory Functional Testing

تستر با Charter و شناخت ریسک، هم‌زمان یاد می‌گیرد، طراحی و اجرا می‌کند. برای قابلیت جدید و کشف رفتار خارج از Test Case مفید است.

مراحل اجرای تست عملکردی

۱. تحلیل نیازمندی و ریسک

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

۲. استخراج Test Condition

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

۳. انتخاب سطح و تکنیک

هر Rule را در پایین‌ترین سطح مؤثر قرار دهید. منطق محاسبه Unit/API؛ قرارداد سرویس Integration؛ چند مسیر کاربر UI.

۴. طراحی تست و داده

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

۵. آماده‌سازی محیط

نسخه سرویس‌ها، تنظیمات، حساب، Mock/Sandbox و Seed داده را ثبت کنید. Smoke محیط پیش از اجرای عمیق انجام شود.

۶. اجرا و ثبت شواهد

نتیجه واقعی را با انتظار مقایسه و Pass/Fail/Blocked را همراه با Build، داده و شواهد ثبت کنید.

۷. مدیریت عیب

عنوان، پیش‌شرط، مراحل، نتیجه واقعی/مورد انتظار، شدت و Log/Trace لازم را ثبت کنید. پس از Fix، Retest و Regression اثر انجام شود.

۸. گزارش پوشش و ریسک

فقط درصد Pass را گزارش نکنید؛ نیازمندی پوشش‌نداده، تست Blocked، عیب باز و ریسک باقیمانده را روشن کنید.

تکنیک‌های طراحی تست عملکردی

تقسیم‌بندی هم‌ارزی و مقدار مرزی

فضای ورودی را به گروه‌های رفتار مشابه تقسیم و مرزهای مرتب را بررسی می‌کند. مثال‌ها را در راهنمای Equivalence Partitioning و BVA ببینید.

جدول تصمیم

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

تست انتقال حالت

برای رفتار وابسته به وضعیت قبلی، رویداد و انتقال مجاز/ممنوع؛ مانند سفارش، تیکت یا حساب قفل‌شده. راهنمای State Transition Testing مناسب است.

Use Case Testing

جریان اصلی و Alternate Flow را از هدف Actor تا نتیجه نهایی پوشش می‌دهد. برای مسیرهای End-to-End و پذیرش مفید است.

Error Guessing و Checklist

از تجربه، تاریخچه باگ و دامنه برای هدف‌گرفتن خطاهای محتمل استفاده می‌کند؛ مانند Double-click، Back/Refresh، ارقام فارسی، Timezone یا درخواست تکراری.

مثال عملی: تست عملکردی ثبت سفارش

نیازمندی فرضی: «کاربر کالا را به سبد اضافه می‌کند، آدرس و ارسال را انتخاب می‌کند و با پرداخت موفق سفارش ثبت می‌شود.»

قواعد اصلی

  • فقط کالای موجود قابل خرید است.
  • هزینه ارسال به شهر و وزن سبد وابسته است.
  • تخفیف فقط در بازه و برای کاربر واجد شرایط اعمال می‌شود.
  • پیش از رفتن به درگاه، مبلغ و موجودی Server-side دوباره بررسی می‌شوند.
  • Callback تکراری نباید سفارش یا پرداخت تکراری بسازد.

نمونه تست‌کیس‌ها

IDسناریوسطح مناسبانتظار
FT-01محاسبه هزینه ارسال شهر مجازUnit/APIمبلغ مطابق Rule
FT-02کد تخفیف منقضیAPI/UIرد با پیام روشن، مبلغ بدون تغییر
FT-03کالا پس از افزودن ناموجود می‌شودIntegration/E2Eعدم ثبت، اعلام آیتم و حفظ سبد قابل اصلاح
FT-04Callback پرداخت دو بار می‌رسدIntegrationیک سفارش و یک تراکنش نهایی
FT-05Timeout درگاهSystem/E2Eوضعیت نامشخص، امکان پیگیری، بدون سفارش تکراری
FT-06آدرس با ارقام فارسیAPI/UIطبق Rule نرمال یا با پیام مشخص رد شود

مواردی که Functional نیستند اما لازم‌اند

  • زمان پاسخ Checkout زیر بار؛
  • امنیت Token و داده پرداخت؛
  • کاربردپذیری پیام خطا؛
  • دسترس‌پذیری فرم با Keyboard/Screen Reader؛
  • نمایش RTL روی موبایل و Browserهای هدف.

این جداسازی کمک می‌کند پوشش کامل کیفیت را با Functional Test اشتباه نگیریم.

ابزارهای تست عملکردی

سطح/نیازابزارهای نمونهنکته
Unit/ComponentJUnit، pytest، Jest، xUnitسریع و نزدیک به کد
APIPostman/Newman، REST Assured، SupertestRule و قرارداد را سریع پوشش دهید
Web UIPlaywright، Selenium، Cypressمسیر حیاتی، Locator پایدار
MobileAppium، Espresso، XCUITestDevice و lifecycle مهم‌اند
Mock/ContractWireMock، Pactوابستگی بیرونی و قرارداد
مدیریتTestRail، Jira، Azure DevOpsTraceability و نتیجه اجرا

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

شاخص‌های مفید

  • پوشش نیازمندی و ریسک؛
  • درصد Test Conditionهای طراحی/اجراشده؛
  • Pass/Fail/Blocked همراه با علت؛
  • Defect Leakage به مرحله بعد یا تولید؛
  • توزیع عیب بر اساس ماژول و Rule؛
  • زمان بازخورد تست‌های CI؛
  • Flaky Rate و زمان تحلیل شکست؛
  • ریسک باقیمانده پیش از Release.

تعداد تست‌کیس و درصد Pass بدون زمینه کافی نیستند. ممکن است ۹۹٪ تست کم‌ریسک پاس و مسیر پرداخت بحرانی Blocked باشد.

اشتباهات رایج

  • اشتباه‌گرفتن Functional با Performance؛
  • نامیدن Unit/Integration/System به‌عنوان انواع انحصاری Functional؛
  • تمرکز فقط بر Happy Path؛
  • انتظار مبهم مانند «سیستم درست کار کند»؛
  • اجرای همه قواعد از UI؛
  • نادیده‌گرفتن State، مجوز، خطا و بازیابی؛
  • داده وابسته و تست‌های نیازمند ترتیب اجرا؛
  • Retest بدون Regression اثر تغییر؛
  • گزارش Pass بدون پوشش و ریسک؛
  • فرض اینکه Functional Test به‌تنهایی کیفیت محصول را تضمین می‌کند.

چک‌لیست تست عملکردی

  • Actor، هدف و مجوز روشن است.
  • پیش‌شرط، Trigger و نتیجه موفق تعریف شده‌اند.
  • ورودی معتبر، نامعتبر، خالی و مرزی پوشش دارد.
  • Ruleهای چندشرطی و اولویت آن‌ها مدل شده‌اند.
  • State و انتقال مجاز/ممنوع بررسی شده‌اند.
  • خطا، Timeout، Retry، لغو و Recovery پوشش دارند.
  • اثر داده، پیام، Notification و سرویس جانبی Assert می‌شود.
  • Rule در پایین‌ترین سطح مؤثر تست شده است.
  • چند مسیر حیاتی End-to-End باقی مانده‌اند.
  • داده و محیط مستقل و قابل‌تکرارند.
  • Traceability به نیازمندی و ریسک وجود دارد.
  • ریسک غیرکارکردی جدا ثبت شده است.

سوالات متداول

تست عملکردی چیست؟

ارزیابی رفتار و کارکرد قابل‌مشاهده نرم‌افزار در برابر نیازمندی و Rule کسب‌وکار است؛ مانند ورودی، خروجی، State، مجوز و اثر جانبی.

آیا Functional Testing همان Performance Testing است؟

خیر. Functional می‌سنجد سیستم کار درست را انجام می‌دهد؛ Performance سرعت، ظرفیت و پایداری زیر بار را اندازه می‌گیرد. «کارکردی» و «کارایی» ترجمه‌های کم‌ابهام‌تری‌اند.

آیا تست عملکردی فقط Black-box است؟

اغلب بر رفتار بیرونی و Black-box تکیه دارد، اما در Unit یا Component ممکن است ساختار داخلی نیز برای طراحی و پوشش استفاده شود. هدف Functional بودن از نوع اطلاعات تستر جداست.

آیا تست عملکردی را می‌توان خودکار کرد؟

بله. Unit، API، Contract و مسیرهای پایدار UI گزینه‌های خوبی‌اند. تست اکتشافی، کاربردپذیری و قابلیت ناپایدار ممکن است دستی یا ترکیبی باقی بمانند.

اول Functional Test یا Non-functional Test؟

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

جمع‌بندی

تست عملکردی بررسی می‌کند محصول کار تعریف‌شده را با Rule، State و خروجی درست انجام می‌دهد. پوشش مؤثر فقط فهرست قابلیت‌ها نیست؛ مسیر مثبت، منفی، مرز، مجوز، خطا، بازیابی و اثر جانبی را در سطح مناسب می‌سنجد. Unit و API را برای سرعت و عمق به‌کار ببرید، UI را محدود و حیاتی نگه دارید و Functional Test را با ویژگی‌های غیرکارکردی کامل کنید.

این مقاله را با دیگران به اشتراک بگذارید

نویسنده

محمد عسکری

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

همه مقاله‌ها

ادامه مطالعه

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

ایستگاه بعدی شما

TestRail را همین حالا در محیط دمو ببینید.

محیط تست آماده

دسترسی به دمو TestRail

قبل از ورود، مشخصات زیر را در صفحه ورود محیط دمو وارد کنید.

آدرس دمو

https://demo.testrail.ir

ایمیل ورود

demo@testrail.ir

رمز عبور

demo_user