कोड काम क्यों नहीं करता, जब बिज़नेस कहता है "सब सही है"?
\n\nक्या आपने कभी ऐसी स्थिति देखी है: मैनेजर कहता है कि काम हो गया, टेस्ट पास हो रहे हैं, लेकिन यूज़र फिर भी खुश नहीं है? यह एक क्लासिक समस्या है। असली समस्या कोड में नहीं, बल्कि कम्युनिकेशन में है। हम अलग-अलग भाषाएँ बोलते हैं: बिज़नेस सीनारियो में सोचता है, जबकि डेवलपर मेथड और क्लासेज़ में। यहाँ BDD (Behaviour-Driven Development) काम आता है — यानी व्यवहार-आधारित डेवलपमेंट। और हाँ, PHP पर यह शानदार काम करता है।
\n\nइस आर्टिकल में हम समझेंगे कि PHP में BDD कैसे अस्पष्ट "चाहतों" को स्पष्ट टेस्ट में बदलता है, जिसे मैनेजर और प्रोग्रामर दोनों समझ सकें। आप जानेंगे कि BDD सामान्य TDD से कैसे अलग है, Gherkin में सीनारियो कैसे लिखें, और कौन से टूल (Behat, PHPSpec) वास्तव में जीवन को आसान बनाते हैं।
\n\nBDD को सरल शब्दों में समझें
\n\nBDD (Behaviour-Driven Development) TDD का एक विकसित रूप है। अगर TDD इस बात पर फोकस करता है कि "कोड को कैसे टेस्ट करें", तो BDD इस सवाल का जवाब देता है कि "कोड को क्या करना चाहिए ताकि बिज़नेस खुश रहे"।
\n\nमान लीजिए आप एक ऑनलाइन शॉप बना रहे हैं। एक सामान्य टेस्ट "method applyDiscount() से कीमत कम होनी चाहिए" लिखने के बजाय, आप एक सीनारियो लिखते हैं:
\n\n- \n
- दिया गया है: कार्ट में 1000 रुपये का सामान है \n
- जब: यूज़र "SALE10" प्रोमो कोड डालता है \n
- तब: कार्ट की कुल कीमत 900 रुपये हो जाती है \n
यह सीनारियो कोई भी पढ़ सकता है — मार्केटर से लेकर टीम लीड तक। कोई जादू नहीं, सिर्फ सिस्टम का व्यवहार।
\n\nBDD vs TDD: क्या अंतर है?
\n\nकई लोग इन दोनों को भ्रमित करते हैं। आइए स्पष्ट करते हैं:
\n\n- \n
- TDD — पहले टेस्ट लिखें, फिर कोड, फिर रिफैक्टर करें। टेस्ट डेवलपर द्वारा डेवलपर के लिए लिखे जाते हैं। \n
- BDD — पहले प्राकृतिक भाषा में व्यवहार का सीनारियो लिखें, फिर उसे ऑटोमेट करें। सीनारियो बिज़नेस के साथ बातचीत में लिखे जाते हैं। \n
BDD TDD को रद्द नहीं करता, बल्कि उसे पूरा करता है। आप अभी भी यूनिट टेस्ट लिखते हैं, लेकिन अब आपके पास सीनारियो के रूप में "लाइव डॉक्यूमेंटेशन" भी है।
\n\nPHP के लिए BDD टूल: सही हथियार चुनें
\n\nPHP इकोसिस्टम में व्यवहार-आधारित डेवलपमेंट के लिए दो मुख्य टूल हैं: Behat और PHPSpec। ये अलग-अलग समस्याओं को हल करते हैं।
\n\nBehat — ऑल-राउंडर
\n\nBehat एक एक्सेप्टेंस टेस्टिंग फ्रेमवर्क है। यह Gherkin भाषा (वही "दिया गया है-जब-तब") के साथ काम करता है। Behat इंटीग्रेशन टेस्ट, API टेस्ट, वेब इंटरफ़ेस और ऊपरी स्तर की बिज़नेस लॉजिक के लिए आदर्श है।
\n\nPHPSpec — डेवलपर का माइक्रोस्कोप
\n\nPHPSpec क्लास स्पेसिफिकेशन का टूल है। यह TDD के करीब है, लेकिन BDD की फिलॉसफी के साथ: आप ऑब्जेक्ट के व्यवहार का वर्णन करते हैं, न कि उसके अंदरूनी हिस्सों का। PHPSpec डोमेन लॉजिक के यूनिट टेस्टिंग के लिए बहुत अच्छा है।
\n\nइस आर्टिकल में हम Behat पर फोकस करेंगे, क्योंकि यह PHP में behaviour-driven development को सबसे अच्छे से दिखाता है।
\n\nPHP में Behat के साथ पहला BDD सीनारियो लिखें
\n\nचलिए एक रियल उदाहरण बनाते हैं। मान लीजिए हम एक लॉयल्टी सिस्टम बना रहे हैं। ग्राहक को 10% की छूट मिलती है अगर ऑर्डर की राशि 5000 रुपये से अधिक हो।
\n\nचरण 1: Behat इंस्टॉल करें
\n\ncomposer require --dev behat/behat\n\nफिर प्रोजेक्ट को इनिशियलाइज़ करें:
\n\nvendor/bin/behat --init\n\nस्ट्रक्चर कुछ इस तरह होगी:
\n\nfeatures/\n bootstrap/\n FeatureContext.php\n discount.feature\n\nचरण 2: Gherkin में feature फ़ाइल लिखें
\n\nfeatures/discount.feature फ़ाइल बनाएँ:
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