BDD على PHP: كتابة كود يفهمه العمل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا لا يعمل الكود إذا قال العمل "كل شيء صحيح"؟

\n\n

هل سبق لك أن واجهت موقفًا: يؤكد المدير أن المهمة قد حُلّت، واجتازت الاختبارات بنجاح، ولكن المستخدم لا يزال غير راضٍ؟ كلاسيكي. المشكلة ليست في الكود — المشكلة في التواصل. نحن نتحدث بلغات مختلفة: العمل يتعامل مع السيناريوهات، بينما المطورون يتعاملون مع الدوال والفئات. هنا يأتي دور BDD (التطوير القائم على السلوك) — التطوير من خلال السلوك. ونعم، يعمل هذا بشكل رائع على PHP.

\n\n

في هذه المقالة، سنفهم كيف يساعد BDD على PHP في تحويل "الرغبات" الغامضة إلى اختبارات واضحة يفهمها كل من المدير والمبرمج. ستتعرف على الفرق بين BDD و TDD العادي، وكيفية كتابة السيناريوهات بلغة Gherkin، وما هي الأدوات (Behat, PHPSpec) التي تبسط الحياة حقًا.

\n\n

ما هو BDD بكلمات بسيطة؟

\n\n

BDD (التطوير القائم على السلوك) هو تطور لـ TDD. إذا كان TDD يركز على "كيفية اختبار الكود"، فإن BDD يجيب على السؤال "ماذا يجب أن يفعل الكود ليكون العمل سعيدًا".

\n\n

تخيل أنك تكتب متجرًا إلكترونيًا. بدلاً من اختبار مجرد مثل "يجب أن تقلل الدالة 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

أدوات BDD لـ PHP: اختر سلاحك

\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.

\n\n

كتابة أول سيناريو BDD على PHP مع Behat

\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: كتابة ملف feature بلغة Gherkin

\n\n

ننشئ ملف features/discount.feature:

\n\n
Feature: حساب الخصم للعملاء المخلصين\n  As a مدير مبيعات\n  I want to تقديم خصم 10% على الطلبات من 5000 روبل\n  So that تحفيز المشتريات الكبيرة\n\n  Scenario: الطلب يتجاوز حد الخصم\n    Given في سلة التسوق منتجات بقيمة 6000 روبل\n    When أطلب التكلفة الإجمالية\n    Then يجب أن تكون التكلفة الإجمالية                

المدونات

توصيات الكتب