রিগ্রেশন টেস্টিং হল পরিবর্তনের পরে অ্যাপ্লিকেশন পুনরায় পরীক্ষা করার প্রক্রিয়া যা পূর্বে কাজ করা কার্যকারিতায় ত্রুটি সনাক্ত করার জন্য। প্রতিটি কোড পরিবর্তন — নতুন বৈশিষ্ট্য, বাগ ফিক্স বা রিফ্যাক্টরিং — অনিচ্ছাকৃতভাবে অ্যাপ্লিকেশনের বিদ্যমান ক্ষমতাগুলি ভেঙে দিতে পারে। রিগ্রেশন টেস্টগুলি স্বয়ংক্রিয়ভাবে যাচাই করে যে পুরানো কার্যকারিতা সচল রয়েছে। IBM, 2023-এর একটি গবেষণা অনুসারে, রিগ্রেশন টেস্টিং বাণিজ্যিক পণ্য দলের সমস্ত সম্পাদিত পরীক্ষার 30 থেকে 70% কভার করে, যা উত্পাদন ঘটনার বিরুদ্ধে প্রাথমিক বাধা হিসাবে এর ভূমিকা তুলে ধরে।
মূল বিষয়
রিগ্রেশন টেস্টিং হল এক ধরনের পরীক্ষা যার উদ্দেশ্য নিশ্চিত করা যে কোড পরিবর্তনগুলি বিদ্যমান কার্যকারিতা ভাঙেনি। শব্দটি “রিগ্রেশন” অর্থ খারাপ অবস্থায় ফিরে যাওয়া — যখন একটি ফাংশন যা পূর্ববর্তী সংস্করণে কাজ করেছিল নতুন সংস্করণে কাজ করা বন্ধ করে দেয়। রিগ্রেশন টেস্টগুলি প্রতিটি উন্নয়ন চক্রে বারবার সম্পাদিত হয়, যা তাদের নতুন বৈশিষ্ট্য পরীক্ষা থেকে আলাদা করে যা একবার লেখা হয়।
রিগ্রেশন টেস্টিংয়ের প্রয়োজনীয়তা ক্যাসকেডিং পরিবর্তনের প্রভাব থেকে উদ্ভূত হয়: একটি মডিউলে বাগ ফিক্স করা সমস্যার সমাধান করতে পারে কিন্তু সংলগ্ন কার্যকারিতা ভেঙে দিতে পারে যা এটির উপর নির্ভরশীল ছিল। উদাহরণস্বরূপ, ইউজার রিপোজিটরিতে SQL কোয়েরি পরিবর্তন করলে প্রমাণীকরণ দ্রুত হতে পারে কিন্তু ডেটা এক্সপোর্ট ভেঙে যেতে পারে যা একই কোয়েরি ব্যবহার করত। ডেটা এক্সপোর্টে একটি রিগ্রেশন টেস্ট রিলিজের আগে এই লঙ্ঘন সনাক্ত করবে।
CISQ 2023 রিপোর্ট অনুসারে, উত্পাদনে পাওয়া একটি রিগ্রেশন ত্রুটি ঠিক করার খরচ স্বয়ংক্রিয় রিগ্রেশন রান পর্যায়ের তুলনায় 15 গুণ বেশি। Capgemini World Quality Report অনুসারে, স্বয়ংক্রিয় রিগ্রেশন টেস্টিংয়ে বিনিয়োগকারী সংস্থাগুলি বাস্তবায়নের এক বছরের মধ্যে রিলিজে রিগ্রেশন ত্রুটির অংশ 25% থেকে 5% এ হ্রাস করে।
রিগ্রেশন টেস্টিংয়ের বেশ কয়েকটি পদ্ধতি রয়েছে যা পরিধি এবং পরীক্ষা নির্বাচনের মানদণ্ডে ভিন্ন। পদ্ধতির পছন্দ প্রকল্পের আকার, পরিবর্তনের ফ্রিকোয়েন্সি এবং CI পাইপলাইনে উপলব্ধ সময়ের উপর নির্ভর করে। নীচে তাদের বৈশিষ্ট্য সহ রিগ্রেশন টেস্টিংয়ের প্রধান প্রকারগুলি দেওয়া হল।
সম্পূর্ণ রিগ্রেশন রান ব্যতিক্রম ছাড়া প্রকল্পের সমস্ত স্বয়ংক্রিয় পরীক্ষা সম্পাদন করে। এই পদ্ধতি সর্বাধিক আত্মবিশ্বাস দেয় তবে উল্লেখযোগ্য কম্পিউটিং সংস্থান এবং সময় প্রয়োজন। বড় রিলিজের আগে একটি সম্পূর্ণ রান করা হয় — প্রতি 2–4 সপ্তাহে। 5000 টেস্টের একটি অ্যাপ্লিকেশনের জন্য, পরিকাঠামোর উপর নির্ভর করে সম্পূর্ণ রান 2 থেকে 6 ঘন্টা সময় নেয়।
নির্বাচনী পদ্ধতি শুধুমাত্র পরিবর্তিত মডিউলগুলির সাথে সম্পর্কিত পরীক্ষাগুলি চালায়। সম্পর্ক নির্ধারণের জন্য কোড-স্তরের নির্ভরতা বিশ্লেষণ ব্যবহার করা হয়: যদি UserRepository ক্লাস পরিবর্তন করা হয়, তাহলে UserRepository-এর উপর প্রত্যক্ষ বা পরোক্ষভাবে নির্ভরশীল পরীক্ষাগুলি চালানো হয়। Jacoco, Android Test Coverage এবং Xcode Code Coverage-এর মতো টুলগুলি সঠিক নির্বাচনের জন্য কভারেজ মানচিত্র সরবরাহ করে। প্রতিটি pull request-এ একটি নির্বাচনী রান করা হয় এবং 5–15 মিনিট সময় নেয়।
ঝুঁকি-ভিত্তিক রিগ্রেশন কার্যকারিতার সমালোচনামূলকতা এবং ভাঙার সম্ভাবনার ভিত্তিতে পরীক্ষাগুলিকে র্যাঙ্ক করে। সমালোচনামূলক ফাংশন — পেমেন্ট, প্রমাণীকরণ, সিঙ্ক্রোনাইজেশন — প্রতিটি কোড পরিবর্তনে পরীক্ষা করা হয়। সহায়ক ফাংশন — “আমাদের সম্পর্কে” স্ক্রিন, অ্যানিমেশন — শুধুমাত্র রিলিজের আগে পরীক্ষা করা হয়। উত্পাদন ঘটনার তথ্যের ভিত্তিতে র্যাঙ্কিং ত্রৈমাসিক পর্যালোচনা করা হয়।
প্রায়শই রিগ্রেশন টেস্টিং এবং রিটেস্টের ধারণাগুলি বিভ্রান্ত হয়, যদিও এগুলি ভিন্ন প্রক্রিয়া। রিটেস্ট হল একটি ত্রুটি সংশোধনের পরে, পূর্বে ব্যর্থ হওয়া একটি নির্দিষ্ট পরীক্ষার পুনরায় চালানো। রিটেস্টের উদ্দেশ্য নিশ্চিত করা যে ফিক্স কাজ করে: বাগ আর পুনরুৎপাদন হয় না। রিটেস্ট একবার সঞ্চালিত হয়, ফিক্স এবং ডেভেলপার দ্বারা ফিক্স নিশ্চিত করার পরপরই।
রিগ্রেশন টেস্টিং হল বিদ্যমান কার্যকারিতার উপর পরীক্ষা চালানো যা পরিবর্তন করা হয়নি। লক্ষ্য হল নিশ্চিত করা যে একটি ত্রুটি ঠিক করা অন্য কোথাও নতুন ত্রুটি তৈরি করেনি। রিগ্রেশন টেস্টগুলি প্রতিটি উন্নয়ন চক্রে বারবার চালানো হয়, নির্দিষ্ট কোন বাগগুলি ঠিক করা হয়েছে তা নির্বিশেষে। প্রধান পার্থক্য: রিটেস্ট ফিক্সটি যাচাই করে, রিগ্রেশন ফিক্সের পরিণতি যাচাই করে।
CI/CD পাইপলাইনে, উভয় প্রক্রিয়া ক্রমান্বয়ে চলে। একটি pull_request মার্জ করার পরে, নির্দিষ্ট বাগের একটি রিটেস্ট চালানো হয়, তারপরে একটি সম্পূর্ণ বা নির্বাচনী রিগ্রেশন রান করা হয়। SmartBear (2022) অনুসারে, এই প্রক্রিয়াগুলি পৃথক করা ব্যর্থ CI রান নির্ণয়ের সময় 30% হ্রাস করে, কারণ দলটি সাথে সাথে দেখতে পায় কোন ত্রুটিগুলি রিগ্রেশনের সাথে সম্পর্কিত এবং কোনটি অকার্যকর ফিক্সের সাথে।
রিগ্রেশন টেস্টিংয়ের স্বয়ংক্রিয়করণ আধুনিক মোবাইল প্রকল্পগুলির জন্য একটি গুরুত্বপূর্ণ সাফল্যের কারণ। ম্যানুয়াল রিগ্রেশন টেস্টিং স্কেলযোগ্য নয়: 200 টেস্টের একটি স্যুটের সাথে, একটি রানের জন্য QA ইঞ্জিনিয়ারের 2–3 কার্যদিবস প্রয়োজন, যা দৈনিক রান অসম্ভব করে তোলে। স্বয়ংক্রিয় রিগ্রেশন টেস্টগুলি মানব হস্তক্ষেপ ছাড়াই 10–60 মিনিটে চলে, যা এগুলিকে প্রতিটি commit বা pull_request-এ চালানোর অনুমতি দেয়।
রিগ্রেশন স্যুট আপডেট রাখতে টেস্ট অ্যানালিটিক্স ব্যবহার করা হয়: Allure, ReportPortal এবং Xray-এর মতো টুলগুলি প্রতিটি পরীক্ষার পাসের হার, সময়কাল এবং স্থিতিশীলতা ট্র্যাক করে। যেসব পরীক্ষার স্থিতিশীলতা 90% এর নিচে নেমে যায় (প্রয়োজনীয়তা পরিবর্তনের কারণে প্রায়শই ভেঙে যায়), সেগুলি লিগ্যাসি হিসাবে চিহ্নিত করা হয় এবং পর্যালোচনার জন্য মালিকের কাছে ন্যস্ত করা হয়।
আসুন JUnit 5 লাইব্রেরি এবং Espresso ব্যবহার করে Android-এ একটি স্বয়ংক্রিয় রিগ্রেশন টেস্ট সেটআপ দেখি। উদাহরণটি নির্বাচনী রিগ্রেশন প্রদর্শন করে — পরীক্ষাটি যাচাই করে যে ইউজার রিপোজিটরি রিফ্যাক্টর করার পরে প্রোফাইল স্ক্রিন ভাঙেনি। iOS-এর জন্য, অনুরূপ যুক্তি সহ XCTest ব্যবহার করা হয় — একটি মূল পরিস্থিতিতে পুনরাবৃত্তিমূলক পরীক্ষা।
পরীক্ষাটি সার্ভার অনুকরণ করতে MockWebServer ব্যবহার করে এবং সম্পূর্ণ পথ পরীক্ষা করে: ইউজার ডেটা লোড করা, প্রোফাইল স্ক্রিনে প্রদর্শন করা এবং সার্ভার অনুপলব্ধ হলে ত্রুটি হ্যান্ডলিং। এই ধরনের পরীক্ষাগুলি রিগ্রেশন স্যুটে অন্তর্ভুক্ত করা হয় এবং module-profile-এ প্রতিটি পরিবর্তনে চালানো হয়।
@RunWith(AndroidJUnit4::class)
class ProfileRegressionTest {
@get:Rule
val composeRule = createComposeRule()
@Test
fun profileScreen_rendersCorrectly() {
val user = User(id = 1, name = "Alice", email = "alice@test.com")
composeRule.setContent {
ProfileScreen(user)
}
composeRule.onNodeWithText("Alice").assertIsDisplayed()
composeRule.onNodeWithText("alice@test.com").assertIsDisplayed()
}
@Test
fun profileScreen_handlesNetworkError() {
setNetworkError()
composeRule.onNodeWithText("লোড করার ত্রুটি").assertIsDisplayed()
}
}
iOS-এর জন্য, রিগ্রেশন টেস্ট API থেকে ডেটা পাওয়ার পরে UI আপডেটের অ্যাসিঙ্ক্রোনাস যাচাইকরণের জন্য XCTestExpectation ব্যবহার করে। পরীক্ষাটি একটি নেটওয়ার্ক প্রতিক্রিয়া অনুকরণ করে এবং যাচাই করে যে UI উপাদানগুলি সঠিকভাবে আপডেট হয়েছে।
class ProfileRegressionTests: XCTestCase {
func testProfileScreen_rendersCorrectly() {
let viewModel = ProfileViewModel(userId: 1)
let view = ProfileView(viewModel: viewModel)
viewModel.loadProfile()
let expectation = expectation(description: "profile loaded")
viewModel.onProfileLoaded = {
XCTAssertEqual(viewModel.userName, "Alice")
XCTAssertEqual(viewModel.userEmail, "alice@test.com")
expectation.fulfill()
}
waitForExpectations(timeout: 3.0)
}
}
একটি কার্যকর রিগ্রেশন স্যুট তৈরি করা ত্রুটি এবং কোড পরিবর্তনের তথ্যের উপর ভিত্তি করে একটি পুনরাবৃত্তিমূলক প্রক্রিয়া। প্রাথমিক কৌশল — রিগ্রেশন স্যুটে সমস্ত বিদ্যমান পরীক্ষা অন্তর্ভুক্ত করা এবং প্রতিটি রিলিজের আগে একটি সম্পূর্ণ রান চালানো। পরীক্ষার ভিত্তি বাড়ার সাথে সাথে (2000-এর বেশি পরীক্ষা), সম্পূর্ণ রান খুব দীর্ঘ হয়ে যায় এবং একটি নির্বাচনী পদ্ধতির প্রয়োজন হয়।
দ্বিতীয় পর্যায় — নির্ভরতা বিশ্লেষণ সরঞ্জাম বাস্তবায়ন: Android-এর জন্য Jacoco, iOS-এর জন্য Xcode Test Plan। এই সরঞ্জামগুলি একটি “পরীক্ষা — ক্লাস — পদ্ধতি” মানচিত্র তৈরি করে এবং নির্ধারণ করতে দেয় যে একটি নির্দিষ্ট পরিবর্তনের দ্বারা কোন পরীক্ষাগুলি প্রভাবিত হয়। Spotify Engineering (2022) অনুসারে, কভারেজ বিশ্লেষণের উপর ভিত্তি করে নির্বাচনী রান 95% রিগ্রেশন সনাক্তকরণ কার্যকারিতা বজায় রেখে সম্পাদনের সময় 60–80% হ্রাস করে।
তৃতীয় পর্যায় — ক্রমাগত পর্যবেক্ষণ এবং অপ্টিমাইজেশন। যে পরীক্ষাগুলি 6 মাসে ব্যর্থ হয়নি, সেগুলি নিম্ন-অগ্রাধিকার স্যুটে স্থানান্তরিত হয়। যে পরীক্ষাগুলি মাসে একবারের বেশি ব্যর্থ হয়, সেগুলি পর্যালোচনার জন্য প্রার্থী: হয় তারা বাস্তব সমস্যা ধরে (ফিক্স প্রয়োজন) বা তারা খুব ভঙ্গুর (স্থিতিশীলতা প্রয়োজন)। রিগ্রেশন স্যুটের ত্রৈমাসিক পর্যালোচনা এর কার্যকারিতা এবং সম্পাদনের গতি বজায় রাখার জন্য মানক অনুশীলন।
সচরাচর জিজ্ঞাস্য
নির্বাচনী রিগ্রেশন রান — প্রতিটি pull request-এ। সম্পূর্ণ রিগ্রেশন রান — প্রতিটি রিলিজের আগে এবং সাপ্তাহিক (nightly build)। মূল নিয়ম: যত বেশি বার রান হবে, তত দ্রুত রিগ্রেশন সনাক্ত হবে এবং সেগুলি ঠিক করার খরচ তত কম হবে। গুরুত্বপূর্ণ প্রকল্পগুলির জন্য, প্রতিটি মার্জে সম্পূর্ণ রিগ্রেশন সম্ভব।
সমস্ত ইউনিট টেস্ট (মৌলিক রিগ্রেশন), মূল উপাদানগুলিতে ইন্টিগ্রেশন টেস্ট এবং গুরুত্বপূর্ণ ব্যবহারকারীর পরিস্থিতিতে UI টেস্ট। অন্তর্ভুক্ত করবেন না পরীক্ষামূলক কার্যকারিতার পরীক্ষা, 10% এর বেশি flakiness সহ পরীক্ষা এবং ম্যানুয়াল পরিবেশের প্রয়োজন এমন পরীক্ষা।
সরানো কার্যকারিতার পরীক্ষাগুলি সরান, প্রয়োজনীয়তা পরিবর্তন হলে পরীক্ষাগুলি আপডেট করুন, ত্রৈমাসিক স্যুট অডিট করুন। CI অ্যানালিটিক্স — Allure, ReportPortal — প্রাসঙ্গিকতা হারিয়েছে এমন পরীক্ষাগুলি সনাক্ত করতে সহায়তা করে: যদি একটি পরীক্ষা 3 মাসে পরিবর্তিত বা ব্যর্থ না হয়, তবে এটি দৈনিক রান থেকে সরানোর প্রার্থী।
একাধিক ডিভাইসে পরীক্ষার সমান্তরাল সম্পাদন ব্যবহার করুন, পরিবর্তিত কোড কভারেজ বিশ্লেষণের উপর ভিত্তি করে নির্বাচনী রিগ্রেশন প্রয়োগ করুন, অপ্রাসঙ্গিক স্ক্রিনের জন্য ভিজ্যুয়াল স্ন্যাপশট বন্ধ করুন। লক্ষ্য সময় নির্বাচনী রানের জন্য: 5–10 মিনিট, সম্পূর্ণ রানের জন্য: 2 ঘন্টার বেশি নয়।
না, রিগ্রেশন টেস্টিংয়ে ম্যানুয়াল পরীক্ষাও অন্তর্ভুক্ত: রিলিজের পরে অনুসন্ধানমূলক পরীক্ষা, UX রিগ্রেশন এবং ইন্টারফেস পরিবর্তনের পরে অ্যাক্সেসিবিলিটি পরীক্ষা। স্বয়ংক্রিয়করণ কভার করে 70–80% রিগ্রেশন পরীক্ষা; বাকি 20–30% ম্যানুয়াল, যেসব পরিস্থিতি স্বয়ংক্রিয় করা অসম্ভব বা খুব ব্যয়বহুল সেগুলির উপর ফোকাস করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন