تست نرم افزار را میتوان یکی از زیر مجموعههای مبحث کیفیت نرم افزار با نام “تضمین کیفیت” در نظر گرفت. تست نرم افزار به دنبال خطایابی و اطمینان از صحت عملکرد محصول نرم افزاری قبل از تحویل به مشتری است که حقیقتا یکی از مهمترین مراحل در فرایند توسعه است که با گذشت زمان از حالت دستی (Manual Testing) به حالت اتوماتیک (Automated Testing) تغییر رویه داده است. تست نرم افزار در دنیای امروز به سه قسمت اصلی تست واحد (Unit Testing)، تست یکپارچگی (Integration Testing) و تست پذیرش (Acceptance or E2E Testing) تقسیم می شود که مجموعه آنها هرم تست ( Test Pyramid) را تشکیل می دهند.
هرم تست نرم افزار
حال به اختصار به توضیح هر یک می پردازیم.
- Unit Testing راهی برای تست کوچکترین قطعه کد بدون در نظر گرفتن وابستگی (dependency) آن که در Isolation است. در حقیقت هدف از اینگونه تست اطمینان از صحت کارکرد سیستم مورد نظر (System Under Test – SUT) به همان طریقی که ما از آن انتظار داریم است. ما به وسیله unit testing می توانیم تست کنیم که آیا SUT ما آنگونه که انتظار داریم عمل می کند یا خیر. با استفاده از این روش ما مطمئن می شویم که سیستم طبق انتظار و طراحی ما رفتار می کند، بنابراین اعتماد به نفس ما جهت اعمال تغییرات و سرعت توسعه نرم افزار افزایش و در نتیجه هزینه های پیدا کردن باگ و نگه داری سیستم (Maintain) به طرز چشمگیری کاهش خواهد یافت. علاوه بر آن کدهای ما قابل استفاده مجدد (Reusable) و در نتیجه تمیزتر (Clean Code) خواهند بود.
- Integration Testing همان قطعه کد (Piece of Functionality) را این بار با تمام وابستگی هایش تست می کند. این کار جهت اطمینان از صحت عملکرد سیستم در تعامل با Component ها و Dependency های دیگر انجام می شود. ممکن است ما برای دو متد در ارتباط با هم Unit test نوشته باشیم و از عملکرد آنها به تنهایی اطمینان داشته باشیم اما مطمئن نیستیم که آیا این دو متد با هم نیز رفتار مورد انتظار از خود نشان می دهند یا خیر. تصویر زیر گویای همه چیز است :
two unit tests zero integration test
- Acceptance or E2E Test نیز جهت تست یک UseCase از ابتدا تا انتها کاربرد دارد. معمولا این نوع تست را از UI انجام می دهند.