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

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

تست نرم افزار چیست؟
تست نرم افزار به فرایند ارزیابی یک نرم افزار به منظور تشخیص تفاوت بین خروجی کنونی(خروجی نرم افزار) و خروجی مورد انتظار گفته می شود. علاوه بر آن تست نرم افزار ارزیابی امکانات و ویژگی های یک نرم افزار را نیز شامل می شود. به عبارت دیگر تست نرم افزار یک فرایندی است که به وسیله آن می توانیم اطلاعاتی در رابطه با کیفیت نرم افزار بدست آوریم که شامل تایید و اعتبار سنجی است.



تایید(Verification)
در این مرحله اطمینان حاصل می شود که آیا نرم افزار مورد نظر، با توجه به انتظار ما رفتار می کند یا رفتار دیگری از خود نشان می دهد.

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



انواع رویکرد تست
دو رویکرد برای تست نرم افزار داریم که هر کدام دارای انواع و مراحل خاصی می باشد که باید به ترتیب و در زمان خود انجام گیرد. این دو رویکرد تست جعبه سیاه (blackbox testing) و تست جعبه سفید (whitebox testing) می باشد.

Blackbox Testing
در این رویکرد ، تست تمامی مکانیسم های داخلی یک سیستم نادیده گرفته می شود و روی خروجی تولید شده تمرکز می شود.به این رویکرد تست functional نیز می گویند.

Whitebox Testing
در این نوع تست با مکانیستم داخلی و متدهای یک سیستم سرو کار داریم. به این نوع تست structural تست نیز گفته می شود.




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

Unit Testing
Integration Testing
Functional Testing
System Testing
Stress Testing
Performance Testing
Usability Testing
Acceptance Testing
Regression Testing
Beta Testing



Unit Testing
در این نوع تست ما یک واحد و یا یک گروه از واحد های مرتبط با هم را تست می کنیم. این نوع تست زیر مجموعه Whitebox Testing است.

Integration Testing
این نوع تست به ما این امکان را می دهد که چند نوع کامپننت مختلف را کنار یکدیگر تست کنیم. در این صورت حتی ما می توانیم وابستگی های میان سخت افزار و نرم افزار را نیز تست کنیم. این دسته از تست ها زیر مجموعه black box هستند.

Functional Testing
در این تست اطمینان حاصل می شود که عملکرد برنامه به درستی است.توجه شود که در این نوع تست برخلاف آزمون واحد ما می توانیم عملکرد یک سیستم را تست کنیم و نه فقط یک واحد را.این تست زیر مجموعه black box هستند.

System Testing
این نوع تست به ما اجازه می دهد که از عملکرد برنامه در محیطهای مختلف اطمینان حاصل کنیم(مثل سیستم عامل های مختلف). این تست زیر مجموعه black box تست ها است.

Stress Testing
این نوع تست عملکرد برنامه را در شرایط نا مطلوب مورد بررسی قرار می دهد. این تست زیر مجموعه black box تست ها است.

Performance Testing
تست عملکرد و کارایی که در مجموعه black box تست ها جای میگیرد به ما  این اطمینان را می دهد که برنامه مان عملکرد و کارایی لازم را در یک مدت زمان مشخص داراست.

Usability Testing
این تست از دیدگاه مشتری انجام می شود و در واقع مشخص کننده فاکتورهای زیر است:
آیا برنامه کاربر پسند است؟
آیا برنامه ساده و قابل یادگیری است؟
آیا برنامه جذاب طراحی شده است؟
و …
این نوع تست زیر مجموعه black box تست ها است.

Acceptance Testing
این نوع تست معمولا از طرف مشتری انجام می شود.هدف آن، مشخص کردن این است که آیا برنامه نیازهای مشتری را پاسخ می دهد و آیا برنامه همان چیزی که مشتری می خواهد هست یا خیر.

Regression Testing
این نوع تست به منظور صحت عملکرد سیستم بعد از تغییرات استفاده می شود و زیر مجموعه black box تست ها است.

Beta Testing
تستی است که توسط کاربر نهایی یا یک تیم خارج از تیم توسعه انجام می شود.هدف تست بتا پوشش دادن خطاهای غیر منتظره است.این تست زیر مجموعه black box تست ها است.

در مقالات بعدی به نحوه انجام این تست ها در محیط های برنامه نویسی به صورت عملی خواهیم پرداخت.