PHP में BDD: ऐसा कोड जो बिज़नेस को समझे

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

कोड काम क्यों नहीं करता, जब बिज़नेस कहता है "सब सही है"?

\n\n

क्या आपने कभी ऐसी स्थिति देखी है: मैनेजर कहता है कि काम हो गया, टेस्ट पास हो रहे हैं, लेकिन यूज़र फिर भी खुश नहीं है? यह एक क्लासिक समस्या है। असली समस्या कोड में नहीं, बल्कि कम्युनिकेशन में है। हम अलग-अलग भाषाएँ बोलते हैं: बिज़नेस सीनारियो में सोचता है, जबकि डेवलपर मेथड और क्लासेज़ में। यहाँ BDD (Behaviour-Driven Development) काम आता है — यानी व्यवहार-आधारित डेवलपमेंट। और हाँ, PHP पर यह शानदार काम करता है।

\n\n

इस आर्टिकल में हम समझेंगे कि PHP में BDD कैसे अस्पष्ट "चाहतों" को स्पष्ट टेस्ट में बदलता है, जिसे मैनेजर और प्रोग्रामर दोनों समझ सकें। आप जानेंगे कि BDD सामान्य TDD से कैसे अलग है, Gherkin में सीनारियो कैसे लिखें, और कौन से टूल (Behat, PHPSpec) वास्तव में जीवन को आसान बनाते हैं।

\n\n

BDD को सरल शब्दों में समझें

\n\n

BDD (Behaviour-Driven Development) TDD का एक विकसित रूप है। अगर TDD इस बात पर फोकस करता है कि "कोड को कैसे टेस्ट करें", तो BDD इस सवाल का जवाब देता है कि "कोड को क्या करना चाहिए ताकि बिज़नेस खुश रहे"।

\n\n

मान लीजिए आप एक ऑनलाइन शॉप बना रहे हैं। एक सामान्य टेस्ट "method applyDiscount() से कीमत कम होनी चाहिए" लिखने के बजाय, आप एक सीनारियो लिखते हैं:

\n\n
    \n
  • दिया गया है: कार्ट में 1000 रुपये का सामान है
  • \n
  • जब: यूज़र "SALE10" प्रोमो कोड डालता है
  • \n
  • तब: कार्ट की कुल कीमत 900 रुपये हो जाती है
  • \n
\n\n

यह सीनारियो कोई भी पढ़ सकता है — मार्केटर से लेकर टीम लीड तक। कोई जादू नहीं, सिर्फ सिस्टम का व्यवहार।

\n\n

BDD vs TDD: क्या अंतर है?

\n\n

कई लोग इन दोनों को भ्रमित करते हैं। आइए स्पष्ट करते हैं:

\n\n
    \n
  • TDD — पहले टेस्ट लिखें, फिर कोड, फिर रिफैक्टर करें। टेस्ट डेवलपर द्वारा डेवलपर के लिए लिखे जाते हैं।
  • \n
  • BDD — पहले प्राकृतिक भाषा में व्यवहार का सीनारियो लिखें, फिर उसे ऑटोमेट करें। सीनारियो बिज़नेस के साथ बातचीत में लिखे जाते हैं।
  • \n
\n\n

BDD TDD को रद्द नहीं करता, बल्कि उसे पूरा करता है। आप अभी भी यूनिट टेस्ट लिखते हैं, लेकिन अब आपके पास सीनारियो के रूप में "लाइव डॉक्यूमेंटेशन" भी है।

\n\n

PHP के लिए BDD टूल: सही हथियार चुनें

\n\n

PHP इकोसिस्टम में व्यवहार-आधारित डेवलपमेंट के लिए दो मुख्य टूल हैं: Behat और PHPSpec। ये अलग-अलग समस्याओं को हल करते हैं।

\n\n

Behat — ऑल-राउंडर

\n\n

Behat एक एक्सेप्टेंस टेस्टिंग फ्रेमवर्क है। यह Gherkin भाषा (वही "दिया गया है-जब-तब") के साथ काम करता है। Behat इंटीग्रेशन टेस्ट, API टेस्ट, वेब इंटरफ़ेस और ऊपरी स्तर की बिज़नेस लॉजिक के लिए आदर्श है।

\n\n

PHPSpec — डेवलपर का माइक्रोस्कोप

\n\n

PHPSpec क्लास स्पेसिफिकेशन का टूल है। यह TDD के करीब है, लेकिन BDD की फिलॉसफी के साथ: आप ऑब्जेक्ट के व्यवहार का वर्णन करते हैं, न कि उसके अंदरूनी हिस्सों का। PHPSpec डोमेन लॉजिक के यूनिट टेस्टिंग के लिए बहुत अच्छा है।

\n\n

इस आर्टिकल में हम Behat पर फोकस करेंगे, क्योंकि यह PHP में behaviour-driven development को सबसे अच्छे से दिखाता है।

\n\n

PHP में Behat के साथ पहला BDD सीनारियो लिखें

\n\n

चलिए एक रियल उदाहरण बनाते हैं। मान लीजिए हम एक लॉयल्टी सिस्टम बना रहे हैं। ग्राहक को 10% की छूट मिलती है अगर ऑर्डर की राशि 5000 रुपये से अधिक हो।

\n\n

चरण 1: Behat इंस्टॉल करें

\n\n
composer require --dev behat/behat
\n\n

फिर प्रोजेक्ट को इनिशियलाइज़ करें:

\n\n
vendor/bin/behat --init
\n\n

स्ट्रक्चर कुछ इस तरह होगी:

\n\n
features/\n  bootstrap/\n    FeatureContext.php\n  discount.feature
\n\n

चरण 2: Gherkin में feature फ़ाइल लिखें

\n\n

features/discount.feature फ़ाइल बनाएँ:

\n\n
Feature: लॉयल ग्राहकों के लिए छूट की गणना\n  As a सेल्स मैनेजर\n  I want to 5000 रुपये से अधिक के ऑर्डर पर 10% छूट देना\n  So that बड़ी खरीदारी को प्रोत्साहित करना\n\n  Scenario: ऑर्डर छूट की सीमा से अधिक है\n    Given कार्ट में 6000 रुपये का सामान है\n    When मैं कुल कीमत का अनुरोध करता हूँ\n    Then कुल कीमत 5400 रुपये होनी चाहिए\n                

ब्लॉग

पुस्तक अनुशंसाएँ