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

এই পৃষ্ঠাটি কেন্দ্রীয় সর্বোত্তম অনুশীলন এবং তাদের সুবিধাগুলি সহ Android অ্যাপ্লিকেশানগুলি পরীক্ষা করার মূল নীতিগুলির রূপরেখা দেয়৷

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

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

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

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

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

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

বিষয়

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

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

ব্যাপ্তি

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

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

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

ইন্সট্রুমেন্টেড বনাম স্থানীয় পরীক্ষা

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

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

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

  • বড় স্থানীয় পরীক্ষা : আপনি একটি অ্যান্ড্রয়েড সিমুলেটর ব্যবহার করতে পারেন যা স্থানীয়ভাবে চলে, যেমন রোবোলেক্ট্রিক
  • ছোট যন্ত্রযুক্ত পরীক্ষা : আপনি যাচাই করতে পারেন যে আপনার কোডটি একটি ফ্রেমওয়ার্ক বৈশিষ্ট্যের সাথে ভাল কাজ করে, যেমন একটি 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()

এই স্নিপেটটি একটি ভিউমডেলের জন্য একটি ইউনিট পরীক্ষার অংশ দেখায় (স্থানীয়, হোস্ট-সাইড পরীক্ষা):

// 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)

একটি পরীক্ষার কৌশল সংজ্ঞায়িত করা

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

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

ফ্লেকি পরীক্ষা

এমনকি সঠিকভাবে পরিকল্পিত এবং বাস্তবায়িত টেস্ট রানেও ত্রুটি দেখা দেয়। উদাহরণস্বরূপ, একটি বাস্তব ডিভাইসে একটি পরীক্ষা চালানোর সময়, একটি স্বয়ংক্রিয় আপডেট একটি পরীক্ষার মাঝখানে শুরু হতে পারে এবং এটি ব্যর্থ হতে পারে। আপনার কোডে সূক্ষ্ম রেস শর্তগুলি সময়ের মাত্র একটি ছোট শতাংশ ঘটতে পারে। যে পরীক্ষাগুলি 100% সময় পাস করে না সেগুলি অস্পষ্ট

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

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

একটি স্থাপত্য যা পরীক্ষাযোগ্য নয় তা নিম্নলিখিতগুলি তৈরি করে:

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

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

ডিকপলিং করার পন্থা

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

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

  • উপস্থাপনা, ডোমেন এবং ডেটার মতো স্তরগুলিতে একটি অ্যাপকে বিভক্ত করুন। এছাড়াও আপনি একটি অ্যাপকে মডিউলে বিভক্ত করতে পারেন, প্রতি বৈশিষ্ট্যে একটি।
  • ক্রিয়াকলাপ এবং টুকরোগুলির মতো বড় নির্ভরতা রয়েছে এমন সত্তাগুলিতে যুক্তি যোগ করা এড়িয়ে চলুন। এই ক্লাসগুলিকে ফ্রেমওয়ার্কের এন্ট্রি পয়েন্ট হিসাবে ব্যবহার করুন এবং UI এবং বিজনেস লজিককে অন্যত্র সরান, যেমন একটি কম্পোজেবল, ভিউমডেল বা ডোমেন স্তরে৷
  • ব্যবসায়িক যুক্তিযুক্ত ক্লাসে সরাসরি কাঠামো নির্ভরতা এড়িয়ে চলুন। উদাহরণস্বরূপ, ViewModels এ Android প্রসঙ্গ ব্যবহার করবেন না
  • নির্ভরতা প্রতিস্থাপন সহজ করুন. উদাহরণস্বরূপ, কংক্রিট বাস্তবায়নের পরিবর্তে ইন্টারফেস ব্যবহার করুন। আপনি ডিআই ফ্রেমওয়ার্ক ব্যবহার না করলেও ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করুন।

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

এখন যেহেতু আপনি জানেন কেন আপনার পরীক্ষা করা উচিত এবং দুটি প্রধান ধরনের পরীক্ষা, আপনি কী পরীক্ষা করতে হবে তা পড়তে পারেন।

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