Behavior Driven Development (BDD) একটি সফটওয়্যার ডেভেলপমেন্ট পদ্ধতি যা সফটওয়্যারটির আচরণ এবং ইউজার এক্সপেরিয়েন্সের উপর গুরুত্ব দেয়। এই পদ্ধতিতে সফটওয়্যার টেস্টিংকে প্রাধান্য দেয়া হয় এবং টেস্ট কেসগুলি এমনভাবে লেখা হয় যেন তারা প্রকল্পের আচরণ সম্পর্কিত বিবরণ দেয়। JasmineJS একটি BDD টেস্টিং ফ্রেমওয়ার্ক, যার মাধ্যমে আপনি টেস্টগুলো লিখতে পারেন এমনভাবে যে এগুলো একটি নির্দিষ্ট বেহেভিয়ার ভিত্তিক ড্রাইভিং ফোর্স হিসেবে কাজ করবে।
JasmineJS এর মাধ্যমে BDD অনুসরণের মূল লক্ষ্য হচ্ছে পরিষ্কার এবং পাঠযোগ্য টেস্ট কেস লেখা, যা সবার জন্য সহজে বোধগম্য এবং এক্সপ্রেসিভ। JasmineJS এর describe(), it(), beforeEach(), এবং afterEach() ফাংশনগুলো মূলত BDD স্টাইলের টেস্ট লেখার জন্য ব্যবহৃত হয়।
BDD কি এবং কেন?
BDD হল একটি উন্নত টেস্টিং পদ্ধতি যা নির্দিষ্ট আউটপুট এবং কর্মক্ষমতার জন্য সফটওয়্যারটি কীভাবে আচরণ করবে তা নিশ্চিত করার জন্য ব্যবহার করা হয়। এটি এক্সপ্রেসিভ টেস্ট কেস লেখার পদ্ধতি এবং মূলত ইংরেজি ভাষার মতো সহজবোধ্য টেস্টিং উপস্থাপন করার চেষ্টা করে।
describe(): একটি গোষ্ঠী বা স্যুট হিসেবে একটি ফিচার বা কাজের বিবরণ।it(): টেস্টের উপস্থাপন, যা স্পেসিফিক অ্যাকশন বা আচরণের বিবরণ দেয়।beforeEach()এবংafterEach(): টেস্ট শুরু বা শেষে নির্দিষ্ট কাজ সম্পন্ন করার জন্য।
JasmineJS এ BDD অনুসরণ করা
JasmineJS এর মাধ্যমে BDD পদ্ধতি অনুসরণ করতে, প্রথমে টেস্ট কেস গুলি লেখার জন্য describe() এবং it() ব্লক ব্যবহার করা হয়। এগুলো টেস্টের ধরন এবং আচরণ বুঝিয়ে দেয়।
describe() ব্লক
describe() ব্লকটি একটি টেস্ট স্যুটের জন্য ব্যবহৃত হয়। এটি সাধারণত একটি বৈশিষ্ট্য, ফিচার বা টেস্টের পুরো গ্রুপ বা সেট নির্দেশ করে। describe() ব্লক এর মধ্যে একাধিক it() ব্লক থাকতে পারে, যেগুলি এক এক করে টেস্ট কেসগুলো চালায়।
describe("User login", function() {
it("should allow a user to log in with valid credentials", function() {
// Test code for logging in with valid credentials
});
it("should show an error message for invalid credentials", function() {
// Test code for handling invalid credentials
});
});
এখানে describe() ব্লকে “User login” একটি বৈশিষ্ট্য হিসেবে নির্ধারণ করা হয়েছে, যার অধীনে দুটি আলাদা টেস্ট কেস রয়েছে।
it() ব্লক
it() ব্লকটি একটি নির্দিষ্ট অ্যাসার্ট বা একশন চালানোর জন্য ব্যবহৃত হয় এবং সেই একশনের প্রত্যাশিত ফলাফল নির্ধারণ করে। এটি BDD এর গন্তব্য বা আচরণ বর্ণনা করে।
describe("User login", function() {
it("should allow a user to log in with valid credentials", function() {
// Expectation: User should be able to log in
expect(user.login("validUser", "validPass")).toBe(true);
});
it("should show an error message for invalid credentials", function() {
// Expectation: User should not be able to log in with invalid credentials
expect(user.login("invalidUser", "invalidPass")).toBe(false);
});
});
এখানে it() ব্লক দুটি নির্দিষ্ট আচরণ বর্ণনা করছে:
- Valid credentials এর জন্য লগ ইন সফল হবে।
- Invalid credentials এর জন্য লগ ইন ব্যর্থ হবে এবং একটি এরর মেসেজ দেখাবে।
beforeEach() এবং afterEach() ফাংশন
beforeEach() এবং afterEach() ফাংশনগুলি প্রত্যেকটি টেস্ট কেসের আগে বা পরে নির্দিষ্ট কিছু কাজ করার জন্য ব্যবহৃত হয়। এগুলো টেস্ট কেসের প্রস্তুতির জন্য বা টেস্টের পরে পরিস্কার করার জন্য খুব উপকারী।
beforeEach(): প্রতিটি টেস্ট কেসের আগে কিছু এক্সিকিউট করার জন্য।afterEach(): প্রতিটি টেস্ট কেসের পরে কিছু এক্সিকিউট করার জন্য।
উদাহরণ:
describe("User login", function() {
let user;
beforeEach(function() {
user = new User(); // User অবজেক্ট তৈরি
});
it("should allow a user to log in with valid credentials", function() {
expect(user.login("validUser", "validPass")).toBe(true);
});
it("should show an error message for invalid credentials", function() {
expect(user.login("invalidUser", "invalidPass")).toBe(false);
});
afterEach(function() {
user = null; // টেস্ট শেষে অবজেক্ট ক্লিন আপ
});
});
এখানে:
beforeEach(): প্রতিটি টেস্ট কেসের আগে নতুনUserঅবজেক্ট তৈরি হচ্ছে।afterEach(): প্রতিটি টেস্ট কেসের পরে অবজেক্টটি ক্লিন আপ করা হচ্ছে।
BDD স্টাইলে টেস্ট লেখার সুবিধা
- বোধগম্য এবং এক্সপ্রেসিভ টেস্টিং: BDD স্টাইলের টেস্ট কেস সাধারণত আরো বোধগম্য এবং সহজে পড়া যায়, যা উন্নয়নকারী, টেস্টার এবং ব্যবসায়িক পক্ষের জন্য সুবিধাজনক।
- ইংরেজি ভাষায় লেখা: BDD টেস্ট কেস প্রায়ই ইংরেজি ভাষায় লেখা হয় যা গঠনমূলক এবং সবার জন্য বোধগম্য।
- মনে রাখার সহজতা: BDD পদ্ধতি আপনার টেস্ট কেসগুলি মানুষের মতো সহজ ভাষায় লিখতে সহায়তা করে, ফলে সেগুলি বুঝতে সহজ হয়।
- কাস্টম আচরণের পরীক্ষা: আপনি নির্দিষ্ট আচরণের জন্য কাস্টম টেস্ট কেস তৈরি করতে পারবেন, যেগুলি প্রকৃত ব্যবসায়িক উদ্দেশ্য এবং ব্যবহারকারী অভিজ্ঞতা (UX) অনুযায়ী সংজ্ঞায়িত হবে।
সারাংশ
- BDD (Behavior Driven Development) একটি ডেভেলপমেন্ট পদ্ধতি যা ফিচার বা সফটওয়্যার সিস্টেমের আচরণ ভিত্তিক টেস্টিং নিয়ে কাজ করে।
- JasmineJS BDD স্টাইলের টেস্টিং সমর্থন করে এবং
describe(),it(),beforeEach(), এবংafterEach()ফাংশনগুলির মাধ্যমে টেস্ট কেস লেখাকে আরও এক্সপ্রেসিভ এবং বোধগম্য করে তোলে। - BDD স্টাইলে টেস্টিং আপনাকে পরিষ্কার, পুনঃব্যবহারযোগ্য এবং সহজভাবে বোধগম্য টেস্ট কেস তৈরি করতে সাহায্য করে, যা প্রকল্পের আচরণ এবং ব্যবহারের অভিজ্ঞতার উপর ভিত্তি করে হয়।
Read more