মোবাইল অ্যাপ টেস্টিং হল যাচাই করার প্রক্রিয়া যে অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করে, ক্র্যাশ হয় না এবং প্রয়োজনীয়তা পূরণ করে। Software Testing Help (2025)-এর মতে, স্বয়ংক্রিয় টেস্টিং ম্যানুয়াল টেস্টিং-এর তুলনায় রিগ্রেশন চেকের সময় 70–80% কমিয়ে দেয়। এই নিবন্ধে, আমরা টেস্টিং লেভেল, iOS এবং Android-এর টুল, TDD এবং BDD, সেইসাথে টেস্টের জন্য CI/CD নিয়ে আলোচনা করব।
মূল বিষয়
ইউনিট টেস্ট মোবাইল অ্যাপ টেস্টিং-এর ভিত্তি। এগুলি কোডের ক্ষুদ্রতম একক — একটি একক ফাংশন, মেথড বা ক্লাস — সিস্টেমের বাকি অংশ থেকে বিচ্ছিন্ন করে যাচাই করে। মোবাইল ডেভেলপমেন্টে, ইউনিট টেস্ট JUnit (Android) এবং XCTest (iOS)-এ লেখা হয়। একটি ভাল ইউনিট টেস্ট দ্রুত, স্বাধীন এবং পুনরাবৃত্তিযোগ্য হতে হবে — এটি নেটওয়ার্ক, ডাটাবেস বা UI কম্পোনেন্টের উপর নির্ভর করবে না। বিচ্ছিন্নতার জন্য টেস্ট ডাবল ব্যবহার করা হয়: মক, স্টাব এবং ফেক।
Mockito (Java/Kotlin) এবং MockK (Kotlin-first) Android-এ মক অবজেক্ট তৈরির জন্য জনপ্রিয় লাইব্রেরি। iOS-এ, OCMock, Cuckoo বা ম্যানুয়াল প্রোটোকল ব্যবহার করা হয়। নিয়ম: ইউনিট টেস্টগুলিকে ব্যবসায়িক যুক্তি এবং ডেটা মডেল কভার করা উচিত। UI টেস্টগুলির ইউনিট টেস্টের নকল করা উচিত নয় — এগুলি ইন্টারফেসের সাথে ব্যবহারকারীর মিথস্ক্রিয়া যাচাই করে।
ইন্টিগ্রেশন টেস্ট কম্পোনেন্টগুলির মধ্যে মিথস্ক্রিয়া যাচাই করে: ডাটাবেসের সাথে রিপোজিটরি, API সার্ভিসের সাথে ViewModel, স্ক্রিনের মধ্যে নেভিগেশন। ইউনিট টেস্টের বিপরীতে, ইন্টিগ্রেশন টেস্ট বাস্তব বা বাস্তবের কাছাকাছি নির্ভরতা ব্যবহার করে (যেমন, ইন-মেমোরি ডাটাবেস বা মক সার্ভার)। Robolectric এমুলেটর ছাড়া JVM-এ Android টেস্ট চালানোর একটি ফ্রেমওয়ার্ক, যা ইন্টিগ্রেশন টেস্ট 10 গুণ দ্রুত করে।
স্ন্যাপশট টেস্ট (গোল্ডেন টেস্ট) এক বিশেষ ধরনের ইন্টিগ্রেশন টেস্ট যা রেন্ডার করা UI কম্পোনেন্টকে একটি রেফারেন্স ইমেজ (স্ন্যাপশট) এর সাথে তুলনা করে। যদি চেহারা পরিবর্তিত হয়, টেস্ট ব্যর্থ হয় — ডেভেলপার দেখে কী পরিবর্তন হয়েছে। Facebook SnapshotTestCase (iOS) এবং Shot (Android) স্ন্যাপশট টেস্টিং-এর জনপ্রিয় টুল।
E2E টেস্ট (এন্ড-টু-এন্ড) শুরু থেকে শেষ পর্যন্ত সম্পূর্ণ ব্যবহারকারী পরিস্থিতি যাচাই করে: অ্যাপ লঞ্চ, লগইন, একটি কাজ সম্পাদন, ফলাফল যাচাই। UI টেস্ট হল E2E-এর একটি উপসেট যা ইন্টারফেসের উপর ফোকাস করে। টুল: Espresso (Android), XCUITest (iOS), Detox (React Native)। E2E টেস্ট সবচেয়ে ধীর, তাই এগুলি CI-তে আলাদাভাবে চালানো হয় — সাধারণত রাতারাতি বিল্ডে।
XCTest মোবাইল অ্যাপের ইউনিট টেস্টিং-এর জন্য Apple-এর বিল্ট-ইন ফ্রেমওয়ার্ক। XCTestRunner সিমুলেটর বা বাস্তব ডিভাইসে টেস্ট চালায়। টেস্টগুলি XCTestCase থেকে ইনহেরিট করে, প্রস্তুতি এবং পরিষ্কারের জন্য setUp এবং tearDown অন্তর্ভুক্ত করে। XCTest-এ অ্যাসারশনের জন্য XCTAssert (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) এবং অ্যাসিনক্রোনাস অপারেশনের জন্য XCTWaiter অন্তর্ভুক্ত রয়েছে।
একটি সহজ XCTest টেস্টের উদাহরণ: User মডেল তৈরি করা, ইনিশিয়ালাইজেশনের সঠিকতা, নাম ফরম্যাটিং এবং বয়স গণনা যাচাই করা। কোড কভারেজ Xcode-এ দেখায় কোডের কোন লাইন টেস্ট দ্বারা কভার হয়েছে — বাণিজ্যিক প্রকল্পের লক্ষ্য: ব্যবসায়িক যুক্তির কমপক্ষে 70–80% কভারেজ। XCTest xcodebuild test-এর মাধ্যমে Xcode Server এবং CI সিস্টেমের সাথে সংহত।
XCUITest UI টেস্টিং-এর জন্য Apple-এর ফ্রেমওয়ার্ক। এটি অ্যাক্সেসিবিলিটি আইডেন্টিফায়ারের মাধ্যমে কাজ করে: XCUIElementQuery বাটন, ইনপুট ফিল্ড, টেবিল label, identifier বা টাইপ অনুসারে খুঁজে পায়। XCUITest ক্রিয়ার ক্রম রেকর্ড করে (রেকর্ড/প্লেব্যাক) এবং টেস্ট কোড জেনারেট করে। গুরুত্বপূর্ণ: স্থিতিশীল টেস্ট অপারেশনের জন্য সমস্ত UI উপাদানের accessibilityIdentifier থাকা আবশ্যক।
JUnit Java/Kotlin-এ মোবাইল অ্যাপের মডিউলার টেস্টিং-এর মৌলিক ফ্রেমওয়ার্ক। Android-এ, JUnit 4 (সর্বশেষ স্থিতিশীল সংস্করণ 4.13.2) এবং নতুন প্রকল্পের জন্য JUnit 5 ব্যবহার করা হয়। Mockito মক অবজেক্ট তৈরির লাইব্রেরি: when(mock.method()).thenReturn(value) — টেস্ট করা ক্লাসকে নির্ভরতা থেকে বিচ্ছিন্ন করার মানক প্যাটার্ন।
Android-এর জন্য JUnit টেস্টের উদাহরণ:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {
@Mock
AuthRepository authRepository;
@Test
public void login_emptyEmail_returnsError() {
LoginViewModel vm = new LoginViewModel(authRepository);
String result = vm.login("", "password123");
assertEquals("Email cannot be empty", result);
verify(authRepository, never()).authenticate(any());
}
}
Espresso Android UI টেস্টের জন্য Google-এর ফ্রেমওয়ার্ক। Espresso স্বয়ংক্রিয়ভাবে UI থ্রেডের সাথে সিঙ্ক্রোনাইজ হয়: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso লেখা সহজ এবং বিল্ট-ইন আইডল স্টেট ওয়েটিং-এর কারণে স্থিতিশীল। UI Automator ক্রস-অ্যাপ্লিকেশন টেস্টের জন্য ফ্রেমওয়ার্ক যা সিস্টেম এলিমেন্টের (অনুমতি ডায়ালগ, নোটিফিকেশন শেড) সাথে ইন্টারঅ্যাক্ট করতে পারে।
Detox Wix-এর তৈরি React Native মোবাইল অ্যাপ টেস্টিং-এর জন্য গ্রে-বক্স E2E ফ্রেমওয়ার্ক। Detox একটি একক টেস্ট কোডবেস থেকে উভয় প্ল্যাটফর্মে কাজ করে, ভিতরে Espresso (Android) এবং XCUITest (iOS) ব্যবহার করে। Detox স্বয়ংক্রিয়ভাবে অ্যাপ আইডল হওয়া পর্যন্ত অপেক্ষা করে (কোন অ্যানিমেশন, নেটওয়ার্ক রিকোয়েস্ট, টাইমার নেই) এবং তবেই পরবর্তী কাজ করে।
Appium একটি সর্বজনীন ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক যা Android, iOS, ওয়েব এবং হাইব্রিড অ্যাপ সমর্থন করে। Appium WebDriver প্রোটোকল ব্যবহার করে এবং যেকোনো প্রোগ্রামিং ভাষা (Java, Python, JS, Ruby) সমর্থন করে। Appium Server একটি HTTP সার্ভার হিসেবে কাজ করে যা কমান্ডকে নেটিভ UI Automator / XCUITest কমান্ডে অনুবাদ করে। Appium-এর প্রধান ত্রুটি হল গতি: টেস্টগুলি নেটিভ Espresso বা XCUITest-এর তুলনায় ধীর গতিতে চলে।
| নির্ণায়ক | iOS | Android |
|---|---|---|
| ইউনিট টেস্ট | XCTest | JUnit 4/5 + Mockito |
| UI টেস্ট | XCUITest | Espresso, UI Automator |
| স্ন্যাপশট টেস্ট | FBSnapshotTestCase | Shot, Roborazzi |
| জেসচার অটোমেশন | XCUIGesture | UiAutomator touch |
| কোড কভারেজ | Xcode Code Coverage | Jacoco |
| CI ইন্টিগ্রেশন | xcodebuild test | Gradle connectedCheck |
TDD একটি মোবাইল অ্যাপ টেস্টিং পদ্ধতি যেখানে ইমপ্লিমেন্টেশন কোডের আগে টেস্ট লেখা হয়। Red-Green-Refactor চক্র: (1) একটি টেস্ট লিখুন যা ব্যর্থ হয় (Red), (2) টেস্ট পাস করার জন্য ন্যূনতম কোড লিখুন (Green), (3) টেস্ট পাস রেখে কোড রিফ্যাক্টর করুন। TDD নতুন কার্যকারিতার জন্য 100% টেস্ট কভারেজ এবং পরিষ্কার আর্কিটেকচার দেয়, কারণ টেস্ট হল প্রয়োজনীয়তার প্রথম স্পেসিফিকেশন।
BDD TDD-এর একটি সম্প্রসারণ যেখানে টেস্ট প্রাকৃতিক ভাষায় Given-When-Then ফরম্যাটে লেখা হয়। Given (প্রসঙ্গ) — When (কাজ) — Then (প্রত্যাশিত ফলাফল)। BDD টেস্ট দলের সকল সদস্যের জন্য বোধগম্য: ডেভেলপার, টেস্টার, বিশ্লেষক এবং ক্লায়েন্ট। Mock vs Stub vs Fake: Mock মিথস্ক্রিয়া যাচাই করে (মেথড কল করা হয়েছিল কিনা), Stub নির্দিষ্ট ডেটা ফেরত দেয়, Fake একটি সরলীকৃত কার্যকরী ইমপ্লিমেন্টেশন (যেমন, ইন-মেমোরি DB)। IT Sectr-এ, আমরা গুরুত্বপূর্ণ ব্যবসায়িক যুক্তির জন্য TDD এবং গ্রহণযোগ্যতা পরিস্থিতির জন্য BDD ব্যবহার করি।
টেস্ট ডাবল হল বস্তুর সাধারণ নাম যা টেস্টে বাস্তব নির্ভরতা প্রতিস্থাপন করে। চার প্রকার: Dummy (প্যারামিটার পূরণের বস্তু, ব্যবহৃত হয় না), Stub (নির্দিষ্ট মান ফেরত দেয়), Spy (যাচাইয়ের জন্য কল রেকর্ড করে), Mock (প্রত্যাশিত কল পূর্বনির্ধারণ করে)। পার্থক্য বোঝা সঠিক টেস্ট ডিজাইনের জন্য গুরুত্বপূর্ণ।
CI/CD — ক্রমাগত ইন্টিগ্রেশন এবং ক্রমাগত ডেলিভারি: প্রতিটি কোড পরিবর্তনে স্বয়ংক্রিয়ভাবে মোবাইল অ্যাপ বিল্ড এবং টেস্ট করার অনুশীলন। মোবাইল ডেভেলপমেন্টে, CI/CD পাইপলাইনে অন্তর্ভুক্ত: লিন্টিং, ইউনিট টেস্ট, ইন্টিগ্রেশন টেস্ট, APK/IPA বিল্ড এবং UI টেস্ট। GitHub Actions এবং Bitrise মোবাইল CI/CD-র জনপ্রিয় প্ল্যাটফর্ম। টেস্টগুলি দ্রুত চালানো উচিত: ইউনিট টেস্ট 1–2 মিনিটে, ইন্টিগ্রেশন 5–10-এ, UI টেস্ট 15–30 মিনিটে।
Device Farm টেস্টিং-এর জন্য বাস্তব ডিভাইসের একটি ফার্ম। Firebase Test Lab (Android) এবং Xcode Cloud (iOS) শত শত ডিভাইস মডেলে ক্লাউড অ্যাক্সেস প্রদান করে। Device Farm এমুলেটরে দৃশ্যমান না হওয়া সমস্যাগুলি প্রকাশ করে: বিভিন্ন স্ক্রিন সাইজ, পুরানো ডিভাইসে পারফরম্যান্স, সামঞ্জস্য সমস্যা। IT Sectr-এ, আমরা নিয়মিতভাবে Android-এর জন্য Firebase Test Lab এবং iOS-এর জন্য Xcode Cloud ব্যবহার করি।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
বাণিজ্যিক প্রকল্পের জন্য, ব্যবসায়িক যুক্তির কমপক্ষে 70–80% কভারেজ। UI কোড কভার করা কঠিন — এর জন্য 50% যথেষ্ট। মূল বিষয় শতাংশ নয় বরং টেস্টের গুণমান: গুরুত্বপূর্ণ পরিস্থিতি, সীমান্ত ক্ষেত্র এবং ত্রুটি ব্যবস্থাপনা পরীক্ষা করুন।
Mock মিথস্ক্রিয়া যাচাই করে — নির্দিষ্ট প্যারামিটার সহ একটি নির্দিষ্ট মেথড কল করা হয়েছিল কিনা। Stub পূর্বনির্ধারিত ডেটা ফেরত দেয়। Mock আচরণ যাচাই করে, Stub অবস্থা যাচাই করে।
হ্যাঁ, তবে শুধুমাত্র গুরুত্বপূর্ণ পরিস্থিতির জন্য: লগইন, নিবন্ধন, অর্ডার সম্পূর্ণকরণ, পেমেন্ট। UI টেস্ট ধীর এবং ভঙ্গুর — প্রতিটি স্ক্রিনের জন্য টেস্ট লিখবেন না। ব্যবহারকারীর E2E পরিস্থিতিতে ফোকাস করুন।
স্ন্যাপশট টেস্ট (গোল্ডেন টেস্ট) একটি রেন্ডার করা UI কম্পোনেন্টকে রেফারেন্স ইমেজের সাথে তুলনা করে। যদি চেহারা পরিবর্তিত হয় (ফন্ট, প্যাডিং, রং), টেস্ট ব্যর্থ হয় — ডেভেলপার পরীক্ষা করে পরিবর্তনটি ইচ্ছাকৃত কিনা। কম্পোনেন্ট লাইব্রেরির জন্য আদর্শ।
একাধিক ডিভাইসে E2E টেস্ট সমান্তরালভাবে চালান, Cloud Device Farm ব্যবহার করুন এবং টেস্টগুলিকে স্বাধীন গ্রুপে বিভক্ত করুন। টেস্ট অপ্টিমাইজ করুন: অপেক্ষা কমিয়ে দিন, নেটওয়ার্ক অনুরোধের জন্য মক ব্যবহার করুন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।