ইন্টিগ্রেশন টেস্টিং মোবাইল অ্যাপলিকেশন উপাদান—মডিউল, সার্ভিস, ডেটাবেজ এবং বাহ্যিক API—এর মধ্যে মিথস্থাপনের শুদ্ধতা যাচাই করে। ইউনিট টেস্টের বিপরীতে, যা প্রতিটি উপাদানকে পৃথক করে, ইন্টিগ্রেশন টেস্ট সংযোগস্থানে ত্রুটি শনাক্ত করে: ডেটা ফরম্যাট অসামঞ্জস্য, প্যারামিটার প্রেষণ ব্যর্থতা এবং সরভার প্রতিক্রিয়ার ভুল প্রক্রিয়াকরণ। Martin Fowler, 2018 অনুসারে, ইন্টিগ্রেশন টেস্ট ইউনিট যাচাইতে মাধ্যমে উঠে যাওয়া 40% পর্যন্ত গুরুতর ত্রুটি কাজে করে এবং রিলিজ়ের পূর্বে সিস্টেমের স্থিরতা সম্পর্কে আত্মবিশ্বাস প্রদান করে।
মূখ্য বিষয়
ইন্টিগ্রেশন টেস্টিং হল সফটওয়্যার যাচাইর একটি পর্যায় যেখানে একটি অ্যাপলিকেশনের পৃথক মডিউল বা উপসিস্টেমের মধ্যে মিথস্থাপনের শুদ্ধতা মূল্যায়ন করা হয়। ইউনিট টেস্ট প্রতিটি উপাদান পৃথকভাবে যাচাই করলেও, ইন্টিগ্রেশন টেস্ট এই উপাদানগুলিকে একত্রিত করে এবং তারা একসাথে কিভাবে কাজ করে তা যাচাই করে। সাধারণ পরিদৃশ্যের মধ্যে রয়েছে নেটওর্ক লেয়ার এবং রিপজিটরির মধ্যে ডেটা হান্তান্তর, ORM-এর মাধ্যমে ডেটাবেজে লেখা এবং তৃতীয় পক্ষের API থেকে প্রতিক্রিয়া প্রক্রিয়াকরণ।
মোবাইল ডেভেলপমেন্টের প্রাসঙ্গিকতায়, ইন্টিগ্রেশন টেস্ট UI লেয়ার, ব্যবসা লজিক এবং ডেটা উৎসগুলির মধ্যে আলাপাচালি কাজে করে। উদাহরণস্বরূপ, একটি টেস্ট যাচাই করতে পারে যে “লগইন” বটাম টিপতে পরে, অ্যাপলিকেশন সরভারে একটি অনুরোধ প্রেরণ করে, একটি টোকিন গ্রহণ করে এবং এটি স্থানীয় স্টোরেজে সংরক্ষণ করে। এই যাচাই নিশ্চিত করে যে উপাদান শৃংখলা ব্যর্থতা ছাড়াই কাজ করে।
World Quality Report 2023 অনুসারে, যে কম্পানিগুলি নিয়মিতভাবে ইন্টিগ্রেশন টেস্টিং প্রয়োগ করে, তাদের প্রোডাক্শন ঘটনার সংখ্যা শুধুমাত্র ইউনিট টেস্টের উপর নির্ভর প্রজেক্টের তুলনায় 35% হ্রাস পায়। এটি ইন্টিগ্রেশন যাচাইকে বাণিজ্যিক ডেভেলপমেন্টে গুণমান নিশ্চিতি কৌশলের একটি অবশ্যকর্ণীয় উপাদানে পরিণত করে।
মোবাইল অ্যাপলিকেশন অনেক পরস্পর সংযুক্ত উপাদানে গঠিত: নেটওর্ক অনুরোধ, স্থানীয় ডেটাবেজ, পুশ নটিফিকেশন, সিস্টেম সার্ভিস এবং তৃতীয় পক্ষের SDK। এগুলির প্রতিটি উপাদান পৃথকভাবে ডেভেলপ করা হয়, কিন্তু রানটাইমে তারা রিয়াল টাইমে ডেটা বিনিময় করে। ইন্টিগ্রেশন টেস্টিং সেই ত্রুটিগুলি শনাক্ত করে যা পৃথক মডিউল যাচাইতে খুঁজে পাওয়া যায় না।
ইন্টিগ্রেশন টেস্ট দ্বারা আবিষ্কৃত সাধারণ সমস্যাগুলির মধ্যে রয়েছে API এবং অ্যাপলিকেশন মডেলের মধ্যে ডেটা টাইপ অসামঞ্জস্য, JSON সিরিয়ালাইজেশন ত্রুটি, নেটওর্ক টাইমআউটের ভুল প্রক্রিয়াকরণ এবং Room বা Core Data এর মাধ্যমে যুগপত ডেটাবেজ প্রবেশে ব্যর্থতা। ইন্টিগ্রেশন যাচাই ছাড়াই, এই ত্রুটিগুলি প্রোডাক্শনে পৌঁছে এবং শুদুমাত্র বাস্তবিক ব্যবহারকারীদের কাছে প্রকাশ পায়।
Google Testing Blog (2021)এর গবেষণা দেখায় যে ইন্টিগ্রেশন টেস্টিংয়ের সময় আবিষ্কৃত একটি ত্রুটি সরানোর খরচ রিলিজ়ের পরে 5 গুণ কম। কারণ প্রাথমিক পর্যায়ে ডেভেলপারের কাছে ত্রুটির সম্পূর্ণ প্রাসঙ্গিক থাকে এবং সে জরুরী hotfix চক্র ছাড়াই এটি সরানো যেতে পারে। ইন্টিগ্রেশন টেস্ট লেখায় সময় বিনিয়োগ রক্ষণাবেক্ষণ খরচ হ্রাস এবং ব্যবহারকারী আত্মবিশ্বাস বৃদ্ধির মাধ্যমে লাভ দেয়।
ইন্টিগ্রেশন টেস্ট আয়োজনের তিনটি মূল পদ্ধতি রয়েছে: Big Bang, Bottom-Up এবং Top-Down। কৌশলের পছন্দ প্রজেক্টের আকার, অ্যাপলিকেশন আর্কিটেক্চার এবং টেস্ট লেখার সময় উপাদানের প্রাপ্যতার উপর নির্ভর করে। প্রতিটি পদ্ধতির নিজস্ব সুবিধা এবং সীমাবদ্ধতা রয়েছে যা টেস্ট কাভারেজ পরিকল্পনার সময় বিবেচনা করা গুরুত্বপূর্ণ।
Big Bang — একটি পদ্ধতি যেখানে সিস্টেমের সকল উপাদান একবারে সংযুক্ত করা হয়, তারপর একটি সাধারণ টেস্ট রান করা হয়। এই পদ্ধতি বাস্তবায়নে সরল: stubs লেখা বা পৃথক মডিউল অনুকরণের প্রয়োজন নেই। তবে, একটি ত্রুটি শনাক্ত হলে, কোন উপাদান এটি ঘটিয়েছে তা নির্ধারণ করা কঠিন। Big Bang সরল আর্কিটেক্চার সম্পন্ন ছোট প্রজেক্টে নিয়োজিত যেখানে মডিউলের সংখ্যা পাঁচের বেশি নয়।
Bottom-Up — একটি কৌশল যেখানে ইন্টিগ্রেশন টেস্টিং নিম্নস্তরের উপাদান দিয়ে শুরু হয়: ডেটাবেজ, নেটওর্ক লেয়ার, সিস্টেম সার্ভিস। প্রতিটি স্তর যাচাই করার পর, টেস্ট ধীরে ধীরে উচ্চস্তরের মডিউল সংযুক্ত করে — রিপজিটরিগুলি, Use Case ক্লাস এবং ViewModels। প্রধান সুবিধা হল অ্যাপলিকেশনের মৌলিক স্তরগুলিতে ত্রুটির প্রাথমিক শনাক্তকরণ, যা ডেভেলপমেন্টের পরবর্তী পর্যায়ে ক্রমিক ত্রুটির অসংভাবনা হ্রাস করে।
Top-Down — একটি পদ্ধতি যেখানে টেস্টিং উচ্চস্তরের উপাদান দিয়ে শুরু হয় — UI স্ক্রিন এবং নেভিগেশন, যখন নিম্নস্তরের উপাদানগুলি stubs বা mocks ব্যবহার করে অনুকৃত করা হয়। এটি সরভার পার্শ বা ডেটাবেজ সম্পূর্ণরূপে বাস্তবায়নের আগে ব্যবহারকারী পরিদৃশ্য যাচাই করার অনুমতি দেয়। Top-Down বিশেষ করে ক্লায়েন্ট এবং সরভার অংশের সমানান্তর ডেভেলপমেন্টের সময় উপযোগী যখন ব্যাকএন্ড এখনও বাস্তবিক ইন্টিগ্রেশনের জন্য প্রস্তুত নয়।
মোবাইল অ্যাপলিকেশনের ইন্টিগ্রেশন টেস্টিংয়ের জন্য, বিশেষায়িত টুলের একটি পরিসর ব্যবহৃত হয়, যা তিনটি বিভাগে বিভক্ত: সরভার অনুকরণ লাইব্রেরি, ডেটাবেজ ফ্রেমওয়ার্ক এবং সিস্টেম সার্ভিস যাচাই টুল। নির্দিষ্ট টুলের পছন্দ প্লেটফর্ম — Android বা iOS — এবং প্রজেক্টের টেকনোলজি স্ট্যাকের উপর নির্ভর করে।
আসুন Android এবং iOSয়ের জন্য ইন্টিগ্রেশন টেস্টের ব্যাবহারিক উদাহরণ দেখি। Android প্লেটফর্মের জন্য, আমরা JUnit এর সাথে MockWebServer ব্যবহার করি, iOSয়ের জন্য — OHHTTPStubs লাইব্রেরির সাথে XCTest। উভয় উদাহরণ API থেকে ডেটা গ্রহণ এবং একটি স্থানীয় রিপজিটরিতে সংরক্ষণের পরিদৃশ্য যাচাই করে।
এই টেস্ট যাচাই করে যে অনুকৃত সরভারে একটি Retrofit অনুরোধ সঠিক JSON ফেরত দেয়, এবং রিপজিটরি প্রতিক্রিয়াকে একটি ডোমেইন মডেলে রূপান্তর করে। MockWebServer অনুরোধ ইন্টারসেপ্ট করে এবং নির্দিষ্ট JSON ফেরত দেয়, তারপর টেস্ট আশাংসিত ফলাফলের সাথে বাস্তবিকটির তুলনা করে।
class UserRepositoryTest {
private val mockServer = MockWebServer()
@Before
fun setup() {
mockServer.start()
}
@Test
fun fetchUser_returnsCorrectData() {
val json = "{ \`"id\`": 1, \`"name\`": \`"Alice\`" }"
mockServer.enqueue(MockResponse()
.setBody(json)
.setResponseCode(200))
val repository = UserRepository(
createRetrofit(mockServer.url("/").toString()))
val user = repository.fetchUser(1)
assertEquals(1, user.id)
assertEquals("Alice", user.name)
}
@After
fun tearDown() {
mockServer.shutdown()
}
}
iOSয়ের জন্য, একটি অনুরূপ টেস্ট URL অনুরোধ ইন্টারসেপ্ট করতে OHHTTPStubs ব্যবহার করে। লাইব্রেরিটি URL Loading System এর সিস্টেম ফ্রেমওয়ার্ক স্তরে সরভারের প্রতিক্রিয়া প্রতিস্থাপন করে, যা যে কোনো নেটওর্কিং লাইব্রেরি — URLSession, Alamofire বা Moya — পরীক্ষা করার অনুমতি দেয়।
import XCTest
import OHHTTPStubs
import OHHTTPStubsSwift
class UserRepositoryTests: XCTestCase {
func testFetchUser_returnsCorrectData() {
stub(condition: isPath("/users/1")) { _ in
return HTTPStubsResponse(
jsonObject: ["id": 1, "name": "Alice"],
statusCode: 200,
headers: nil
)
}
let repository = UserRepository()
let expectation = expectation(description: "fetch user")
repository.fetchUser(id: 1) { user in
XCTAssertEqual(user.id, 1)
XCTAssertEqual(user.name, "Alice")
expectation.fulfill()
}
waitForExpectations(timeout: 2.0)
}
}
কার্যকর ইন্টিগ্রেশন ট߁স্টিংয়ের জন্য একটি অনুশীলন অনুসরণ করা আবশ্যক যা টেস্ট স্থিরতা বাড়ায় এবং রক্ষণাবেক্ষণ খরচ হ্রাস করে। বাহ্যিক নির্ভরশিলতাগুলি আলাদা করে: প্রোডাক্শন ইনস্টেন্সের পরিবর্তে ইন-মেমরি ডেটাবেজ ব্যবহার করুন এবং stub লাইব্রেরি ব্যবহার করে তৃতীয় পক্ষের API অনুকরণ করুন। এটি নেটওর্ক প্রাপ্যতা বা বাহ্যিক সার্ভিস অবস্থার কারণে হল অনির্দিষ্ট ব্যর্থতা দূর করে।
টেস্ট স্বাধীনতা বজায় রাখুন: প্রতিটি ইন্টিগ্রেশন টেস্টের অন্য টেস্টের ফলাফলের উপর নির্ভর না করে পৃথকভাবে কাজ করা উচিত। টেস্ট পরিবেশ প্রস্তুত এবং পরিষ্কার করার জন্য JUnit এ @Before এবং @After অ্যানোটেশন বা XCTest এ setUp এবং tearDown ব্যবহার করুন। এটি পরস্পর টেস্ট প্রভাব প্রতিরোধ করে এবং ত্রুটি নির্ণয় সরল করে।
সীমান্ত ক্ষেত্রগুলি কাজে করুন: ইন্টিগ্রেশন টেস্ট কেবল সফল পরিদৃশ্য (happy path) ই নয়, বরং ত্রুটি প্রক্রিয়াকরণ — টাইমআউট, HTTP 4xx এবং 5xx কোড, খালি প্রতিক্রিয়া, ত্রুটিপূর্ণ JSON এর জন্যও যাচাই করা উচিত। Google Testing Blog (2022) অনুসারে, 60% প্রোডাক্শন ঘটনা সীমান্ত ক্ষেত্রের ভুল প্রক্রিয়াকরণের সাথে সম্পর্কিত যা টেস্ট দ্বারা কাজে করা হয়নি।
সাধারণ প্রশ্নাবলী
ইউনিট টেস্ট একটি একক ক্লাস বা ফাংশন পৃথকভাবে যাচাই করে, stubs দিয়ে নির্ভরশিলতা প্রতিস্থাপন করে। ইন্টিগ্রেশন টেস্ট একাধিক বাস্তবিক উপাদানের মধ্যে আলাপাচালি যাচাই করে — উদাহরণস্বরূপ, একটি নেটওর্ক সংযোগ এবং একটি ডেটাবেজ একসাথে।
ইন্টিগ্রেশন টেস্ট চালাতে সাধারণত টেস্টের সংখ্যা এবং পরিবেশ জটিলতার উপর নির্ভর করে 2 থেকে 15 মিনিট সময় লাগে। বড় প্রজেক্টের জন্য, মার্জের পূর্বে মোট যাচাই সময় কমাতে একটি CI সিস্টেমে সমানান্তর জাবে টেস্টগুলি বিভক্ত করার পরামর্শ দেওয়া হয়।
সবচেয়ে প্রথমে, ইন্টিগ্রেশন টেস্ট নেটওর্ক লেয়ার, ডেটাবেজ এবং সিস্টেম সার্ভিসের জন্য লেখা হয় — নটিফিকেশন, ক্যামেরা, জিউলোকেশন। ব্যাকএন্ডে API অনুরোধ এবং স্থানীয় স্টোরেজ কাজগুলি সবচেয়ে বেশি ROI প্রদান করে কারণ এই উপাদানগুলি প্রায়শই রিগ্রেশনের উৎস হয়।
একটি একক স্ক্রিনের জন্য, ViewModel এর ইউনিট টেস্ট এবং UI টেস্ট যথেষ্ট। একটি একক স্ক্রিনের জন্য ইন্টিগ্রেশন টেস্ট কেবল তখনই নিয়োজিত হয় যখন স্ক্রিন একাধিক ডেটা উৎসের সাথে আলাপাচালি করে — উদাহরণস্বরূপ, দুই ভিন্ন API থেকে প্রতিক্রিয়া সম্মিলিত করে বা একবারে নেটওর্ক এবং স্থানীয় ডেটাবেজে ডেটা লিখে।
ইন্টিগ্রেশন টেস্ট প্রতিটি pull request এ CI পাইপলাইনে এবং প্রধান রিলিজ়ের আগে চালানো উচিত। রাতে (nightly build) ইন্টিগ্রেশন টেস্টের পূর্ণ সেট চালানোও সুপারিশ করা হয় যাতে নির্ভরশিলতা বা টেস্ট পরিবেশে পরিবর্তনের সাথে সম্পর্কিত ত্রুটি শনাক্ত করা যায়।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন