تست نرم افزار چیست؟
تست نرم افزار روشی است برای بررسی اینکه آیا محصول نهایی نرم افزار با الزامات مورد انتظار مطابقت دارد و یا اینکه اطمینان حاصل شود که محصول نرم افزار باگی ندارد. این کار شامل اجرای دستی یا خودکار برخی از ویژگی های نرم افزار است. هدف از تست نرم افزار شناسایی خطاها، باگ ها و یا نیاز های از دست رفته در مقابل نیاز های واقعی است.
چرا تست نرم افزار مهم است؟
زیرا در صورت وجود باگ و یا خطا در نرم افزار، می توان آن ها را یافته و قبل از ارائه نرم افزار این مشکلات را برطرف کرد.
این کار مهم است زیرا خطاها و یا باگ های برنامه ممکن است بعد از ارائه ی محصول هزینه ی زیادی داشته باشند و یا حتی خطرناک باشند. باگ ها و اشکالات نرم افزاری ممکن است باعث از دست رفتن منابع مالی و انسانی شود که تاریخ پر از نمونه هایی از این قبیل است:
• در آوریل 2015 ترمینال Bloomberg در لندن به دلیل نقص نرم افزار بیش از 300000 معامله گر در بازار های مالی را تحت تاثیر خود قرار داد. این امر دولت را مجبور کرد تا فروش اوراق سه میلیارد پوندی را به تعویق بیندازد.
• اتومبیل های نیسان به دلیل خرابی نرم افزار در ردیاب های حسی کیسه هوا، بیش از یک میلیون خودرو را از بازار فراخواندند. گزارش شده است که دو حادثه به دلیل خرابی نرم افزار رخ داده است.
• استارباکس به دلیل خرابی نرم افزار در سیستم POS مجبور شد حدود 60 درصد از فروشگاه های ایالات متحده و کانادا را تعطیل کند.
• برخی از خرده فروشان شخص ثالث آمازون به دلیل نقص نرم افزار ، قیمت محصول خود را به 1 پوند کاهش دادند و با تلفات سنگینی روبرو شدند.
• در سال 2015 هواپیمای جنگنده F-35 قربانی یک اشکال نرم افزاری شد و باعث شد تا نتواند اهداف را به درستی تشخیص دهد.
• ایرباس A300 خطوط هوایی چین به دلیل اشکال نرم افزاری در 26 آوریل 1994 سقوط کرد و منجر به کشته شدن 264 انسان بی گناه شد.
• در سال 1985 ، دستگاه پرتو درمانی Therac-25 کانادا به دلیل اشکال نرم افزار دوزهای پرتوی کشنده ای را به بیماران منتقل کرد که 3 نفر به شدت زخمی شدند و هم چنین 3 کشته به جای گذاشت.
• در آوریل سال 1999 ، یک اشکال نرم افزاری باعث عدم موفقیت در پرتاب ماهواره نظامی 1.2 میلیارد دلاری شد که پرهزینه ترین حادثه تاریخ است.
مزایای تست نرم افزار چیست؟
1. مقرون به صرفه بودن یکی از مزایای مهم تست نرم افزار است. تست به موقع هر پروژه IT کمک می کند تا در دراز مدت با پرداخت هزینه ی کمتر سرمایه خود را پس انداز کنید. در صورت بروز اشکالات در مراحل اولیه تست نرم افزار، رفع آن هزینه کمتری دارد.
2. امنیت، آسیب پذیر ترین و حساس ترین بخش نرم افزار است. مردم به دنبال محصولات قابل اعتماد هستند. تست نرم افزار به رفع زودتر خطرات و مشکلات امنیتی کمک می کند.
3. کیفیت محصول نیاز اساسی هر محصول نرم افزاری است. تست ها اطمینان حاصل می کنند که یک محصول با کیفیت به مشتریان تحویل داده می شود.
4. هدف اصلی هر کالایی جلب رضایت مشتری است. تست UI / UX بهترین تجربه کاربری را تضمین می کند.
طبقه بندی تست های نرم افزار
تست های نرم افزار دسته بندی های مختلفی دارند:
1. با توجه به اهداف تست:
• Functional Testing
• Non-Functional or Performance Testing
• Usability Testing
• Testing the user interface (UI Testing)
• Security Testing
• Localization Testing
• Compatibility Testing
2. با توجه به میزان دانشی که از نرم افزار داریم:
• Black box Testing
• White box Testing
• Gray box Testing
3. با توجه به میزان دستی یا اتوماتیک بودن تست:
• Manual Testing
• Automated Testing
• Semi-automated Testing
4. با توجه به میزان وابستگی بخش های مختلف برنامه:
• Component (unit) Testing
• Integration Testing
• System / end-to-end Testing
5. با توجه به زمان انجام تست:
• Alpha Testing
• Smoke Testing
• New feature Testing
• Regression Testing
• Acceptance Testing
• Beta Testing
6. با توجه به مثبت/منفی بودن سناریوی انجام تست:
• Positive Testing
• Negative Testing
7. با توجه به آمادگی برای انجام تست:
• Documentation Testing (Formal Testing)
• Test ad hoc or intuitive Testing (Ad Hoc Testing)
انواع تست نرم افزار
در زیر لیستی از انواع رایج ترین تست های نرم افزار را معرفی می کنیم:
انواع Functional Testing :
• Unit Testing
• Integration Testing
• System Testing
• Sanity Testing
• Smoke Testing
• Interface Testing
• Regression Testing
• Beta/Acceptance Testing
انواع Non-functional Testing :
• Performance Testing
• Load Testing
• Stress Testing
• Volume Testing
• Security Testing
• Compatibility Testing
• Install Testing
• Recovery Testing
• Reliability Testing
• Usability Testing
• Compliance Testing
• Localization Testing
بیاید با جزئیات بیشتری برخی از این انواع تست ها را بررسی کنیم.
Black Box Testing
این تست با عنوان هایbehavioral, eye-to-eye, opaque-box, closed-box, specification based نیز شناخته می شود.
طراحی داخلی یک برنامه در این نوع تست در نظر گرفته نشده و تمرکز این تست بر روی الزامات و عملکرد یک برنامه است. این یک روش تست نرم افزار است که در آن عملکرد یک نرم افزار را، بدون داشتن اطلاعات زیاد در مورد ساختار و طراحی داخلی آن تجزیه و تحلیل می کند و مقدار ورودی را با مقدار خروجی مقایسه کرده و عملکرد برنامه را می سنجد.
White Box Testing
این تست با عنوان های Clear box testing, Open box testing, Transparent box testing,
Code-based testing و Glass box testing نیز شناخته می شود.
این تست ها مبتنی بر دانش و منطق داخلی کد برنامه برای بررسی جریان ورودی-خروجی و بهبود طراحی، قابلیت استفاده و امنیت، انجام می شوند. برای انجام این نوع تست از لایه ی درونی نرم افزار و سورس کد آن استفاده می کنیم.
Gray Box Testing
این تست ترکیبی از black box testing و white box testing است. هدف از این آزمایش جستجو برای نقص، در صورت وجود ساختار نامناسب یا استفاده نادرست از برنامه ها است.
Functional Testing
این تست یکی از انواعBlack Box Testing است که برای مطابقت عملکرد برنامه با آنچه انتظار می رود انجام می شود. این نوع تست بخش های داخلی یک نرم افزار را نادیده گرفته و فقط بر روی خروجی تمرکز دارد تا بررسی کند که آیا خروجی ها مطابق با نیازها می باشد یا خیر.
Non-Functional Testing
این تست برای تایید نیاز غیر عملکردی (non-functional) مانند کارایی و قابل استفاده بودن و ... انجام می شود. هدف NFT اطمینان حاصل کردن از این است که آیا زمان پاسخگویی نرم افزار یا برنامه به اندازه ی مورد نیاز کسب و کار سریع است یا خیر. این تست شامل تست های Laod Testing, Stress Testing, Security, Volume, Recovery Testing و غیره است. در دنیای تست نویسی روز به روز توجه بیشتری به این نوع تست نویسی می شود.
Boundary Value Testing
این تست رفتار برنامه را در سطوح مرزی بررسی می کند و برای یافتن باگ در مقادیر مرزی انجام می شود. این تست، برای تست طیف مختلفی از اعداد استفاده می شود، برای هر محدوده یک مرز بالا و یک مرز پایین وجود دارد و تست بر روی این مقادیر مرزی انجام می شود.
برای مثال اگر تستی به محدوده ی اعداد از 1تا 500 نیاز دارد، این تست بر روی مقادیر 0، 1، 2، 499، 500 و 501 انجام می شود.
این تست یکی از استراتژی های طراحی سوژه ی تست (test case) در Black Box Testing می باشد.
Equivalence Partitioning
این روش نیز مانند Boundary value یکی از استراتژی های طراحی سوژه ی تست در Black Box Testing می باشد. در این روش داده های ورودی، به کلاس های معادل مختلف تقسیم بندی می شوند. از این روش معمولا برای کاهش تعداد سوژه های تست به مجموعه محدودی از سوژه های تست استفاده می شود، که هنوز هم حداکثر نیاز ها را پوشش می دهد. برای مثال اعداد 1 تا 1000 برای ورودی Black Box Testing با استفاده از این روش به سه سوژه ی تست تقسیم می شوند:
1) داده های ورودی معتبر که شامل یک مقدار از محدوده 1 تا 1000 است. این مقادیر یک نتیجه ای در بر دارند که اگر هر مقدار دیگری بین 1 تا 1000 انتخاب شود همان نتیجه را در بر خواهد داشت.
2) داده های ورودی با هر مقدار کمتر از 1، به عنوان یک سوژه ی تست نامعتبر است.
3) داده های ورودی با هر مقدار بیشتر از 1000 نیز به عنوان یک سوژه ی تست نامعتبر است.
System Testing
در این تست، بر اساس نیازمندی برنامه، کل برنامه مورد بررسی قرار می گیرد که یک محصول نرم افزاری کامل و یکپارچه را تایید می کند. این تست از نوع Black-Box Testing است که تمام قسمت های ترکیبی نرم افزار را پوشش می دهد.
این استراتژی تست عملکرد، امنیت، قابلیت جابجایی و سایر موارد را بررسی می کند.
Unit Testing
این تست، تست عملکرد صحیح واحد های کوچکی از سورس کد نرم افزار است که به هر یک از این واحد ها یک unit گفته می شود. این تست معمولا توسط برنامه نویس ها انجام می شود زیرا به دانش دقیقی از طراحی و سورس کد برنامه نیاز است.
در این تست تمامی قابلیت های یک نرم افزار پوشش داده نمی شود و یا آنچه کاربر از خروجی نرم افزار انتظار دارد مد نظر نیست بلکه همان طور که گفته شد کوچک ترین واحد های سورس کد که هدف خاصی را به سرانجام می رسانند مورد بررسی قرار می گیرد.
Branch Testing
یکی از انواع White box Testing می باشد و در حین انجام Unit Testing انجام می شود. در این تست کد با عبور از هر branch کاملا تست می شود تا این اطمینان حاصل شود که برنامه در هر شاخه قابل اجرا و در دسترس است.
Mutation Testing
یکی از انواع White box testing است که وقتی سورس کد یک برنامه تغییر می کند، بررسی می کند که آیا تست های موجود می توانند این تغییر را در سیستم شناسایی کنند یا خیر. تغییر سورس کد برنامه معمولا کم است به طوری که کل برنامه را تحت تاثیر قرار نمی دهد و فقط بر قسمت خاصی از برنامه موثر است و تست های مربوط به این قسمت باید بتوانند این خطاها را در برنامه شناسایی کنند.
Component Testing
این تست بیشتر توسط توسعه دهندگان پس از اتمام unit testing انجام می شود. این تست شامل تست چندین ویژگی به عنوان یک کد واحد است و هدف آن شناسایی هر باگی پس از اتصال چندین قابلیت مختلف با یکدیگر است.
Integration Testing
این تست پس از ادغام ماژول ها و یا بخش های مختلف یک ماژول که به صورت جداگانه به درستی کار می کنند انجام می شود در این تست بررسی می شود که هنگام ادغام مشکلی پیش نیاید. این تست برای نرم افزار های بزرگی است، که شامل ترکیبی از ماژول هایی می باشد که به طور کامل با هم ترکیب شده اند.
Incremental Integration Testing
این تست یک رویکرد پایین به بالا برای تست است یعنی تست مداوم برنامه به هنگام اضافه شدن قابلیت های جدید.
عملکرد و ماژول های برنامه باید به اندازه کافی مستقل باشند تا بتوانند به صورت جداگانه تست شوند و با اضافه شدن قابلیت های جدید با مشکلی مواجه نشوند. این تست توسط توسعه دهندگان و تیم تست کننده نرم افزار انجام می شود.
Sanity Testing
نوعی تست نرم افزار است که پس از ساخت نرم افزار، با تغییرات جزئی در سورس کد و یا عملکرد برنامه، برای اطمینان از رفع مشکلات و عدم بروز مشکلات دیگر به سبب این تغییرات، انجام می شود. هدف این تست بررسی عملکرد جدید برنامه مطابق انتظارات است..
Smoke Testing
هر زمان که پس از ساخت نرم افزار تیم توسعه دهنده یک تغییری در سورس کد ایجاد کند و یا اینکه یک عملکرد یا یک قابلیت جدید را ارائه دهد تیم تست کننده وظیفه دارد که این تغییر را تایید کند و اطمینان حاصل کند که هیچ مشکل و مسئله ی اساسی وجود ندارد. در این مرحله تیم تست کننده اطمینان حاصل می کند که برنامه پایدار است و سطح دقیق تری از تست را شروع می کند.
اگر تیم تست کننده متوجه شود که برنامه با قابلیت های جدید و تغییراتش دچار مشکل و خرابی است، تیم تست کننده می تواند این ورژن از برنامه را رد کند و به تیم توسعه اطلاع دهد.
Interface Testing
این تست بررسی می کند که آیا ارتباط بین دو سیستم نرم افزاری مختلف به درستی انجام شده است یا خیر. به اتصالی که دو بخش را با هم ادغام کند interface گفته می شود، این اتصال می تواند بین نرم افزار، سخت افزار، دستگاه های جانبی، انسان و ترکیبی از آنها باشد. این interface در دنیای کامپیوتر می تواند چیزی مانند API، خدمات وب و ... باشد.
Regression Testing
تست یک برنامه به طور کلی برای تغییر یک ماژول یا عملکرد، با عنوانregression testing شناخته می شود.
قرار دادن تمام برنامه یا نرم افزار تحت پوشش این نوع تست کار خیلی سختی است، بنابراین معمولا از Automation Testing Tools برای این نوع تست ها استفاده می شود.
Feature Testing
نوعی از تست است که ایجاد تغییرات در یک نرم افزار را برای افزودن یک یا چند ویژگی جدید یا ایجاد تغییراتی در ویژگی های موجود بررسی می کند. هدف از feature testingاین است که مطمئن شوید نرم افزار به درستی کار می کند و مطابق انتظارات پیش می رود.
Alpha test
متداول ترین نوع تست مورد استفاده در صنعت نرم افزار است. هدف از این تست شناسایی کلیه مشکلات و یا باگ های احتمالی در نرم افزار قبل از ارائه آن به بازار یا کاربر است.
Alpha test در پایان مرحله توسعه نرم افزار انجام می شود. در نتیجه ی این تست، ممکن است تغییرات جزئی در طراحی ایجاد شود.
این تست آخرین تست انجام شده توسط تیم های تست کننده قبل از انتشار نرم افزار برای Beta test است. این تست علاوه بر تیم های تست کننده می تواند توسط کاربران بالقوه و یا مشتریان انجام شود.
Alpha test در واقع یک روش ارزیابی کیفیت و پایداری یک محصول در محیط آزمایش است.
Beta Testing
این تست یک نوع رسمی از تست نرم افزار است که توسط مشتری انجام می شود. که قبل از عرضه محصول به بازار برای کاربران نهایی در محیط واقعی انجام می شود.
تست بتا برای اطمینان از عدم وجود هیچ گونه مشکل جدی در برنامه یا محصول انجام می شود و همچنین بررسی می کند که آیا از نظر کاربر نهایی نیازهای تجاری را برآورده می کند یا خیر. هنگامی که نرم افزار از طرف مشتری تایید شود تست بتا موفقیت آمیز بوده است.
این آخرین تستی است که قبل از انتشار محصول برای اهداف تجاری انجام می شود. معمولا نسخه بتای نرم افزار یا محصول منتشر شده به تعداد معینی از کاربران در یک منطقه خاص محدود می شود. بنابراین کاربر نهایی از این نرم افزار استفاده کرده و نظرات خود را با شرکت در میان می گذارد. سپس شرکت قبل از انتشار نرم افزار به سراسر جهان اقدامات لازم را انجام می دهد.
Performance Testing
این اصطلاح معمولا در کنار load testing و stress testingاستفاده می شود. این تست برای بررسی اینکه آیا نرم افزار یا برنامه نیاز های کسب و کار را پاسخگو می باشد یا خیر انجام می شود. برای انجام این کار از ابزار های مختلف performance و load استفاده می شود.
Load Testing
یکی از انواع non-functional testing است و هدفش بررسی میزان تحمل بار یا حداکثر حجم کار یک سیستم بدون هیچ گونه خطا یا تخریبی در عملکرد برنامه است. این تست به یافتن حداکثر ظرفیت سیستم تحت بار خاص و هر مسئله ای که باعث تخریب عملکرد نرم افزار می شود کمک می کند.
Stress Testing
این تست به این صورت انجام می شود که یک سیستم را فراتر از توانایی های خود تحت فشار قرار می دهند تا نحوه و زمان خرابی آن برای تایید پایداری و قابلیت های نرم افزار بررسی شود.
هدف این تست، بررسی نرم افزار برای قابلیت مقاومت و قابلیت کنترل خطا در شرایط load بسیار سنگین، و همچنین اطمینان از عدم خرابی نرم افزار در شرایط بحرانی است.
این تست را با عنوان Endurance Testing (تست استقامت) نیز می شناسند.
برجسته ترین کاربرد این تست تعیین محدودیت در سیستم یا نرم افزار یا سخت افزار است.
Volume Testing
از نوع non-functional testing است که توسط تیم تست عملکرد انجام می شود.
در این تست نرم افزار را با حجم عظیمی از داده ها روبرو می کنند تا رفتار سیستم و زمان پاسخگویی برنامه را بررسی کنند. این حجم بالای داده ممکن است عملکرد و سرعت زمان پردازش نرم افزار را تحت تاثیر قرار دهد.
Security Testing
نوعی تست است که توسط تیم خاصی از تست کنندگان انجام می شود.
این تست برای بررسی امنیت نرم افزار ، برنامه یا وب سایت در برابر تهدیدات داخلی یا خارجی انجام می شود. این تست شامل میزان ایمنی نرم افزار از برنامه های مخرب، ویروس ها و همچنین ایمنی و قوی بودن در سطح دسترسی و احراز هویت است.
همچنین نحوه ی رفتار نرم افزار، برای هرگونه حمله هکرها و برنامه های مخرب و نحوه ی نگه داری نرم افزار برای امنیت داده ها، بررسی می شود.
Compatibility Testing
این نوع تست نحوه ی رفتار و عملکرد یک نرم افزار را در محیط های متفاوت، وب سرورها، سخت افزار و شبکه تایید می کند. این تست تضمین می کند که نرم افزار می تواند با پیکر بندی متفاوت، پایگاه داده ی متفاوت، مرورگرها و نسخه های مختلف آنها اجرا شود. این تست ها توسط تیم تست انجام می شود.
Browser Compatibility Testing
یکی از زیر مجموعه های compatibility testing می باشد و توسط تیم تست انجام می شود.
این تست برای برنامه های تحت وب انجام می شود و این اطمینان را می دهد که برنامه با مرورگرها و سیستم عامل های مختلف قابل اجرا است. این تست همچنین این اطمینان خاطر را می دهد که آیا برنامه تحت وب ما در همه ی نسخه های همه ی مرورگرها اجرا می شود یا خیر.
Backward Compatibility Testing
یکی از زیر مجموعه های compatibility testing می باشد. این تست، سازگاری نرم افزار توسعه یافته یا بروز شده با نسخه ی قدیمی آن نرم افزار را تایید می کند.
این نوع تست بررسی می کند که نسخه ی بروز، با فرمت فایل های ایجاد شده، جداول داده و ساختار داده های ایجاد شده توسط نسخه ی قدیمی به خوبی کار کند.
Install/Uninstall Testing
این تست شامل فرایند نصب یا حذف (کامل و جزئی) و یا به روز رسانی نرم افزار است که در سیستم عامل های مختلف تحت محیط نرم افزاری یا سخت افزاری مختلف انجام می شود. این تست معمولا توسط تیم تست کننده در همکاری با مدیر پیکر بندی نرم افزار انجام می شود.
Recovery Testing
این تست تعیین کننده میزان بازیابی برنامه یا نرم افزار در هنگام بروز خرابی یا مشکلات مانند: خرابی های سخت افزاری یا نرم افزاری، خرابی های شبکه و ... می باشد.
هدف از این تست تعیین کردن این است که آیا برنامه بعد از یک حادثه ی بد یا از بین رفتن یکپارچگی قادر به ادامه ی عملیات می باشد یا خیر.
Reliability Testing
بررسی می کند که آیا نرم افزار می تواند برای مدت زمان مشخصی در یک محیط خاص عملکردی بدون مشکل را داشته باشد. این تست در نرم افزار این اطمینان را می دهد که محصول بدون خطا می باشد و برای هدف مورد نظر خود قابل اعتماد است.
Usability Testing
در این تست، کاربر پسند بودن (User-friendliness) نرم افزار بررسی می شود، که فلو های برنامه را بررسی می کنند تا بدانند که کاربر جدید می تواند به راحتی برنامه را درک کند و فلو های مختلف را پیش رود یا خیر.
اگر کاربر در هر نقطه ای گیر کرد راه حل های مختلف را مستند می کنند و مشکلات و قابلیت های طراحی را بررسی می کنند. این تست از زمان توسعه ی اولیه تا زمان عرضه نرم افزار به طور مکرر انجام می شود.
Compliance Testing
این تست که conformance Testing نیز گفته می شود به مطابقت نرم افزار و یا برنامه قبل از انتشار با مجموعه ای از استاندارد های داخلی و یا خارجی و مقررات می پردازد. این استاندارد ها توسط سازمان هایی خاص تعیین می شوند.
استاندارد های داخلی، استاندارد هایی است که خود سازمان تعیین می کند.
Localization Testing
نوعی تست است که در آن رفتار یک نرم افزار برای یک منطقه، محل و یا فرهنگ خاص بررسی و تست می شود.
قسمت اصلی تحت تاثیر این تست محتوا و رابط کاربری می باشد.
Acceptance Testing
این تست توسط مشتری انجام می شود و بررسی می کند که آیا نرم افزار با الزامات کسب و کار و نیاز کاربر نهایی مطابق است. مشتری فقط زمانی نرم افزار را می پذیرد که همه ویژگی ها و عملکرد ها مطابق انتظارش کار کنند.
این آخرین مرحله تست است که پس از آن نرم افزار تولید می شود. به این کار تست پذیرش کاربر (UAT) نیز می گویند.
هنگامی که فرآیند تست نرم افزار توسط تیم تست کننده به پایان رسید. محصول به مشتری یا تعدادی از کاربران و یا هر دو تحویل داده می شود تا میزان قابل قبول بودن آن را تست کنند تا از بدون نقص بودن محصول و اینکه محصول می تواند تمام نیاز های مهم و عمده ی کسب و کار را برآورده کند اطمینان حاصل کنیم.
Ad-hoc Testing
ad-hoc به این معنی می باشد که برای انجام یک کار و یک هدف قبل از وقوع آن کار هیچ برنامه ریزی انجام نشده است، یعنی بدون هیچ اشاره به سوژه ی تستی و همچنین بدون هیچ برنامه و یا مستندی این آزمایش انجام می شود.
هدف از این تست پیدا کردن باگ و شکستن روند عادی برنامه با هر گونه اجرا یا هر قابلیت تصادفی است. این تست یک روش غیر رسمی برای یافتن باگ است و توسط هر شخصی در پروژه قابل انجام می باشد. پیدا کردن باگ بدون سوژه ی تست کار دشواری است اما گاهی ممکن است باگی که در طی این تست پیدا می شود از تست های دیگر بدست نیاید.
Formal Testing
برای انجام این نوع تست مجموعه ای از مستندات، سوژه های تست و ... را تهیه می کنیم که روش و اهداف آزمون را مشخص می کند. مستندات تست را می توان از الزامات برنامه، طراحی برنامه، روش equivalence partitioning testing ، روش Boundary value testing، حدس خطا و ... تهیه کرد. سطح رسمیت و دقت سوژه های تست به نیاز های پروژه بستگی دارد.
Accessibility Testing
هدف این تست این است که مشخص کند که آیا این نرم افزار یا برنامه برای افراد معلول قابل دسترسی است یا خیر.
در اینجا منظور از معلولیت ناشنوا، کور رنگ، معلول ذهنی، نابینا، پیری و سایر گروه های معلول است.
در این تست بررسی های مختلفی از جمله اندازه قلم برای معلولین بینایی، رنگ و کنتراست برای کور رنگی و ... انجام می شود.
Back-end Testing
هر زمان که ورودی یا داده ای در برنامه از front-end وارد شود، آن داده در پایگاه داده ای ذخیره می شود و تست چنین پایگاه داده ای به عنوان Database Testing یا Backend Testing شناخته می شود.
پایگاه داده های مختلفی مانند: MySQL, SQL Server و Oracle و ... وجود دارد. تست پایگاه داده شامل تست ساختار جدول ها، شِما پایگاه داده، روش ذخیره کردن، ساختار داده و ... است.
در Back-end Testing رابط کاربری (GUI) دخیل نیست، تست کنندگان با دسترسی مناسب مستقیما به پایگاه داده متصل می شوند و با اجرای چند کوئری در پایگاه داده، می توانند به راحتی داده ها را تایید کنند.
در این تست می تواند مواردی مانند از دست دادن داده ها، خراب شدن داده ها و ... پشت سر هم مشخص شود و این مسائل و رفع آنها قبل از ورود سیستم به محیط تولید بسیار مهم است.
Comparison Testing
مقایسه نقاط قوت و ضعف یک محصول با نسخه های قدیمی خود و یا با محصولات مشابه موجود در بازار comparison testing نامیده می شود.
End-to-End Testing
این تست برنامه را به طور کامل در محیطی که شرایط دنیای واقعی را دارد مورد سنجش قرار می دهد و شرایطی مانند: تعامل با پایگاه داده، استفاده از ارتباطات شبکه و یا در صورت لزوم تعامل با سایر سخت افزارها، برنامه ها یا سیستم های دیگر را فراهم می کند.
Graphical User Interface (GUI) Testing
هدف این تست اعتبار سنجی رابط گرافیکی کاربر (GUI) بر اساس نیاز کسب و کار است. این رابط مورد انتظار، در مستندات طراحی وartboard های (صفحات طراحی شده توسط طراح) طراحی شده ذکر شده است.
GUI Testing شامل اندازه دکمه ها و ورودی های موجود در صفحه، یکپارچگی تمام متن ها، جداول و محتوای جداول و همچنین یکپارچگی منو ها و زیر منو ها است.
Gorilla Testing
نوعی تست است که هم تیم تست کننده و هم توسعه دهندگان انجام می دهند. در این تست یک ماژول یا قابلیت های موجود در یک ماژول به صورت کامل و به شدت مورد تست قرار میگیرد. هدف از این تست بررسی توانایی برنامه است.
Happy Path Testing
هدف از این تست، تست موفقیت آمیز بودن یک برنامه کاربردی بر روی یک جریان مثبت است. این تست به دنبال باگ یا یک شرایط منفی نیست و فقط بر روی ورودی های معتبری تمرکز دارد که خروجی قابل انتظار را تولید میکنند.
Monkey Testing
این آزمایش توسط تیم تست کننده انجام می شود با پیش فرض این مسئله که شخص تست کننده هیچگونه شناخت و درکی از برنامه ندارد و داده ها و ورودی ها را به صورت کاملا تصادفی وارد می کند. هدف این تست این است که بررسی کند که آیا برنامه با ارائه مقادیر و یا داده های تصادفی دچار مشکل می شود یا خیر. این تست به صورت تصادفی انجام می شود و نیازی به آگاهی در مورد عملکرد سیستم وجود ندارد.
Negative Testing
این تست با استفاده از داده های غلط، ورودی یا داده های نامعتبر انجام می شود. اگر سیستم خطای ورودی نامعتبر را اعلام کند و مطابق انتظار رفتار کند، اعتبار برنامه را تایید می کند. هدف این تست این است که اطمینان حاصل کند که نرم افزار با ورودی های نامعتبر دچار مشکل نشده و پایدار است.
Positive Testing
این تست با استفاده از داده های درست و ورودی های معتبر انجام می شود. با این کار تایید می کند که آیا نرم افزار مطابق انتظار کار می کند یا خیر. این تست می تواند تایید کند که نرم افزار دقیقا همان کاری را انجام می دهد که مطابق انتظار است. هدف این تست این است که اطمینان حاصل کند که نرم افزار با ورودی های معتبر درست کار کرده و انتظارات را برآورده می کند.
Risk-Based Testing - RBT
در این نوع تست عملکرد ها یا الزامات برنامه بر اساس الویت آنها تست می شود. این تست شامل تست عملکرد های بسیار حیاتی برنامه است که بیشترین تاثیر را در کسب و کار دارند و احتمال خرابی در آنها بسیار زیاد است.
الویت بندی در این تست بر اساس نیاز کسب و کار است، بنابراین وقتی الویت همه ی عملکرد های برنامه تعیین شد، ابتدا عملکرد های دارای الویت بالا سپس متوسط و پس از آن عملکرد هایی با الویت کم تست می شود.
عملکرد هایی که الویت کمی دارند ممکن است بر اساس زمان موجود تست شوند یا تست نشوند.
RBT در صورتی انجام می شود که زمان کافی برای تست کل نرم افزار وجود ندارد و نیاز است که نرم افزار به موقع و بدون تاخیر اجرا شود.
Static Testing
نوعی تست است که برای یافتن خطا در نرم افزار بدون اجرای کد انجام می شود. در این تست بررسی دستی یا خودکار کد (Code Review)، اسناد مورد نیاز و طراحی اسناد به منظور یافتن خطاها انجام می شود. هدف این تست بهبود کیفیت برنامه های نرم افزاری از طریق یافتن خطا در مراحل اولیه فرایند توسعه نرم افزار است. این تست به این دلیل در مراحل اولیه ی توسعه انجام می شود زیرا شناسایی خطاها و حل آنها آسان تر است.
Vulnerability Testing
تستی که برای شناسایی ضعف در نرم افزار، سخت افزار و شبکه است را با عنوان Vulnerability Testing می شناسند. اگر نرم افزار در برابر حمله هکر ها، ویروس ها و بد افزار ها آسیب پذیر باشد هکر ها با برنامه های مخرب می توانند نرم افزار را کنترل کنند. بنابراین لازم است که نرم افزار ها قبل از انتشار تحت این تست قرار بگیرند.
این تست ممکن است باگ های مهم و امنیتی را شناسایی کند.
Manual Testing
نوعی تست نرم افزار است که در آن تست به صورت دستی و بدون استفاده از ابزار خودکار توسط تست کننده انجام می شود. هدف از این تست شناسایی اشکالات ، مشکلات و نقص های موجود در برنامه یا نرم افزار است.
manual testingابتدایی ترین تکنیک در انواع تست ها است و به شما در یافتن اشکالات مهم در نرم افزار کمک می کند.
Automated Testing
این تست به تست کنندگان اجازه می دهد تا به جای برخی کارهای تکراری ولی ضروری با خودکار کردنشان روی کارهای پیچیده و ارزشمند مانند بررسی و حل مشکلات و نقص ها تمرکز کنند. این تست برای کنترل اجرای تست ها و مقایسه نتایج واقعی با نتایج پیش بینی شده است. این تست همچنین می تواند برخی تست ها را که به صورت دستی دشوار هست را انجام دهد.
Semi-Automated Testing
این تست توسط فعالیت های ترکیبی انسان و ماشین با دو مرحله انسان و ماشین انجام می شود که به طور معمول توسط کنترل کننده رایانه مرکزی طراحی می شود. این تست ها معمولا توسط یک کنترل کننده رایانه ای تنظیم می شود که پیام هایی را برای تست کننده ارسال می کند که در آن مرحله باید انجام شود.
تست نرم افزار به عنوان فعالیتی برای بررسی انطباق نتایج واقعی با نتایج مورد انتظار و اطمینان از عدم نقص در سیستم نرم افزار تعریف شده است.
تست نرم افزار امری مهم است زیرا اشکالات نرم افزاری می تواند بهای سنگینی داشته باشد و یا حتی خطرناک باشد.
دلایل مهم استفاده از تست نرم افزار عبارتند از:
• مقرون به صرفه بودن
• امنیت
• کیفیت محصول
• رضایت مشتری