تست مبتنی بر سناریو
هدف از ایجاد تست مبتنی بر سناریو این است که اطمینان حاصل کنیم برنامه توسعه داده شده در پایان و همینطور در تمامی جریان های بیزینسی عملکرد خوبی دارد. در تست مبتنی بر سناریو، تستر (tester) خود را بجای کاربر نهایی قرار می دهد و تلاش می کند سناریوهای دنیای واقعی را که ممکن است کاربر انجام دهد، طی کند. در تست مبتنی بر سناریو، تستر از مشتریها و توسعه دهندگان کمک می گیرد تا بتواند تست مبتنی بر سناریو را پیاده سازی کند.
سناریو، یک داستان فرضی است که به شخص کمک می کند تا بتواند از طریق آن در مورد مشکلات پیچیده سیستمی تفکر نماید. "سناریوها" در برنامه ریزی نظامی در ایالات متحده در دهه 1950 محبوبیت زیادی به دست آوردند. برنامه ریزی مبتنی بر سناریو پس از یک موفقیت چشمگیر، محبوبیت گسترده ای کسب کرد.
تست مبتنی بر سناریو به تستر کمک می کند که چگونگی عملکرد برنامه را در زمانی که کاربر نهایی با آن کار می کند، کشف کند. زمانیکه با استفاده از تست مبتنی بر سناریو، جریان بیزینسی برنامه را تست می کنیم، این کار باعث می شود که بتوانیم نواقصی از برنامه را پیدا کنیم که با شیوه های دیگر تست امکان پذیر نیست.
یک تست مبتنی بر سناریو می تواند یک تست کیس (test case) مستقل باشد یا مجموعه ای از تست کیس ها باشند که در کنار هم قرار می گیرند. درواقع تست مبتنی بر سناریو، یک story است که تشریح می کند یک نرم افزار چگونه توسط کاربر نهایی مورد استفاده قرار می گیرد.
تست طراحی شده باید مطابق داستان چگونگی استفاده از برنامه باشد که می تواند شامل اطلاعاتی درباره انگیزه افرادی که درگیر استفاده از نرم افزار هستند، باشد.
داستان انگیزه بخش است. ذینفع تاثیرگذار ممکن است پافشاری کند تا فلان تست رد شده پاس شود.
یک داستان می تواند شامل داستان استفاده پیشرفته از برنامه در محیط های پیچیده و یا حتی شامل داستان استفاده برنامه در کنار داده های پیچیده باشد.
تکنیکهای مبتنی بر state machine
نتایج تست را باید بتوانیم به سادگی ارزیابی کنیم. این مطلب باید برای تمام تست ها صادق باشد اما برای تست مبتنی بر سناریو از اهمیت بالایی برخوردار است و می تواند پیچیده باشد.
اهمیت تست مبتنی بر سناریو
به این دلیل است که همواره ما جنبه هایی از تست نرم افزار را اولویت بندی می کنیم و همیشه تمرکز برای مهمترین آنهاست. بهمین دلیل از تکنیک هایی نظیر تحلیل مقادیر مرزی (BVA)، افراز هم ارزی(EP)، تست مبتنی بر ریسک (Risk Based Testing) و غیره استفاده می نماییم.
با استفاده از تست مبتنی بر سناریو، شما از مهمترین تراکنش های انتها به انتها آگاه می شوید. همچنین از نحوه بکارگیری برنامه، آنگونه که در دنیای واقعی مورد استفاده قرار می گیرد، آگاه می شوید و این امر باعث می شود که برنامه با اغلب سناریوهای کاربر نهایی سازگار باشد.
تست مبتنی بر سناریو از اهمیت بالایی برخوردار است و شامل تراکنش های پیچیده ای است. شما می توانید سناریو ها را برای نشان دادن خطاها جهت ارائه مزایای مورد نظر استفاده کنید، حتی اگر شما تست کیس ها و اسناد نیازمندی های برنامه را تهیه نکرده باشید. سناریوها برای تطبیق با سند نیازمندی های برنامه بسیار مفید هستند، مخصوصا در مورد نیازمندی هایی که بصورت use case تهیه شده باشند. ایجاد تست های پیچیده تر، به وسیله طراحی تست هایی که از طریق چندین تست کیس ایجاد می شود، امکان پذیر است. یک سناریو درواقع داستانی است که یک شخص سعی میکند آنرا در برنامه ی تحت تست انجام دهد.
- تعدد ترکیب های داده های ورودی
- تعدد مسیرهای اجرایی ممکن در برنامه
چگونگی استفاده از تست مبتنی بر سناریو
یک نسخه از برنامه را تحویل می گیریم و آماده استفاده قرار می دهیم. همواره باگ هایی در برنامه وجود دارد که می تواند در هنگام استفاده از آن مشخص شود. روش تست مبتنی بر سناریو باعث مشخص شدن باگ ها در هنگام اجرای سناریوهای کاربر نهایی می گردد. برای تحقق این امر باید نکات زیر را رعایت کنیم.
- نحوه استفاده از محصول نرم افزاری را به خوبی یاد بگیریم
- اسناد نیازمندی های پروژه را مطالعه و تست های ممکن استخراج شوند.
- نحوه استفاده پیشرفته از برنامه را بیاموزیم.
- اشکالاتی که مغایر با اسناد نیازمندی هاست، استخراج شوند.
- باگ ها، اشکالات و نواقص باید به طور کامل گزارش شوند.
همینطور سناریوها برای کشف استفاده های پیشرفته از برنامه بسیار مفید هستند. افراد به شیوه های مختلفی از یک برنامه استفاده می کنند و زمانیکه تجربه استفاده از برنامه را کسب می کنند، نحوه استفاده آنها نیز با آن تغییر خواهد کرد. ممکن است شما ماه ها برروی تست یک برنامه پیچیده زمان صرف کنید. این زمانی که شما صرف کرده اید، فرصتی را ایجاد می کند که می تواند استفاده های پیشرفته از برنامه را شبیه سازی نماید. در طول این دوره، یک یا چند تستر می توانند برنامه های کامل از برنامه ی تحت تست، توسعه دهند.
خصوصیات یک سناریوی خوب
یک سناریوی تست نرم افزار دارای پنج خصوصیت است که عبارتند از:
- داستان گونه باشد.
- انگیزه بخش باشد.
- قابل اعتماد باشد.
- پیچیده باشد.
- ارزیابی آن ساده باشد.
نوشتن یک سناریو با نوشتن داستان عجین است و انجام این کار یک هنر است. در واقع سناریو نویسی همان داستان نویسی است و واقعا نمی توان چگونگی ایجاد داستان را در اینجا بیان کرد. آنچه که در اینجا می توانیم پیشنهاد دهیم تا برای شما مفید باشد، این است که چطور داستان های خود را با ایده ها و اطلاعات ترکیب نمایید.
یک سناریوی تست نرم افزار می تواند انگیزه بخش باشد در صورتیکه یک ذینفع با نفوذ بخواهد یک تست برای برنامه پاس شود. برای اینکه بتوانیم یک سناریوی انگیزشی تر طراحی کنیم، باید برای خواننده بیان کنیم که چرا سناریو مهم است، چرا باید کاربر کاری انجام دهد که او انجام داده و اینکه اگر سناریو رد شود، چه عواقبی خواهد داشت. اغلب این اطلاعات باعث می شود مورد کاربری (use case) از حالت انتزاعی خارج شود.
یک سناریو می تواند اعتماد پذیر باشد اگر یک ذینفع باور داشته باشد که آن اتفاق خواهد افتاد. گاهی اوقات شما می توانید اعتبارپذیری را به سادگی با ارجاع به مشخصات نیازمندی ها ایجاد کنید. در اغلب پروژه ها، شاید فکر کنید که این مشخصات نیازمندی ها را نخواهید داشت و یا وضعیت شما را پوشش نخواهد داد.
داستان های پیچیده شامل خصوصیات بسیار خوبی هستند. شما می توانید یک داستان ساده بنویسید که فقط شامل یک خصوصیت مناسب باشد. تکنیک های دیگر مانند Domain Testing خیلی راحت برروی سناریوهای تک خصوصیتی اعمال می شود و تمرکز و قدرت بیشتری برای توسعه در این موقعیت های ساده دارد. قدرت سناریونویسی در کمک به تسریع یافتن مشکلات و در ارتباطات آنها در میان خصوصیت های مختلف می باشد.
سناریو نویسی ایجاد قدرت می کند. تمرکز این تکنیک برای توسعه بسیار بالاست. باگ هایی که توسط تکنیک هایی نظیر تست استرس، تست مبتنی بر ریسک و تست دامنه بدست می آید بسیار مفید هستند اما در دنیای واقعی، غیرواقعی تلقی می شوند چون تمرکز آنان متوجه قدرت برنامه می باشد. یکی از روش هایی که می توانیم قدرت سناریوها را افزایش دهیم این است که در نوشتن سناریوها تاحدودی از مبالغه استفاده کنیم. زمانیکه شخص در سناریوی شما مقدار یک متغیر را تنظیم می کند، مقدار متغیر را در حد زیادی افزایش دهید یا از دنباله اتفاق های پیچیده تر استفاده کنید. این شیوه تست را Soap Opera Testing می نامند.
ارزیابی سناریوی تست نرم افزار باید ساده باشد چون بدین طریق است که ما می توانیم بگوییم یک تست پاس یا رد شده است.
12 روشهای ایجاد سناریوهای خوب
طراحی سناریوهای تست نرم افزار بسیار مشابه آنالیز نیازمندی های برنامه می باشد اما در واقع آنالیز نیازمندی ها نیست. درواقع هردوی آنها از اطلاعات مشابهی استفاده می کنند و به شیوه های متفاوتی از آن استفاده می نمایند.
تحلیلگر نیازمندی های پروژه تلاش می کند تا توافقی را درباره برنامه درحال ساخت ایجاد کند پیش بینی نماید.
تستر لازم نیست به نتیجه ای برسد یا توصیه ای داشته باشد که برنامه باید چطور کار کند. وظیفه تستر این است که نگرانی های معتبر را به ذینفعان نشان دهد. درواقع تستر مجبور نیست ترکیبات طراحی محصول را ایجاد کند.
تستر مجبور نیست که به توافقات قبلی احترام بگذارد.
ممکن است متوجه شده باشید که شما به اطلاعات زیادی نیاز دارید، بله، شما هر چه بیشتر درباره برنامه بدانید، کار بیشتری می توانید انجام دهید. به هرحال اگر شما یک کاربر تازه کار سیستم هستید، نکات زیر را باید رعایت کنید.
- یک سناریوی تست نرم افزار دارای پنج خصوصیت است که عبارتند از:
- تاریخچه زندگی اشیاء درون برنامه را بنویسید.
تصور کنید که برنامه برای مدیریت سیاست های بیمه زندگی باشد. کسی برای یک سیاست درخواست می دهد. آیا او بیمه شده است؟ آیا او تا به حال برای خود یا همسر، خانواده یا دوست و آشنایی درخواست داده است؟ ممکن است در آینده او هزینه را دیر پرداخت کند. قرض گرفتن در برابر سیاست، تغییر ذینفعان، تهدید به لغو، مرگ و بسیار اتفاقات دیگری که می تواند رخ دهد. - .لیست کردن کاربران، آنالیز کردن علایق آنان و اهدافشان
این ساده است که بگوییم "لیست تمام کاربران"، اما لیست کردن آنان ساده نیست. زمانیکه شما یک کاربر را شناسایی می کنید، سعی کنید تشخیص دهید که علاقمندی های او چیست. به عنوان مثال، به یک برنامه کنترل موجودی خرده فروشی فکر کنید. کاربران شامل کارکنان انبار، حسابداران، مدیران فروشگاه، فروشندگان و غیره هستند. برروی مدیر فروشگاه تمرکز نمایید. او می خواهد فروش فروشگاه را به حداکثر برساند و همینطور مدیران بازدید کننده را با سازماندهی تحت تاثیر قرار دهد. این ها همگی از علایق او هستند و او سیستم را با این معیارها ارزیابی می کند. - کاربران ناسالم را درنظر بگیرید: آنها چگونه می توانند از سیستم شما سوء استفاده کنند.
برخی کاربران ناسالم هستند. برای مثال یک سیستم حسابداری را در نظر بگیرید که کاربری نا سالم دارد. این کاربر علاقمند است پول بیشتری بدست آورد. هدف او آن است که سعی کند پول را به دزدی ببرد. سیستم باید شرایط سختی را برای اینگونه کاربران فراهم کند. - فهرست "وقایع سیستم". چگونه سیستم آنها را اداره می کند؟
یک رویداد هر رخدادی است که سیستم طراحی شده است تا به آن پاسخ دهد. در زمینه تسلط بر فرآیندهای مورد نیاز، باید درباره رخدادهای کسب و کار و حوادثی که در کسب و کار دارای معنی هستند را در نظر گرفت؛ مانند قراردادن سفارش برای یک کتاب و یا درخواست برای یک بیمه نامه. - لیست "وقایع ویژه". در سیستم چه تعاملاتی برای این موارد درنظر گرفته شده است.
وقایع ویژه قابل پیش بینی هستند، اما اتفاقات غیر معمولی که نیاز به دستکاری خاص دارند. برای مثال در یک سیستم صدور صورت حساب، ممکن است در پایان سال کارهای خاصی انجام شود. ممکن است سیستم انبارداری برای تعدادی کالای خاص، شیوه متفاوتی را برای نقل و انتقال آن استفاده نماید. - مزایا را لیست کنید و وظایف انتها به انتها را برای آن ها بررسی کنید.
چه مزایایی ممکن است سیستم ارائه دهد. اگر پروژه فعلی یک ارتقا محسوب می شود، این ارتقا چه مزایایی را به همراه دارد؟ هرگز به یک لیست رسمی از مزایا تکیه نکنید. - مصاحبه کاربران درباره چالش های معروف و خطاهای معروف سیستم قدیمی
کاربران و ذینفعان را ملاقات کنید، چه به صورت فردی و چه بصورت گروهی. از آنها درخواست کنید که تراکنش های که با آنها درگیر هستند را تشریح کنند. سپس آنها را بصورت دیاگرام و نمودار رسم کنید و توضیح بدهید که اجزا به چه صورتی کار می کنند. آنها را تشویق کنید تا برایتان از داستان های خنده دار از بکارگیری های عجیب و غریب مردم از سیستم را برایتان بگویند. اگر شما در حال راه اندازی یک سیستم جایگزین هستید، از نمونه های قبلی استفاده کنید. درکنار داستان های بامزه، داستان هایی را بیابید که باعث خطاهایی در برنامه می شوند و حتی داستان هایی که برخی کاربران می خواهند انجام دهند ولی سیستم توان انجام آن را ندارد. - در کنار کاربران باشید و ببینید که آنها چگونه کار می کنند و چه کارهایی انجام می دهند.
درحین طراحی یک کنسول اپراتور تلفن (تلفن مخصوص)، طراح تلفن به سراسر کشور سفر کرد و او اپراتور/گیرنده ها را در حین استفاده مشاهده کرد. سپس محصولی مناسب برای اپراتورها طراحی شد و نسخه بتا سخت افزاری و نرم افزاری نصب و استفاده گردید. هرزمانی که شما با کاربران باشید و نحوه استفاده از برنامه را ببینید، اینکار به شما ایده هایی برای نوشتن سناریوهای جدید می دهد. - در مورد سیستم های مشابه بررسی نمایید که چگونه کارها را انجام می دهند.
شما قصد دارید یک برنامه مدیریت موجودی انباری را تست کنید که تا بحال از آن استفاده نکرده اید. شما باید کجاها را بگردید؟ در آمازون هزاران کتاب درباره این موجودی بود و در کنار آن من گوگل را جستجو کردم و میلیون ها نتیجه برای چگونگی استفاده از برنامه مدیریت موجودی انبار پیدا کردم. منابع زیادی برای هر نوع سیستم کسب و کار وجود دارد: مستندسازی انتظارات کاربر، سناریوهای رایج و غیر رایج، مسائل رقابتی و غیره. - شکایات انجام شده در مورد نمونه های قبلی سیستم و حتی رقبا را مطالعه کنید.
پیمانکاران توسعه نرم افزار همواره یک پایگاه داده از شکایات برنامه ایجاد می کنند. شرکت هایی که خودشان برنامه هایی را برای استفاده در داخل سازمان تهیه می کنند، همگی دارای گروهی بنام سرویس پشتیبانی هستند و تمامی موارد گزارش شده را ثبت می کنند. سوابق برنامه را بطور دقیق مطالعه کنید. خطاهای مربوط به کاربران را جدی بگیرید چرا که آنها منعکس کننده راه هایی هستند که کاربران توقع دارند آنها به درستی انجام شوند. - یک کسب و کار را تصور کنید. آن را واقعی فرض کنید و تلاش کنید داده ها را پردازش نمایید.
در این شیوه از تست، هدف شما این است که یک کاربر واقعی از محصول را ایجاد کنید. برای مثال اگر شما یک پردازشگر متن را تست می کنید، شما باید یک فایل متنی واقعی ایجاد کنید که در دنیای واقعی بکارگیری برنامه، از آن استفاده شود. سعی کنید زمانی را که برنامه مورد نظر به شدت مورد استفاده قرار می گیرد را، شبیه سازی کنید. تمام تلاشتان را انجام دهید که شبیه سازی بسیار به واقعیت نزدیک باشد. نتایج را بررسی کنید و داده ها را بررسی نمایید. تا جاییکه امکان وجود دارد سیستم را در حالت فشار قرار دهید و با صدای بلند باگ ها و گزارشات را ثبت کنید. هرکسی مناسب این شیوه از تست نیست اما به عنوان یک تستر می توان گفت که در این روش شما می توانید اشکالاتی را در دیتابیس پیدا کنید. - تلاش کنید داده هایی را از نرم افزارهای رقیب یا برنامه نسلهای پیشین استفاده کنید.
داده های خودتان یا داده های مشتری را در سامانه نرم افزاری استفاده کنید. سامانه دارای داده های خاص در مورد حوادث استثنایی و سوء استفاده ها می باشد. در این رویکرد تست، خروجی مورد انتظار قابل اعتماد است.