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

تصميم الاختبار (Test Design) هو نشاط الاختبار الذي يحوّل شروط الاختبار (Test Conditions) إلى حالات اختبار وإلى بقية مواد الاختبار (Testware) اللازمة لتنفيذها. فتحليل الاختبار حدّد ماذا نختبر، وتصميم الاختبار يحدد كيف: بأي مدخلات، وفي أي حالة، وبأي نتائج متوقعة، وعلى أي بيانات، وفي أي بيئة.

مثال ذلك: أنتج تحليل برنامج ولاء الشرطَ «يحتاج العضو إلى ⁦500⁩ نقطة على الأقل كي يستبدلها». فيحوّله تصميم الاختبار إلى أربعة عناصر تغطية (Coverage Items) قابلة للعدّ، وإلى حالتي اختبار بنتائج متوقعة دقيقة، وإلى قائمة بالبيانات والبيئة التي تحتاجها هاتان الحالتان.

لماذا يهم

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

أما التصميم المسبق فيمنحك رقماً تُبلغ عنه («غُطّيت ⁦4⁩ من ⁦4⁩ عناصر تغطية») بدلاً من انطباع، وحالات اختبار يراجعها الآخرون قبل أن توجد الشيفرة. وكتابة النتائج المتوقعة بدقة تكشف أيضاً الثغرات في أساس الاختبار (Test Basis) ما دام سدّها رخيصاً.

ما يدخل إلى تصميم الاختبار وما يخرج منه

يبدأ تصميم الاختبار من مخرجات تحليل الاختبار: شروط اختبار مرتبة حسب الأولوية ومتتبَّعة إلى أساس الاختبار. وشرط مثل «الحد الأدنى لرصيد النقاط للاستبدال» يقول ماذا نختبر، لكنه لا يحدد بعدُ القيم ولا النتائج المتوقعة.

يصف منهج ISTQB للمستوى التأسيسي (الإصدار ⁦4.0⁩) تصميم الاختبار بأنه تفصيل شروط الاختبار إلى حالات اختبار ومواد اختبار أخرى، وكثيراً ما يتم ذلك بتحديد عناصر التغطية باستخدام تقنية اختبار. ومخرجاته هي:

  • عناصر التغطية: عناصر قابلة للعدّ تُشتق من كل شرط اختبار، ويجب أن تغطيها حالات الاختبار.
  • حالات الاختبار مرتبة حسب الأولوية: شروط مسبقة ومدخلات وإجراءات ونتائج متوقعة وشروط لاحقة.
  • مواثيق الاختبار (Test Charters)، للشروط التي يغطيها الاختبار الاستكشافي بدلاً من حالات اختبار مكتوبة الخطوات: يحدد الميثاق ما يُستكشف ولماذا، من دون خطوات ثابتة.
  • متطلبات بيانات الاختبار: ما البيانات التي تحتاجها الاختبارات، وفي أي حالة.
  • متطلبات بيئة الاختبار: الإعدادات والأنظمة المتصلة والأدوات والصلاحيات.

عناصر التغطية: الجسر بين الشرط وحالة الاختبار

يعرّف مسرد ISTQB عنصر التغطية بأنه سمة أو مجموعة سمات مشتقة من شرط اختبار واحد أو أكثر باستخدام تقنية اختبار. وبعبارة أبسط: تحوّل التقنية شرطاً عاماً إلى عناصر محددة، يحتاج كلٌّ منها إلى اختبار واحد على الأقل.

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

وكل تقنية، ولكلٍّ منها درس خاص في وحدة تقنيات تصميم الاختبار، تنتج عناصر مختلفة:

  • تقسيم التكافؤ (Equivalence Partitioning): كل قسم، صالحاً كان أو غير صالح؛ والقسم مجموعة قيم يُفترض أن يعاملها النظام بالطريقة نفسها.
  • تحليل القيم الحدّية (Boundary Value Analysis): القيم الحدّية، أي أصغر قيمة وأكبر قيمة في كل قسم مرتب. وفي الصيغة الثنائية (2-value BVA) تقترن كل قيمة حدّية بأقرب جارة لها في القسم المجاور، فالحدّ عند ⁦500⁩ نقطة يعطي ⁦499⁩ و⁦500⁩.
  • اختبار جدول القرار (Decision Table Testing): كل عمود ممكن، أي تركيبة من الشروط.
  • اختبار انتقالات الحالة (State Transition Testing): الحالات، أو الانتقالات الصالحة، أو كل الانتقالات، بحسب معيار التغطية.

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

مثال تطبيقي: شرط واحد وأربعة عناصر تغطية وحالتا اختبار

أساس الاختبار هو القصة LOY-9 في تطبيق بقالة: «يستطيع الأعضاء الذين لديهم ⁦500⁩ نقطة على الأقل استبدالها عند الدفع. كل ⁦100⁩ نقطة تخصم ⁦10.00⁩ ريالات من الطلب. تنتهي صلاحية النقاط بعد ⁦12⁩ شهراً من كسبها». وقد صنّف التحليل الشرط TCO-1، أي الحد الأدنى للرصيد، عالي المخاطر: فالعيب فيه يمنح خصومات بلا حق أو يحرم منها أعضاء مستحقين.

يعطي تقسيم التكافؤ وتحليل القيم الحدّية الثنائي أربعة عناصر تغطية. وتكفي حالتا اختبار لتغطيتها جميعاً، لأن كل حالة تصيب قسماً وقيمة حدّية في الوقت نفسه. ويبدأ القسم الأدنى من ⁦0⁩، وهو أصغر رصيد ممكن، فالقيمة ⁦0⁩ قيمة حدّية أيضاً؛ لكن التحليل أفرد للأعضاء الذين لا نقاط لديهم شرطاً مستقلاً، فاقتصر هذا التصميم على حدّ الـ⁦500⁩ نقطة.

تصميم الاختبار لقاعدة النقاط: شرط واحد وتقنيتان وأربعة عناصر تغطية وحالتا اختبار تغطيانها جميعاً، مع البيانات والبيئة التي تحتاجها هاتان الحالتان.
  1. 1شرط الاختبارمُدخل من تحليل الاختبار: ماذا نختبرTCO-1 الحد الأدنى للرصيد لاستبدال النقاط · المخاطر: عالية
  2. 2تقنيات الاختبارتقسيم التكافؤ وتحليل القيم الحدّية الثنائي، اختيرا وفق المخاطر
  3. 3أربعة عناصر تغطيةالأقسام: أقل من ⁦500⁩، و⁦500⁩ فأكثر · القيمتان الحدّيتان: ⁦499⁩ و⁦500⁩
  4. 4حالتا اختبارغُطّيت ⁦4⁩ من ⁦4⁩ عناصر تغطية: ⁦100%⁩TC-11: ⁦499⁩ نقطة، لا استبدال · TC-12: ⁦500⁩ نقطة، خصم ⁦50.00⁩ ريالاً
    تُصمَّم معها
    • 5متطلبات البيانات والبيئةعضوان لديهما ⁦499⁩ و⁦500⁩ نقطة بالضبط؛ خدمة الولاء أو بديل (Stub)

طوال الخطوات 2–4 تصميم الاختبار: كيف نختبر

بعد ذلك:ثم تُنشئ تهيئة الاختبار البيانات وتجهّز البيئة وتجمع إجراءات الاختبار

  • متطلبات بيانات الاختبار: عضوان لدى أحدهما ⁦499⁩ نقطة بالضبط ولدى الآخر ⁦500⁩ نقطة بالضبط، كلها مكتسبة خلال آخر ⁦12⁩ شهراً كي لا تتدخل صلاحية النقاط، وسلة إجماليها ⁦120.00⁩ ريالاً.
  • متطلبات بيئة الاختبار: خدمة الولاء متصلة، أو بديل (Stub) يعيد رصيداً محدداً، وطريقة لضبط الأرصدة مثل شاشة إدارة أو سكربت لتهيئة البيانات (Seed Script).
  • أسئلة أثارها التصميم: عندما يقل الرصيد عن ⁦500⁩، هل يُخفى خيار الاستبدال أم يُعطَّل، وبأي رسالة؟ هل يمكن استبدال ⁦550⁩ نقطة أم مضاعفات ⁦100⁩ فقط؟ وماذا لو تجاوز الخصم إجمالي الطلب؟
TCO-1  الشرط: الحد الأدنى للرصيد لاستبدال النقاط (المخاطر: عالية)
التقنيات: تقسيم التكافؤ + تحليل القيم الحدّية الثنائي

عنصر التغطية، ثم الحالة التي تغطيه، ثم وصفه:
CI-1  TC-11  قسم: رصيد أقل من 500
CI-2  TC-12  قسم: رصيد 500 فأكثر
CI-3  TC-11  قيمة حدّية: 499
CI-4  TC-12  قيمة حدّية: 500

TC-11  عضو لديه 499 نقطة، وإجمالي طلبه 120.00، يفتح صفحة الدفع
       المتوقع: لا يمكن استبدال النقاط، ويبقى الإجمالي 120.00
TC-12  عضو لديه 500 نقطة يستبدلها كلها، وإجمالي طلبه 120.00
       المتوقع: خصم 50.00 ريالاً، والإجمالي 70.00، وخصم 500 نقطة من الرصيد

التغطية: 4 من 4 عناصر تغطية = 100%

جرّبها: المتطلبات ← حالات اختبار جرّبها: مولّد حالات الاختبار

صمّم البيانات والبيئة الآن، وابنِهما لاحقاً

يحدد تصميم الاختبار ما تحتاجه الاختبارات، ويُنشئه النشاط التالي: تهيئة الاختبار (Test Implementation). وتدوين هذه الاحتياجات الآن يسمح بتجهيز البيانات وطلب البيئات في الوقت المناسب، بدلاً من اكتشافها في أول يوم من التنفيذ على هيئة اختبارات معطَّلة.

متطلب بيانات الاختبار يصف السجلات وحالاتها («عضو لديه ⁦499⁩ نقطة بالضبط، كلها مكتسبة خلال آخر ⁦12⁩ شهراً»)، لا رقم مستخدم بعينه. ومتطلب بيئة الاختبار يغطي الاتصالات والإعدادات: بيئات تجربة (Sandbox) أو بدائل للأطراف الخارجية، ومفاتيح الميزات (Feature Flags)، واللغة والمنطقة الزمنية، وحساباً لكل دور، وأدوات تحكم مثل ضبط التاريخ.

ويصف المعيار ISO/IEC/IEEE ⁦29119-2⁩ عملية واحدة مدمجة لتصميم الاختبار وتهيئته. وفي إصداره لعام ⁦2021⁩ تُشتق عناصر تغطية الاختبار من نموذج اختبار (Test Model)، مثل مجموعة أقسام أو مخطط حالات، بدلاً من شروط الاختبار، ثم تُشتق حالات الاختبار وإجراءات الاختبار. أما ISTQB فيفصل النشاطين، وكثير من الفرق تنجزهما في جلسة واحدة.

جرّبها: مصنع بيانات الاختبار

أخطاء شائعة

  • الانتقال من المتطلب إلى حالات الاختبار مباشرةً بلا عناصر تغطية، فلا يستطيع أحد أن يعرف هل المجموعة مكتملة.
  • حالات اختبار كثيرة لعنصر التغطية نفسه، مثل خمسة أرصدة بين ⁦600⁩ و⁦2,000⁩ نقطة، بينما لا يوجد اختبار للقيمتين ⁦499⁩ و⁦500⁩.
  • نتائج متوقعة مبهمة مثل «يُطبَّق الخصم بشكل صحيح» بدلاً من قيم من أساس الاختبار: خصم ⁦50.00⁩ ريالاً والإجمالي ⁦70.00⁩.
  • ترك احتياجات البيانات والبيئة ضمنية حتى يكشف التنفيذ أنه لا يوجد عضو لديه ⁦499⁩ نقطة بالضبط.
  • حالات اختبار لا تحمل معرّف شرط الاختبار الذي جاءت منه، فلا يمكن تتبّع أثر تغيير المتطلب على الاختبارات.
  • العمق نفسه لكل الشروط، بدلاً من تخصيص أكبر عدد من عناصر التغطية حيث يكون الإخفاق (Failure) أعلى كلفة.

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

في الفريق الرشيق (Agile) يجري تصميم الاختبار قصةً بقصة، أثناء تحسين قائمة المهام (Refinement) وفي بداية السبرنت، متى استقرت معايير القبول. ويحسم المختبِر النتائج المتوقعة والأسئلة المفتوحة مع مالك المنتج، والحدود التقنية وطرق ضبط البيانات أو الساعة مع المطورين، ويطلب من مختبِر آخر مراجعة التصميم.

سجّل لكل شرط اختبار التقنيةَ وعناصر التغطية وحالات الاختبار التي تغطيها، مع معرّف الشرط على كل حالة اختبار كي يصمد التتبّع (Traceability) أمام تغيّر المتطلبات. وسلّم متطلبات البيانات والبيئة لمن يجهّزها، واجعل لكل سؤال مفتوح مسؤولاً عنه. ومن هذا السجل تبدأ تهيئة الاختبار.

تمرين عملي

صمّم اختبارات لقواعد مواعيد العيادة

المطلوب

يُكمل هذا التمرين قصة العيادة US-57 من درس تحليل الاختبار. أجاب مالك المنتج عن سؤالَي AC2 وAC5 بالقاعدتين أدناه؛ ولأن الإلغاء المتأخر صار يكلّف المريض مالاً، رُفع تقييم مخاطر الشرط C7 من متوسطة إلى عالية. حدّد عناصر التغطية للشرطين C3 وC7، واكتب أصغر مجموعة من حالات الاختبار تغطيها جميعاً، واكتب ما تحتاجه هذه الاختبارات.

احسب نافذة الحجز بالأيام الكاملة، وقارن الأوقات بدقة الدقيقة. واكتب كل افتراض آخر على هيئة سؤال.

المادة
US-57  القصة: حجز موعد في العيادة عبر الإنترنت
إجابات مالك المنتج عن سؤالَي AC2 وAC5:
القاعدة 1: يستطيع المريض أن يحجز موعداً يقع بعد 1 إلى 30 يوماً من اليوم.
القاعدة 2: الإلغاء مجاني حتى 24 ساعة قبل الموعد؛
           والإلغاء بعد ذلك عليه رسوم قدرها 50.00 ريالاً.

شروط الاختبار الناتجة عن تحليل الاختبار:
C3  نافذة الحجز: كم يوماً مسبقاً يمكن للمريض أن يحجز (المخاطر: متوسطة)
C7  رسوم الإلغاء تعتمد على الوقت المتبقي قبل بدء الموعد (المخاطر: عالية)
الخطوات
  1. للشرط C3، اكتب أقسام «عدد الأيام المسبقة» والقيم الحدّية للصيغة الثنائية.
  2. افعل الشيء نفسه للشرط C7 مع «الوقت المتبقي قبل الموعد».
  3. اكتب الحد الأدنى من حالات الاختبار مع المدخل والنتيجة المتوقعة وعناصر التغطية التي تغطيها كل حالة، ثم احسب التغطية.
  4. اكتب متطلبات البيانات والبيئة والأسئلة الموجهة إلى مالك المنتج.
إظهار الإجابة النموذجية
الإجابة النموذجية

الشرط C3، سبعة عناصر تغطية. الأقسام: ⁦0⁩ يوم مسبقاً أو أقل، أي اليوم نفسه أو تاريخ ماضٍ (غير صالح، CI-1)؛ ومن ⁦1⁩ إلى ⁦30⁩ يوماً (صالح، CI-2)؛ و⁦31⁩ فأكثر (غير صالح، CI-3). القيم الحدّية: ⁦0⁩ و⁦1⁩ و⁦30⁩ و⁦31⁩ (من CI-4 إلى CI-7). أربع حالات اختبار: اليوم نفسه، مرفوض (CI-1 وCI-4)؛ الغد، مقبول (CI-2 وCI-5)؛ بعد ⁦30⁩ يوماً، مقبول (CI-2 وCI-6)؛ بعد ⁦31⁩ يوماً، مرفوض (CI-3 وCI-7). التغطية: ⁦7⁩ من ⁦7⁩ = ⁦100%⁩.

الشرط C7، أربعة عناصر تغطية. الأقسام: ⁦24⁩ ساعة أو أكثر قبل البداية، مجاني (CI-8)؛ وأقل من ⁦24⁩ ساعة، برسوم (CI-9). القيم الحدّية: ⁦24:00⁩ و⁦23:59⁩ قبل البداية (CI-10 وCI-11). حالتا اختبار، كلتاهما عالية الأولوية: الإلغاء قبل ⁦24⁩ ساعة بالضبط، بلا رسوم (CI-8 وCI-10)؛ والإلغاء قبل ⁦23⁩ ساعة و⁦59⁩ دقيقة، تُحصَّل رسوم ⁦50.00⁩ ريالاً (CI-9 وCI-11). التغطية: ⁦4⁩ من ⁦4⁩ = ⁦100%⁩. أما الطرف الآخر لقسم الرسوم، أي وقت بدء الموعد نفسه، فيتوقف على جواب السؤال الأخير أدناه.

البيانات: مريض بوسيلة دفع في بيئة تجربة الدفع؛ وطبيب لديه مواعيد شاغرة اليوم وغداً وبعد ⁦30⁩ و⁦31⁩ يوماً (فمن دون موعد شاغر في اليوم ⁦31⁩ لا يثبت الرفض شيئاً)؛ ومواعيد ذات أوقات بداية معروفة. البيئة: المنطقة الزمنية للإنتاج، وساعة يمكن التحكم فيها أو طريقة أخرى لبلوغ حدّ الـ⁦24⁩ ساعة بدقة الدقيقة، وبيئة تجربة الدفع متصلة.

الأسئلة: هل الإلغاء عند ⁦24⁩ ساعة بالضبط مجاني؟ هل يُقارن الوقت بالدقيقة أم بالثانية؟ أي منطقة زمنية تُعتمد؟ هل اليوم هو اليوم ⁦0⁩ في النافذة؟ هل يمكن الإلغاء بعد بدء الموعد، وبأي كلفة؟

أسئلة شائعة

ما الفرق بين تحليل الاختبار وتصميم الاختبار؟

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

هل عنصر التغطية هو نفسه حالة الاختبار؟

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

هل يجب أن أكتب دائماً حالات اختبار مفصلة خطوة بخطوة؟

لا. يتبع مستوى التفصيل السياق المتفق عليه في خطة الاختبار. فالعمل الخاضع للتنظيم والأتمتة والأعضاء الجدد في الفريق يحتاجون حالات اختبار منخفضة المستوى (Low-level) بقيم محددة؛ وقد يكتفي فريق متمرس بحالات عالية المستوى (High-level)، أو يغطي شرطاً بميثاق اختبار استكشافي، وهو أيضاً من مخرجات تصميم الاختبار في منهج ISTQB.

هل تعني تغطية ⁦100%⁩ أن الميزة خالية من العيوب؟

لا. معناها أن كل عنصر تغطية حدّدته غطّاه اختبار واحد على الأقل. وقد تبقى العيوب مختبئة في شروط أغفلها التحليل، أو في عناصر لا تنتجها التقنية المختارة، أو في تركيبات لم يصممها أحد. فالتغطية تبيّن ما اختُبر، لا أن البرنامج صحيح.

المراجع

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

حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.

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

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

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

نفّذ تحليلاً كاملاً للقيم الحدّية (ثنائي القيم وثلاثي القيم) مع فئات التكافؤ والنتائج المتوقّعة.

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

ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.

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

مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.

بيانات الاختبار

للتعمّق أكثر

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

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