تحليل القيم الحدّية
تحليل القيم الحدّية (Boundary Value Analysis) تقنية لتصميم الاختبار من نوع الصندوق الأسود، تختبر القيم الواقعة على أطراف أقسام التكافؤ. والقيمة الحدّية هي أصغر قيمة أو أكبر قيمة في قسم مرتب: فإذا كان الحقل يقبل الأعمار من 18 إلى 65، فحدّا القسم الصالح هما 18 و65، وحدّا القسمين غير الصالحين المجاورين هما 17 و66.
يُبنى هذا التحليل مباشرةً على تقسيم التكافؤ (Equivalence Partitioning). فالتقسيم يخبرك أيّ مجموعات المدخلات يجب أن يعاملها النظام بالطريقة نفسها، وتحليل القيم الحدّية يخبرك أين تبحث داخل هذه المجموعات، لأن الأطراف هي حيث يتغيّر المنطق وحيث تتجمّع الأخطاء.
لماذا يهم
يكتب المطورون قواعد مثل «من 18 إلى 65» باستخدام عمليات مقارنة: age >= 18 && age <= 65. وكتابة > بدلاً من >=، أو استخدام حدّ خاطئ بسبب سوء فهم المتطلب، تُنتج عيباً لا يظهر إلا عند قيمة واحدة بعينها. أما القيم المعتادة في منتصف النطاق، مثل 30، فتنجح سواء كانت المقارنة صحيحة أم خاطئة.
ولأن كل حدّ يحتاج إلى قيمتين أو ثلاث فقط، يكشف هذا التحليل فئة كاملة من العيوب ببضعة اختبارات. لذلك فهو من أرخص التقنيات وأكثرها إنتاجية لدى المختبِر، ولا يقتصر على الأرقام: فالأطوال والتواريخ والكميات وأحجام الملفات والأسعار والأعداد كلها لها حواف.
لا توجد حدود إلا حيث تكون القيم مرتبة
ينطبق تحليل القيم الحدّية على الأقسام التي لقيمها ترتيب: الأرقام والتواريخ والأوقات وأطوال النصوص والأحجام والمواقع في قائمة. أما «طريقة الدفع: بطاقة أو نقد أو محفظة» فلها أقسام لكن لا حدود لها، لأن «النقد» ليس أصغر من «البطاقة» ولا أكبر منها. وفي القيم غير المرتبة تكتفي بتقسيم التكافؤ.
ابدأ بكتابة الأقسام، بما فيها الأقسام غير الصالحة. فحقل العمر الذي يقبل الأعداد الصحيحة من 18 إلى 65 له ثلاثة أقسام: أقل من 18 (غير صالح)، ومن 18 إلى 65 (صالح)، وأكبر من 65 (غير صالح). وكل قسمين متجاورين يلتقيان عند حدّ.
- الأرقام: الحد الأدنى والحد الأقصى، ومقدار الخطوة (أعداد صحيحة، أو 0.01 للمبالغ المالية) هو ما يحدد القيمة المجاورة.
- الأطوال: اسم من 2 إلى 50 حرفاً حدوده عند 1|2 و50|51 حرفاً.
- التواريخ والأوقات: «صالح حتى 31 مارس» له حدّ بين 23:59:59 يوم 31 مارس و00:00:00 يوم 1 أبريل، في منطقة زمنية محددة.
- الأعداد والأحجام: «حتى 5 مرفقات، حجم كل منها 10 ميغابايت كحد أقصى» تعطي حدوداً عند 5|6 ملفات وعند 10 ميغابايت وبايت واحد فوقها.
تحليل القيم الحدّية الثنائي والثلاثي
يعرّف منهج ISTQB للمستوى التأسيسي صيغتين. في الصيغة الثنائية (2-value BVA) تختبر لكل حدّ القيمة الحدّية نفسها وأقرب قيمة مجاورة لها في القسم المجاور. وفي الصيغة الثلاثية (3-value BVA) تختبر القيمة الحدّية وجارتيها، واحدة على كل جانب.
في حقل العمر (أعداد صحيحة، والصالح من 18 إلى 65) تعطي الصيغة الثنائية 17 و18 و65 و66، وتعطي الثلاثية 17 و18 و19 و64 و65 و66. والقيمتان الإضافيتان 19 و64 تكشفان عيوباً يكتب فيها المطور العامل الصحيح لكن بحدّ خاطئ، مثل age < 65 بدلاً من age <= 65 (عندها تُرفض 65، وهذا ما تكشفه الصيغة الثنائية أيضاً)، أو شيفرة تعامل الحدّ كحالة خاصة فتُفسد القيمة المجاورة له.
age: integer, valid 18..65
- ≤ 17غير صالح: أصغر من الحد
- 18–65القسم الصالح
- ≥ 66غير صالح: أكبر من الحد
- 117 الجار الأدنىمرفوضفشل
- 218 الحد الأدنىمقبولنجاح
- 319 الجار الداخليفي الصيغة الثلاثية فقط · مقبول
- 464 الجار الداخليفي الصيغة الثلاثية فقط · مقبول
- 565 الحد الأعلىمقبولنجاح
- 666 الجار الأعلىمرفوضفشل
النسخة النصية
Field: age, whole numbers, valid 18..65
Partitions: [ ... 17 ] [ 18 ......... 65 ] [ 66 ... ]
invalid valid invalid
2-value BVA: 17 18 65 66
3-value BVA: 17 18 19 64 65 66
Expected: 17 rejected, 18 accepted, 19 accepted,
64 accepted, 65 accepted, 66 rejectedمثال تطبيقي: قاعدة رسوم التوصيل
المتطلب: «الطلبات التي تقل عن 100.00 ريال تدفع رسوم توصيل 15.00 ريالاً. والطلبات من 100.00 إلى 299.99 ريالاً تدفع 7.50 ريالات. والطلبات بقيمة 300.00 ريال فأكثر توصيلها مجاني». للأسعار منزلتان عشريتان، فالخطوة بين القيم المتجاورة 0.01.
الأقسام هي: أقل من 100.00، ومن 100.00 إلى 299.99، و300.00 فأكثر. وهناك حدّان بين الأقسام الصالحة، وحدّ ثالث في الأسفل: فإجمالي الطلب لا يمكن أن يكون صفراً أو سالباً، لذا تهمّ القيمتان 0.00 و0.01 أيضاً.
- 0.00 ← مرفوض (لا طلب فارغاً)؛ 0.01 ← رسوم 15.00.
- 99.99 ← رسوم 15.00؛ 100.00 ← رسوم 7.50.
- 299.99 ← رسوم 7.50؛ 300.00 ← توصيل مجاني.
- أضف قيمة معتادة واحدة لكل قسم (مثل 50.00 و180.00 و750.00) لتثبت أن القسم يتصرّف ككتلة واحدة؛ وهذا دور تقسيم التكافؤ.
حدود خفية لا يذكرها المتطلب
كثير من الحدود غير مكتوب في المتطلب لكنه موجود في النظام: أقصى طول لعمود في قاعدة البيانات، وأكبر رقم يستوعبه نوع البيانات، وحدّ حجم الملف المرفوع، وآخر يوم في فبراير، ولحظة انتهاء الجلسة. هذه الحدود الضمنية تسبب بعضاً من أغلى عيوب بيئة الإنتاج، لأن أحداً لم يخطط لاختبارها.
اسأل المطور، أو اقرأ عقد الواجهة البرمجية أو المخطط لمعرفة الحدود التقنية، ثم طبّق التقنية نفسها: الحدّ، والقيمة التي تتجاوزه مباشرةً.
- نص يُخزَّن في عمود من 100 حرف: اختبر 100 و101 حرف، واحسب الأحرف كما يحسبها النظام؛ فقد يُقاس النص العربي أو الهندي بالبايتات لا بالحروف.
- عدد صحيح بإشارة من 32 بت: 2147483647 و2147483648.
- التواريخ: 28 و29 فبراير في السنوات الكبيسة وغير الكبيسة، وتغيّر اليوم بين المناطق الزمنية.
جرّبها: عدّاد طول السلاسل النصية جرّبها: مولّد بيانات اختبار التواريخ
أخطاء شائعة
- اختبار الجانب الصالح فقط من كل حدّ (18 و65) وعدم اختبار القيم التي يجب رفضها (17 و66).
- عدم حسم ما إذا كان الحدّ داخلاً في النطاق: «بين 18 و65» و«حتى 65» و«أقل من 65» معانٍ مختلفة. اسأل، واكتب الإجابة في حالة الاختبار.
- استخدام خطوة خاطئة: جارة 100.00 في الأسعار هي 99.99 وليست 99.
- تطبيق التحليل على قيم غير مرتبة مثل طرق الدفع أو رموز الدول، حيث لا معنى له.
- نسيان الحدود الضمنية مثل أطوال الحقول وحدود أنواع البيانات وأطراف التواريخ.
- اختبار الحدود وإهمال الأقسام بينها؛ فتحليل القيم الحدّية يكمّل تقسيم التكافؤ ولا يحلّ محله.
من منظور ضمان الجودة
يبدأ تحليل القيم الحدّية عملياً أثناء مراجعة المتطلبات: كل رقم أو طول أو تاريخ في المتطلب سؤال عن الشمول والوحدات ومقدار الخطوة. وطرح سؤال «هل يُعدّ عمر 65 مؤهلاً؟» قبل البرمجة يمنع العيب بدلاً من اكتشافه لاحقاً.
عند كتابة حالات الاختبار، اجعل لكل قيمة حدّية حالة خاصة بها أو صفاً خاصاً في جدول بيانات، مع ذكر النتيجة المتوقعة صراحةً. وإذا فشلت إحداها، فيجب أن يذكر تقرير الخطأ القيمة بالضبط والنتيجة المتوقعة والمقارنة التي تشك فيها، فيصلح المطور خطأ الفارق بواحد في دقائق.
تمرين عملي
استخرج القيم الحدّية لقاعدة كلمة المرور
نموذج التسجيل يقول: «يجب أن يكون طول كلمة المرور من 12 إلى 64 حرفاً». يُحسب الطول بعدد الأحرف. حدّد الأقسام، ثم اكتب القيم الحدّية للصيغتين الثنائية والثلاثية مع النتيجة المتوقعة لكل قيمة.
بعد ذلك راجع المتطلب بحثاً عن أي شيء ما زال غامضاً، واكتبه سؤالاً لمالك المنتج.
- اكتب أقسام طول كلمة المرور، بما فيها الأقسام غير الصالحة.
- حدّد الحدّين بين الأقسام المتجاورة.
- اكتب مجموعة الصيغة الثنائية، ثم وسّعها إلى الصيغة الثلاثية.
- اذكر النتيجة المتوقعة (مقبول أو مرفوض) لكل قيمة.
إظهار الإجابة النموذجية
الأقسام: من 0 إلى 11 حرفاً (غير صالح)، ومن 12 إلى 64 (صالح)، و65 فأكثر (غير صالح). الحدود: 11|12 و64|65.
الصيغة الثنائية: 11 (مرفوض)، 12 (مقبول)، 64 (مقبول)، 65 (مرفوض). وتضيف الصيغة الثلاثية 13 و63 (كلاهما مقبول).
ومما يستحق الاختبار أيضاً: كلمة مرور فارغة (0 حرف)، وهي أدنى طرف في القسم الأول وغالباً لها رسالة خطأ خاصة.
أسئلة مفتوحة: كيف تُحسب الرموز التعبيرية أو الحروف العربية المشكولة؟ هل يُفحص الطول قبل حذف المسافات الطرفية أم بعده؟ هل يوجد حدّ أقصى آخر في قاعدة البيانات أو في مكتبة التجزئة؟
أسئلة شائعة
هل تحليل القيم الحدّية هو نفسه تقسيم التكافؤ؟
لا. تقسيم التكافؤ يقسم المدخلات إلى مجموعات يُفترض أن تتصرف بالطريقة نفسها ويختبر قيمة واحدة من كل مجموعة. ثم يختبر تحليل القيم الحدّية أطراف المجموعات المرتبة، حيث يتغيّر السلوك. وعادةً يُستخدمان معاً.
هل أستخدم الصيغة الثنائية أم الثلاثية؟
استخدم الصيغة الثنائية افتراضياً، فهي تكشف معظم أخطاء الفارق بواحد باختبارات أقل. واستخدم الثلاثية للقواعد عالية المخاطر مثل الأسعار والحدود والأهلية، أو عندما تعامل الشيفرة الحدود معاملة خاصة.
هل ينطبق التحليل على التواريخ والنصوص؟
نعم، كلما كانت القيم مرتبة: للتواريخ والأوقات وطول النص وحجم الملف وعدد العناصر ومواقعها حدود. ولا ينطبق على القيم غير المرتبة مثل الألوان أو طرق الدفع.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- ISO/IEC/IEEE 29119-1:2022 — Software and systems engineering — Software testing — Part 1: General conceptsالمعيار الدولي لاختبار البرمجيات: المفاهيم والعمليات والتوثيق والتقنيات.
تدرّب بأدوات متقن
نفّذ تحليلاً كاملاً للقيم الحدّية (ثنائي القيم وثلاثي القيم) مع فئات التكافؤ والنتائج المتوقّعة.
ولّد القيم الحدّية (min-1 وmin وmin+1 والقيمة الاسمية وmax-1 وmax وmax+1) للقيود الرقمية وقيود الطول.
ولّد القيم الحدّية حول الحدود: min-1 وmin وmin+1 وmax-1 وmax وmax+1 للأعداد الصحيحة بأي عرض.
اشتق فئات التكافؤ الصالحة وغير الصالحة لكل مدخل واختر قيم اختبار تمثيلية.
ولّد مجموعات بيانات للتواريخ: تواريخ عشوائية ضمن نطاق، وأيام كبيسة، ونهايات الأشهر، وحدود التوقيت الصيفي، وصيغ متعددة.
قِس طول السلسلة النصية بالأحرف ونقاط الترميز (code points) وبايتات UTF-8 ووحدات UTF-16.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.