এই পৃষ্ঠায় Android অ্যাপ পরীক্ষা করার মূল নীতিগুলি বর্ণনা করা হয়েছে, যার মধ্যে প্রধান পেশাদার পদ্ধতি এবং সেগুলির সুবিধা অন্তর্ভুক্ত।
Android স্কিল
GitHub-এ দেখুনপরীক্ষা করার স্ট্র্যাটেজি তৈরি করা
android skills add testing-setupপরীক্ষা করার সুবিধা
অ্যাপ ডেভেলপমেন্ট প্রসেসের একটি অবিচ্ছেদ্য অংশ হল টেস্টিং। আপনার অ্যাপের উপর ক্রমাগত টেস্ট রান করার মাধ্যমে, আপনি সর্বজনীনভাবে রিলিজ করার আগে আপনার অ্যাপের সঠিকতা, কার্যকরী আচরণ এবং ব্যবহারযোগ্যতা যাচাই করতে পারেন।
আপনি অ্যাপের মধ্যে নেভিগেট করে ম্যানুয়ালি আপনার অ্যাপ টেস্ট করতে পারবেন। আপনি বিভিন্ন ডিভাইস ও এমুলেটর ব্যবহার করতে পারেন, সিস্টেমের ভাষা পরিবর্তন করতে পারেন এবং প্রতিটি ব্যবহারকারীর ত্রুটি তৈরি করার বা প্রতিটি ব্যবহারকারীর ফ্লো অতিক্রম করার চেষ্টা করতে পারেন।
তবে, ম্যানুয়াল টেস্টিংয়ের স্কেল খুব একটা ভালো নয় এবং আপনার অ্যাপের আচরণে রিগ্রেশন উপেক্ষা করা সহজ হতে পারে। অটোমেটেড টেস্টিং-এর মধ্যে এমন টুল ব্যবহার করা হয় যা আপনার হয়ে টেস্ট করে, এটি দ্রুত, আরও বেশি রিপিটেবল এবং সাধারণত ডেভেলপমেন্ট প্রসেসের শুরুতেই আপনার অ্যাপ সম্পর্কে আরও বেশি অ্যাকশনেবল মতামত আপনাকে দেয়।
Android-এ টেস্টের ধরন
মোবাইল অ্যাপ্লিকেশন জটিল এবং বিভিন্ন পরিবেশে অবশ্যই ভালভাবে কাজ করতে হবে। সেই কারণে, অনেক ধরনের পরীক্ষা আছে।
বিষয়
যেমন, বিষয় অনুযায়ী বিভিন্ন ধরনের পরীক্ষা হয়:
- ফাংশনাল টেস্টিং: আমার অ্যাপ কি সেই কাজই করে যা করার কথা?
- পারফর্ম্যান্স টেস্টিং: এটি কি দ্রুত এবং দক্ষতার সাথে কাজ করে?
- অ্যাক্সেসিবিলিটি টেস্টিং: এটি কি অ্যাক্সেসিবিলিটি পরিষেবার সাথে ভালভাবে কাজ করে?
- মানানসই কিনা তা পরীক্ষা করা: এটি কি প্রতিটি ডিভাইস ও API লেভেলে ভালভাবে কাজ করে?
সুযোগ
এছাড়াও, সাইজ বা আইসোলেশনের মাত্রার উপর নির্ভর করে টেস্ট আলাদা হয়:
- ইউনিট টেস্ট বা ছোট টেস্ট অ্যাপের খুব ছোট অংশ যাচাই করে, যেমন কোনও পদ্ধতি বা ক্লাস।
- এন্ড-টু-এন্ড টেস্ট বা বিগ টেস্ট একই সময়ে অ্যাপের বড় অংশ যাচাই করে, যেমন সম্পূর্ণ স্ক্রিন বা ব্যবহারকারীর ফ্লো।
- মিডিয়াম টেস্ট হল এই দুটির মাঝামাঝি এবং এটি দুই বা তার বেশি ইউনিটের মধ্যে ইন্টিগ্রেশন চেক করে।
টেস্টকে বিভিন্নভাবে শ্রেণীবদ্ধ করা যায়। তবে, অ্যাপ ডেভেলপারদের জন্য সবচেয়ে গুরুত্বপূর্ণ পার্থক্য হল পরীক্ষাগুলি কোথায় চালানো হয়।
ইনস্ট্রুমেন্টেড বনাম লোকাল টেস্ট
আপনি Android ডিভাইস বা অন্য কম্পিউটারে পরীক্ষা করতে পারেন:
- ইনস্ট্রুমেন্টেড টেস্ট Android ডিভাইসে চলে, তা ফিজিক্যাল বা এমুলেটেড হতে পারে। অ্যাপটি তৈরি করা হয়েছে এবং টেস্ট অ্যাপ-এর সাথে ইনস্টল করা হয়েছে যা কমান্ড ইনজেক্ট করে এবং স্ট্যাটাস পড়ে। ইনস্ট্রুমেন্টেড টেস্ট সাধারণত UI টেস্ট হয়, যা অ্যাপ লঞ্চ করে এবং তারপর সেটির সাথে ইন্টার্যাক্ট করে।
- লোকাল টেস্ট আপনার ডেভেলপমেন্ট মেশিন বা সার্ভারে এক্সিকিউট করা হয়, তাই এগুলিকে হোস্ট-সাইড টেস্টও বলা হয়। এগুলি সাধারণত ছোট এবং দ্রুত হয়, যা অ্যাপের বাকি অংশ থেকে পরীক্ষা করা হচ্ছে এমন বিষয়কে আলাদা করে।
সব ইউনিট টেস্ট লোকাল নয় এবং সব এন্ড-টু-এন্ড টেস্ট ডিভাইসে রান করে না। যেমন:
- বড় লোকাল টেস্ট: আপনি লোকালি রান করে এমন Android সিমুলেটর ব্যবহার করতে পারেন, যেমন Robolectric।
- ছোট ইন্সট্রুমেন্টেড টেস্ট: আপনার কোড SQLite ডেটাবেসের মতো ফ্রেমওয়ার্ক ফিচারের সাথে ভালভাবে কাজ করে কিনা তা যাচাই করতে পারবেন। SQLite-এর একাধিক ভার্সনের সাথে ইন্টিগ্রেশন চেক করতে আপনি একাধিক ডিভাইসে এই পরীক্ষা চালাতে পারেন।
উদাহরণ
নিম্নলিখিত স্নিপেটগুলি দেখায় যে কীভাবে একটি ইনস্ট্রুমেন্টেড UI টেস্টে UI-এর সাথে ইন্টার্যাক্ট করতে হয় যা একটি এলিমেন্টে ক্লিক করে এবং অন্য একটি এলিমেন্ট দেখানো হয়েছে কিনা তা যাচাই করে।
Espresso
// When the Continue button is clicked
onView(withText("Continue"))
.perform(click())
// Then the Welcome screen is displayed
onView(withText("Welcome"))
.check(matches(isDisplayed()))
Compose 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 ও বিজনেস লজিক অন্য কোথাও সরিয়ে দিন, যেমন Composable, ViewModel বা ডোমেন লেয়ারে।
- বিজনেস লজিক আছে এমন ক্লাসে সরাসরি ফ্রেমওয়ার্ক ডিপেন্ডেন্সি এড়িয়ে চলুন। যেমন, ViewModels-এ Android Contexts ব্যবহার করবেন না।
- নির্ভরশীলতা পরিবর্তন করা সহজ করুন। যেমন, কনক্রিট ইমপ্লিমেন্টেশনের পরিবর্তে ইন্টারফেস ব্যবহার করুন। আপনি DI ফ্রেমওয়ার্ক ব্যবহার না করলেও ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করুন।
পরবর্তী ধাপ
এখন আপনি জানেন যে কেন আপনাকে পরীক্ষা করতে হবে এবং দুই ধরনের প্রধান পরীক্ষা সম্পর্কেও জানেন, আপনি কী পরীক্ষা করতে হবে তা পড়তে পারেন বা পরীক্ষা করার কৌশল সম্পর্কে জানতে পারেন
অন্যথায়, আপনি যদি প্রথম টেস্ট তৈরি করতে চান এবং কাজ করতে করতে শিখতে চান, তাহলে টেস্টিং কোডল্যাব দেখুন।