تست نرم افزار فرآیندی است که با هدف یافتن خطا، برنامهای را اجرا میکند. برای اینکه نرمافزار ما عملکرد خوبی داشته باشد، باید بدون خطا باشد. اگر تست نرم افزار بهطور موفقیتآمیزی انجام شود، همه خطاها از نرمافزار حذف میشوند.تست نرم افزار فرآیندی است که بر اساس نیازهای جمعآوریشده از مشخصات سیستم و کاربران، نرمافزار را ارزیابی میکند.
این تست ها در هر مرحلهای از چرخه عمر توسعه نرمافزار (SDLC) صورت میگیرد. همچنین میتواند در سطح ماژول در کد برنامه نیز انجام شود. اعتبارسنجی و تأیید از دو مورد اصلی است که در تست نرمافزار مورد استفاده قرار میگیرند.
انواع تست نرم افزار
1. Unit Testing
2. Integration Testing
3. Regression Testing
4. Smoke Testing
5. System Testing
Unit Testing
تستهای واحد (Unit tests) معمولاً توسط توسعهدهندگان نوشته میشوند، در حینی که آنها کد برای یک واحد خاص ایجاد میکنند. این تستها به طور معمول با همان زبان برنامهنویسی نرمافزار نوشته میشوند و از یک چارچوب یا کتابخانه آزمون استفاده میکنند که ابزارهای لازم برای ایجاد و اجرای تستها را فراهم میکند. این چارچوبها به طور معمول شامل کتابخانههای تأیید (Assertion Libraries) هستند که به توسعهدهندگان اجازه میدهند موارد آزمون را نوشته و خروجی یک واحد خاص را با نتایج مورد انتظار مقایسه کنند. تستها معمولاً به صورت خودکار و پیوسته در روند ساخت نرمافزار اجرا میشوند و نتایج معمولاً در یک ابزار اجرای تست یا یک ابزار یکپارچگی مداوم نمایش داده میشوند.
تست واحد (Unit testing) بهرههای متعددی دارد که شامل موارد زیر میشود:
تشخیص زودهنگام و ایزوله کردن نقصها: این موضوع میتواند زمان و هزینه را صرفهجویی کند، زیرا توسعهدهندگان میتوانند خطاها را قبل از آنکه هزینه برای رفع آنها بیشتر شود، برطرف کنند.
بهبود کیفیت و قابلیت نگهداری نرمافزار: تستهای واحد بهبودی در کیفیت نرمافزار و قابلیت نگهداری آن به ارمغان میآورند، زیرا اطمینان حاصل میکنند تغییرات کد سبب شکستن عملکرد موجود نمیشود.
افزایش اعتماد توسعهدهندگان: تست واحد باعث میشود توسعهدهندگان با اطمینان بتوانند تغییراتی را در کد اعمال کنند، زیرا میدانند هر گونه خطا توسط تستهای واحد کشف میشود.
تسهیل توسعه مبتنی بر تست (Test-driven development): تست واحد روشی در توسعه نرمافزار است که در آن تستها قبل از نوشتن کد نوشته میشوند، که باعث میشود کد برای برآورده کردن نیازها نوشته شود.
بطور کلی، تست واحد یک بخش اساسی از توسعه نرمافزار است که با شناسایی خطاها در مراحل ابتدایی فرآیند توسعه، به کیفیت و قابلیت اعتماد نرمافزار کمک میکند. این تستها نقش مهمی در اطمینان حاصل کردن از عملکرد صحیح و درست نرمافزار ایفا میکنند و باعث میشوند که خطاها در مراحل بعدی کاهش یابند و هزینه رفع آنها کاهش یابد. همچنین، باعث افزایش اعتماد تیم توسعه و کاربران نهایی نیز میشود. بنابراین، تست واحد برای تضمین کیفیت و قابلیت اعتماد نرمافزار یک نقش بسیار حیاتی دارد.
Integration Testing
تست ادغام (Integration testing) یک روش آزمون نرمافزار است که در آن واحدها یا اجزای جداگانه یک برنامه نرمافزاری ترکیب و به عنوان یک گروه آزمون میشوند. هدف از تست Integration تأیید این است که تعاملات بین واحدها یا اجزا نرمافزار به طور مطلوب انجام میشود و نرمافزار به طور کلی به درستی عمل میکند.
در تست ادغام، واحدهای نرمافزاری که قبلاً به طور جداگانه تست شدهاند، با یکدیگر ترکیب شده و بررسی میشوند که آیا این ترکیب درست عمل میکند و تعاملات بین واحدها به درستی صورت میگیرد. این تستها معمولاً شامل بررسی ورودی و خروجی بین واحدها، ارتباطات شبکه، تبادل داده و صحت عملکرد عمومی نرمافزار است. هدف نهایی از تست ادغام اطمینان حاصل کردن از عملکرد صحیح و درست نرمافزار در محیط واقعی است که تمامی اجزا به هم متصل شدهاند.
تست ادغام معمولاً پس از تست واحد و قبل از تست سیستمی انجام میشود. این تست عموماً توسط توسعهدهندگان و مهندسان آزمون انجام میشود و به طور معمول در سطح ماژول صورت میگیرد. تستهای ادغام معمولاً به صورت خودکار انجام میشوند و به طور مداوم در جریان فرآیند ساخت نرمافزار، به منظور اطمینان از استحکام و بدون خطا بودن نرمافزار اجرا میشوند.
تست ادغام به منظور اطمینان از اینکه تعاملات بین واحدها به درستی کار میکند و نرمافزار به طور کلی پایدار و بدون عیب باقی میماند، انجام میشود. این تستها معمولاً شامل اجرای آزمونها و تستهای ادغامی است که واحدها را به صورت یکپارچه تست میکند و مطمئن میشود که اطلاعات و سیگنالها بین واحدها به درستی منتقل میشوند و تغییرات در یک واحد تأثیری بر دیگر واحدها ندارند.
به طور خلاصه، تست ادغام به منظور بررسی تعاملات بین واحدها، استحکام نرمافزار و بررسی عملکرد در محیط واقعی انجام میشود و برای حفظ استحکام و کیفیت نرمافزار به صورت خودکار و مداوم انجام میشود
Regression Testing
تست بازگشتی (Regression testing) یک روش آزمون نرمافزار است که در آن، نرمافزاری که قبلاً توسعه و تست شده است، پس از اعمال تغییرات یا تغییراتی که به آن اعمال شدهاند، مجدداً تست میشود. هدف از تست بازگشتی تأکید بر این است که هرگونه تغییری که در نرمافزار اعمال شده است، خطای جدیدی ایجاد نکرده و عملکرد موجود را نخراب نموده است. این نوع تست عموماً به منظور تأیید اینکه تغییراتی مانند رفع خطاها، اضافه کردن قابلیتهای جدید یا بهروزرسانی قابلیتهای موجود، بر روی عملکرد کلی نرمافزار تأثیر نگذاشته است، انجام میشود.
در Regression test، مجموعهای از آزمونها و تستها اجرا میشود تا اطمینان حاصل شود که تغییرات اعمال شده در نرمافزار منجر به ایجاد مشکل در قسمتهای دیگر نشده است. این تستها میتوانند شامل اجرای تستهای واحد و ادغامی، تست عملکرد، تست رابط کاربری و سایر تستهای مربوطه باشند. هدف اصلی از Regression test ، حفظ کیفیت و پایداری نرمافزار پس از اعمال تغییرات است.
به طور خلاصه، Regression test به منظور اطمینان از عدم وجود خطاهای جدید یا نقض عملکرد موجود در نرمافزار پس از اعمال تغییرات انجام میشود. این تستها به منظور تأیید عملکرد صحیح و بدون مشکل نرمافزار پس از تغییرات انجام میشوند.
تست بازگشتی (Regression testing) چندین مزیت دارد که عبارتند از:
1. تشخیص زودهنگام و محدود کردن خطاها: این تستها امکان میدهند که خطاها قبل از آنکه هزینه بیشتری برای رفع آنها بپذیرند، تشخیص داده و محدود شوند. این موضوع میتواند زمان و هزینه را در فرآیند توسعه نرمافزار صرفه جویی کند.
2. بهبود کیفیت و قابلیت نگهداری نرمافزار: تست بازگشتی به اطمینان از اینکه تغییرات کد عملکرد موجود را نشکند و باعث بهبود کیفیت و قابلیت نگهداری نرمافزار میشود. با اجرای تستهای بازگشتی، از موثر بودن تغییرات اطمینان حاصل میشود و مشکلاتی که ممکن است به وجود آیند، شناسایی و رفع میشوند.
3. افزایش اعتماد توسعهدهندگان و کاربران: تست بازگشتی به اعتماد توسعهدهندگان و کاربران نسبت به صحت و عملکرد صحیح نرمافزار پس از اعمال تغییرات کمک میکند. این تستها اطمینان میدهند که نرمافزار همچنان پس از اعمال تغییرات به درستی عمل میکند و قابل اعتماد است.
4. تسهیل ادغام و تحویل مداوم: تست بازگشتی به تسهیل ادغام مداوم و تحویل نرمافزار کمک میکند. با انجام این تستها، اطمینان حاصل میشود که تغییرات در نرمافزار به طور ایمن منتشر میشوند و عملکرد کلی نرمافزار تحت تأثیر قرار نمیگیرد.
Smoke testing
Smoke testing که همچنین به عنوان “تست تأییدیه ساخت” یا “تست پذیرش ساخت” نیز شناخته میشود، یک روش آزمون نرمافزاری است که در آن، یک مجموعه کم حجم از آزمونها روی یک نسخه جدید از یک نرمافزار اجرا میشوند تا تعیین شود آیا این نسخه برای ادامه آزمونهای بیشتر، پایدار است یا خیر. هدف اصلی Smoke testing شناسایی سریع و محدود کردن مسائل اصلی با ساخت نرمافزار است، تا در صورت عدم پایداری یا ناقلیت مناسب ساخت، فرآیند توسعه متوقف شود.
در Smoke testing، یک سری آزمون ساده و کم حجم به صورت اتوماتیک اجرا میشوند. این آزمونها معمولاً مربوط به عملکرد اساسی و مهم نرمافزار هستند و هدف آنها شناسایی سریع مشکلات بزرگی است که ممکن است در ساخت نرمافزار وجود داشته باشد. اگر در حینSmoke testing مشکلات جدی تشخیص داده شود، فرآیند توسعه میتواند متوقف شده و مشکلات برطرف شوند.
از مزایای Smoke testing میتوان به زمان صرفهجویی، شناسایی سریع مشکلات اساسی و توقف زودهنگام فرآیند توسعه در صورت عدم پایداری یا ناقلیت ساخت اشاره کرد. این تستها کاربردی است برای سیستمهایی که به صورت مداوم در حال توسعه هستند و در هر بار تغییر ساخت بررسی و تست میشوند تا از پایداری و استقرار صحیح نرمافزار اطمینان حاصل شود.
System Testing
تست سیستم (System testing) یک روش آزمون نرمافزاری است که در آن کل سیستم نرمافزاری به عنوان یک واحد بزرگ آزمون گرفته میشود تا اطمینان حاصل شود که نرمافزار به مطابقت با الزامات و مشخصاتی که برای آن تعیین شده است، عمل میکند. هدف اصلی تست سیستم اعتبارسنجی آن است که سیستم نرمافزار به طور انتظاری عمل کند هنگام استفاده از آن در محیط مقصد و کلیه الزامات عملکرد، عملکرد، امنیت و قابلیت استفاده را برآورده کند.
در تست سیستم، نحوه رفتار سیستم در محیط عملیاتی مورد نظر و تطابق آن با مشخصات و الزامات تعیین شده بررسی میشود. این تستها شامل آزمونهای عملکردی، آزمونهای عملیاتی، آزمونهای امنیتی و آزمونهای قابلیت استفاده میشوند. هدف اصلی تست سیستم اطمینان حاصل کردن از عملکرد صحیح سیستم در شرایط عملیاتی و تأیید اینکه سیستم تمام الزامات و نیازمندیهای مورد انتظار را برآورده میکند.
تست سیستم مهمترین مرحله از آزمون نرمافزار است و پس از آن معمولاً مراحل نهایی قبولی و تحویل نرمافزار انجام میشود. این تستها به منظور اعتماد حاصل کردن از کیفیت و عملکرد صحیح سیستم در محیط واقعی انجام میشوند.