সফটওয়্যার টেস্টিংঃ White Box টেস্টিং ও Black Box টেস্টিং

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

গ্রিক মাইথোলজি আজকে আমাদের আলোচ্য বিষয় না। আমাদের আজকে জানবো সফটওয়্যারের দুইটি টেস্টিং টেকনিক সম্পর্কে। যে টেকনিকগুলোর সাহায্যে একটি সফটওয়্যার থেকে বিভিন্ন ত্রুটি (যেমনঃ বাগ, errors) খুঁজে বের করা হয়।

সফটওয়্যার টেস্টিং কীঃ
টেস্ট (Test) শব্দটির সাথে আমরা সবাই পরিচিত। কোন কিছুর গুণগত মান যাচাই করার জন্য সেটিকে টেস্ট করার প্রয়োজন পরে। একটি সফটওয়্যারের ক্ষেত্রেও তাই। সফটওয়্যার তৈরি হওয়ার পর, সেটি থেকে বিভিন্ন বাগ(Bug), errors খুঁজে বের করার জন্য সফটওয়্যার টেস্টিং প্রসেসের সাহায্য নেয়া হয়।

সফটওয়্যার টেস্টিং -এর কলাকৌশল low-level টেস্ট থেকে high-level টেস্ট পর্যন্ত সমন্বয় করা হয়। Low-level টেস্টিং-এ যাচাই করা হয় যে ছোট কোড সেগমেন্ট-গুলো ঠিকঠাক মত implement হয়েছে কিনা এবং high-level টেস্টিং সফটওয়্যারটির মূল ফাংশন ঠিকঠাক আছে কিনা সেটা যাচাই করা হয়।

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

int fun(int param)
{
    int result;
    result = param/2;
    return result;
}

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

  1. White-Box Testing
  2. Black-Box Testing.

White-Box টেস্টিং:

 White Box টেস্টিং টেকনিক
White Box টেস্টিং টেকনিক

White-box টেস্টিং glass-box টেস্টিং বা structural টেস্টিং বা Clear box টেস্টিং নামেও পরিচিত। এই টেস্টিং টেকনিকে সফটওয়্যারের অভ্যন্তরীণ বিষয়গুলো জানার প্রয়োজন পরে। অর্থাৎ, কিভাবে কোড করা হয়েছে, টেস্টারের সেই সম্পর্কে বিস্তারিত ধারণা থাকে। যে কোড লেখে, সাধারণত সেই-ই এই টেস্ট করতে পারে। কোডের বিস্তারিত ধারণার উপর ভিত্তি করে একজন সফটওয়্যার টেস্টার টেস্ট কেস তৈরি করেন। টেস্ট কেসগুলো এমনভাবে তৈরি করা হয় যেন সেগুলো দিয়ে কোডের ছোট ছোট অংশগুলো যাচাই করা যায়। যেমনঃ একটা ক্যালকুলেটরের সফটওয়্যার বানানোর জন্য বিভিন্ন ধরণের ফাংশন লেখার দরকার পরে। এখন আমি যদি যোগের ফাংশনটি লিখি আমি লিখবো এভাবেঃ

int sum(int a, int b)
{
    int sum;
    sum = a+b;
    return sum;
}

সাধারণভাবে একজন প্রোগ্রামারেই এইটুকু প্রোগ্রাম লেখার পর ইনপুট দিয়ে টেস্ট করে দেখবে যে কোডটি ঠিকমত কাজ করে কিনা। দুইটি পূর্ণ সংখ্যা ইনপুট নিয়ে তাদের যোগফল আউটপুট দেয় কিনা। আমরা যারা একটু হলেও প্রোগ্রামিং এর সাথে পরিচিত, তারা জানি এই ফাংশনটিতে যদি আমরা 2,2 দেই তাহলে আসবে 4, আবার যদি দশমিক সংখ্যা যেমনঃ 2.5 , 2.5 তখন প্রোগ্রামার মাত্রই জানে এই দুইটি সংখ্যার জন্য এই ফাংশনের আউটপুট আসবে 4, যেটা সঠিক না। White-Box টেস্টিং এ এভাবেই ছোট ছোট ভাগে টেস্ট করা হয়।
White-Box টেস্টিং-এর বেসিক তিনটি ধাপ হলোঃ

  • প্রিপারেশন স্টেজ বা প্রস্তুতি পর্বঃ প্রিপারেশন স্টেজ বা প্রস্তুতি পর্বে White-Box টেস্টিং এর সকল বেসিক ইনফরমেশনের গঠন বা নকশা প্রণয়ন করা হয়ে থাকে। যেমনঃ কোডের ইনপুটের আলাদা আলাদা রিকোয়ারমেন্টস্‌, ফাংশনের বিবরণ বা functional specification, ডকুমেন্টের বিস্তারিত বর্ণনা, সঠিক সোর্স কোড ইত্যাদি।
  • প্রসেসিংঃ প্রসেসিং ধাপ মূলত টেস্ট কেস তৈরি করার ধাপ। এখানে টেস্ট কেস দিয়ে পুঙ্খানুপুঙ্খভাবে সফটওয়্যার অ্যাপ্লিকেশনটি পরীক্ষা করা হয় এবং পরীক্ষার ফলাফল সঠিকভাবে লিপিবদ্ধ করা হয়।
  • আউটপুটঃ আউটপুট পর্যায়ে White-Box টেস্টিং-এর চূড়ান্ত রিপোর্ট দেয়া হয়, যেখানে প্রিপারেশন এবং প্রসেসিং স্টেজের সকল তথ্য এবং প্রাপ্ত ফলাফল সংরক্ষিত থাকে।

সুবিধাঃ

  • White box টেস্টিং-এ প্রোগ্রামের অভ্যন্তরীণ বিষয়গুলো জানা থাকে, বিধায় এই টেস্টিং প্রসেস সফটওয়্যারের এরর এবং বিভিন্ন সমস্যা শনাক্ত করতে বেশ কার্যকর।
  • যদি সফটওয়্যারে কোন প্রছন্ন এরর(Hidden Errors) থেকে থাকে, যেটা সরাসরি বুঝা যায় না, সেটি White-Box টেস্টিং -এর মাধ্যমে শনাক্ত করা সম্ভব।
  • ভবিষ্যৎ-এ যদি সফটওয়্যারের সোর্স কোডে কোন ডেভেলপার কোন পরিবর্তন আনে, তাহলে এই টেস্টিং খুব সহজেই সেটা ধরে ফেলতে পারবে। (হুম, আলগা মাতব্বরি করার কোন সুযোগ নাই )।

অসুবিধাঃ

  • In-depth প্রোগ্রামিং জ্ঞানের দরকার হয় white-box টেস্টিং এর জন্য।
  • ইমপ্লিমেন্টেশন পরিবর্তনের সাথে সাথে টেস্ট কেসেরও পরিবর্তন হয়।

Black-Box টেস্টিংঃ

Black Box টেস্টিং টেকনিক
Black Box টেস্টিং টেকনিক

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

  • ফাংশনের ভুল শনাক্ত করা যায়
  • ইন্টারফেসের এরর শনাক্ত করা যায়
  • ডাটা স্ট্রাকচার এবং ডাটাবেস এক্সেসের কোন ভুল থাকলে সেটি শনাক্ত করা যায়
  • বিহেভিয়ারাল বা পারফর্মেন্সের কোন এরর থাকলে সেটি শনাক্ত করা যায়

যেমনঃ একটি ওয়েবসাইট যখন একজন টেস্টার টেস্ট করবেন, তিনি জানেন না ওয়েবসাইটটি কিভাবে কোড করে ডিজাইন করা হয়েছে অর্থাৎ এর ইন্টারনাল স্ট্রাকচার কেমন। ওয়েবসাইটি টেস্ট করার সময় তিনি একটি ব্রাউজারের সাহায্য নিবেন , বিভিন্ন ক্লিকস্‌ এবং কি-স্ট্রোকের সাহায্যে দেখবেন স্পেসিফিকেশন অনুযায়ী কাঙ্খিত আউটপুট দিচ্ছে কি না।

ব্ল্যাক বক্স টেস্টিং এর ধাপ হলো তিনটিঃ

  • ইকুইভ্যালেন্স পার্টিশনিং (Equivalence partitioning) এটি একটি সফটওয়্যারের টেস্ট ডিজাইন টেকনিক, যেখানে ইনপুটগুলোকে ভ্যালিড-আনভ্যালিড দুইটি পার্টিশনে ভাগ করা হয় এবং টেস্ট ডাটা হিসেবে ব্যবহার করা হয়।
  • বাউন্ডারি ভ্যালু এ্যানালাইসিস (Boundary Value Analysis) ইনপুট ভ্যালুর একটা বাউন্ডারি সেট করা থাকে। সফটওয়্যার টেস্ট করার সময় সেই বাউন্ডারির ভেতরের-বাইরের ইনপুটগুলো টেস্ট ডাটা হিসেবে দেয়া হয়।
  • কজ-এফেক্ট গ্রাফিং (Cause-Effect Graphing)  সফটওয়্যার টেস্টিং এ cause হিসেবে ধরা হয় ইনপুট কন্ডিশনকে এবং এর effect হিসেবে ধরা হয় আউটপুট কন্ডিশনকে। Cause-Effect graph-এর মাধ্যমে সঠিকভাবে টেস্ট ডাটা তৈরি করা হয়।

সুবিধাঃ

  • ইউজার পয়েন্ট অফ ভিউ থেকে সফটওয়্যারকে টেস্ট করা যায়, কারণ এর জন্য টেস্টারের প্রোগ্রামিং জ্ঞানের দরকার পরে না।
  • স্পেসিফিকেশনের উপর ভিত্তি করে সফটওয়্যার টেস্ট করা হয় বলে, স্পেসিফিকেশন জানার সাথে সাথে টেস্ট কেস তৈরি করা যায়।

অসুবিধাঃ

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

লেখকঃ তামান্না নিশাত রিনি।

A/B টেস্টিং

যারা মাঝে-মধ্যে টেলিভিশন দেখে, তারা নিশ্চয়ই একটি বিজ্ঞাপণের সাথে পরিচিত। যেখানে দেখানো হয় যে একদল ছোট ছেলেমেয়েকে দুটি দলে ভাগ করা হয়। তারপর একদলকে দেওয়া হয় হরলিকস্ মেশানো দুধ, আর আরেকদলকে দেওয়া হয় হরলিকস্ ছাড়া দুধ। কয়েকমাস পরে দেখা যায় যে, যারা হরলিকস মেশানো দুধ খেয়েছে, তারা টলার (Taller – লম্বা), স্ট্রংগার (stronger – শক্তিশালি) আর শার্পার (sharper – মেধাবী অর্থে) হয়েছে। তো এরকম মিথ্যা বিজ্ঞাপণ কেবল তৃতীয় বিশ্বের দেশগুলোতেই প্রচার করা সম্ভব। ইংল্যান্ডে নাকি এই বিজ্ঞাপণটি নিষিদ্ধ করেছে। তবে বিজ্ঞাপণ নিয়ে আলোচনা করা আমার এই লেখার উদ্দেশ্য নয়। লেখার বিষয়বস্তু হচ্ছে A/B টেস্টিং।

অনেক সময়, যখন একটা কাজ করার জন্য দুইটা উপায় বের হয়, তখন কোন কাজটি করলে ভালো হবে, সেটি সিদ্ধান্ত নেওয়ার জন্য যাদের জন্য কাজটি করা হচ্ছে, তাদেরকে দুটি ভাগে ভাগ করা হয়। একভাগের ওপর প্রথম পদ্ধতিটি পরীক্ষা করা হয়, আরেকভাগের ওপর দ্বিতীয় পদ্ধতিটি। তারপর সেখান থেকে ফলাফল পর্যবেক্ষণ করে সিদ্ধান্ত নেওয়া হয় যে কোনটি ভালো। একেই বলে A/B টেস্টিং। ওপরের হরলিকসের বিজ্ঞাপণটিও (যদিও মিথ্যা) A/B টেস্টিংয়ের উদাহরণ।

এবি টেস্টিং
এবি টেস্টিং

A/B টেস্টিং অনেক ক্ষেত্রেই ব্যবহার করা হয়। যেমন, ইমেইল মার্কেটিং। বিভিন্ন পণ্যের তথ্য দিয়ে সম্ভাব্য গ্রাহকদেরকে ইমেইল করার রেওয়াজ আছে। তো সবাই তো আর ইমেইল পড়ে না, আবার যারা পড়ে, তাদের মধ্যে সবাই ইমেইলের বিষয়বস্তুতে আগ্রহ নাও পেতে পারে। এখন ধরা যাক, আমি আমার বইয়ের জন্য ইমেইল মার্কেটিং করবো। বিভিন্ন কলেজ-বিশ্ববিদ্যালয়ের ৫০ হাজার শিক্ষার্থীর ইমেইল ঠিকানা আমি যোগাড় করলাম। এখন আমরা তিন রকমের ইমেইল ডিজাইন করলাম, কোনোটায় কথা বেশি, কোনোটায় ছবি বেশি। এখন রাফির কাছে মনে হলো যে এই ইমেইলটা ভালো, আমার কাছে মনে হলো, না ওইটা ভালো। আর সালমানের মনে হলো এই দুটোর চেয়ে তৃতীয়টি ভালো। এখন আমরা এখানে যুক্তি-তর্ক না করে যেটা করতে পারি, লটারির মতো একটা প্রোগ্রাম লিখে সেটি দিয়ে তিনটি ইমেইলের তালিকা তৈরি করলাম, প্রতি তালিকায় এক হাজার ইমেইল ঠিকানা। এখন প্রথম তালিকায় রাফির পছন্দের ইমেইল, দ্বিতীয় তালিকায় আমার পছন্দের ইমেইল আর তৃতীয় তালিকায় সালমানের পছন্দের ইমেইল পাঠালাম। কয়েকদিন পরে গ্রাহকদের রেসপন্স (কতজন ইমেইল খুলে লিঙ্কে ক্লিক করলো) দেখে আমরা সহজেই সিদ্ধান্ত কোন ইমেইলটি ভালো ছিল। তারপরে বাকী ৪৭ হাজার শিক্ষার্থীর কাছে সেই ইমেইলটিই পাঠাবো।

এখন আমি কেন লটারির মতো প্রোগ্রাম লিখে ইমেইল তালিকা তৈরি করলাম? কারণ আমি যখন ইমেইলগুলো সংগ্রহ করি, সেগুলো কোনো একটা অর্ডারে (বা ক্রমে) থাকার সম্ভাবনাই বেশি। একই প্রতিষ্ঠানের শিক্ষার্থীদের ইমেইল পরপর থাকবে, আর তাদের মধ্যে কোনো মিলও থাকতে পারে, যেমন এরা সবাই বই কেনার ব্যাপারে সিরিয়াস, তাই এদেরকে যেই ইমেইলই পাঠানো হোক না কেন, এরা লিঙ্কে ক্লিক করবে। এজন্যই Random ভাবে তালিকা তৈরি করতে হয়েছে, যেন এরকম ঘটনা না ঘটে যে এক তালিকায় সবাই কাছাকাছি মানসিকতার শিক্ষার্থী থাকে।

মোবাইল এবি টেস্ট
মোবাইল এবি টেস্টিং

ওয়েব বা মোবাইল অ্যাপ্লিকেশন, ইমেইল মার্কেটিং কিংবা অন্যান্য ক্ষেত্রে এবি টেস্টিং ব্যবহার করে সর্বোত্তম সিদ্ধান্ত নেওয়া সহজ হয়। কোন জায়গায় বিজ্ঞাপণ দিলে মানুষ বেশি ক্লিক করবে, বাটনগুলোতে কী ছবি থাকবে নাকি টেক্সট, রংটা কী গাঢ় নীল হবে নাকি আকাশি, SIGN UP NOW লিখব নাকি Join Today! – এই ধরণের নানান সিদ্ধান্তের জন্য A/B টেস্ট খুবই কার্যকরি। এজন্য হরেক রকম টুলস্ বা ফ্রেমওয়ার্কও রয়েছে (A/B Testing Tools, A/B Testing Framework এসব লিখে গুগলে সার্চ দিলে পাওয়া যাবে)। নির্দিষ্ট কোনো টুলস্ বা ফ্রেমওয়ার্ক ব্যবহার করে সহজেই টেস্ট ডিজাইন করা যায় এবং তার ফলাফল বিশ্লেষণ করা যায়। এই বিষয়ে ইন্টারনেটে অনেক লেখা রয়েছে। আমি কেবল এবি টেস্টিংয়ের সাথে পরিচয় করিয়ে দিলাম। আরো জানতে হলে গুগল সার্চ করে বিভিন্ন আর্টিকেল পড়ে জেনে নিতে হবে।