जब कोड व्यवसाय की भाषा बोलता है: BDD से परिचय
\n\nएक स्थिति की कल्पना करें: आपने कोड के दृष्टिकोण से एक आदर्श भुगतान मॉड्यूल लिखा है। सभी विधियाँ काम करती हैं, अपवादों को संभाला जाता है, यूनिट परीक्षण कवरेज 99% है। आप शैंपेन खोलते हैं, लेकिन मैनेजर आता है और कहता है: "हम ऑर्डर की पुष्टि से पहले पैसे क्यों काट रहे हैं?" और आप समझ जाते हैं — बग कोड में नहीं, बल्कि कार्य की समझ में है।
\n\nपरिचित लगता है? ऐसे मामलों के लिए ही BDD (Behaviour-Driven Development) मौजूद है — व्यवहार-संचालित विकास। यह सिर्फ एक और पद्धति नहीं है, बल्कि "चाहता हूँ कि यह काम करे" और "PHP पर इसे कैसे लागू करें" के बीच एक पुल है। यदि आप आवश्यकताओं के प्रत्येक स्पष्टीकरण के बाद तर्क को फिर से लिखने से थक गए हैं, तो यह लेख आपके लिए है।
\n\nइस सामग्री में, हम Behat फ्रेमवर्क का उपयोग करके PHP पर BDD को लागू करने का तरीका समझेंगे, वास्तविक परीक्षण लिखेंगे और समझेंगे कि यह कोड को कैसे स्वच्छ और संचार को पारदर्शी बनाता है।
\n\nBDD क्या है और यह TDD से कैसे अलग है?
\n\nबहुत से लोग Behaviour-Driven Development को सामान्य TDD (Test-Driven Development) के साथ भ्रमित करते हैं। और सच कहूँ तो, बाहरी रूप से वे समान हैं: दोनों में पहले परीक्षण लिखे जाते हैं। लेकिन अंतर फोकस में है।
\n\n- \n
- TDD — यह "कैसे जाँचें कि फ़ंक्शन सही संख्या लौटाता है" के बारे में है। परीक्षण प्रोग्रामर की भाषा में लिखे जाते हैं: assert, equals, mock। \n
- BDD — यह "एक विशिष्ट व्यावसायिक स्थिति में सिस्टम कैसे व्यवहार करता है" के बारे में है। परिदृश्य प्राकृतिक, लगभग मानवीय भाषा में लिखे जाते हैं। \n
PHP में BDD का मुख्य विचार संचार के लिए एक समान भाषा का उपयोग करना है। डेवलपर्स, परीक्षक और मैनेजर एक ही परिदृश्य पढ़ते हैं। और यदि इसमें लिखा है "उपयोगकर्ता बिना लॉगिन किए कार्ट में आइटम जोड़ता है", तो सभी इसे समान रूप से समझते हैं।
\n\nउपकरण: Behat और Gherkin
\n\nPHP की दुनिया में, BDD के लिए मुख्य उपकरण Behat है। यह एक फ्रेमवर्क है जो Gherkin भाषा में परिदृश्यों को पार्स करता है और उन्हें निष्पादन योग्य परीक्षणों में बदल देता है। Gherkin मुख्य कीवर्ड के साथ एक सरल अंग्रेजी (या हिंदी) भाषा है: Feature, Scenario, Given, When, Then।
आइए आपके PHP प्रोजेक्ट में Behat स्थापित करें:
\n\ncomposer require --dev behat/behat behat/mink-extension behat/mink-goutte-driver\n\nस्थापना के बाद, प्रोजेक्ट को आरंभ करें:
\n\nvendor/bin/behat --init\n\nसंरचना इस प्रकार दिखाई देगी:
\n\nfeatures/\n bootstrap/\n FeatureContext.php\n your_feature.feature\nbehat.yml\n\nPHP पर पहला BDD परिदृश्य लिखना
\n\nमान लीजिए कि हमारे पास एक ऑनलाइन स्टोर है। व्यावसायिक आवश्यकता: "पंजीकृत उपयोगकर्ता कार्ट में एक आइटम जोड़ सकता है और कुल राशि देख सकता है।" फ़ाइल features/cart.feature बनाएँ:
Feature: खरीदार की कार्ट\n एक पंजीकृत उपयोगकर्ता के रूप में\n मैं कार्ट में आइटम जोड़ना चाहता हूँ\n ताकि मैं कुल लागत देख सकूँ\n\n Scenario: एक आइटम जोड़ना\n Given मैं "ivan@example.com" उपयोगकर्ता के रूप में साइट पर जाता हूँ\n And कैटलॉग पेज पर 50000 रुपये का "लैपटॉप" आइटम है\n When मैं "लैपटॉप" आइटम के लिए "कार्ट में जोड़ें" पर क्लिक करता हूँ\n Then मुझे "आइटम जोड़ा गया" संदेश दिखाई देता है\n And कार्ट की कुल राशि 50000 रुपये है\n\nध्यान दें: यह परिदृश्य कोई भी मैनेजर PHP जाने बिना पढ़ सकता है। लेकिन Behat के लिए, यह एक निष्पादन योग्य परीक्षण है।
\n\nचरण परिभाषाएँ (Step Definitions) लागू करना
\n\nअब Behat को इन चरणों को समझना "सिखाना" होगा। features/bootstrap/FeatureContext.php खोलें:
<?php\n\nuse Behat\\Behat\\Context\\Context;\nuse Behat\\Gherkin\\Node\\PyStringNode;\nuse Behat\\Gherkin\\Node\\TableNode;\n\nclass FeatureContext implements Context\n{\n private $currentUser;\n private $cart = [];\n private $products = [];\n\n /**\n * @Given मैं साइट पर उपयोगकर्ता के रूप में जाता हूँ