Regression Testing در برنامه نویسی چیست ؟ – توضیح کامل تست پسرفت نرم افزار
روش «Regression Testing» (تست پسرفت نرم افزار) به عنوان نوعی تست نرم افزار تعریف میشود. این روش برای تایید این مسئله استفاده میشود که تغییرات اخیر در برنامه یا کدهای آن به طور نامطلوب قابلیتهای فعلی برنامه را تحت تاثیر قرار نداده باشند. تست پسرفت نرم افزار یا همان Regression Testing چیزی به جز انتخاب کامل یا انتخاب بخشی از تستهای موردی (Test Case) نیست که دوباره اجرا میشوند تا اطمینان حاصل شود که قابلیتهای فعلی به خوبی کار میکنند.
آزمایش Regression Testing یا همان تست پسرفت نرم افزار برای حصول اطمینان از این مسئله انجام میشود که تغییرات جدید در کدها عوارض جانبی روی قابلیتهای عملکردی فعلی در بر نخواهد داشت. در تست پسرفت اطمینان حاصل میشود که وقتی آخرین تغییرات روی کدها انجام شدند، کدهای قدیمی همچنان به خوبی و به درستی کار میکنند.
علت استفاده از Regression Testing چیست ؟
هر بار که کدها تغییر داده میشوند، نیاز به Regression Testing یا همان تست پسرفت نرم افزار به وجود میآید و باید مشخص کنیم که آیا کدهای ویرایش شده سایر بخشهای اپلیکیشن را تحت تاثیر قرار خواهند داد یا خیر؟ علاوه بر این، هر گاه که ویژگی جدیدی به برنامه نرم افزاری اضافه میشود نیز به Regression Testing نیاز خواهیم داشت. همچنین زمانی که نقص یا مشکل عملکردی یا اجرایی برطرف میشود هم نیاز به تست پسرفت نرم افزار وجود دارد.
چگونه Regression Testing انجام دهیم ؟
برای انجام آزمون پسرفت نرم افزار ابتدا لازم است کدها را برای شناسایی باگهای موجود دیباگ کنیم. پس از آنکه باگها شناسایی شدند، تغییرات لازم برای دیباگ کردن اِعمال میشوند و سپس آزمون پسرفت نرم افزار به وسیله انتخاب موارد آزمون یا همان Test Caseهای مرتبط از مجموعه آزمونها انجام میشود که هم بخشهای ویرایش شده و هم بخشهای تحت تاثیر قرار گرفته را شامل میشود.
«نگهداری نرم افزار» (Software Maintenance) فعالیتی است که در آن مواردی از قبیل بهبود قابلیتها، تصحیح خطاها، بهینهسازی و حذف ویژگیها و قابلیتهای تکراری انجام میشود. این تغییرات ممکن است باعث شوند سیستم به درستی کار نکند. بنابراین، Regression Testing به فرایندی ضروری و مهم تبدیل میشود. آزمون پسرفت نرم افزار را میتوان با استفاده از روشهای زیر اجرا کرد و انجام داد:
- «Retest All» (تست مجدد تمام موارد)
- «Regression Test Selection» (آزمون پسرفت موردی)
- «Prioritization of Test Cases» (اولویتبندی موارد آزمون)
روش Retest All در آزمون پسرفت
این یکی از روشهای آزمون پسرفت است که در آن تمام تستهای موجود در «ظرف آزمون» (Test Bucket) یا «مجموعه آزمون» (Test Suite) باید دوباره اجرا شوند. این روش بسیار پرهزینه است، چرا که به صرف زمان و منابع بسیار زیادی نیاز دارد.
روش Regression Test Selection در آزمون پسرفت
روش Regression Test Selection روشی است که در آن برخی از موارد آزمون انتخابی از مجموعه آزمونها برای آزمودن این مسئله اجرا میشوند که آیا کدهای ویرایش شده برنامه کاربردی نرم افزاری را تحت تاثیر قرار میدهند یا خیر. موارد آزمون یا همان Test Caseها به دو بخش دستهبندی میشوند، موارد آزمون قابل استفاده مجدد که میتوانند در چرخههای پسرفت بیشتری به کار گرفته شوند و همچنین موارد آزمون منسوخ شده که در چرخههای متعاقب قابل استفاده نخواهند بود.
روش اولویت بندی موارد آزمون در Regression Testing چیست ؟
در این شیوه، موارد آزمون بسته به تاثیر کسب و کار، قابلیتهای عملکردی حیاتی و پرکاربرد اولویتبندی میشوند. انتخاب موارد آزمون بر اساس اولویت به میزان زیادی مجموعه آزمونهای پسرفت را کاهش میدهد.
نحوه انتخاب Test Case-ها برای آزمون پسرفت چگونه است؟
از طریق دادههای صنعتی مشخص شده است که تعداد قابل توجهی از عیب و نقصهای گزارش شده توسط مشتریان به دلیل رفع باگهای لحظه آخری پدید آمدهاند که باعث ایجاد عوارض جانبی شدهاند و بنابراین انتخاب موارد آزمون یا همان Test Caseها هنر به حساب میآید و کار چندان سادهای نیست. آزمونهای پسرفت موثر را میتوان به وسیله انتخاب موارد آزمونی انجام داد که در ادامه فهرست شدهاند.
- موارد آزمونی که دارای کاستیها و عیوب پرتکرار هستند.
- قابلیتهایی که برای کاربران بیشتر قابل مشاهدهاند.
- Test Caseهایی که قابلیتها و ویژگیهای اصلی و کلیدی محصول را تایید کنند.
- موارد آزمونی برای قابلیتهایی از نرم افزار که اخیراً و بیشتر تحت تغییرات قرار گرفتهاند.
- تمام موارد آزمون مربوط به ادغام (Integration Test Cases)
- تمام موارد آزمون پیچیده
- موارد آزمون مقدار مرزی (ارزش کرانی | Boundary Value)
- نمونهای از موارد آزمون موفق
- نمونهای از موارد آزمون ناموفق
ابزار Regression Testing چه هستند ؟
اگر نرم افزار شما تحت تغییرات مکرر قرار بگیرد، هزینههای مربوط به آزمون پسرفت نرم افزار به میزان زیادی افزایش خواهند داشت. در چنین مواردی، اجرای دستی تستکیسها زمان اجرای آزمون و همچنین هزینهها را افزایش میدهد. در چنین مواردی، خودکارسازی یا همان اتوماسیون تستکیسها انتخاب هوشمندانهای است.
وسعت خودکارسازی به تعداد تستکیسهایی بستگی دارد که برای چرخههای پسرفت متعاقب قابل استفاده مجدد باقی خواهند ماند. در ادامه برخی از مهمترین ابزار مورد استفاده هم برای آزمون عملکردی و هم آزمون پسرفت در مهندسی نرم افزار فهرست شدهاند.
- testRigor
- testRigor
- Subject7
- Selenium
- Quick Test Professional (QTP)
- Rational Functional Tester (RFT)
تست رگرسیون و مدیریت پیکربندی
مدیریت پیکربندی در طول تست رگرسیون در محیطهای چابُک یعنی جایی که کدها به طور پی در پی در حال ویرایش هستند به امری الزامآور بدل میشود. برای حصول اطمینان از اجرای موثر و درست تستهای رگرسیون، لازم است بر موارد زیر نظارت شود.
- کدهایی که آزمون پسرفت یا همان تست رگرسیون برای آنها انجام میشوند، باید تحت ابزار مدیریت پیکربندی باشند.
- در طول فاز آزمون پسرفت نباید اجازه انجام هیچ تغییراتی در کدها داده شود. کدهای تحت تست رگرسیون باید نسبت به تغییرات اعمال شده توسط برنامهنویسان در امان بمانند.
- دیتابیس مورد استفاده برای آزمون پسرفت باید ایزوله شده باشد. نباید اجازه هیچ تغییری در دیتابیس داده شود.
تفاوت میان تست مجدد با آزمون پسرفت چیست ؟
تست مجدد یعنی تست کردن دوباره قابلیتهای عملکردی و وجود باگ برای حصوص اطمینان از اینکه کدها اصلاح شدهاند یا خیر و اگر مشکل حل نشده باشد، «Defect» (نقصان) باید بازگشایی مجدد شود. اگر هم مشکل حل شده باشد، Defect مربوطه بسته خواهد شد.
از طرف دیگر اما، Regression testing یعنی تست کردن اپلیکیشن نرم افزاری خود در زمانی که تحت تغییراتی در کدهایش قرار گرفته است تا اطمینان حاصل شود که بعد از تغییرات مربوطه، کدهای جدید، بخشهای دیگر نرم افزار را تحت تاثیر قرار ندادهاند.
چالش های موجود در Regression Testing چیست ؟
در ادامه به مشکلات اصلی تست کردن در آزمون پسرفت پرداخته شده است.
- با اجراهای متوالی رگرسیون، مجموعه تستها بسیار بزرگ و حجیم میشوند. بنابر محدودیتهای مالی و زمانی، امکان اجرای کل مجموعه رگرسیون وجود نخواهد داشت.
- کمینهسازی مجموعه تستها به طور همزمان با دستیابی به بیشترین پوشش در تستها همچنان به عنوان یک چالش حل نشده باقی مانده است.
- تعیین فراوانی آزمونهای رگرسیون، به عبارتی، پس از هر تغییر یا هر بهروزرسانی ساخت یا پس از هر دیباگ کردن چند باگ نیز یکی از چالشها محسوب میشود.
جمعبندی
آزمون پسرفت یا همان Regression Testing نوعی از تست نرم افزار است که در آن اطمینان حاصل میشود نرم افزار همچنان پس از بهبودها و تغییرات در کدها یا بهروزرسانیها به خوبی کار میکند. یک خط مشی موثر رگرسیون برای سازمانها امکان صرفهجویی در زمان و هزینهها را به دنبال دارد. مثلاً در یک از مطالعات موردی در حوزه بانکداری مشخص شد که تست رگرسیون تا ۶۰ درصد در زمان و ۴۰ درصد در هزینههای رفع باگها صرفهجویی به دنبال داشته است، چون با انجام آزمون پسرفت، باگهای کمتری بوجود میآیند.
اگر این مطلب مفید بوده است، استفاده از دورههای آموزشی و مقالات زیر نیز پیشنهاد میشود:
- مجموعه دورههای آموزش مهندسی نرم افزار
- دوره آموزش تست نرم افزار با xUnit.net
- مجموعه دورههای آموزش برنامه نویسی
- دیباگ چیست ؟ – توضیح اهمیت در برنامه نویسی + شرح فرآین
- باگ چیست ؟ — Bug در برنامه نویسی و انواع به زبان ساده
- تست نرم افزار چیست ؟ – روش ها و اهمیت به زبان ساده
- چگونه اولین تست نرمافزاری خود را پیادهسازی کنیم؟
- دیباگ کردن در ویژوال استودیو کد — به زبان ساده – مجله فرادرس
- نکات و ترفندهای دیباگ در اندروید استودیو | به زبان ساده
- روش توسعه چابک نرم افزار (Agile Software Development) چیست؟
- مفاهیم کاربردی در تست و خطایابی نرمافزار — به زبان ساده
منبع [+]
مجموعه: دستهبندی نشده برچسب ها: all about Regression Testing, Regression Testing tutorial, What is Regression Testing, آزمون پسرفت نرم افزار, آزمون رگرسیون نرم افزار, آموزش های تست نرم افزار, تست پسرفت نرم افزار, تست رگرسیون, تست رگرسیون چیه, دوره مقدماتی تست نرم افزار, رگرسیون تستینگ چیه, فیلم آموزش مقدماتی تست نرم افزار