গ্রিক মাইথোলজিতে “প্যান্ডোরার বাক্স” নামে একটি মিথ প্রচলিত আছে। প্যান্ডোরাকে জিউস একটা বাক্স দিয়ে পৃথিবীতে পাঠায় এবং কড়া নির্দেশ দেয় সে যেন কখনো যেন বাক্সটি না খুলে। মানুষের যা হয় আর কি, নিষেধ অমান্য করার প্রবনতা থাকেই। প্যান্ডোরাও ব্যতিক্রম হবে কেন? সে যখন বাক্সটি খুলে ফেলে পৃথিবীতে ছড়িয়ে পরে রাগ, দুঃখ, কষ্ট , হতাশার মত সকল ঋণাত্মক আবেগ।
গ্রিক মাইথোলজি আজকে আমাদের আলোচ্য বিষয় না। আমাদের আজকে জানবো সফটওয়্যারের দুইটি টেস্টিং টেকনিক সম্পর্কে। যে টেকনিকগুলোর সাহায্যে একটি সফটওয়্যার থেকে বিভিন্ন ত্রুটি (যেমনঃ বাগ, 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; }
এখন এই ফাংশনটিকে আমরা দুইভাবে টেস্ট করতে পারি। আমরা দেখতে পারি এটার ফাংশনটি ঠিকমত কাজ করছে কিনা আর ফাংশনের বর্ণনা অনুযায়ী এটি আমাদের আউটপুট দিচ্ছে কিনা। প্রোগ্রামার মাত্রই বুঝতে পারবে এখানে কোড করা হয়েছে শুধুমাত্র জোড় সংখ্যার জন্য। বিজোড় সংখ্যার জন্য ভ্যালু অপরিবর্তিত রাখার কাজ এই ফাংশনে করা হয়নি। সফটওয়্যারের টেস্টিং এর দুইটি টেকনিক আছে। সে দুইটি হলোঃ
- White-Box Testing
- Black-Box Testing.
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 টেস্টিং সফটওয়্যার টেস্টিং-এর আরেকটি method , যেখানে একটা অ্যাপ্লিকেশনকে পরীক্ষা করা হয় স্পেসিফিকেশনের উপর ভিত্তি করে। সম্পূর্ণ আলাদা একটি টিম এই টেস্টিং এর জন্য কাজ করে। ব্ল্যাক বক্স টেস্টিং -এ টেস্টারের সফটওয়্যারের অভ্যন্তরীণ বিষয়ে কোন ধারণা থাকে না। এখানে শুধুমাত্র দেখা হয় সফটওয়্যারটি ইনপুট হিসেবে কী নিবে এবং সেই মোতাবেক কী আউটপুট দিবে। কিভাবে প্রোগ্রামের আউটপুট আসবে সেটা টেস্টারের মাথাব্যথার কোন বিষয় না। ব্ল্যাক বক্স টেস্টিং টেকনিক দিয়ে যেসব এরর আলাদা করা যায় সেগুলো হলোঃ
- ফাংশনের ভুল শনাক্ত করা যায়
- ইন্টারফেসের এরর শনাক্ত করা যায়
- ডাটা স্ট্রাকচার এবং ডাটাবেস এক্সেসের কোন ভুল থাকলে সেটি শনাক্ত করা যায়
- বিহেভিয়ারাল বা পারফর্মেন্সের কোন এরর থাকলে সেটি শনাক্ত করা যায়
যেমনঃ একটি ওয়েবসাইট যখন একজন টেস্টার টেস্ট করবেন, তিনি জানেন না ওয়েবসাইটটি কিভাবে কোড করে ডিজাইন করা হয়েছে অর্থাৎ এর ইন্টারনাল স্ট্রাকচার কেমন। ওয়েবসাইটি টেস্ট করার সময় তিনি একটি ব্রাউজারের সাহায্য নিবেন , বিভিন্ন ক্লিকস্ এবং কি-স্ট্রোকের সাহায্যে দেখবেন স্পেসিফিকেশন অনুযায়ী কাঙ্খিত আউটপুট দিচ্ছে কি না।
ব্ল্যাক বক্স টেস্টিং এর ধাপ হলো তিনটিঃ
- ইকুইভ্যালেন্স পার্টিশনিং (Equivalence partitioning) এটি একটি সফটওয়্যারের টেস্ট ডিজাইন টেকনিক, যেখানে ইনপুটগুলোকে ভ্যালিড-আনভ্যালিড দুইটি পার্টিশনে ভাগ করা হয় এবং টেস্ট ডাটা হিসেবে ব্যবহার করা হয়।
- বাউন্ডারি ভ্যালু এ্যানালাইসিস (Boundary Value Analysis) ইনপুট ভ্যালুর একটা বাউন্ডারি সেট করা থাকে। সফটওয়্যার টেস্ট করার সময় সেই বাউন্ডারির ভেতরের-বাইরের ইনপুটগুলো টেস্ট ডাটা হিসেবে দেয়া হয়।
- কজ-এফেক্ট গ্রাফিং (Cause-Effect Graphing) সফটওয়্যার টেস্টিং এ cause হিসেবে ধরা হয় ইনপুট কন্ডিশনকে এবং এর effect হিসেবে ধরা হয় আউটপুট কন্ডিশনকে। Cause-Effect graph-এর মাধ্যমে সঠিকভাবে টেস্ট ডাটা তৈরি করা হয়।
সুবিধাঃ
- ইউজার পয়েন্ট অফ ভিউ থেকে সফটওয়্যারকে টেস্ট করা যায়, কারণ এর জন্য টেস্টারের প্রোগ্রামিং জ্ঞানের দরকার পরে না।
- স্পেসিফিকেশনের উপর ভিত্তি করে সফটওয়্যার টেস্ট করা হয় বলে, স্পেসিফিকেশন জানার সাথে সাথে টেস্ট কেস তৈরি করা যায়।
অসুবিধাঃ
- স্পেসিফিকেশনের উপর ভিত্তি করে টেস্ট করার কারণে, শুধুমাত্র ইনপুট এবং সংশ্লিষ্ট আউটপুটের উপর বেশি জোর দেয়া হয়। ফলে সফটওয়্যারের অনেক unimplemented অংশ টেস্টিং-এর আওতায় আনা সম্ভব হয় না।
- স্পষ্ট স্পেসিফিকেশন ছাড়া, সঠিকভাবে টেস্ট কেস ডিজাইন করা যায় না।
লেখকঃ তামান্না নিশাত রিনি।