সফটওয়্যার টেস্টিংঃ 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 অংশ টেস্টিং-এর আওতায় আনা সম্ভব হয় না।
  • স্পষ্ট স্পেসিফিকেশন ছাড়া, সঠিকভাবে টেস্ট কেস ডিজাইন করা যায় না।

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

ক্যারিয়ার এডভাইজ – ২

সফটওয়্যার টেস্টিং
প্রোগ্রামার যারা, তারা সফটওয়্যার তৈরি করবে এবং তৈরি করার পর (খুব ছোট সফটওয়্যার না হলে) সেই সফটওয়্যারে অনেক বাগ থাকে, সমস্যা থাকে, অন্যান্য ইস্যু থাকে। গ্রাহককে সফটওয়্যার দেওয়ার আগে এগুলো টেস্ট করে বাগগুলো দূর করতে হয় এবং তারপর গ্রাহককে দিতে হয়। তাই প্রায় যেকোনো সফটওয়্যার কোম্পানিতে সফটওয়্যার টেস্টারদের প্রয়োজন। তুমি যে কমার্শিয়াল সফটওয়্যার দেখ বা ব্যবহার কর, এটা অবশ্যই টেস্টিং হয়ে এসেছে। কাজেই যেই পরিমান প্রোগ্রামার প্রয়োজন প্রায় সেই পরিমান টেস্টারও প্রয়োজন।

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

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

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

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

3666796961_0ab03e7c49

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

প্রোজেক্ট ম্যানেজমেন্ট
এই ফিল্ডেও আইটি ও ননআইটি ব্যাকগ্রাউন্ড থেকে লোকজন আসে। কিন্তু আইটি থেকে আসলে আলাদা সুবিধা পাওয়া যায়।

পরবর্তী পর্ব পড়তে এখানে ক্লিক করুন

প্রথম পর্ব পড়তে এখানে ক্লিক করুন

বিশেষ দ্রষ্টব্য : থেরাপ সার্ভিসেস লিমিটেড কর্তৃক আয়োজিত নিয়মিত ওয়েবিনারের একটি পর্ব ছিল প্রোগ্রামিং ক্যারিয়ার নিয়ে। সেখানে বক্তা ছিলেন থেরাপের প্রধান কারিগরি কর্মকর্তা (সিটিও) মোজাহেদুল হক আবুল হাসনাত (মাসুম)। থেরাপ কর্তৃপক্ষের অনুমতিক্রমে সেই ওয়েবিনার থেকে টেক্সটে রূপান্তর করে আমার ব্লগের পাঠকদের জন্য পোস্ট করলাম।