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

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

প্রথমে পরীক্ষা করে দেখুন যে কনফিগারেশন পরিবর্তনের ফলে আপনার অ্যাপটি ক্র্যাশ করে না। নিশ্চিত করুন যে আপনার অ্যাপের প্রতিটি UI যেকোনো ধরনের ঘূর্ণন, আকার পরিবর্তন বা ভাঁজ সামলাতে পারে। যেহেতু কনফিগারেশন পরিবর্তনের ফলে ডিফল্টরূপে অ্যাক্টিভিটি পুনরায় তৈরি হয়, তাই অ্যাক্টিভিটির স্থায়িত্বের অনুমানের কারণে কিছু ক্র্যাশ ঘটে থাকে।
কনফিগারেশন পরিবর্তন পরীক্ষা করার একাধিক উপায় আছে, কিন্তু বেশিরভাগ ক্ষেত্রে দুটি উপায় রয়েছে:
- Compose-এ, অ্যাক্টিভিটি রিস্টার্ট না করেই কার্যকরভাবে কনফিগারেশন পরিবর্তন সিমুলেট করতে
StateRestorationTesterব্যবহার করুন। আরও তথ্যের জন্য নিম্নলিখিত বিভাগগুলি দেখুন। - Espresso বা Compose-এর মতো যেকোনো UI টেস্টে,
Activity.recreate()কল করে একটি কনফিগারেশন পরিবর্তন অনুকরণ করুন।
কনফিগারেশন পরিবর্তনের প্রতিক্রিয়ায় স্টেট পুনরুদ্ধার পরীক্ষা করার জন্য সাধারণত বিভিন্ন ডিভাইস ব্যবহার করার প্রয়োজন হয় না। এর কারণ হলো, যে সমস্ত কনফিগারেশন পরিবর্তন অ্যাক্টিভিটিটি পুনরায় তৈরি করে, সেগুলোর ফলাফল একই রকম হয়। তবে, কিছু কনফিগারেশন পরিবর্তন নির্দিষ্ট ডিভাইসে ভিন্ন স্টেট পুনরুদ্ধার প্রক্রিয়া চালু করতে পারে।
উদাহরণস্বরূপ, যখন কোনো ব্যবহারকারী একটি খোলা ফোল্ডেবল ডিভাইসে কোনো তালিকা-বিস্তারিত UI দেখছেন এবং সামনের ডিসপ্লেতে যাওয়ার জন্য ডিভাইসটি ভাঁজ করেন, তখন UI সাধারণত বিস্তারিত পৃষ্ঠায় চলে যায়। একটি স্বয়ংক্রিয় টেস্টে নেভিগেশন অবস্থাসহ UI অবস্থার এই পুনরুদ্ধার প্রক্রিয়াটি অন্তর্ভুক্ত থাকা উচিত।
ডিভাইস এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে গেলে বা মাল্টি-উইন্ডো মোডে প্রবেশ করলে কনফিগারেশনে যে পরিবর্তন হয়, তা পরীক্ষা করার জন্য আপনার কাছে একাধিক বিকল্প রয়েছে:
- যেকোনো ডিভাইস ব্যবহার করে, পরীক্ষা চলাকালীন স্ক্রিনের আকার পরিবর্তন করুন। বেশিরভাগ ক্ষেত্রে, এটি আপনার যাচাই করার জন্য প্রয়োজনীয় সমস্ত স্টেট পুনরুদ্ধার প্রক্রিয়া সক্রিয় করে। তবে, ফোল্ডেবল ডিভাইসের নির্দিষ্ট ভঙ্গি শনাক্তকারী লজিকের জন্য এই পরীক্ষাটি কাজ করবে না, কারণ ভঙ্গির পরিবর্তন কোনো কনফিগারেশন পরিবর্তন ঘটায় না।
- আপনি যে ফিচারগুলো পরীক্ষা করতে চান, সেগুলো সাপোর্ট করে এমন কোনো ডিভাইস বা এমুলেটর ব্যবহার করে সংশ্লিষ্ট কনফিগারেশন পরিবর্তনগুলো কার্যকর করুন। উদাহরণস্বরূপ, একটি ফোল্ডেবল বা ট্যাবলেটকে ল্যান্ডস্কেপ মোডে ভাঁজ করা অবস্থা থেকে পুরোপুরি খোলা অবস্থায় আনতে Espresso Device ব্যবহার করে নিয়ন্ত্রণ করা যায়। বিভিন্ন স্ক্রিন সাইজ পরীক্ষা করার উদাহরণের জন্য লাইব্রেরি ও টুলস -এর Espresso Device সেকশনটি দেখুন।
বিভিন্ন স্ক্রিন এবং উইন্ডোর আকারের জন্য পরীক্ষার প্রকারভেদ
বিভিন্ন ফর্ম ফ্যাক্টরে পরীক্ষাটি সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে প্রতিটি ব্যবহারের ক্ষেত্রের জন্য উপযুক্ত ধরনের পরীক্ষা ব্যবহার করুন:
UI বিহেভিয়ার টেস্ট অ্যাপের UI-এর কোনো একটি অংশ চালু করে, যেমন কোনো অ্যাক্টিভিটি প্রদর্শন করা। এই টেস্টগুলো যাচাই করে যে নির্দিষ্ট কিছু এলিমেন্টের অস্তিত্ব আছে বা সেগুলোর নির্দিষ্ট অ্যাট্রিবিউট রয়েছে। টেস্টগুলো ঐচ্ছিকভাবে ব্যবহারকারীর অনুকরণে বিভিন্ন কার্যকলাপ সম্পাদন করতে পারে। ভিউ-এর জন্য Espresso ব্যবহার করুন। Jetpack Compose-এর নিজস্ব টেস্টিং API রয়েছে। UI বিহেভিয়ার টেস্ট ইন্সট্রুমেন্টেড বা লোকাল হতে পারে। ইন্সট্রুমেন্টেড টেস্ট ডিভাইস বা এমুলেটরে চলে, অন্যদিকে লোকাল UI টেস্ট JVM-এর Robolectric- এ চলে।
একটি অ্যাপের নেভিগেশন ব্যবস্থা সঠিক কিনা তা যাচাই করতে UI বিহেভিয়ার টেস্ট ব্যবহার করুন। এই টেস্টগুলো ক্লিক এবং সোয়াইপের মতো অ্যাকশন সম্পাদন করে। UI বিহেভিয়ার টেস্ট নির্দিষ্ট কিছু এলিমেন্ট বা প্রপার্টির অস্তিত্বও যাচাই করে। আরও তথ্যের জন্য, 'Automate UI tests' দেখুন।
স্ক্রিনশট টেস্ট একটি UI বা কম্পোনেন্টের স্ক্রিনশট নেয় এবং সেই ছবিটিকে পূর্বে অনুমোদিত একটি স্ক্রিনশটের সাথে তুলনা করে। রিগ্রেশন থেকে সুরক্ষার জন্য এটি একটি অত্যন্ত কার্যকর উপায়, কারণ একটিমাত্র স্ক্রিনশটের মাধ্যমে বিপুল সংখ্যক এলিমেন্ট এবং সেগুলোর ভিজ্যুয়াল প্রোপার্টি অন্তর্ভুক্ত করা যায়। আপনি JVM বা ডিভাইসে স্ক্রিনশট টেস্ট চালাতে পারেন। একাধিক স্ক্রিনশট টেস্ট ফ্রেমওয়ার্ক উপলব্ধ রয়েছে। আরও তথ্যের জন্য, স্ক্রিনশট টেস্ট দেখুন।
অবশেষে, ডিভাইসের ধরন বা উইন্ডোর আকারের ওপর নির্ভর করে ভিন্নভাবে আচরণ করে এমন লজিক ইউনিটগুলোর কার্যকারিতা পরীক্ষা করার জন্য আপনার ইউনিট টেস্টের প্রয়োজন হতে পারে, কিন্তু এই ক্ষেত্রে ইউনিট টেস্টের ব্যবহার তুলনামূলকভাবে কম।
পরবর্তী পদক্ষেপ
এই নথিতে অন্তর্ভুক্ত যাচাইকরণগুলি কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, লাইব্রেরি এবং টুলস দেখুন।