تست رگرسیون چیست؟
تست رگرسیون به عنوان نوعی از تست نرمافزار تعریف شده است که بر اساس آن عدم تاثیرگذاری تغییرات اخیر کد یا برنامه بر امکانات(Feature) موجود تائید میشود.
تست رگرسیون چیزی نیست جز انتخاب تمام یا بخشی از Test Caseهای موجود و اجرا شده که به منظور حصول اطمینان از کارکرد مناسب Functionalityهای موجود، مجددا اجرا میشوند.
این تست اجرا میشود تا بدین ترتیب اطمینان حاصل شود که تغییرات جدید کد هیچ اثر جانبی خاصی روی Featureهای موجود ندارند. در حقیقت تست رگرسیون تضمین میکند که بعد از تغییرات صورت گرفته در کد جدید، کد قدیمی همچنان کار کند.
نیاز به تست رگرسیون
تست رگرسیون زمانی مورد نیاز است که یکی از موارد ذیل رخ دهد:
- تغییر در نیازمندیها(Requirement) و اصلاح کد بر اساس نیازمندیهای تغییر یافته.
- Feature جدید به نرمافزار اضافه شود.
- اصلاح نواقص.
- رفع مشکلات Performance.
چگونه میتوان تست رگرسیون را انجام داد
نگهداشت(Maintenance) نرمافزار فعالیتیست که شامل پیشرفت، اصلاح خطاها، بهینهسازی و یا حتی حذف امکانات موجود میشود. این اصلاحات ممکن است سبب ایجاد اشتباهاتی در سیستم شوند. بنابراین انجام تست رگرسیون ضروریست. تست رگرسیون میتواند با استفاده از تکنیکهای زیر انجام شود:
تست مجدد(Retest) همه موارد
- این یکی از روشهای تست رگرسیون است که در آن تمام تستهای موجود در Test Bucket یا Test Suite باید مجددا اجرا شوند. این روش بسیار گران است، چون زمان و منابع زیادی را صرف میکند.
انتخاب تست رگرسیون
- به جای اجرای مجدد تمام Test Suit، بهتر است بخشی از Test Suite را اجرا کنید.
- Test Caseهای انتخاب شده را میتوان با این عناوین دستهبندی نمود: ۱- Reusable Test Case(موارد تستِ قابل استفاده مجدد) ۲- Test Caseهای منسوخ.
- Reusable Test Caseها در سیکل رگرسیون بعدی استفاده میشوند.
- Test Caseهای منسوخ نمیتوانند در چرخههای بعدی استفاده شوند.
اولویتبندی در Test Caseها
- این Test Caseها بسته به تاثیر در کسب و کار، حیاتی بودن Functionality و یا استفاده مرتب از Functionality اولویتبندی میشوند. انتخاب Test Caseها براساس اولویت به میزان قابل توجهی حجم مجموع تست رگرسیون(Regression Test Suite) را کاهش میدهد.
انتخاب Test Caseها برای تست رگرسیون
از دادههای صنعتی بر میآید که، تعداد زیادی از نواقص(Defect) گزارش شده توسط مشتریان به علت رفع باگ در آخرین دقایق بودهاند که باعث ایجاد عوارض جانبی شدهاند. از این رو انتخاب Test Case برای تست رگرسیون یک هنر است و به همین دلیل انجام آن کار سادهای نیست. تستهای رگرسیونِ موثر میتوانند با انتخاب Test Caseهای زیر انجام شود:
- Test Caseهایی که دارای نواقص مکرر هستند
- Functionalityهایی که برای کاربران قابل رویت هستند
- Test Caseهایی که امکانات(Feature) اصلی محصول را بررسی میکنند
- Test Caseهای Functionalityهایی که اخیرا تغییر کردهاند و یا تغییرات زیادی را تا کنون داشتهاند
- تمام Integration Test Caseها
- تمام Complex Test Caseها
- Boundary Value Test Caseها(Test Caseهایی که مقادیر مرزی را تست میکنند)
- یک نمونه از Successful Test Caseها
- یک نمونه از Failure Test Caseها
ابزار تست رگرسیون
اگر نرمافزار شما تحت تغییرات مکرر قرار گیرد، هزینههای تست رگرسیون افزایش خواهد یافت.
در چنین مواردی، اجرای تست دستی(Manual Testing) باعث افزایش زمان اجرای تست و همچنین هزینهها میشود.
در این زمان اتوماتیکسازیِ Regression Test Caseها یک انتخاب هوشمندانه است.
میزان اتوماسیون بستگی به تعداد Test Caseهایی دارد که برای چرخههای متوالیِ رگرسیون قابلاستفاده مجدد(Reusable) میباشند.
در ادامه، برخی از معروفترین ابزارهای مورد استفاده برای تست Functional و رگرسیون را در مهندسی نرمافزار، معرفی میکنیم:
- Selenium: یک ابزار Open Source است که برای اتوماسیون برنامههای وب مورد استفاده قرار میگیرد. سلنیوم میتواند برای تست رگرسیون مبتنی بر مرورگر استفاده شود.
- Quick Test Professional-QTP: ابزار HP Quick Test Professional، ابزاریست که برای اتوماتیکسازی Test Caseهای Functional و Regression استفاده میشود. این ابزار برای اتوماسیون از زبان VBScript استفاده میکند. QTP یک ابزار مبتنی بر کلیدواژه(Keyword Based) و مبتنی بر داده(Data-driven) است.
- Rational Functional Tester-RFT: ابزار IBM Rational Functional Tester یک ابزار جاواییست که برای خودکار کردن Test Caseها استفاده میشود. این ابزار در درجه اول برای اتوماسیون Regression Test Caseها استفاده میشود و همچنین میتواند با Rational Test Manager نیز Integrate شود.
تست رگرسیون و مدیریت پیکربندی(Configuration Management)
مدیریت پیکربندی در خلال تست رگرسیون، در محیط های Agile که در آن یک کد به طور مداوم اصلاح می شود، ضروریست. برای اطمینان از تست رگرسیون موثر، موارد زیر را مشاهده نمایید:
- کدی که زیر تست رگرسیون قرار میگیرد باید تحت یک ابزار مدیریت پیکربندی باشد
- در طول تست رگرسیون هیچ کدی نباید تغییر کرده و یا چیزی به کد اضافه و یا از آن کم شود. کد تست رگرسیون باید نسبت به تغییرات توسعهدهنده ایمن باشد.
- پایگاه داده مورد استفاده برای تست رگرسیون باید جدا باشد. در این شرایط نباید خارج از پروسه تست تغییری روی اطلاعات پایگاه داده رخ دهد.
تفاوت بین تست مجدد(Re-Test) و تست رگرسیون
Retesting به معنی تست مجدد Functionality یا باگ است تا بدین ترتیب از رفع نقص در کد اطمینان حاصل نمایند. اگر Functionality یا باگ تصحیح نشده باشد، نقص باید مجددا Open شود. اگر رفع شد، نقص بسته میشود.
اما تست رگرسیون به معنی تست برنامه نرمافزاری شما در زمانیست که یک کد تغییر میکند و هدف این تست، حصول اطمینان از این موضوع است کد جدید شما، قسمتهای دیگر نرمافزار را تحت تاثیر قرار نمیدهد.
بعدها تفاوت این دو نوع تست به طور کامل ارائه خواهد شد.
چالشهای تست رگرسیون
در لیست زیر مشکلات عمده برای انجام تست رگرسیون ذکر شده است:
- با اجرای تست رگرسیون مداوم، Test Suiteها نسبتا بزرگ میشوند. با توجه به محدودیتهای زمانی و بودجه، نمیتوان Regression Test Suite کامل را اجرا کرد.
- با کوچکسازی Test Suite رسیدن به حداکثر Test Coverage همچنان یک چالش باقی میماند.
- تعیین فراوانی تستهای رگرسیون، یک چالش است. یعنی با توجه به هر اصلاح یا هر بروزرسانی روی Build یا پس از هر رفع باگ، در نهایت چه مقدار تست رگرسیون خواهیم داشت؟
نتیجهگیری
یک استراتژی رگرسیون موثر، صرفهجویی سازمانها در زمان و پول است. به عنوان نمونه در یکی از Case Studyهای بانکی مشاهده شد که با همین روش در تست رگرسیون ۶۰% صرفهجویی زمانی و ۴۰% صرفهجویی مالی رخ داده است.
این مطلب بخشی از دوره آموزشی رایگان تست نرمافزار بود، که میتوانید تمامی مطالب این دوره رایگان را در اینجا مشاهده نمایید.