اگر یک فیلد سن فقط اعداد ۱۸ تا ۶۵ را بپذیرد، آیا باید همه ۴۸ مقدار را تست کنیم؟ نه. با دو تکنیک پایه اما بسیار مؤثرِ تقسیمبندی همارزی (Equivalence Partitioning) و تحلیل مقدار مرزی (Boundary Value Analysis یا BVA) میتوانیم با چند تستکیس هدفمند، هم ورودیهای معتبر و نامعتبر را پوشش دهیم و هم خطاهای رایج در مرزها را پیدا کنیم.
در این راهنما، این دو تکنیک طراحی تست را قدمبهقدم، با مثال فرم ثبتنام و یک سناریوی فروشگاه اینترنتی ایرانی بررسی میکنیم. در پایان نیز یک چکلیست آماده دارید که میتوانید مستقیماً در پروژه بعدی خود استفاده کنید.
فهرست مطالب
پاسخ کوتاه: تفاوت این دو تکنیک چیست؟
تقسیمبندی همارزی دامنه ورودی یا خروجی را به گروههایی تقسیم میکند که انتظار داریم سیستم با اعضای هر گروه رفتار مشابهی داشته باشد. سپس از هر گروه، دستکم یک نماینده برای تست انتخاب میکنیم.
تحلیل مقدار مرزی روی لبههای همین گروههای مرتب تمرکز میکند؛ یعنی مقادیری که درست قبل از مرز، روی مرز و بلافاصله پس از آن قرار دارند. دلیل این تمرکز ساده است: خطاهای شرطهایی مانند <، <=، > و >= معمولاً در مرزها آشکار میشوند.
پس این دو تکنیک رقیب یکدیگر نیستند. معمولاً ابتدا پارتیشنهای همارزی را پیدا میکنیم و سپس برای پارتیشنهای مرتب، مقادیر مرزی را استخراج میکنیم. هر دو نیز در خانواده تکنیکهای تست جعبهسیاه قرار میگیرند.
تقسیمبندی همارزی (Equivalence Partitioning) چیست؟
در تقسیمبندی همارزی، دادهها را بر اساس رفتار مورد انتظار سیستم به مجموعههایی جدا و بدون همپوشانی تقسیم میکنیم. فرض طراحی این است که اگر یک مقدار نماینده از یک پارتیشن رفتار مورد انتظار را نشان دهد، سایر اعضای آن پارتیشن نیز احتمالاً همان رفتار را دارند. این فرض تعداد تستها را کم میکند، اما به معنی انتخاب تصادفی یا حذف تحلیل ریسک نیست.
طبق سرفصل رسمی ISTQB Foundation Level، پارتیشنها باید خالی نباشند و با یکدیگر همپوشانی نداشته باشند. این پارتیشنها فقط برای ورودی عددی نیستند؛ خروجیها، گزینههای تنظیمات، پارامترهای API، وضعیتها و حتی دادههای زمانی نیز میتوانند به گروههای همارز تقسیم شوند.
مراحل اجرای تقسیمبندی همارزی
- قانون کسبوکار را دقیق بخوانید: نوع داده، بازه، اجباری یا اختیاری بودن و محدودیتها را مشخص کنید.
- پارتیشنهای معتبر را بسازید: گروههایی که سیستم باید بپذیرد.
- پارتیشنهای نامعتبر را بسازید: گروههایی که سیستم باید رد کند؛ هر نوع نامعتبر را جدا ببینید.
- از هر پارتیشن نماینده انتخاب کنید: برای ریسک پایین معمولاً یک مقدار و برای ریسک بالا بیش از یک مقدار.
- خروجی مورد انتظار را ثبت کنید: فقط داده تست کافی نیست؛ پیام خطا، وضعیت ذخیرهسازی و رفتار بعدی سیستم را نیز بنویسید.
مثال: فیلد سن از ۱۸ تا ۶۵ سال
فرض کنید نیازمندی میگوید: «سن باید یک عدد صحیح و بین ۱۸ تا ۶۵، با احتساب دو سر بازه، باشد.» پارتیشنهای اولیه چنیناند:
| پارتیشن | نوع | نمونه نماینده | انتظار |
|---|---|---|---|
| عدد صحیح کمتر از ۱۸ | نامعتبر | ۱۵ | نمایش خطای حداقل سن |
| عدد صحیح بین ۱۸ تا ۶۵ | معتبر | ۳۲ | پذیرش و ادامه فرایند |
| عدد صحیح بیشتر از ۶۵ | نامعتبر | ۷۰ | نمایش خطای حداکثر سن |
| عدد اعشاری | نامعتبر | ۲۱٫۵ | رد ورودی یا جلوگیری از ورود |
| متن و کاراکتر غیرعددی | نامعتبر | بیست | نمایش خطای نوع داده |
| مقدار خالی | وابسته به نیازمندی | خالی | خطای فیلد اجباری یا پذیرش |
نکته مهم این است که «کمتر از ۱۸» و «بیشتر از ۶۵» هر دو نامعتبرند، اما یک پارتیشن واحد نیستند؛ قواعد و پیامهای خطای آنها ممکن است متفاوت باشد. همچنین اگر سیستم اعداد فارسی و انگلیسی را متفاوت پردازش میکند، باید این موضوع را بهعنوان یک بعد مستقل در دادههای تست فارسی در نظر بگیرید.
تحلیل مقدار مرزی (Boundary Value Analysis) چیست؟
تحلیل مقدار مرزی، رفتار سیستم را در لبه پارتیشنهای مرتب بررسی میکند. مرتب بودن مهم است؛ برای نمونه، بازه سن یا طول رمز عبور ترتیب طبیعی دارد، اما رنگهای «قرمز، آبی و سبز» بدون یک قانون کسبوکار مشخص، مرز عددی معناداری ندارند.
تحلیل مرزی دو نقطهای
در روش دو نقطهای، دو مقدار دو سوی هر مرز را تست میکنیم. برای بازه معتبر ۱۸ تا ۶۵، دادههای اصلی عبارتاند از:
- مرز پایین: ۱۷ و ۱۸
- مرز بالا: ۶۵ و ۶۶
این چهار مقدار بهخوبی خطاهایی مثل استفاده اشتباه از > بهجای >= یا < بهجای <= را آشکار میکنند.
تحلیل مرزی سه نقطهای
برای بخشهای پرریسک، روش سه نقطهای مقدار قبل از مرز، خود مرز و مقدار بعد از مرز را بررسی میکند:
- اطراف مرز پایین: ۱۷، ۱۸ و ۱۹
- اطراف مرز بالا: ۶۴، ۶۵ و ۶۶
انتخاب بین روش دو و سه نقطهای باید بر اساس ریسک انجام شود. برای یک فیلد کماهمیت، دو نقطه ممکن است کافی باشد؛ اما در محاسبه کارمزد، محدودیت تراکنش، سهمیه یا قواعد حقوقی، تست سه نقطهای اطمینان بیشتری میدهد.
مرز فقط عدد نیست
هر داده مرتب میتواند مرز داشته باشد:
- طول رشته: رمز عبور با حداقل ۸ و حداکثر ۶۴ کاراکتر؛
- تاریخ و زمان: مهلت ثبت سفارش تا ساعت مشخص؛
- تعداد: حداکثر ۵ فایل پیوست؛
- اندازه: سقف ۱۰ مگابایت برای آپلود؛
- تعداد تکرار: قفل حساب پس از چند تلاش ناموفق؛
- خروجی سیستم: دستهبندی تخفیف یا هزینه ارسال بر اساس مبلغ سفارش.
مقایسه و ارتباط تقسیمبندی همارزی با تحلیل مقدار مرزی
| معیار | تقسیمبندی همارزی | تحلیل مقدار مرزی |
|---|---|---|
| هدف اصلی | کاهش فضای تست با گروهبندی رفتارهای مشابه | کشف خطا در لبه گروههای مرتب |
| نوع داده | مرتب یا نامرتب، عددی یا غیرعددی | فقط پارتیشنهای دارای ترتیب معنادار |
| انتخاب داده | حداقل یک نماینده از هر پارتیشن | مقادیر روی مرز و نزدیکترین همسایهها |
| خطاهای هدف | گروهبندی ناقص، رفتار اشتباه یک کلاس داده | خطای یکواحدی، شرط مقایسه اشتباه، جابهجایی مرز |
| ترتیب استفاده | معمولاً ابتدا | پس از شناسایی پارتیشنهای مرتب |
برای پوشش بهتر، نتیجه این دو تکنیک را با هم ترکیب کنید: یک نماینده میانی از هر پارتیشن همارزی و مقادیر مرزی پارتیشنهای پرریسک. اگر منطق شامل چند شرط همزمان است، احتمالاً باید در کنار آنها از تست جدول تصمیم نیز استفاده کنید؛ اگر رفتار به وضعیت قبلی سیستم وابسته است، تست انتقال حالت انتخاب مناسبتری است.
مثال عملی: تخفیف در یک فروشگاه اینترنتی ایرانی
یک سناریوی فرضی را در نظر بگیرید: سفارشهای کمتر از ۵۰۰ هزار تومان تخفیف ندارند؛ سفارشهای ۵۰۰ هزار تا ۵ میلیون تومان، با احتساب دو سر بازه، مشمول ۵ درصد تخفیفاند؛ و سفارشهای بیشتر از ۵ میلیون تومان به بررسی دستی نیاز دارند. مبلغ باید عدد صحیح و مثبت باشد.
گام اول: پارتیشنهای همارزی
- مبلغ صفر یا منفی: نامعتبر؛
- بیشتر از صفر و کمتر از ۵۰۰٬۰۰۰ تومان: معتبر، بدون تخفیف؛
- از ۵۰۰٬۰۰۰ تا ۵٬۰۰۰٬۰۰۰ تومان: معتبر، ۵ درصد تخفیف؛
- بیشتر از ۵٬۰۰۰٬۰۰۰ تومان: معتبر، ارجاع به بررسی دستی؛
- مقدار غیرعددی یا اعشاری: نامعتبر، مگر اینکه نیازمندی اعشار را مجاز بداند.
گام دوم: تستکیسهای مرزی دو نقطهای
| شناسه | مبلغ ورودی (تومان) | هدف | نتیجه مورد انتظار |
|---|---|---|---|
| TC-01 | ۰ | مرز اعتبار نوع مبلغ | رد مبلغ و نمایش پیام روشن |
| TC-02 | ۱ | اولین مبلغ مثبت | پذیرش، بدون تخفیف |
| TC-03 | ۴۹۹٬۹۹۹ | قبل از مرز تخفیف | بدون تخفیف |
| TC-04 | ۵۰۰٬۰۰۰ | روی مرز پایین تخفیف | اعمال ۵ درصد تخفیف |
| TC-05 | ۵٬۰۰۰٬۰۰۰ | روی مرز بالای تخفیف | اعمال ۵ درصد تخفیف |
| TC-06 | ۵٬۰۰۰٬۰۰۱ | بعد از مرز تخفیف | ارجاع به بررسی دستی |
برای کاملتر شدن پوشش، از مرکز هر پارتیشن نیز یک نماینده انتخاب کنید؛ مثلاً ۲۵۰ هزار، ۲ میلیون و ۶ میلیون تومان. سپس فرمتهای رایج در محصول ایرانی مانند ارقام فارسی و انگلیسی، جداکننده هزارگان، تومان/ریال و کپیکردن مقدار از کلیپبورد را بر اساس رفتار واقعی رابط کاربری بررسی کنید.
اشتباهات رایج در Equivalence Partitioning و BVA
۱. ساختن فقط یک پارتیشن نامعتبر
«هر چیزی خارج از بازه» بیش از حد کلی است. کمتر از حداقل، بیشتر از حداکثر، نوع داده اشتباه، مقدار خالی و فرمت نامعتبر ممکن است مسیرهای متفاوتی در کد داشته باشند.
۲. ابهام در باز یا بسته بودن بازه
عبارت «بین ۱۸ تا ۶۵» کافی نیست. باید مشخص شود ۱۸ و ۶۵ پذیرفته میشوند یا نه. این ابهام را پیش از نوشتن تستکیس با تحلیلگر کسبوکار یا Product Owner حل کنید.
۳. انتخاب فقط مقادیر مرزی و فراموش کردن نماینده میانی
BVA جای EP را نمیگیرد. علاوه بر مرزها، حداقل یک داده معمولی از داخل پارتیشن معتبر انتخاب کنید تا رفتار عمومی گروه نیز پوشش داده شود.
۴. بیتوجهی به واحد و کوچکترین گام
همسایه مرز همیشه «یک عدد کامل» فاصله ندارد. برای مبلغ با دو رقم اعشار ممکن است همسایه ۰٫۰۱ باشد؛ برای زمان میتواند یک ثانیه یا یک میلیثانیه باشد. کوچکترین گام باید از نیازمندی و دقت سیستم بیاید.
۵. ترکیب بیحساب چند پارامتر
اگر فرم چند ورودی دارد، ضرب همه پارتیشنها در یکدیگر تعداد تستها را انفجاری میکند. ابتدا هر پارامتر را مستقل تحلیل کنید، سپس ترکیبهای پرریسک را با جدول تصمیم یا تکنیکهای ترکیبی انتخاب کنید.
۶. ثبت نکردن نتیجه مورد انتظار
نوشتن «ورودی ۱۷» بدون انتظار دقیق، تستکیس نیست. مشخص کنید سیستم باید ورودی را رد کند، چه پیامی نمایش دهد، آیا درخواست به سرور ارسال شود و داده در پایگاه داده ذخیره نشود.
چکلیست سریع طراحی تستکیس
- آیا نوع داده، واحد، دقت و بازه مجاز روشن است؟
- آیا ابتدا پارتیشنهای معتبر و نامعتبرِ جدا و بدون همپوشانی را نوشتهاید؟
- آیا مقدار خالی، null، فرمت اشتباه و ارقام فارسی/انگلیسی در دامنه مسئله بررسی شدهاند؟
- آیا برای هر پارتیشن حداقل یک مقدار نماینده دارید؟
- آیا پارتیشنهای مرتب و مرز پایین/بالای آنها مشخص شدهاند؟
- آیا روش دو نقطهای یا سه نقطهای را متناسب با ریسک انتخاب کردهاید؟
- آیا کوچکترین گام اطراف مرز درست تعریف شده است؟
- آیا نتیجه مورد انتظار و پیام خطا قابل اندازهگیری است؟
- آیا ترکیب پارامترهای پرریسک را جداگانه پوشش دادهاید؟
- آیا تستها به نیازمندی یا معیار پذیرش قابل ردیابیاند؟
اگر با ورودیهای چندلایه، بازههای تو در تو یا موارد استثنایی سروکار دارید، راهنمای تقسیمبندی همارزی پیشرفته و مقاله تحلیل مقدار مرزی پیشرفته را در ادامه بخوانید. برای دیدن جایگاه این تکنیکها در تصویر بزرگتر QA نیز از راهنمای تست نرمافزار چیست شروع کنید.
سوالات متداول
آیا تقسیمبندی همارزی فقط برای ورودیهای عددی است؟
خیر. نوع کاربر، روش پرداخت، سیستمعامل، پاسخ API، وضعیت سفارش و گزینههای تنظیمات نیز میتوانند پارتیشنهای همارزی داشته باشند؛ کافی است اعضای هر گروه رفتار مورد انتظار مشابهی داشته باشند.
تفاوت Equivalence Class و Equivalence Partition چیست؟
در گفتگوهای روزمره تست، این دو اصطلاح اغلب بهجای هم استفاده میشوند. در ادبیات جدید ISTQB، «Equivalence Partition» اصطلاح ترجیحی است؛ یعنی مجموعهای از دادهها که انتظار میرود سیستم با آنها یکسان رفتار کند.
برای هر پارتیشن چند تست لازم است؟
حداقل یک نماینده نقطه شروع است، نه قانون مطلق. اگر ریسک بالا، پیادهسازی پیچیده یا سابقه باگ وجود دارد، چند نماینده و ترکیب داده لازم است. میزان پوشش را بر اساس ریسک محصول تعیین کنید.
روش BVA دو نقطهای بهتر است یا سه نقطهای؟
برای ریسک معمول، روش دو نقطهای سریع و مؤثر است. در قابلیتهای حساس یا جایی که خطای مرزی پیامد مالی، امنیتی یا عملیاتی دارد، روش سه نقطهای پوشش مطمئنتری میدهد.
آیا این تکنیکها برای تست API هم کاربرد دارند؟
بله. محدودیت طول رشته، دامنه اعداد، تعداد آیتمهای آرایه، تاریخها، کدهای وضعیت و پارامترهای Query همگی کاندیدای مناسبی هستند. تفاوت فقط در شیوه ارسال داده و بررسی پاسخ است.
جمعبندی
تقسیمبندی همارزی به شما میگوید چه گروههایی را باید پوشش دهید و تحلیل مقدار مرزی نشان میدهد کدام نقاط حساس هر گروه مرتب ارزش تست بیشتری دارند. ابتدا نیازمندی را شفاف کنید، پارتیشنها را بسازید، سپس مرزها و نمایندههای مناسب را بر اساس ریسک انتخاب کنید. نتیجه، مجموعه تستی کوچکتر، قابل دفاعتر و مؤثرتر است—نه صرفاً تعداد زیادی تستکیس تکراری.

