چکیده: تفاوت بین Test Scenario و Test Case از آن موضوعاتیست که یا برای اکثر تسترها سوال است، برخی از تسترها هم گمان میکنند این تفاوت را میدانند، اما معمولا تصور اشتباهی در مورد آن دارند. در این مقاله میخواهیم در رابطه با این تفاوت به صورت عمیق صحبت کنیم.
تفاوت Test Case و Test Scenario؛ یک بار برای همیشه
سالها پیش که در اوان راه تست بودم، کوهی از سوالات را به دوش میکشیدم، که هیچکسی هم برای پاسخگویی به آنها وجود نداشت. منابع اینترنتی فارسی که هیچ، حتی منابع اینترنت انگلیسی هم از ضعف شدیدی رنج میبردند. البته کتب خوبی در زمینه تست وجود داشت. اما باز هم کسی نبود که شما را راهنمایی کند که از چه کتابی آغاز کنید، و چه کتبی را مرحله به مرحله مطالعه کنید.
یکی از سوالاتی که در آن روزها ذهن مرا آزار میداد، تفاوت میان Test Scenario و Test Case بود، که حتی در کتب هم اشاره واضحی که به همراه مثال باشد در رابطه با آنها وجود نداشت، و من مجبور بودم با خواندن مطالب Test Scenario و Test Case از چند منبع، خلاهایی که برای استنتاج از یک منبع بروز میکرد را با یافتههای منبع دیگر پوشش دهم، تا به مرور زمان به یک تعریف شفاف و واحد برسم.
درست همین دیروز یکی از عزیزان همین سوال را از من پرسید، که تفاوت اصلی میان Test Scenario و Test Case چیست؟
ایشان هم همین موضوع را مطرح کرده بودند، که چند ساعتیست در منابع مختلف به دنبال درک تفاوت این دو هستم، و بعد از دو سه ساعت تحقیق تنها بر ابهام من افزوده شده است.
البته این سوال قبلا هم مکررا از بنده پرسیده شده بود. و ترجیح دادم یک بار در این مورد مقالهای بنویسم، تا دیگرانی که مانند اوایل دوره کاری من در ابهام هستند، از این ابهام خارج شوند.
- چرا نام Test Scenario؟
واقعا میتوان یک از فجایع نامگذاری در تست نرمافزار را Test Scenario عنوان کرد. وقتی که Test Scenario را تعریف کردیم متوجه این فاجعه نامگذاری میشوید. اما قبل از پرداختن به جزییات موضوع Test Scenario، باید به شما بگویم، که Test Scenario جز یک نام یا یک جمله که مبین انجام یک عملیات است، چیز دیگری نیست.
اما وقتی واژه Test Scenario را میشنویم، معمولا به یاد سناریوی فیلم یا فیلمنامه میافتیم، که انتظار داریم، با یک شرح داستانی از عملیاتی که قرار است انجام شود، مواجه شویم. شاید این همان دلیلی باشد که بسیاری از تسترها را در درک Test Scenario و تفاوت آن با Test Case دچار سردرگمی کرده است.
شاید به همین دلیل است که جدیدا ISO 29119-1 که در برگیرنده مفاهیم و تعاریف تست است(و ISTQB نیز این استاندارد را منبع تعاریف و مفاهیم خود قرار داده است)، واژه Test Scenario را به طور کامل حذف کرده، و به جای آن از واژه Test Condition استفاده میکند.
البته به صورت عامیانه از واژه Test Possibility هم به جای Test Scenario استفاده میشود.
- چرا نام Test Condition؟
این نام هم در مرحله اول بسیار مبهم است. اما اگر دلیل آنرا بدانید، نه تنها نام مبهمی نیست، بلکه یکی از بهترین نامهاییست که تا کنون در دنیای تست انتخاب شده است.
به تصویر زیر نگاه کنید. ما عملیات افتتاح سپرده، که برای هر کدام از انواع آن، قوانین خاصی وجود دارد، را در زیر، شبیه به چیزی مانند Activity Diagram در UML ترسیم کردهایم. البته فقط شبیه به Activity Diagram.
هر کدام از دایرهها یا Nodeهایی که دارای چند خروجی هستند، Condition محسوب میشوند. اکنون شما میتوانید Test Conditionهای خود را استخراج کنید. اما قبل از هر چیزی باید آنها را دانهبندی کنید.
- Granulation یا دانهبندی Test Conditionها
شما میتوانید Test Conditionهای خود را بسیار سطح بالا ببینید. مثلا میتوانید A را به عنوان تنها Test Condition خود در نظر بگیرید، و بگویید من در اینجا با یک Test Scenario یا بهتر بگویم Test Condition به نام “افتتاح سپرده” طرف هستم.
میتوانید دانهبندی را مقداری ریزتر کنید، و “افتتاح سپرده” را به عنوان Test Condition نبینید. چون اگر “افتتاح سپرده” را Test Condition خود فرض کنید، کل محتوای ذیل آن دیگر به عنوان Test Condition محسوب نمیشوند. مثلا میتوانید بگوید B، C، D و E را به عنوان Test Condition انتخاب کردهاید. یعنی “افتتاح سپرده جاری”، “افتتاح سپرده کوتاه مدت”، “افتتاح سپرده بلند مدت”، و “افتتاح سپرده قرض الحسنه”، چهار Test Condition ما هستند.
میتوانید دانهبندی را حتی ریزتر هم بکنید. مثلا موارد C، D، E، F و G را به عنوان Test Condition فرض کنید یعنی “افتتاح سپرده جاری برای دارنده چک برگشتی”، “افتتاح سپرده جاری برای اشخاص بدون چک برگشتی”، “افتتاح سپرده کوتاه مدت”، “افتتاح سپرده بلند مدت”، و “افتتاح سپرده قرض الحسنه”. در اینجا صرفا مورد B را ریزتر کردیم و باقی موارد یعنی C، D و E، دست نخورده باقی ماند. شما میتوانستید این موارد را هم ریزتر کنید.
شما میتوانید به هر ترتیبی که صلاح میدانید دانهبندی را انجام دهید. فقط یک پیشنهاد در این مورد وجود دارد که در ادامه ارائه خواهد شد.
- آیا رویکرد دیگری هم برای ایجاد Test Condition وجود دارد؟
بله. گاهی اوقات ممکن است تمایل داشته باشید به جای در نظر گرفتن Conditionهای موجود در دیاگرام، آنها را در یک Category قرار دهید و آنرا به عنوان Condition بزرگتری در نظر بگیرید.
مثلا شما میتوانستید در بالا به جای اینکه چهار Test Condition با عناوین “افتتاح سپرده جاری”، “افتتاح سپرده کوتاه مدت”، “افتتاح سپرده بلند مدت”، و “افتتاح سپرده قرض الحسنه” داشته باشید، سه Test Condition با عناوین “افتتاح سپرده جاری”، “افتتاح سپرده مدت دار”، و “افتتاح سپرده قرض الحسنه” را در نظر بگیرید. در “افتتاح سپرده مدت دار” میتوانستید موضوع افتتاح سپرده بلند مدت و کوتاه مدت را مد نظر خود قرار دهید. حتی ممکن بود بخواهید دو Test Condition با عناوین “افتتاح سپرده جاری”،”افتتاح سپرده غیر جاری” داشته باشید که این یعنی در “افتتاح سپرده غیر جاری” موارد افتتاح سپرده بلندمدت، کوتاه مدت و قرض الحسنه را در نظر بگیرید. به هر حال دست شما برای مانور دادن در استخراج Test Condition باز است.
همانطور هم که مشاهده میکنید Test Condition، فقط یک نام یا یک جمله است که مبین انجام یک عملیات میباشد، و لا غیر.
- Test Case چیست؟
Test Case حالت یا حالات عملیاتی یک Test Condition است. Test Condition فقط به ما میگوید چه چیزهایی آماده تست هستند.
اما Test Case چگونگی اجرای تست را برای ما تعیین میکند، تا در مرحله Test Execution این Test Caseها را به صورت اتوماتیک یا دستی اجرا کنیم. در حقیقت یک Test Case در برگیرنده ریز به ریز مراحلیست که قرار است برای اجرای تست انجام دهیم.
هر Test Conditionای میتواند دارای یک تا n تعداد Test Case باشد. شما میتوانید دانه بندی Test Conditionها را به قدری ریز کنید، که در آخر هر Test Condition صرفا یک Test Case داشته باشد. غالبا ترجیح بر این است که یک Test Condition دارای بیش از یک Test Case باشد. اما باید دقت کنید که این موضوع یک استاندارد نیست، و ایضا همیشه هم ممکن نیست. مثلا “لاگین موفق” به عنوان یک Test Condition از آن مواردیست که صرفا یک Test Case دارد. شما صرفا به یک صورت میتوانید لاگین موفق را عملیاتی کنید. که آن هم درج صحیح همه اطلاعات لاگین است.
سادهتر بگویم؛ یک Test Condition در حقیقت مانند یک زونکن دارای نام است که پروندههای خاص و مرتبط با آن نام را(که همان Test Caseها) در دل خود جای داده است.
اگر دقت کنید در تصویر بالا دایرهها، در آخر کار پس از گذراندن مراحل مختلف(که به صورت خطچین ترسیم شده) به یک ضربدر(به معنی پایان عملیات) میرسند. اجرای یک Test Case یعنی انجام مراحل موجود در Activity Diagram، عبور از شرایط مختلف، ثبت اطلاعات و در نهایت رسیدن به پایان.
امیدوارم تفاوت این Test Scenario یا همان Test Condition را با Test Case متوجه شده باشید.