অ্যান্ড্রয়েড অ্যাপ পরীক্ষা করার মৌলিক বিষয়

এই পৃষ্ঠায় অ্যান্ড্রয়েড অ্যাপ পরীক্ষার মূল নীতিগুলো তুলে ধরা হয়েছে, যার মধ্যে প্রধান সেরা অনুশীলন এবং সেগুলোর সুবিধাসমূহ অন্তর্ভুক্ত রয়েছে।

পরীক্ষার সুবিধা

অ্যাপ ডেভেলপমেন্ট প্রক্রিয়ার একটি অবিচ্ছেদ্য অংশ হলো টেস্টিং। আপনার অ্যাপটি সর্বসাধারণের জন্য প্রকাশ করার আগে, নিয়মিতভাবে পরীক্ষা চালানোর মাধ্যমে আপনি এর সঠিকতা, কার্যকারিতা এবং ব্যবহারযোগ্যতা যাচাই করতে পারেন।

আপনি আপনার অ্যাপটি ম্যানুয়ালি পরীক্ষা করতে পারেন। এর জন্য আপনাকে বিভিন্ন ডিভাইস ও এমুলেটর ব্যবহার করতে হবে, সিস্টেমের ভাষা পরিবর্তন করতে হবে এবং ব্যবহারকারীর প্রতিটি ত্রুটি তৈরি করার বা প্রতিটি ইউজার ফ্লো অতিক্রম করার চেষ্টা করতে হবে।

তবে, ম্যানুয়াল টেস্টিং খুব একটা কার্যকর নয় এবং এর মাধ্যমে আপনার অ্যাপের আচরণে কোনো রিগ্রেশন বা ত্রুটি সহজেই এড়িয়ে যাওয়া সম্ভব। অটোমেটেড টেস্টিং-এ এমন টুল ব্যবহার করা হয় যা আপনার হয়ে পরীক্ষাগুলো সম্পন্ন করে। এটি দ্রুততর, এর ফলাফল বারবার একই রকম পাওয়া যায় এবং সাধারণত ডেভেলপমেন্ট প্রক্রিয়ার শুরুতেই আপনার অ্যাপ সম্পর্কে আরও কার্যকর ফিডব্যাক দেয়।

অ্যান্ড্রয়েডে পরীক্ষার প্রকারভেদ

মোবাইল অ্যাপ্লিকেশনগুলো জটিল এবং সেগুলোকে বিভিন্ন পরিবেশে ভালোভাবে কাজ করতে হয়। একারণে, নানা ধরনের পরীক্ষা রয়েছে।

বিষয়

উদাহরণস্বরূপ, বিষয়ের উপর নির্ভর করে বিভিন্ন ধরনের পরীক্ষা রয়েছে:

  • ফাংশনাল টেস্টিং : আমার অ্যাপটি কি তার কাজ সঠিকভাবে করছে?
  • পারফরম্যান্স টেস্টিং : এটি কি দ্রুত এবং দক্ষতার সাথে কাজটি করে?
  • অ্যাক্সেসিবিলিটি টেস্টিং : এটি কি অ্যাক্সেসিবিলিটি পরিষেবাগুলির সাথে ভালোভাবে কাজ করে?
  • সামঞ্জস্যতা পরীক্ষা : এটি কি প্রতিটি ডিভাইস এবং এপিআই স্তরে ভালোভাবে কাজ করে?

পরিধি

আকার বা বিচ্ছিন্নতার মাত্রার উপর নির্ভর করেও পরীক্ষাগুলো ভিন্ন হয়।

  • ইউনিট টেস্ট বা ছোট টেস্টগুলো অ্যাপের শুধুমাত্র একটি ক্ষুদ্র অংশ, যেমন কোনো মেথড বা ক্লাস, যাচাই করে।
  • এন্ড-টু-এন্ড টেস্ট বা বিগ টেস্ট একই সাথে অ্যাপের বড় অংশ, যেমন পুরো একটি স্ক্রিন বা ইউজার ফ্লো, যাচাই করে।
  • মাঝারি পরীক্ষাগুলো মাঝামাঝি পর্যায়ের এবং এগুলো দুই বা ততোধিক ইউনিটের মধ্যে সমন্বয় যাচাই করে।
পরীক্ষা ছোট, মাঝারি বা বড় হতে পারে।
চিত্র ১ : একটি সাধারণ অ্যাপ্লিকেশনে ব্যবহৃত টেস্ট স্কোপসমূহ।

টেস্টগুলোকে শ্রেণীবদ্ধ করার অনেক উপায় আছে। তবে, অ্যাপ ডেভেলপারদের জন্য সবচেয়ে গুরুত্বপূর্ণ পার্থক্য হলো টেস্টগুলো কোথায় চালানো হয়।

যন্ত্রচালিত বনাম স্থানীয় পরীক্ষা

আপনি একটি অ্যান্ড্রয়েড ডিভাইসে বা অন্য কম্পিউটারে পরীক্ষাগুলো চালাতে পারেন:

  • ইন্সট্রুমেন্টেড টেস্টগুলো একটি অ্যান্ড্রয়েড ডিভাইসে চালানো হয়, যা বাস্তব বা ইমুলেটেড হতে পারে। অ্যাপটি একটি টেস্ট অ্যাপের পাশাপাশি বিল্ড ও ইনস্টল করা হয়, যেটি কমান্ড ইনজেক্ট করে এবং স্টেট রিড করে। ইন্সট্রুমেন্টেড টেস্টগুলো সাধারণত UI টেস্ট হয়ে থাকে, যেখানে একটি অ্যাপ চালু করে সেটির সাথে ইন্টারঅ্যাক্ট করা হয়।
  • লোকাল টেস্টগুলো আপনার ডেভেলপমেন্ট মেশিন বা সার্ভারে চলে, তাই এগুলোকে হোস্ট-সাইড টেস্টও বলা হয়। এগুলো সাধারণত আকারে ছোট ও দ্রুত হয় এবং পরীক্ষাধীন বিষয়টিকে অ্যাপের বাকি অংশ থেকে বিচ্ছিন্ন রাখে।
টেস্টগুলো কোনো ডিভাইসে ইনস্ট্রুমেন্টেড টেস্ট হিসেবে, অথবা আপনার ডেভেলপমেন্ট মেশিনে লোকাল টেস্ট হিসেবে চালানো যেতে পারে।
চিত্র ২ : পরীক্ষার স্থানভেদে এর বিভিন্ন প্রকারভেদ।

সব ইউনিট টেস্ট স্থানীয় হয় না, এবং সব এন্ড-টু-এন্ড টেস্ট কোনো ডিভাইসে চলে না। উদাহরণস্বরূপ:

  • বড় স্থানীয় পরীক্ষা : আপনি স্থানীয়ভাবে চালিত হয় এমন একটি অ্যান্ড্রয়েড সিমুলেটর ব্যবহার করতে পারেন, যেমন রোবোইলেকট্রিক
  • সীমিত পরিসরের পরীক্ষা : এর মাধ্যমে আপনি যাচাই করতে পারেন যে আপনার কোডটি কোনো ফ্রেমওয়ার্ক ফিচারের (যেমন SQLite ডাটাবেস) সাথে ভালোভাবে কাজ করে কি না। SQLite-এর একাধিক সংস্করণের সাথে এর ইন্টিগ্রেশন পরীক্ষা করার জন্য আপনি এই পরীক্ষাটি একাধিক ডিভাইসে চালাতে পারেন।

উদাহরণ

নিম্নলিখিত কোড স্নিপেটগুলিতে দেখানো হয়েছে কিভাবে একটি ইনস্ট্রুমেন্টেড UI টেস্টে UI-এর সাথে ইন্টারঅ্যাক্ট করতে হয়, যেখানে একটি এলিমেন্টে ক্লিক করে যাচাই করা হয় যে অন্য একটি এলিমেন্ট প্রদর্শিত হচ্ছে।

এসপ্রেসো

// When the Continue button is clicked
onView(withText("Continue"))
    .perform(click())

// Then the Welcome screen is displayed
onView(withText("Welcome"))
    .check(matches(isDisplayed()))

কম্পোজ UI

// When the Continue button is clicked
composeTestRule.onNodeWithText("Continue").performClick()

// Then the Welcome screen is displayed
composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()

এই কোড স্নিপেটটি একটি ViewModel-এর ইউনিট টেস্টের অংশ দেখাচ্ছে (লোকাল, হোস্ট-সাইড টেস্ট):

// Given an instance of MyViewModel
val viewModel = MyViewModel(myFakeDataRepository)

// When data is loaded
viewModel.loadData()

// Then it should be exposing data
assertTrue(viewModel.data != null)

পরীক্ষাযোগ্য স্থাপত্য

একটি টেস্টেবল অ্যাপ আর্কিটেকচারে, কোড এমন একটি কাঠামো অনুসরণ করে যা আপনাকে এর বিভিন্ন অংশকে আলাদাভাবে সহজে পরীক্ষা করার সুযোগ দেয়। টেস্টেবল আর্কিটেকচারের আরও কিছু সুবিধা রয়েছে, যেমন উন্নত পাঠযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা, প্রসারণযোগ্যতা এবং পুনঃব্যবহারযোগ্যতা।

যে আর্কিটেকচার পরীক্ষাযোগ্য নয়, তা নিম্নলিখিত ফলাফল তৈরি করে:

  • আরও বড়, ধীরগতির এবং বেশি ত্রুটিপূর্ণ টেস্ট। যে ক্লাসগুলো ইউনিট-টেস্ট করা যায় না, সেগুলোকে হয়তো আরও বড় ইন্টিগ্রেশন টেস্ট বা UI টেস্টের আওতায় আনতে হতে পারে।
  • বিভিন্ন পরিস্থিতি পরীক্ষা করার সুযোগ কম থাকে। বড় আকারের টেস্টগুলো ধীরগতির হয়, তাই একটি অ্যাপের সমস্ত সম্ভাব্য অবস্থা পরীক্ষা করা অবাস্তব হতে পারে।

আর্কিটেকচার নির্দেশিকা সম্পর্কে আরও জানতে, অ্যাপ আর্কিটেকচার নির্দেশিকাটি দেখুন।

বিচ্ছিন্নকরণের পদ্ধতি

যদি আপনি কোনো ফাংশন, ক্লাস বা মডিউলের একটি অংশকে বাকি অংশ থেকে আলাদা করতে পারেন, তবে সেটির টেস্টিং করা সহজতর এবং অধিক কার্যকর হয়। এই পদ্ধতিটি ডিকাপলিং নামে পরিচিত, এবং এটিই টেস্টেবল আর্কিটেকচারের জন্য সবচেয়ে গুরুত্বপূর্ণ ধারণা।

সাধারণ ডিকাপলিং কৌশলগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:

  • একটি অ্যাপকে প্রেজেন্টেশন, ডোমেইন এবং ডেটার মতো লেয়ারে ভাগ করুন। এছাড়াও আপনি প্রতিটি ফিচারের জন্য একটি করে মডিউলে অ্যাপটিকে ভাগ করতে পারেন।
  • অ্যাক্টিভিটি এবং ফ্র্যাগমেন্টের মতো বড় ডিপেন্ডেন্সিযুক্ত এনটিটিগুলোতে লজিক যোগ করা এড়িয়ে চলুন। এই ক্লাসগুলোকে ফ্রেমওয়ার্কের এন্ট্রি পয়েন্ট হিসেবে ব্যবহার করুন এবং UI ও বিজনেস লজিক অন্যত্র, যেমন কম্পোজেবল, ভিউমডেল বা ডোমেইন লেয়ারে সরিয়ে নিন।
  • বিজনেস লজিক ধারণকারী ক্লাসগুলিতে সরাসরি ফ্রেমওয়ার্ক নির্ভরতা এড়িয়ে চলুন। উদাহরণস্বরূপ, ViewModel-এ Android Context ব্যবহার করবেন না
  • ডিপেন্ডেন্সিগুলো প্রতিস্থাপন করা সহজ করুন। উদাহরণস্বরূপ, কংক্রিট ইমপ্লিমেন্টেশনের পরিবর্তে ইন্টারফেস ব্যবহার করুন। আপনি কোনো ডিআই ফ্রেমওয়ার্ক ব্যবহার না করলেও ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করুন।

পরবর্তী পদক্ষেপ

এখন যেহেতু আপনি জানেন কেন আপনার পরীক্ষা করা উচিত এবং পরীক্ষার দুটি প্রধান প্রকার কী কী, আপনি 'কী পরীক্ষা করবেন' পড়তে পারেন অথবা পরীক্ষা করার কৌশল সম্পর্কে জানতে পারেন।

বিকল্পভাবে, যদি আপনি আপনার প্রথম টেস্ট তৈরি করতে এবং হাতে-কলমে শিখতে চান, তাহলে টেস্টিং কোডল্যাবগুলো দেখে নিতে পারেন।