آموزش تست نرم افزار و انواع تست دستی و خودکار

آموزش تست نرم افزار و انواع تست دستی و خودکار

تست نرم افزار چیست؟

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

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

 

چرخه انتشار نرم افزار:

چرخه انتشار نرم افزار از زمان شروع کد نویسی تا عرضه نسخه نهایی می‌باشد که شامل چندین مرحله و عرضه نرم افزار می‌باشد.

  1. Pre-alpha

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

  1. Alpha

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

  1. Beta

نرم افزار بتا، همه قابلیت‌های آن تکمیل شده و خطا‌های زیادی برای کامل شدن نرم افزار وجود دارد. در این مرحله بیشتر به تست کاهش تاثیرات به کاربران و تست کارایی دقت می‌شود. نسخه بتا، اولین نسخه‌ای خواهد بود که بیرون شرکت و یا سازمان در دسترس قرار می‌گیرد. برخی توسعه دهندگان به این مرحله preview، technical preview یا early access نیز می‌گویند.

  1. Release candidate

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

 

انواع اجرا تست نرم افزار

تست دستی

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

تست دستی به ویژه زمانی مفید است که:

در حال تست رابط کاربری (UI)، قابلیت استفاده (Usability) و تجربه کاربری (UX) هستید،

در حال ارزیابی رفتار نرم افزار در سناریوهای غیر قابل پیش بینی هستید،

در حال ارزیابی زیبایی شناسی و احساس کلی برنامه هستید.

 

تست خودکار

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

نرم افزار تست خودکار
selenium :

 سلنیوم یک فریمورک اتوماسیون تست متن‌باز محبوب است که به آزمایش کنندگان نرم افزار کمک می‌کند تا اسکریپت‌های تست خودکار را بسازند و اجرا کنند. Selenium رابطی را ارائه می‌کند که به آزمایش‌کنندگان کمک می‌کند تا اسکریپت‌های تست را در زبان‌های برنامه‌نویسی محبوب مانند Ruby، Node JS، Python، Java، C#، PHP و غیره ایجاد کنند.

تست سلنیوم به شرکت‌ها اجازه می‌دهد تا اپلیکیشن‌های وب را برای عملکرد و سازگاری آنها در مرورگرهای مختلف تایید کنند. سلنیوم به آزمایش‌کنندگان امکان می‌دهد تا اسکریپت‌های آزمایشی را به زبان برنامه‌نویسی ترجیحی (preferred ) بنویسند، و می‌توان آن را روی یک نمونه مرورگر در هر دستگاه هدف‌ مانند یک گوشی هوشمند، تبلت ، لپ تاپ یا PC اجرا کرد که به تیم‌های تست اجازه می‌دهد ساعت‌های بی‌شماری در زمان تست، صرفه‌جویی کنند، که در صورتی که مجبور شوند هر ماژول یک برنامه را به صورت دستی در یک محیط run-time واقعی خارج از توسعه تایید کنند، می‌توان از آن اجتناب کرد.

 Cypress :

Cypress، یک فریم ورک آزمایشی مبتنی بر جاوا اسکریپت است. یک فریم ورک آزمایشی جاوا اسکریپت غنی از ویژگی ها که در مرورگر اجرا می شود و آزمایش های ناهمزمان را ساده و راحت می کند.

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

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

 

 Appium :

Appium Appium محبوب ترین و جامع ترین ابزار برای خودکارسازی تست اپلیکیشن موبایل است. یک نرم افزار منبع باز برای تست اتوماتیک است و می تواند در انواع برنامه های بومی و غیر بومی و انواع برنامه های طراحی شده با IOS و android مورد استفاده قرار گیرد.

 

انواع دسته بندی تست


 تست  : White Box

تست جعبهٔ سفید نوعی فرایند تست است که در آن ما دسترسی کاملی به کدهای نرم‌افزار داریم و برای افزایش امنیت و سنجیدن جریان ورودی و خروجی (I/O) و بهبود طراحی و کاربرد، می‌توانیم تمامی این موارد را مورد بررسی قرار دهیم و علت استفاده از گزارهٔ White Box این است که ما در این روش هیچ‌گونه محدودیتی در دسترسی به سورس‌کد نرم‌افزار یا اپلیکیشن نداشته و به اصطلاح درون آن پوستهٔ طراحی شده برای کاربر را می‌بینیم و کنکاش می‌کنیم.
 


   تست Black Box

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

در تست جعبهٔ سیاه، ابتدا نیازمندی‌ها و ویژگی‌های راه‌اندازی و اجرای نرم‌‌افزار را مورد بررسی قرار داده سپس ورودی‌های مجاز را برای اینکه ببینیم نرم‌افزار آن‌ها را به درستی پردازش می‌کند یا خیر، مورد تست قرار می‌دهیم که این بخش از کار اصطلاحاً Positive Test Scenario نامیده می‌شود. از سوی دیگر، ورودی‌های غیرمجاز و نامعتبر را به همین روش که اصطلاحاً Negative Test Scenario نام دارد، تست می‌کنیم و پس از مقایسهٔ خروجی‌ها با مقادیری که انتظارش را داشتیم، تست کِیس‌هایی را با ورودی‌های مد نظر خود نوشته و اجرا می‌کنیم و در نهایت به مقایسهٔ آن‌ها خواهیم پرداخت و این در حالی است که این پروسه را باید پس از پیدا کردن و حل کردن هر مشکل یا باگی، دوباره اجرا کنیم.

تست جعبه سیاه به دو دسته تست عملکردی (Functional)و تست غیرعملکردی  (Non-Functional)  تقسیم بندی می شود.

 

تست  Gray Box

تست جعبه خاکستری (Gray Box Testing Strategy) روشی برای تست نرم‌افزار است که با آگاهی کم از فعالیت‌های داخلی برنامه انجام می‌گیرد. این تست ترکیبی از تست جعبه سفید و سیاه است.همان‌طور که می‌دانید تستر در استراتژی جعبه سیاه از ساختار داخلی  برنامه اطلاعی نداشته و در مقابل در استراتژی جعبه سفید آگاهی کامل ازساختار داخلی دارد. اما در استراتژی جعبه خاکستری تستر تا حدودی از ساختار داخلی برنامه آگاه بوده که این شامل دسترسی به ساختارداده‌های داخلی و الگوریتم‌ها در جهت طراحی Test Case ها است.

 

 

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

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

 برای مثال، یک «مورد تست» (Test Case) برای آزمایش قابلیت ایجاد کاربر می‌نویسیم. این تست کیس، ورودی درستی را به سیستم ارائه می‌دهد و سپس اطمینان حاصل می‌کند که خروجی هم درست باشد؛ خروجی درست در اینجا اعلان موفقیت‌آمیز بودن ایجاد کاربر جدید است. تست عملکردی با تقلید سناریوهای واقعی، بررسی می‌کند تا همه‌چیز براساس پیش‌نیازهای قابل اجرا به درستی عمل کند.

 

تست غیرعملکردی  (Non-Functional)

تست غیر عملکردی به عنوان یک نوع آزمایش نرم افزاری برای بررسی جنبه های غیر عملکردی برنامه همچون performance usability، reliability و غیره به کار می رود.به عبارت دیگر این تست برای بررسی آمادگی یک سیستم در موارد غیر کارکردی همچون امنیت و مقیاس پذیری و در دسترس بودن و... طراحی شده است که هرگز با آزمایش عملکردی برطرف نمی شوند.

تست غیر کارکردی به همان اندازه تست عملکردی مهم است و رضایت مشتری را تحت تأثیر قرار می دهد. یکی از ویژگی های تست غیر عملکردی این است که باید قابل اندازه گیری باشد ، بنابراین جایی برای توصیف ذهنی مانند خوب ، بهتر ، بهترین و غیره وجود ندارد.

 

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

تست واحد

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

 

به عنوان مثال: یک اپلیکیشن سفارش غذا را در نظر بگیرد. کاربر محصولی را سفارش می دهد در هنگام تست سفارش محصول، چند بخش دیگر مانند حذف از سبد خرید و پرداخت و ارسال سفارش به صورت جداگانه تست می گردد.

 

تست یکپارچه سازی

تست یکپارچه سازی نوعی آزمایش است که نحوه کار واحدهای مختلف نرم افزار را هنگام ادغام در یک سیستم بزرگتر با هم آزمایش می کند.

به عنوان مثال: یک اپلیکیشن سفارش غذا را در نظر بگیرد. کاربر محصولی را سفارش می دهد در هنگام سفارش محصول، چند بخش دیگر مانند حذف از سبد خرید و پرداخت و ارسال سفارش به صورت یکپارچه تست می گردد.

 

تست دود

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

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

 

تست سیستم

نوع دیگری از تست عملکرد نرم افزار، تست سیستم است که کل سیستم را آزمایش می کند. این تضمین می کند که سیستم تمام الزامات و عملکردهای مورد نظر را برآورده می کند. این نوع تست معمولاً بعد از تست یکپارچه سازی و قبل از تست پذیرش کاربر انجام می شود.

 

به عنوان مثال: یک برنامه تناسب اندام که با ویژگی های بسیاری مانند اهداف ماهیانه تناسب اندام، معیارهای سلامتی، و ساخت جلسات ورزشی شخصی سازی شده و غیره ساخته شده است. این نوع برنامه نیاز به یک فرآیند تست دارد که عملکرد کامل سیستم را تضمین کند.

 

تست رگرسیون

تست رگرسیون تضمین می کند که تغییرات ایجاد شده در نرم افزار عملکرد موجود را خراب نمی کند. هدف نهایی این فرآیند بررسی پایداری بهره وری و عملکرد نرم افزار پس از هر افزودن جدید است.

 

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

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

تست امنیتی (Security Testing)

تست امنیتی بررسی می‌کند که چگونه نرم‌افزار در محیط شبکه و در مقابل حملات مخرب ایمن است. حوزه‌های کلیدی که باید در این تست سنجیده شوند عبارتند از: اعتبارسنجی، تایید هویت کاربران و دسترسی آن‌ها به داده‌ها براساس نقش‌هایی مانند مدیریت، تعدیل‌کننده (moderator)، سازنده (composer) و کاربر معمولی.

 

- تست لود (Load Testing)

برنامه‌ای که قرار است یک حجم کاری (Workload) مشخص را انجام دهد، به این صورت تست می‌شود که در دنیای واقعی و تحت حجم کاری مشخص چگونه کار می‌کند. تست لود، توانایی برنامه را برای انجام عملکرد صحیح در زمان تعیین شده و توانایی تحمل حجم بار کاری می‌سنجد.

 

 

 - تست استرس (Stress Testing)

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

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

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

- تست حجم (Volume Testing)

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

-تست پایداری (Endurance Testing)

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

 

-در دسترس بودن(Availability):

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


-قابلیت حمل(Portability):

انعطاف پذیری نرم افزار برای انتقال از سخت افزار یا محیط نرم افزار فعلی آن به سخت افزار یا محیط نرم افزار دیگر.

-مقیاس پذیری(Scalability):

برای بررسی اینکه هر برنامه نرم افزاری می تواند ظرفیت پردازش خود را برای پاسخگویی به افزایش تقاضا گسترش دهد.

 

نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

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