اختبار جداول القرار

اختبار جداول القرار (Decision Table Testing) تقنية لتصميم الاختبار من نوع الصندوق الأسود، تُستخدم مع القواعد التي تحدد فيها تركيبةٌ من الشروط النتيجة. تشكّل الشروط والإجراءات الصفوف، وكل عمود قاعدة قرار (Decision Rule): تركيبة واحدة من قيم الشروط مع إجراءاتها. فعبارة «التحويلات إلى مستفيد محفوظ تُنفَّذ فوراً، والتحويلات التي تزيد على ⁦5,000.00⁩ ريال إلى مستفيد جديد تحتاج إلى كلمة مرور لمرة واحدة» فيها شرطان، أي أربعة أعمدة، ولا تقول شيئاً عن أحدها: تحويل صغير إلى مستفيد جديد.

وانطلاقاً من درس قواعد العمل وجدوله بالمدخلات T وF وX، يضيف هذا الدرس الترميز الكامل، والجداول المختزلة، والتغطية، وعدّاً يكشف القواعد المنسية.

لماذا يهم

تختبئ عيوب القواعد متعددة الشروط في التركيبة الوحيدة التي لم يناقشها أحد: الحساب المجمّد الذي ما زال يستطيع التحويل إلى مستفيد محفوظ، أو العميل الذي يقع بين جملتين من المتطلب فيحصل على ما تفعله الشيفرة مصادفةً. أما الحالات المعتادة فتنجح في الحالتين.

يجعل جدول القرار كل تركيبة ظاهرة وقابلة للعدّ. وعندما يُبنى أثناء مراجعة المتطلبات، يحوّل الفجوات والتناقضات إلى أسئلة لمالك المنتج بدلاً من أن تصبح عيوباً في بيئة الإنتاج.

الشروط والإجراءات وقواعد القرار

تحمل صفوف الشروط ما تعتمد عليه القاعدة، وتحمل صفوف الإجراءات ما يجب أن يفعله النظام. والجدول الكامل فيه عمود لكل تركيبة من قيم الشروط: ثلاثة شروط قيمة كلٍّ منها صحيح أو خطأ تعطي ⁦2 × 2 × 2 = 8⁩ أعمدة.

إذا كان كل شرط صحيحاً أو خاطئاً فقط، فالجدول محدود المدخلات (Limited-entry). أما في الجدول موسّع المدخلات (Extended-entry) فيمكن أن يأخذ الشرط، أو الإجراء، عدة قيم، مثل النطاقات أو أقسام التكافؤ أو قيم منفصلة من قبيل «الفئة: عادي أو فضي أو ذهبي». ويكون عدد الأعمدة عندئذٍ حاصل ضرب أعداد القيم: شرط بثلاث قيم مع شرطين من نوع صحيح أو خطأ يعطي ⁦3 × 2 × 2 = 12⁩. ويستخدم منهج ISTQB للمستوى التأسيسي هذا الترميز:

  • T: الشرط متحقق؛ F: غير متحقق. ويسمح المنهج بترميزات أخرى، فبعض الأدوات تكتب Y وN.
  • –: الشرط غير مؤثر في هذا العمود، فأي قيمة له تعطي الإجراءات نفسها. ويُسمّى غالباً «لا يهم» (Don’t care)، ويُكتب كثيراً بشرطة قصيرة -.
  • N/A: الشرط غير ممكن (Infeasible) في هذه القاعدة، مثل «البطاقة منتهية الصلاحية» حين يدفع العميل نقداً.
  • X: يجب أن يحدث الإجراء؛ والخانة الفارغة: يجب ألا يحدث.

جرّبها: مولّد أقسام التكافؤ

مثال تطبيقي: اكتشاف القواعد الناقصة والمتعارضة

المتطلب TR-07 لتطبيق مصرفي على الجوال: «S1: التحويلات إلى مستفيد محفوظ تُنفَّذ فوراً. S2: التحويلات التي تزيد على ⁦5,000.00⁩ ريال إلى مستفيد جديد تُنفَّذ بعد أن يُدخل العميل كلمة مرور لمرة واحدة (OTP). S3: التحويلات من حساب مجمّد تُرفض».

ثلاثة شروط (الحساب مجمّد، المستفيد محفوظ، المبلغ أكثر من ⁦5,000.00⁩ ريال)، وثلاثة إجراءات (الرفض، التنفيذ بعد OTP، التنفيذ الفوري). فهل تغطي الجمل كل تركيبة مرة واحدة بالضبط؟ أربع خطوات تجيب.

  • احسب: اكتب كل جملة عموداً، وضع – لكل شرط لا تذكره، كما في الجدول أدناه. ومع الشروط من نوع صحيح أو خطأ، يمثّل العمود الذي فيه – واحدة تركيبتين، والذي فيه اثنتان يمثّل ⁦4⁩: تعطي S1 وS3 أربعاً لكل منهما وS2 اثنتين، فالمجموع ⁦10⁩، مع أن التركيبات الممكنة ⁦8⁩ فقط. والزيادة على ⁦8⁩ تعني تداخلاً واحداً على الأقل، والنقص عنها فجوة واحدة على الأقل؛ ويكون التداخل تعارضاً إذا أعطت جملتاه إجراءين مختلفين.
  • وسّع: تطابق المجموع لا يثبت شيئاً، لأن الفجوة والتداخل قد يلغي أحدهما الآخر، فحدّد الجمل التي تنطبق على كل عمود في الجدول الكامل. الأعمدة من ⁦1⁩ إلى ⁦3⁩، أي الحساب المجمّد مع مستفيد محفوظ أو مبلغ أكثر من ⁦5,000.00⁩ ريال، تعارضات: S3 ترفض، وS1 أو S2 تنفّذ. والعمود ⁦8⁩، أي تحويل حتى ⁦5,000.00⁩ ريال إلى مستفيد جديد من حساب نشط، فجوة.
  • اسأل: اعرض الأمرين على مالك المنتج بدلاً من التخمين. والإجابات: التجميد يمنع كل تحويل، والتحويل حتى ⁦5,000.00⁩ ريال إلى مستفيد جديد يُنفَّذ فوراً. سجّلها في المتطلب.
  • انظر أبعد من الجدول: فهو لا يفحص إلا الشروط التي كتبتها، لذا اسأل عن الشروط الناقصة (حدّ يومي، عملة أخرى) والإجراءات الناقصة (الرسالة التي تظهر بعد الرفض).
TR-07 as written: one column per sentence

      Frozen  Saved  > 5,000.00 SAR  Action               Stands for
S1    –       T      –               process immediately  4 combinations
S2    –       F      T               process after OTP    2 combinations
S3    T       –      –               reject               4 combinations
                                     Total                10, but only 8 exist
قاعدة التحويل TR-07 مفحوصةً على تركيباتها الثماني: في الأعمدة من ⁦1⁩ إلى ⁦3⁩ تعطي جملتان إجراءين مختلفين، وفي العمود ⁦8⁩ لا تنطبق أي جملة، وإجابات مالك المنتج تحسم الأعمدة الأربعة.
عمود جدول القرارالحساب مجمّدالمستفيد محفوظأكثر من ⁦5,000.00⁩ ريالTR-07 كما كُتببعد إجابات مالك المنتج
العمود 1TTTS1 + S3تعارض: التنفيذ الفوري أم الرفضتنبيهالرفضإجابة مالك المنتج
العمود 2TTFS1 + S3تعارض: التنفيذ الفوري أم الرفضتنبيهالرفضإجابة مالك المنتج
العمود 3TFTS2 + S3تعارض: التنفيذ بعد OTP أم الرفضتنبيهالرفضإجابة مالك المنتج
العمود 4TFFS3الرفضنجاحالرفض
العمود 5FTTS1التنفيذ الفورينجاحالتنفيذ الفوري
العمود 6FTFS1التنفيذ الفورينجاحالتنفيذ الفوري
العمود 7FFTS2التنفيذ بعد OTPنجاحالتنفيذ بعد OTP
العمود 8FFFلا جملةفجوةفشلالتنفيذ الفوريإجابة مالك المنتج
  • فشلفجوة: لا تذكر أي جملة ما يحدث
  • تنبيهتعارض: جملتان تعطيان إجراءين مختلفين
  • حسمته إجابة مالك المنتج

كل صف هنا عمود واحد من جدول القرار الكامل. T: الشرط متحقق؛ F: غير متحقق. وS1 وS2 وS3 هي جمل المتطلب TR-07.

الجدول الكامل والمبسّط والمختزل

يذكر منهج ISTQB طريقتين لتصغير الجدول. الجدول المبسّط (Simplified) يحذف الأعمدة التي تكون تركيبة شروطها غير ممكنة: فمع شرطَي «أكثر من ⁦5,000.00⁩ ريال» و«أكثر من ⁦20,000.00⁩ ريال» لا يزيد مبلغ على ⁦20,000.00⁩ دون أن يزيد على ⁦5,000.00⁩، فيُحذف كل عمود فيه F للشرط الأول وT للثاني. أما الجدول المختزل (Minimized)، وتسمّيه بعض الكتب والأدوات الجدول المطويّ (Collapsed)، فيدمج الأعمدة التي لها الإجراءات نفسها وتختلف في شرط واحد فقط، فيصبح ذلك الشرط –.

في TR-07 بعد توضيحه، ترفض الأعمدة من ⁦1⁩ إلى ⁦4⁩ كلها فتُدمج على خطوتين في R1 (T, –, –)، ويُدمج العمودان ⁦5⁩ و⁦6⁩ في R2 (F, T, –)، ويبقى العمودان ⁦7⁩ و⁦8⁩ R3 وR4. افحص بالعدّ نفسه: ⁦4 + 2 + 1 + 1 = 8⁩. ودمجٌ آخر ممكن، كالعمود ⁦8⁩ مع العمود ⁦6⁩. وكل نتيجة تُبنى من عمليات دمج صحيحة كهذه فقط هي نتيجة صحيحة؛ أما العدّ ففحص سريع لا دليل قاطع.

Full table (TR-07 with the product owner’s answers)
                       1  2  3  4  5  6  7  8
Account frozen         T  T  T  T  F  F  F  F
Beneficiary saved      T  T  F  F  T  T  F  F
Amount > 5,000.00 SAR  T  F  T  F  T  F  T  F
Reject                 X  X  X  X
Process after OTP                        X
Process immediately                X  X     X

Minimised table        R1  R2  R3  R4
Account frozen         T   F   F   F
Beneficiary saved      –   T   F   F
Amount > 5,000.00 SAR  –   –   T   F
Reject                 X
Process after OTP              X
Process immediately        X       X
Stands for             4   2   1   1   = 8 combinations

جرّبها: مولّد جداول القرار

التغطية واختيار قيم الاختبار

عناصر التغطية (Coverage Items) هي الأعمدة التي تحتوي تركيبات ممكنة من الشروط، والتغطية هي نسبة ما تنفّذه اختباراتك منها. وحالات الاختبار الأربع أدناه، واحدة لكل عمود مختزل، تحقق تغطية ⁦100%⁩ للجدول المختزل، لكنها لا تنفّذ إلا ⁦4⁩ من ⁦8⁩ أعمدة في الجدول الكامل، أي ⁦50%⁩، فاذكر دائماً الجدول الذي قست عليه.

يفترض الجدول المختزل أن الشيفرة تتجاهل فعلاً كل شرط عليه –. فلو فحصت الشيفرة المبلغ قبل التجميد، لطُلب من حساب مجمّد يحوّل ⁦6,000.00⁩ ريال إلى مستفيد جديد إدخال OTP، ولا يكشف ذلك إلا اختبار للعمود ⁦3⁩ من الجدول الكامل. وفي القواعد التي تحرّك الأموال، فكّر في الأعمدة الثمانية كلها.

ومع ذلك تحتاج كل – إلى قيمة محددة في الاختبار: اختر القيمة التي ستغيّر الإجراء لو كان الشرط مؤثراً في الحقيقة. يستخدم R1 مستفيداً محفوظاً، لأن حساباً مجمّداً ما زال يرسل المال هو أسوأ إخفاق، ويستخدم R2 مبلغاً كبيراً تحسّباً لطلب OTP في كل تحويل كبير. وتُختبر النطاقات عند الحدّ كما في تحليل القيم الحدّية: ⁦5,000.01⁩ في R3 و⁦5,000.00⁩ في R4.

Test  Rule  Account  Beneficiary  Amount (SAR)  Expected result
TC-1  R1    frozen   saved        6,000.00      rejected, no money leaves the account
TC-2  R2    active   saved        6,000.00      processed immediately, no OTP asked
TC-3  R3    active   new          5,000.01      OTP asked, processed after a valid OTP
TC-4  R4    active   new          5,000.00      processed immediately, no OTP asked

جرّبها: مولّد القيم الحدّية

أخطاء شائعة

  • كتابة أعمدة للتركيبات التي يذكرها المتطلب فقط.
  • وضع – حيث يسكت المتطلب. فالسكوت سؤال لمالك المنتج، لا دليل على أن الشرط غير مؤثر.
  • دمج أعمدة إجراءاتها مختلفة أو تختلف في أكثر من شرط واحد.
  • الاعتماد على مجموع الأعمدة وحده: فالفجوة والتداخل قد يلغي أحدهما الآخر.
  • الإبلاغ عن «تغطية ⁦100%⁩» دون ذكر ما إذا كان القياس على الجدول الكامل أم المختزل.
  • استخدام جدول القرار حين تعتمد النتيجة على ترتيب الأحداث، مثل قفل الحساب بعد ثلاث محاولات دخول فاشلة؛ فهذا يحتاج إلى اختبار انتقالات الحالة (State Transition Testing).

من منظور ضمان الجودة

تحقق جداول القرار أكبر فائدتها في جلسات التنقيح (Refinement) ومراجعة المتطلبات. فحين تربط قصة المستخدم الشروط بكلمات مثل «و» و«أو» و«ما لم» و«باستثناء»، ارسم الجدول في الاجتماع، واحسب الأعمدة، واطرح كل فجوة وتداخل في الحال. سجّل الإجابات في المتطلب، واحفظ الجدول موسوماً بإصدار القاعدة بجوار حالات الاختبار.

قبل أن تعتمد على جدول مختزل، اسأل المطور بأي ترتيب تُقيَّم الشروط. اربط كل حالة اختبار بعمودها، وأبلغ عن التغطية بصيغة «⁦4⁩ من ⁦4⁩ أعمدة في الجدول المختزل»، وحدّث الجدول أولاً عندما تتغير القاعدة: فكل شرط جديد من نوع صحيح أو خطأ يضاعف الجدول الكامل.

تمرين عملي

افحص قاعدة إلغاء بحثاً عن الفجوات والتعارضات

المطلوب

لتطبيق توصيل طعام قاعدة الإلغاء أدناه. ابنِ جدول القرار الخاص بها، واكتشف الفجوات والتعارضات، واكتب أسئلتك لمالك المنتج. ثم اختزل الجدول بعد توضيحه، واحسب حالات الاختبار اللازمة لتغطيته بنسبة ⁦100%⁩.

المادة
CR-2  إلغاء الطلب
1. الطلبات التي لم يقبلها المطعم بعد يمكن إلغاؤها مع استرداد كامل المبلغ.
2. الطلبات المقبولة المدفوعة نقداً لا يمكن إلغاؤها.
3. المشتركون الذين دفعوا بالبطاقة يستردون 50% من المبلغ عند الإلغاء.
الخطوات
  1. اكتب الشروط والإجراءات.
  2. اكتب كل جملة عموداً بمدخلات –، واجمع التركيبات.
  3. وسّع إلى الجدول الكامل، وحدّد الجمل التي تنطبق على كل عمود.
  4. اكتب أسئلتك، وافترض الإجابات الأرجح، ثم اختزل.
إظهار الإجابة النموذجية
الإجابة النموذجية

الشروط: مقبول، الدفع بالبطاقة، مشترك. الإجراءات: استرداد كامل، استرداد ⁦50%⁩، رفض. الجملة ⁦1⁩ هي (F, –, –)، أي ⁦4⁩ تركيبات؛ والجملة ⁦2⁩ (T, F, –)، أي ⁦2⁩؛ والجملة ⁦3⁩ (–, T, T)، أي ⁦2⁩. المجموع ⁦8⁩: يبدو كاملاً وهو ليس كذلك.

الجدول الكامل، T قبل F والشرط الأول الأبطأ تغيّراً: العمود ⁦1⁩ (T, T, T) استرداد ⁦50%⁩؛ والعمود ⁦2⁩ (T, T, F)، أي طلب مقبول مدفوع بالبطاقة لغير مشترك، لا تطابقه أي جملة: فجوة؛ والعمودان ⁦3⁩ و⁦4⁩ رفض؛ والعمود ⁦5⁩ (F, T, T) تطابقه الجملتان ⁦1⁩ و⁦3⁩: تعارض؛ والأعمدة من ⁦6⁩ إلى ⁦8⁩ استرداد كامل.

الأسئلة: ماذا يسترد غير المشترك إذا ألغى طلباً مقبولاً مدفوعاً بالبطاقة؟ وهل يحصل المشترك الذي دفع بالبطاقة ولم يُقبل طلبه بعد على استرداد كامل أم ⁦50%⁩؟ وماذا عن المحافظ الإلكترونية؟

إذا كان العمود ⁦2⁩ رفضاً والعمود ⁦5⁩ استرداداً كاملاً، فالجدول المختزل: (F, –, –) استرداد كامل، و(T, F, –) رفض، و(T, T, F) رفض، و(T, T, T) استرداد ⁦50%⁩، و⁦4 + 2 + 1 + 1 = 8⁩. فأربع حالات اختبار تحقق له تغطية ⁦100%⁩، و⁦50%⁩ للجدول الكامل.

أسئلة شائعة

كم شرطاً يُعدّ كثيراً على جدول قرار واحد؟

لا يوجد حدّ ثابت، لكن الجدول الكامل يتضاعف مع كل شرط من نوع صحيح أو خطأ: ⁦4⁩ شروط تعطي ⁦16⁩ عموداً، و⁦5⁩ شروط تعطي ⁦32⁩. وقبل أن تبني جدولاً بهذا الحجم، تحقّق مما إذا كانت القاعدة تنقسم إلى أجزاء مستقلة، مثل الأهلية أولاً ثم الرسوم، لكلٍّ منها جدول صغير. وإذا بقيت أعمدة كثيرة، فاختبر الجدول المختزل أو اختر الأعمدة حسب المخاطر. أما إذا كانت لديك معاملات كثيرة مستقلة لا تربطها قاعدة، فالاختبار الزوجي (Pairwise) أنسب.

هل أختبر الجدول الكامل أم المختزل؟

يكفي الجدول المختزل عندما تكون المخاطر منخفضة وتثق بأن الشيفرة تتجاهل كل شرط عليه –. واختبر الجدول الكامل، أو على الأقل الأعمدة الأكثر عرضة للخطأ، عندما تحرّك القاعدة أموالاً أو تقرر الصلاحيات أو الأهلية، أو عندما تعرف أن الشيفرة تفحص الشروط بترتيب مختلف عما يوحي به الجدول.

هل تحلّ جداول القرار محلّ تقسيم التكافؤ وتحليل القيم الحدّية؟

لا، بل تعمل معهما. فتقسيم التكافؤ (Equivalence Partitioning) يعطي قيم كل شرط، مثل المبالغ حتى ⁦5,000.00⁩ ريال وما فوقها. وجدول القرار يجمع هذه القيم في قواعد. ثم يختار تحليل القيم الحدّية المبالغ المحددة داخل كل عمود، مثل ⁦5,000.00⁩ و⁦5,000.01⁩.

المراجع

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.

تدرّب بأدوات متقن

أنشئ جداول القرار من الشروط والإجراءات، وولّد جميع تركيبات القواعد، واختزل المستحيل منها.

تصميم الاختبارات

اشتق فئات التكافؤ الصالحة وغير الصالحة لكل مدخل واختر قيم اختبار تمثيلية.

تصميم الاختبارات

ولّد القيم الحدّية (min-1 وmin وmin+1 والقيمة الاسمية وmax-1 وmax وmax+1) للقيود الرقمية وقيود الطول.

تصميم الاختبارات

للتعمّق أكثر

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة