পরীক্ষা করার কৌশল

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

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

  • সমস্যা যত তাড়াতাড়ি সম্ভব শনাক্ত করে।
  • দ্রুত এক্সিকিউট করে।
  • কোনও কিছু ঠিক করতে হলে, তা স্পষ্ট করে জানায়।

কোন ধরনের পরীক্ষা প্রয়োগ করবেন, কোথায় এবং কত ঘনঘন চালাবেন সেই বিষয়ে সিদ্ধান্ত নিতে এই পৃষ্ঠা আপনাকে সাহায্য করবে।

টেস্টিং পিরামিড

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

*ফিডেলিটি বলতে টেস্ট রানটাইম এনভায়রনমেন্টের সাথে প্রোডাকশন এনভায়রনমেন্টের মিল বোঝানো হয়।

স্কোপ অনুযায়ী পরীক্ষার সংখ্যা সাধারণত পিরামিড আকারে দেখানো হয়।
ছবি ১. স্কোপ অনুযায়ী পরীক্ষার সংখ্যার ডিস্ট্রিবিউশন সাধারণত পিরামিড আকারে দেখানো হয়।

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

বাগ সংক্রান্ত খরচ কমানো

ভালো টেস্টিং স্ট্র্যাটেজি ডেভেলপারদের প্রোডাক্টিভিটি সর্বাধিক করে তোলে এবং বাগ খুঁজে বের করার খরচ কমিয়ে দেয়।

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

একটি টপ-হেভি স্ট্র্যাটেজি যেখানে বেশিরভাগ পরীক্ষা ম্যানুয়ালি করা হয় এবং ডিভাইস পরীক্ষাগুলি শুধুমাত্র রাতে চালানো হয়।
ছবি ২. একটি টপ-হেভি স্ট্র্যাটেজি যেখানে বেশিরভাগ পরীক্ষা ম্যানুয়ালি করা হয় এবং ডিভাইস পরীক্ষাগুলি শুধুমাত্র রাতে চালানো হয়।

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

এর ফলে বাগ শনাক্ত করা ও তা সমাধান করার খরচ কতটা বাড়তে পারে তা বিবেচনা করা গুরুত্বপূর্ণ এবং কেন ছোট ও আরও ঘন ঘন পরীক্ষা করার দিকে আপনার পরীক্ষার প্রচেষ্টাকে পক্ষপাতদুষ্ট করা গুরুত্বপূর্ণ:

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

তবে, কোনও স্ট্র্যাটেজি না থাকার চেয়ে অদক্ষ টেস্টিং স্ট্র্যাটেজি থাকা ভাল। কোনও বাগ প্রোডাকশনে পৌঁছে গেলে, সেটি ঠিক করে ব্যবহারকারীর ডিভাইসে পৌঁছাতে অনেক সময় লাগে, কখনও কখনও কয়েক সপ্তাহ লেগে যায়। তাই, ফিডব্যাক লুপ সবচেয়ে দীর্ঘ ও সবচেয়ে ব্যয়বহুল হয়।

পরীক্ষার একটি স্কেলেবল স্ট্র্যাটেজি

পরীক্ষার পিরামিডকে ঐতিহ্যগতভাবে ৩টি বিভাগে ভাগ করা হয়েছে:

  • ইউনিট টেস্ট
  • ইন্টিগ্রেশন টেস্ট
  • এন্ড-টু-এন্ড টেস্ট।

তবে, এই ধারণাগুলির কোনও সুনির্দিষ্ট সংজ্ঞা নেই, তাই টিমগুলি তাদের বিভাগগুলিকে আলাদাভাবে সংজ্ঞায়িত করতে চাইতে পারে, যেমন ৫টি লেয়ার ব্যবহার করে:

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

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

সুযোগ

নেটওয়ার্ক অ্যাক্সেস

এক্সিকিউশন

বিল্ডের ধরন

জীবনচক্র

ইউনিট

ন্যূনতম নির্ভরতা সহ একটি পদ্ধতি বা ক্লাস।

না

স্থানীয়

ডিবাগ করা যায়

মার্জ করার আগে

কম্পোনেন্ট

মডিউল বা কম্পোনেন্ট লেভেল

একাধিক ক্লাস একসাথে

না

লোকাল
Robolectric
Emulator

ডিবাগ করা যায়

মার্জ করার আগে

ফিচার

ফিচার লেভেল

অন্যান্য টিমের মালিকানাধীন কম্পোনেন্টের সাথে ইন্টিগ্রেশন

উপহাস করা

লোকাল
Robolectric
ইমুলেটর
ডিভাইস

ডিবাগ করা যায়

মার্জ করার আগে

আবেদন

অ্যাপ্লিকেশন লেভেল

অন্যান্য টিমের মালিকানাধীন ফিচার এবং/অথবা পরিষেবার সাথে ইন্টিগ্রেশন

মক করা
স্টেজ সার্ভার
প্রোডাকশন সার্ভার

ইমুলেটর
ডিভাইস

ডিবাগ করা যায়

মার্জ করার আগে
মার্জ করার পরে

রিলিজ ক্যান্ডিডেট

অ্যাপ্লিকেশন লেভেল

অন্যান্য টিমের মালিকানাধীন ফিচার এবং/অথবা পরিষেবার সাথে ইন্টিগ্রেশন

প্রোডাকশন সার্ভার

ইমুলেটর
ডিভাইস

মিনিফাই করা রিলিজ বিল্ড

মার্জ করার পরে
প্রি-রিলিজ

পরীক্ষার বিভাগ নির্ধারণ করা

সাধারণভাবে, পিরামিডের সবচেয়ে নিচের লেভেলটি বিবেচনা করা উচিত যা টিমকে সঠিক লেভেলের ফিডব্যাক দিতে পারে।

যেমন, এই ফিচারের প্রয়োগ কীভাবে পরীক্ষা করা যায় তা ভেবে দেখুন: সাইন-ইন ফ্লোয়ের UI। আপনি কী টেস্ট করতে চান তার উপর নির্ভর করে, আপনাকে আলাদা আলাদা বিভাগ বেছে নিতে হবে:

পরীক্ষা করা হচ্ছে এমন বিষয়

কী পরীক্ষা করা হচ্ছে তার বিবরণ

টেস্টের বিভাগ

টেস্টের ধরনের উদাহরণ

ফর্ম ভ্যালিডেটর লজিক

এমন একটি ক্লাস যা রেগুলার এক্সপ্রেশনের মাধ্যমে ইমেল আইডি যাচাই করে এবং পাসওয়ার্ড ফিল্ডে কিছু লেখা হয়েছে কিনা তা চেক করে। এটি কোনও কিছুর উপর নির্ভরশীল নয়।

ইউনিট টেস্ট

লোকাল JVM ইউনিট টেস্ট

সাইন-ইন ফর্ম UI আচরণ

একটি বোতাম সহ ফর্ম যা শুধুমাত্র ফর্মটি যাচাই করা হলে চালু করা হয়

কম্পোনেন্ট টেস্ট

Robolectric-এ UI বিহেভিয়ার টেস্ট চলছে

সাইন-ইন ফর্মের UI কেমন দেখায়

UX স্পেসিফিকেশন মেনে তৈরি ফর্ম

কম্পোনেন্ট টেস্ট

কম্পোজ প্রিভিউ স্ক্রিনশট টেস্ট

Auth Manager-এর সাথে ইন্টিগ্রেশন

UI যা কোনও অথ ম্যানেজারের কাছে ক্রেডেনশিয়াল পাঠায় এবং বিভিন্ন ধরনের ত্রুটি সহ উত্তর পায়।

ফিচার টেস্ট

ফেক ডেটা সহ JVM টেস্ট

সাইন-ইন ডায়ালগ

লগ-ইন বোতামে প্রেস করলে সাইন-ইন ফর্ম সহ স্ক্রিন দেখা যায়।

অ্যাপ্লিকেশন টেস্ট

Robolectric-এ UI বিহেভিয়ার টেস্ট চলছে

ক্রিটিক্যাল ইউজার জার্নি: সাইন-ইন করা

স্টেজিং সার্ভারের বিরুদ্ধে টেস্ট অ্যাকাউন্ট ব্যবহার করে সম্পূর্ণ সাইন-ইন ফ্লো

রিলিজ ক্যান্ডিডেট

ডিভাইসে এন্ড-টু-এন্ড Compose UI বিহেভিয়ার টেস্ট চলছে

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

মনে রাখবেন, পরীক্ষার বিভাগ পরীক্ষার ধরন নির্ধারণ করে না এবং প্রতিটি বিভাগে সব ফিচার পরীক্ষা করতে হবে না।

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

টেস্ট পরিকাঠামো

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

কোন টেস্ট কখন ও কোথায় রান করাতে হবে তা নির্ধারণ করতে, আপনি স্কোপ অনুযায়ী টেস্টকে শ্রেণীবদ্ধ করতে পারবেন। যেমন, ৫-লেয়ার মডেল অনুসরণ করে:

বিভাগ

পরিবেশ (কোথায়)

ট্রিগার (কখন)

ইউনিট

[স্থানীয়][৪]

প্রতিটি কমিট

কম্পোনেন্ট

স্থানীয়

প্রতিটি কমিট

ফিচার

লোকাল ও এমুলেটর

মার্জ করার আগে, মার্জ করার আগে বা কোনও পরিবর্তন জমা দেওয়ার আগে

আবেদন

লোকাল, ইমুলেটর, ১টি ফোন, ১টি ফোল্ড করা যায় এমন ডিভাইস

মার্জ করার পরে, মার্জ করার পরে বা কোনও পরিবর্তন জমা দেওয়ার পরে

রিলিজ ক্যান্ডিডেট

৮টি আলাদা ফোন, ১টি ফোল্ড করা যায় এমন ফোন, ১টি ট্যাবলেট

প্রি-রিলিজ

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

পরীক্ষার সংখ্যা প্রোডাক্টিভিটির উপর প্রভাব ফেললে, এই নিয়মগুলি সময়ের সাথে সাথে পরিবর্তন হতে পারে। যেমন, আপনি যদি টেস্টগুলিকে নাইটলি ক্যাডেন্সের সাথে সরিয়ে দেন, তাহলে CI বিল্ড এবং টেস্টের সময় কমাতে পারেন, কিন্তু ফিডব্যাক লুপও দীর্ঘায়িত করতে পারেন।