مرحبا ويعطيكم العافية وأهلا وسهلا فيكم في درس جديد عن جداول القرار أو Decision Tables!
تخيل معي هالسيناريو: انت ويتر في مطعم، وعندك زبون جديد. ماذا تفكر فيه قبل لا تقرر كيف تريد أن تخدمه؟
كل واحد من هالأسئلة إله إجابة (نعم/لا)، وبناءً على المزيج من الإجابات، تتغيّر طريقة التعامل. هذا بالضبط لا نحاول نحلّه بجداول القرار!
في عالم البرمجيات، كثير من الأنظمة عندها منطق معقد (Complex Business Logic) يعتمد على مجموعة من الشروط اللي تتفاعل مع بعضها. جداول القرار هي أداة قوية جداً تساعدنا نغطي كل الاحتمالات بطريقة منظمة ومنهجية.
بنهاية هالدرس، ستكون قادراً على:
جدول القرار هو جدول يربط الشروط (Conditions) بالإجراءات (Actions) أو النتائج.
ببساطة، جدول القرار يساعدك تختبر كل الاحتمالات الممكنة عندما يكون عندك شروط متعددة تتفاعل مع بعضها حتى تعطي نتيجة معينة.
جداول القرار مثالية عندما يكون عندك:
أي جدول قرار يتكون من ثلاث مكونات رئيسية:
هي المدخلات أو الأسئلة التي إجابتها عادةً True/False أو Yes/No أو نعم/لا.
مثلاً:
هي النتائج أو التصرفات التي تصبح بناءً على الشروط.
مثلاً:
كل عمود في الجدول يمثل قاعدة (Rule)، وهي مزيج فريد من الشروط والنتيجة المترتبة عليها.
ملاحظة مهمة: إذا عندك
nشرط، سيكون عندك2^nقاعدة ممكنة (لأنه كل شرط إله احتمالين: صح أو خطأ).
خلينا ناخذ مثال واقعي: نظام خصومات في متجر إلكتروني زي Amazon أو تطبيق كارفور.
| القاعدة | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
|---|---|---|---|---|---|---|---|---|
| الشروط | ||||||||
| Premium؟ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| مبلغ > 100$؟ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
| Black Friday؟ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| الإجراءات | ||||||||
| نسبة الخصم | 20% | 15% | 10% | 5% | 10% | 5% | 5% | 0% |
كل قاعدة من القواعد الثمانية تتحول لحالة اختبار:
حالة اختبار R1:
حالة اختبار R8:
نظام تسجيل الدخول في أي موقع (Facebook, Instagram, Gmail) عنده منطق معقد قليلاً.
| القاعدة | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
|---|---|---|---|---|---|---|---|---|
| الشروط | ||||||||
| إيميل صحيح؟ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| باسورد صحيح؟ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
| حساب مفعّل؟ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| الإجراءات | ||||||||
| دخول ناجح | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| رسالة "حساب غير مفعّل" | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| رسالة "بيانات خاطئة" | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ملاحظة: القواعد R5, R6, R7, R8 كلها مستحيلة منطقياً (إذا الإيميل غلط، لن نقدر نتحقق من الباسورد أو حالة الحساب). هذه القواعد ممكن نحذفها أو نعتبرها "لا تنطبق".
عندما نبني جدول القرار، أحياناً نكتشف متطلبات ناقصة (Missing Requirements).
مثلاً: ماذا يصير عندما الإيميل صحيح والحساب مفعّل، لكن الباسورد غلط؟ (R3)
جداول القرار بتجبرك تفكر في كل الاحتمالات، وهذا يجعلك تكتشف حالات ما كانت واضحة من المتطلبات!
تخيل إنك تريد أن تحجز تذكرة على موقع Royal Jordanian أو أي شركة طيران.
| القاعدة | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
|---|---|---|---|---|---|---|---|---|
| الشروط | ||||||||
| مقاعد متوفرة؟ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| دفع ناجح؟ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
| جواز صالح؟ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| الإجراءات | ||||||||
| تأكيد الحجز | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| رسالة "حدّث الجواز" | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| رسالة "فشل الدفع" | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| قائمة انتظار | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| إلغاء الحجز | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
اسأل نفسك: ما هي المدخلات أو الأسئلة اللي تأثر على النتيجة؟
مثال (نظام شحن Amazon):
ما هي النتائج أو التصرفات اللي ممكن تصير؟
مثال:
عدد القواعد = 2^n
حيث n = عدد الشروط
مثال:
ابدأ بتعبئة الجدول بطريقة منهجية:
لكل مزيج من الشروط، حدد ما الإجراء أو النتيجة المتوقعة.
نصيحة: لو مش متأكد من النتيجة، هذه فرصة إنك تسأل صاحب المنتج (Product Owner) أو تراجع المتطلبات.
كل قاعدة في الجدول = حالة اختبار واحدة على الأقل.
جداول القرار مثالية في الحالات التالية:
نظام بسيط: "إذا العمر أقل من 18، ممنوع الدخول. إذا 18 أو أكثر، مسموح."
هذا ما بحتاج جدول قرار، هذا Equivalence Partitioning كافي:
رتب الشروط من الأهم للأقل أهمية. الشروط التي تأثر على معظم القواعد حطها أول.
مش كل القواعد منطقية! بعض المزيجات مستحيلة أو لا تنطبق.
مثال (نظام تسجيل دخول):
أحياناً، شرط معين ما بأثر على النتيجة في قاعدة معينة. بهاي الحالة، استخدم علامة - أو "Don't Care".
مثال:
| القاعدة | R1 | R2 |
|---|---|---|
| مسجل دخول؟ | ✅ | ❌ |
| Premium؟ | ✅ | - |
| الإجراء | عرض محتوى Premium | طلب تسجيل دخول |
في R2، مش مهم إذا Premium ولا لا، لأنه أصلاً مش مسجل دخول!
مش كل القواعد لها نفس الأهمية. ركز جهودك على:
جداول القرار أداة تواصل ممتازة. اعرضها على:
حان وقت التطبيق! خلينا نبني جدول قرار لنظام Netflix.
عندما مستخدم بدّه يشغل فيلم أو مسلسل على Netflix، النظام يفحص:
| القاعدة | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
|---|---|---|---|---|---|---|---|---|
| الشروط | ||||||||
| مشترك؟ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| متوفر في المنطقة؟ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
| العمر مناسب؟ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| الإجراءات | ||||||||
| Play ▶️ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Age Restriction 🔞 | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Unavailable 🌍 | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Upgrade 💳 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
TC-R1: مشترك + متوفر + عمر مناسب = تشغيل ناجح
Given: مستخدم مشترك في Netflix Basic
And: المحتوى "Stranger Things" متوفر في الأردن
And: عمر المستخدم 25 سنة (المحتوى TV-14)
When: المستخدم يضغط Play
Then: المحتوى يبدأ التشغيل بنجاحTC-R2: مشترك + متوفر + عمر غير مناسب = قيد عمري
Given: مستخدم مشترك (عمره 14 سنة)
And: المحتوى "Breaking Bad" متوفر (تصنيف TV-MA, 18+)
When: المستخدم يضغط Play
Then: رسالة "هذا المحتوى مخصص للبالغين فقط"TC-R5: غير مشترك + متوفر + عمر مناسب = طلب اشتراك
Given: مستخدم غير مشترك (Free Account)
And: المحتوى متوفر في منطقته
When: المستخدم يضغط Play
Then: رسالة "اشترك الآن لمشاهدة هذا المحتوى" + عرض باقات الاشتراكممكن نستخدم "Don't Care" لتبسيط بعض القواعد:
| القاعدة | R1 | R2 | R3 |
|---|---|---|---|
| مشترك؟ | ✅ | ✅ | ❌ |
| متوفر؟ | ✅ | ❌ | - |
| عمر مناسب؟ | ✅ | - | - |
| الإجراء | Play ▶️ | Unavailable 🌍 | Upgrade 💳 |
لاحظ إن في R3 (غير مشترك)، مش مهم إذا المحتوى متوفر أو العمر مناسب، لأنه أصلاً لن يقدر يشوف!
جداول القرار هي أداة قوية جداً لاختبار الأنظمة التي فيها منطق معقد.
✅ جدول القرار = شروط + إجراءات + قواعد
✅ مثالي عندما الشروط تتفاعل مع بعض وتعطي نتائج مختلفة
✅ يساعدك تغطي كل الاحتمالات ولا تنسَ أي حالة
✅ يكشف متطلبات ناقصة عندما تبني الجدول
✅ استخدمه مع ECP و BVA حتى تغطية شاملة
✅ مش مناسب لكل شي - عدد الشروط الكبير = عدد قواعد ضخم
✅ ركز على القواعد عالية المخاطر اللي فيها أموال أو أمان
✅ استخدم "Don't Care" لتبسيط الجدول
عدد الشروط (n) → عدد القواعد (2^n) → عدد حالات الاختباراستخدم جداول القرار عندما يكون المنطق معقد والشروط متداخلة وحاجة تغطية شاملة.
لا تستخدمه عندما يكون المنطق بسيط أو الشروط مستقلة أو العدد كبير جداً.
مصادر إضافية:
يعطيكم العافية، ونلتقي في الدرس الجاي! 🚀