قابلية الاختبار
قابلية الاختبار (Testability) هي مدى سهولة اختبار الشيء. ويعرّفها مسرد ISTQB، استناداً إلى ISO/IEC 25010، بأنها الدرجة التي يمكن بها تحديد شروط الاختبار لمكوّن أو نظام، وتنفيذ اختبارات تبيّن هل تحققت هذه الشروط. ولها عند المختبِر وجهان: المتطلب قابل للاختبار حين تستطيع أن تقول مسبقاً أي نتيجة تنجح وأيها تفشل، والنظام قابل للاختبار حين يستطيع الاختبار أن يضعه في الحالة التي يحتاجها وأن يرى ما فعله.
مثال: «يجب أن تظهر نتائج البحث بسرعة» متطلب غير قابل للاختبار، لأن أحداً لا يستطيع أن يقول هل 1.8 ثانية نجاح أم فشل. أما «مع 50,000 منتج في الكتالوج و100 مستخدم يبحثون في الوقت نفسه على بيئة Staging، تظهر النتائج في 95% من عمليات البحث خلال ثانيتين من الضغط على زر البحث» فقابل للاختبار، بشرط أن يستطيع الفريق تحميل 50,000 منتج في بيئة Staging، ومحاكاة 100 مستخدم، وقياس الزمن حتى ظهور النتائج. وهذا الشرط هو الوجه الخاص بالنظام.
لماذا يهم
المتطلب الذي لا تستطيع أي نتيجة أن تُفشله لا يقدّم أساساً للحكم. فيملأ كل شخص الفراغ بفهمه الخاص: يبني المطور سلوكاً، ويفحص المختبِر سلوكاً آخر، وكان مالك المنتج ينتظر سلوكاً ثالثاً. ويظهر الفرق متأخراً، في صورة جدال حول ما إذا كان العيب عيباً أصلاً، في الوقت الذي يكون فيه تغيير الميزة أعلى كلفة.
وضعف قابلية اختبار النظام يستهلك الوقت ويخفي العيوب. فإذا كان إنشاء بيانات الاختبار يتطلب عشر شاشات، أو كان التذكير لا يُختبر إلا بانتظار يوم كامل، أو كان الطلب الفاشل لا يعرض إلا «حدث خطأ ما»، صارت الاختبارات بطيئة أو أُهملت أو فاتها السبب. ويُدرج منهج ISTQB للمستوى التأسيسي تقييمَ قابلية أساس الاختبار للاختبار ضمن تحليل الاختبار، ولهذا يطرحها المختبِر في المراجعات وجلسات تحسين قائمة العمل، ما دام التغيير رخيصاً.
ما الذي يجعل المتطلب قابلاً للاختبار
فحص سريع: هل تستطيع اليوم أن تكتب من المتطلب النتيجة المتوقعة لحالة اختبار، وهل يصل مختبِران إلى الحكم نفسه على النتيجة نفسها؟ وثلاثة من العيوب التي تناولها الدرس السابق، أي المتطلبات الغامضة والناقصة والمتناقضة، تسقط في هذا الفحص، أما الرابع، أي المتطلب المفقود، فلا يترك شيئاً يُفحص أصلاً. والمتطلب القابل للاختبار:
- واضح: له معنى واحد. يُذكر فيه الفاعل والمحفّز والنتيجة، وتُعرَّف مصطلحاته، وتصف كل عبارة فيه سلوكاً واحداً. فعبارة «يستطيع المستخدم إلغاء الطلب» غير واضحة حتى تعرف أي مستخدم، وفي أي حالات الطلب، وإلى متى.
- قابل للقياس: تُستبدل كل كلمة نوعية بنتيجة قابلة للملاحظة (رسالة، أو حالة، أو سجل مخزَّن، أو بريد مُرسَل) أو بهدف له وحدة وظروف. وقد بيّن درس الاختبار غير الوظيفي كيف تحوّل «سريع» أو «سهل» إلى هدف كهذا.
- متّسق: لا يناقض نفسه ولا المتطلبات الأخرى ولا قواعد العمل ولا التصميم، ويستخدم الاسم نفسه للشيء نفسه. وحين يتعارض متطلبان، فإن كل نتيجة ممكنة تُفشل أحدهما.
قابلية اختبار النظام: قابلية التحكم وقابلية الملاحظة
المتطلب الواضح لا يمكن اختباره إذا لم يسمح لك النظام بتهيئة الموقف أو برؤية النتيجة. وتصف هذا خاصيتان. قابلية التحكم (Controllability) هي مدى سهولة أن يضع الاختبار النظام في الحالة التي يحتاجها: إنشاء البيانات، وضبط التاريخ، وتشغيل ميزة، وجعل مزوّد الدفع يرفض العملية. وقابلية الملاحظة (Observability) هي مدى سهولة أن يرى الاختبار ما فعله النظام، بما في ذلك النتائج التي لا تصل إلى الشاشة: السجل المخزَّن، والبريد المرسَل، وقيد السجلات، والخطأ بدقته.
وكلتاهما قرار تصميم، وأرخص وقت لطلبهما هو قبل بناء الميزة. ويضع معيار ISO/IEC 25010:2023 قابلية الاختبار ضمن قابلية الصيانة: فالمنتج الذي يصعب اختباره يصعب تغييره بأمان أيضاً. ومن الطلبات المعتادة للمختبِرين:
- طريقة لإنشاء بيانات الاختبار وإعادة ضبطها (سكربت بيانات أولية، أو API، أو شاشة إدارة).
- ساعة أو إعداد لمدة الصلاحية يتحكم فيه الاختبار، لكل ما تنتهي صلاحيته أو يُجدوَل.
- أوضاع تجريبية (Sandbox) أو بدائل اختبار (Test Doubles)، أي بدائل تحاكي الخدمة الحقيقية، للخدمات الخارجية، لتُنتج عند الطلب عملية دفع مرفوضة أو انتهاء مهلة.
- سجلات تحمل معرّف ارتباط (correlation id)، وهو معرّف واحد يربط كل قيود السجل الخاصة بالطلب نفسه، ورموز أخطاء محددة، ورقم إصدار البناء ظاهراً في التطبيق.
- معرّفات ثابتة للأتمتة، مثل السمة
data-testidالتي يجد بها الاختبار العنصر حتى إن تغيّر نصه أو تخطيطه. - تأكيد أن منافذ التحكم، مثل إعادة ضبط البيانات أو تغيير الساعة، معطّلة خارج بيئات الاختبار: فنقطة نهاية لإعادة ضبط البيانات يمكن الوصول إليها في بيئة الإنتاج عيبٌ بحد ذاتها.
إعادة صياغة متطلب غير قابل للاختبار
إعادة الصياغة اقتراح وليست قراراً. فالمختبِر يكتشف الناقص ويقترح الصياغة، ومالك المتطلب، وهو عادةً مالك المنتج أو محلل الأعمال، يحدد القيم ويعتمد النص. اعمل بهذا الترتيب:
- ضع علامة على كل كلمة لا يستطيع الاختبار فحصها: الصفات النوعية (سريع، سهل، آمن)، والكميات المبهمة (بعض، كبير، معقول)، والقوائم المفتوحة (إلخ، مثل)، والأفعال الضعيفة (يدعم، يعالج، يدير).
- استبدل كلاً منها بنتيجة قابلة للملاحظة أو بهدف له وحدة وظروف. واقترح قيمة وعلّمها بعبارة «للتأكيد».
- قسّم الجمل المركبة بحيث يكون لكل عبارة حكم واحد بالنجاح أو الفشل، ورقّم العبارات لتتمكن حالات الاختبار من التتبع إليها.
- اذكر الفاعل والمحفّز والشروط المسبقة ومسارات الخطأ.
- قارن الصياغة الجديدة بالمتطلبات وقواعد العمل المرتبطة بها، ثم دوّن ما تحتاج إلى التحكم فيه وملاحظته لاختبارها.
جرّبها: كاشف غموض المتطلبات بالذكاء الاصطناعي جرّبها: مولّد معايير القبول
مثال تطبيقي: متطلب تجديد الاشتراك
يبيع تطبيق لتعلّم اللغات اشتراكات شهرية. وفي مواصفاته: REQ-21 «ينبغي تذكير المشتركين في وقت مناسب قبل تجديد اشتراكهم. وإذا فشل الدفع، فينبغي إعادة المحاولة بضع مرات قبل أن ينتهي الاشتراك». وفيها قاعدة عمل: BR-9 «الاشتراك الموقوف مؤقتاً لا يُحصَّل منه أي مبلغ».
المراجعة: «في وقت مناسب» و«بضع مرات» غير قابلة للقياس، و«تذكير» و«ينبغي» غير واضحة (بأي قناة، وبأي محتوى، وهل هو إلزامي؟)، والمتطلب REQ-21 يسكت عن الاشتراكات الموقوفة مؤقتاً، فقد يتعارض مع BR-9. يقترح المختبِر الصياغة الواردة أدناه، ويسأل مالك المنتج هل يعني «ينتهي» إلغاء الاشتراك أم إيقافه مؤقتاً، ويدوّن ما يجب أن توفّره بيئة الاختبار:
- ساعة يمكن تقديمها في بيئة الاختبار، لاختبار التذكير (21.1) وإعادة المحاولة (21.3) دون انتظار أسبوع (قابلية التحكم).
- وضع تجريبي (Sandbox) لدى مزوّد الدفع فيه بطاقات اختبار تُرفض عند الطلب، لإنتاج محاولة مرفوضة واحدة أو اثنتين أو ثلاث (قابلية التحكم، 21.3).
- صندوق بريد لالتقاط الرسائل، لقراءة رسالة التذكير ورسالة الإلغاء دون صناديق بريد حقيقية (قابلية الملاحظة، 21.1 و21.3).
- بيانات اختبار فيها اشتراك نشط واشتراك موقوف مؤقتاً، وقائمة محاولات التحصيل في الوضع التجريبي، للتأكد من عدم إجراء محاولة رابعة ومن أن الاشتراك الموقوف لا يُحصَّل منه شيء أبداً (قابلية التحكم والملاحظة، 21.3 و21.4).
REQ-21 التجديد الشهري (صياغة مقترحة؛ القيم يؤكدها مالك المنتج)
21.1 قبل تاريخ التجديد بـ 7 أيام يتلقى المشترك رسالة بريد واحدة تذكر تاريخ التجديد
والمبلغ وطريقة الإيقاف المؤقت أو الإلغاء.
21.2 في تاريخ التجديد تُحصَّل قيمة الخطة من البطاقة المحفوظة، ويستمر الاشتراك
شهراً آخر.
21.3 إذا رُفضت عملية التحصيل تُعاد المحاولة بعد يوم واحد وبعد 3 أيام من تاريخ
التجديد. وإذا رُفضت المحاولات الثلاث يُلغى الاشتراك ويتلقى المشترك رسالة
بذلك، ولا تُجرى أي محاولة تحصيل أخرى.
21.4 الاشتراك الموقوف مؤقتاً لا يتلقى تذكيراً ولا يُحصَّل منه أي مبلغ (BR-9).
21.5 تظهر كل محاولة تحصيل، مقبولة أو مرفوضة، في «سجل الفواتير» بتاريخها
ومبلغها ونتيجتها.المتطلب الأصلي REQ-21غير قابل للاختبار
يُذكَّر المشتركون «في وقت مناسب»، ويُعاد الدفع الفاشل «بضع مرات»
- واضح: من وماذا:
- «تذكير» و«ينبغي»: بأي قناة، وبأي محتوى، وهل هو إلزامي؟
- قابل للقياس:
- «في وقت مناسب» و«بضع مرات»
- متّسق:
- يسكت عن الاشتراكات الموقوفة مؤقتاً: قد يتعارض مع BR-9
- التحكم والملاحظة:
- لم يُنظر فيهما
- هل يصل الاختبار إلى حكم؟:
- في الإخفاقات الواضحة فقط: لا توجد نتيجة متوقعة متفق عليهافشل
الصياغة الجديدة 21.1–21.5قابل للاختبار
خمس عبارات مرقّمة، لكل منها حكم واحد
- واضح: من وماذا:
- رسالة بريد واحدة قبل التجديد بـ7 أيام، تذكر التاريخ والمبلغ وطريقة الإيقاف المؤقت أو الإلغاء
- قابل للقياس:
- إعادة المحاولة بعد يوم واحد وبعد 3 أيام من تاريخ التجديد، وبعد ثلاث محاولات مرفوضة يُلغى الاشتراك
- متّسق:
- الاشتراك الموقوف مؤقتاً لا يتلقى تذكيراً ولا يُحصَّل منه شيء، كما تقتضي BR-9
- التحكم والملاحظة:
- ساعة قابلة للتقديم وبطاقات تجريبية تُرفض عند الطلب، وصندوق التقاط للرسائل وقائمة محاولات التحصيل
- هل يصل الاختبار إلى حكم؟:
- نعم: كل عبارة إما تنجح وإما تفشلنجاح
القيم في الصياغة الجديدة اقتراحات من المختبِر حتى يؤكدها مالك المنتج.
جرّبها: المتطلبات ← حالات اختبار جرّبها: مراجع معايير القبول بالذكاء الاصطناعي
أخطاء شائعة
- قبول كلمات مثل «سريع» و«بديهي» و«آمن» كما هي، ثم اختراع معايير نجاح خاصة بك أثناء الاختبار، فيصبح الحكم رأيك لا اتفاقاً.
- وضع القيم التي اخترتها في حالات اختبارك فقط. فهذا يصنع مواصفات ثانية خفية؛ احرص على إدخال الصياغة المتفق عليها في المتطلب نفسه.
- إضافة رقم بلا ظروف: «خلال ثانيتين» دون حجم البيانات أو الحمل أو نقطة القياس يظل قابلاً للجدال في الاتجاهين.
- مراجعة الصياغة وحدها، ثم اكتشاف يوم الاختبار أن البريد لا يمكن قراءته، أو أن صلاحية مدتها 24 ساعة تعني اختباراً مدته 24 ساعة.
- عدّ المتطلب القابل للاختبار متطلباً صحيحاً: فالصياغة الدقيقة قد تصف سلوكاً خاطئاً.
- طلب منافذ اختبار مثل إعادة ضبط البيانات أو تغيير الساعة دون التأكد من تعطيلها في بيئة الإنتاج.
من منظور ضمان الجودة
تُفحص قابلية الاختبار حيثما تُناقش المتطلبات: في جلسات تحسين قائمة العمل (Backlog Refinement)، وفي مراجعات المتطلبات، وفي تحليل الاختبار. واسأل عن كل عبارة سؤالين: «كيف سأعرف أنها نجحت؟» و«ماذا أحتاج أن أهيّئ وأن أرى؟». ودوّن كل ملاحظة تعليقَ مراجعة أو سؤالاً على التذكرة: العبارة، وسبب عدم قابليتها للاختبار، والصياغة المقترحة، ومن يقرر.
أما جانب النظام فحوار مع المطورين والمعماريين. اطلب خصائص قابلية الاختبار جزءاً من القصة، وسجّل ما ينقص منها خطراً في خطة الاختبار. وحين تُعتمد الصياغة الجديدة تصبح أساس الاختبار لديك، وتُتتبَّع كل حالة اختبار إلى عبارة مرقّمة، وعلى ذلك يُبنى درس تتبّع المتطلبات.
تمرين عملي
اجعل متطلب مواعيد التوصيل قابلاً للاختبار
لدى تطبيق لتوصيل البقالة المتطلب وقاعدة العمل الواردان أدناه. قيّم قابليتهما للاختبار، وأعد صياغة المتطلب عباراتٍ قابلة للاختبار، واكتب ما يجب أن يوفّره النظام لتتمكن من اختبارها.
REQ-14 ينبغي أن يتمكن العملاء من اختيار موعد توصيل مناسب. وينبغي أن تتحدّث
المواعيد لحظياً، وألا تُعرض المواعيد المحجوزة بالكامل، إلخ.
BR-3 الطلبات المقدَّمة بعد الساعة 22:00 يكون أقرب موعد لتسليمها بعد غد.- ضع علامة على كل كلمة أو عبارة لا يستطيع الاختبار فحصها، واذكر الخاصية التي تخرقها: الوضوح أو القابلية للقياس أو الاتساق.
- قارن REQ-14 بالقاعدة BR-3 ودوّن أي تعارض أو نقص.
- أعد صياغة REQ-14 عباراتٍ مرقّمة لكل منها حكم واحد، وعلّم القيم المقترحة بعبارة «للتأكيد».
- اكتب ما تحتاج إلى التحكم فيه وملاحظته لاختبار صياغتك.
إظهار الإجابة النموذجية
غير قابل للاختبار كما هو مكتوب: «مناسب» (غير قابل للقياس: أي أيام ومدد مواعيد تُعرض؟)، و«لحظياً» (غير قابل للقياس: خلال كم يجب أن يختفي الموعد الممتلئ؟)، و«محجوزة بالكامل» (غير واضح: كم طلباً يملأ الموعد؟)، و«إلخ» (غير واضح: قائمة مفتوحة)، و«ينبغي» (غير واضح: إلزامي أم اختياري؟). أما BR-3 فقابلة للاختبار إلا عند حدّها: اسأل هل يُعدّ الطلب المقدَّم في الساعة 22:00 تماماً «بعد الساعة 22:00»، وبتوقيت أي منطقة زمنية تُحسب الساعة.
الاتساق: لا يذكر REQ-14 موعد الإغلاق 22:00، فقد تُعرض على عميل يطلب الساعة 22:30 مواعيدُ الغد، وهذا ما تمنعه BR-3. يجب أن تتبع الصياغة الجديدة BR-3، أو أن يغيّر المالك أحدهما.
الصياغة المقترحة، والقيم للتأكيد: 14.1 تعرض صفحة الدفع مواعيد مدة كل منها ساعتان بين 08:00 و22:00 في كل يوم من الأيام السبعة القادمة بدءاً من الغد. 14.2 للطلب المقدَّم بعد 22:00 لا تُعرض مواعيد الغد، فيكون أقرب موعد بعد غد (BR-3). 14.3 يتسع الموعد لعشرين طلباً على الأكثر، والموعد الذي فيه 20 طلباً مؤكداً لا يُعرض. 14.4 يختفي الموعد الممتلئ عن بقية العملاء خلال 10 ثوانٍ، وإذا أكّد عميل موعداً امتلأ للتو فلا يُقدَّم الطلب وتظهر الرسالة «هذا الموعد لم يعد متاحاً. اختر موعداً آخر». واسأل مالك المنتج عمّا قصدته كلمة «إلخ».
قابلية التحكم: ضبط الوقت الحالي في بيئة الاختبار لاختبار موعد الإغلاق 22:00 دون انتظار، وإنشاء طلبات بالجملة (عبر API أو بيانات أولية) لملء موعد، وجعل سعة الموعد قابلة للضبط في بيئة الاختبار. قابلية الملاحظة: رؤية سعة كل موعد وعدد طلباته المحجوزة (شاشة إدارة أو API أو قاعدة البيانات)، والطوابع الزمنية في السجلات لقياس التحديث خلال 10 ثوانٍ.
أسئلة شائعة
هل قابلية الاختبار صفة للمتطلبات أم للنظام؟
للاثنين. جانب المتطلب يحدد هل تعرف النتيجة المتوقعة، وجانب النظام يحدد هل تستطيع تهيئة الاختبار ورؤية النتيجة الفعلية. والمتطلب الواضح على نظام لا تستطيع ملاحظته قد يكون صعب الاختبار مثل المتطلب الغامض على نظام يُظهر كل ما يفعله.
من يعيد صياغة المتطلب غير القابل للاختبار: المختبِر أم مالك المنتج؟
المختبِر يكتشف الفجوة ويقترح الصياغة ويطرح الأسئلة. ومالك المتطلب يحدد القيم ويعتمد الصياغة، وتدخل النسخة المتفق عليها في قائمة العمل أو المواصفات حتى يعمل المطورون والمختبِرون من النص نفسه.
إذا كان المتطلب قابلاً للاختبار، فهل هو صحيح؟
لا. قابلية الاختبار تعني أن الاختبار يستطيع أن يبيّن هل يحققه النظام، ولا تقول شيئاً عن كونه يصف ما يحتاجه المستخدمون والعمل فعلاً. فالمتطلب الدقيق قد يكون خاطئاً بدقة. والتأكد من ذلك هو التحقق من صلاحية المتطلبات (Requirements Validation)، موضوع الدرس التالي.
هل يمكن جعل كل متطلب قابلاً للاختبار؟
معظمها نعم، بتسمية نتيجة قابلة للملاحظة أو هدف له ظروف. أما الهدف العام مثل «أن يثق العملاء بالتطبيق» فلا يمكن اختباره كما هو مكتوب: احتفظ به سياقاً، واستخرج منه متطلبات قابلة للاختبار تخدمه، مثل قواعد محددة للأمان والخصوصية ومعالجة الأخطاء.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelنموذج جودة المنتج: الملاءمة الوظيفية وكفاءة الأداء والتوافق وقابلية التفاعل والموثوقية والأمان وقابلية الصيانة والمرونة.
تدرّب بأدوات متقن
حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.
ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.
اكتشف العبارات الغامضة أو المبهمة أو المتناقضة في المتطلبات واحصل على أسئلة توضيحية من الذكاء الاصطناعي من متقن.
راجع معايير القبول من حيث قابلية الاختبار والاكتمال والغموض، مع اقتراحات صياغة معاد كتابتها من الذكاء الاصطناعي من متقن.
ولّد استجابات API وهمية كاملة (الحالة والترويسات وجسم JSON) لحالات النجاح والقوائم والتفاصيل والأخطاء والنتائج الفارغة.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.