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