টেস্ট ডাবল

From binaryoption
Jump to navigation Jump to search
Баннер1

টেস্ট ডাবল

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

টেস্ট ডাবল কী?

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

টেস্ট ডাবল বিভিন্ন ধরনের হতে পারে, যেমন:

  • ডামি অবজেক্ট (Dummy Object): এটি একটি সাধারণ অবজেক্ট যা কোনো আচরণ করে না, কেবল একটি স্থান পূরণ করে।
  • স্টাব (Stub): স্টাব একটি নির্দিষ্ট ইনপুটের জন্য একটি নির্দিষ্ট আউটপুট প্রদান করে। এটি সাধারণত নির্ভরতার একটি সরলীকৃত সংস্করণ।
  • মক (Mock): মক হলো একটি অবজেক্ট যার আচরণ যাচাই করা যায়। এটি পরীক্ষা করার জন্য নির্দিষ্ট সংখ্যকবার কল করা হয়েছে কিনা, তা নিশ্চিত করে।
  • স্পাই (Spy): স্পাই একটি বাস্তব অবজেক্টের চারপাশে মোড়ানো থাকে এবং এর কলগুলি পর্যবেক্ষণ করে।

কেন টেস্ট ডাবল ব্যবহার করা হয়?

টেস্ট ডাবল ব্যবহারের প্রধান কারণগুলো হলো:

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

টেস্ট ডাবলের প্রকারভেদ

বিভিন্ন পরিস্থিতিতে বিভিন্ন ধরনের টেস্ট ডাবল ব্যবহার করা হয়। নিচে কয়েকটি প্রধান প্রকারভেদ আলোচনা করা হলো:

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

টেস্ট ডাবল কিভাবে তৈরি করা হয়?

টেস্ট ডাবল তৈরি করার জন্য বিভিন্ন প্রোগ্রামিং ভাষা এবং টেস্টিং ফ্রেমওয়ার্কে বিভিন্ন টুল এবং লাইব্রেরি রয়েছে। কিছু জনপ্রিয় উদাহরণ হলো:

  • Mockito (Java): জাভার জন্য একটি জনপ্রিয় মকিং ফ্রেমওয়ার্ক।
  • Moq (.NET): .NET-এর জন্য একটি মকিং লাইব্রেরি।
  • pytest-mock (Python): পাইথনের জন্য একটি মকিং প্লাগইন।
  • Jest (JavaScript): জাভাস্ক্রিপ্টের জন্য একটি টেস্টিং ফ্রেমওয়ার্ক যাতে মকিংয়ের সুবিধা রয়েছে।

টেস্ট ডাবল তৈরি করার সময়, নিম্নলিখিত বিষয়গুলি বিবেচনা করা উচিত:

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

টেস্ট ডাবল ব্যবহারের উদাহরণ

ধরা যাক, একটি `OrderProcessor` ক্লাস আছে যা একটি `PaymentGateway` ক্লাসের উপর নির্ভরশীল। `OrderProcessor` ক্লাসের ইউনিট পরীক্ষা করার জন্য, আমরা `PaymentGateway` ক্লাসের একটি মক তৈরি করতে পারি। এই মকটি `processPayment` পদ্ধতির কলগুলি যাচাই করতে পারে এবং নিশ্চিত করতে পারে যে `OrderProcessor` সঠিক পরিমাণ এবং তথ্য দিয়ে পেমেন্ট প্রসেস করার চেষ্টা করছে।

```java // PaymentGateway ইন্টারফেস interface PaymentGateway {

   boolean processPayment(double amount, String creditCardNumber);

}

// OrderProcessor ক্লাস class OrderProcessor {

   private PaymentGateway paymentGateway;
   public OrderProcessor(PaymentGateway paymentGateway) {
       this.paymentGateway = paymentGateway;
   }
   public boolean processOrder(double amount, String creditCardNumber) {
       return paymentGateway.processPayment(amount, creditCardNumber);
   }

}

// PaymentGateway এর মক class MockPaymentGateway extends PaymentGateway {

   private boolean processPaymentCalled;
   private double amount;
   private String creditCardNumber;
   @Override
   public boolean processPayment(double amount, String creditCardNumber) {
       this.processPaymentCalled = true;
       this.amount = amount;
       this.creditCardNumber = creditCardNumber;
       return true; // সর্বদা সফল হিসেবে ধরে নিচ্ছি
   }
   public boolean wasProcessPaymentCalled() {
       return processPaymentCalled;
   }
   public double getAmount() {
       return amount;
   }
   public String getCreditCardNumber() {
       return creditCardNumber;
   }

}

// পরীক্ষা public class OrderProcessorTest {

   @Test
   public void testProcessOrder() {
       MockPaymentGateway mockPaymentGateway = new MockPaymentGateway();
       OrderProcessor orderProcessor = new OrderProcessor(mockPaymentGateway);
       boolean result = orderProcessor.processOrder(100.0, "1234567890");
       assertTrue(result);
       assertTrue(mockPaymentGateway.wasProcessPaymentCalled());
       assertEquals(100.0, mockPaymentGateway.getAmount());
       assertEquals("1234567890", mockPaymentGateway.getCreditCardNumber());
   }

} ```

এই উদাহরণে, `MockPaymentGateway` একটি টেস্ট ডাবল যা `PaymentGateway` ইন্টারফেসের বাস্তবায়ন করে। এটি `processPayment` পদ্ধতির কলগুলি পর্যবেক্ষণ করে এবং পরীক্ষার ক্ষেত্রে যাচাই করার জন্য তথ্য সরবরাহ করে।

টেস্ট ডাবলের সুবিধা এবং অসুবিধা

টেস্ট ডাবল ব্যবহারের কিছু সুবিধা এবং অসুবিধা নিচে উল্লেখ করা হলো:

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

কখন টেস্ট ডাবল ব্যবহার করা উচিত?

টেস্ট ডাবল নিম্নলিখিত পরিস্থিতিতে ব্যবহার করা উচিত:

  • যখন কোনো নির্ভরতা ধীরগতির বা জটিল হয়।
  • যখন কোনো নির্ভরতা অপ্রত্যাশিতভাবে ব্যর্থ হতে পারে।
  • যখন একটি ইউনিটের আচরণকে isolate করে পরীক্ষা করার প্রয়োজন হয়।
  • যখন তৃতীয় পক্ষের API ব্যবহারের খরচ কমাতে হয়।
  • যখন পরীক্ষার পরিবেশ তৈরি করা কঠিন হয়।

টেস্ট ডাবল এবং অন্যান্য টেস্টিং কৌশল

টেস্ট ডাবল অন্যান্য টেস্টিং কৌশলের সাথে সমন্বিতভাবে ব্যবহার করা যেতে পারে, যেমন:

  • TDD (Test-Driven Development): টেস্ট ডাবল TDD-এর একটি অপরিহার্য অংশ, যেখানে প্রথমে পরীক্ষা লেখা হয় এবং তারপর কোড লেখা হয়।
  • BDD (Behavior-Driven Development): মক এবং স্টাব BDD-তে ব্যবহারকারীর আচরণ যাচাই করতে সহায়ক।
  • ইন্টিগ্রেশন টেস্টিং: স্টাব ইন্টিগ্রেশন টেস্টিং-এর সময় বিভিন্ন কম্পোনেন্টের মধ্যে মিথস্ক্রিয়া পরীক্ষা করতে ব্যবহৃত হয়।
  • সিস্টেম টেস্টিং: যদিও সিস্টেম টেস্টিং-এ টেস্ট ডাবল কম ব্যবহৃত হয়, তবে কিছু ক্ষেত্রে জটিল নির্ভরতাগুলিকে প্রতিস্থাপন করতে এটি সহায়ক হতে পারে।

উপসংহার

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

এখনই ট্রেডিং শুরু করুন

IQ Option-এ নিবন্ধন করুন (সর্বনিম্ন ডিপোজিট $10) Pocket Option-এ অ্যাকাউন্ট খুলুন (সর্বনিম্ন ডিপোজিট $5)

আমাদের সম্প্রদায়ে যোগ দিন

আমাদের টেলিগ্রাম চ্যানেলে যোগ দিন @strategybin এবং পান: ✓ দৈনিক ট্রেডিং সংকেত ✓ একচেটিয়া কৌশলগত বিশ্লেষণ ✓ বাজারের প্রবণতা সম্পর্কে বিজ্ঞপ্তি ✓ নতুনদের জন্য শিক্ষামূলক উপকরণ

Баннер