اختبار حالات الاستخدام

اختبار حالات الاستخدام (Use Case Testing) تقنية لتصميم الاختبار من نوع الصندوق الأسود، تستخرج الاختبارات من حالات الاستخدام. وحالة الاستخدام (Use Case) تصف خطوة بخطوة كيف يتفاعل فاعل (Actor)، أي دور مستخدم أو نظام آخر، مع النظام ليحقق هدفاً واحداً: عبر تدفق رئيسي (Main Flow) هو المسار المعتاد، وتدفقات بديلة (Alternative Flows) هي مسارات صالحة أخرى، وتدفقات استثنائية (Exception Flows) تصف ما يحدث حين يسوء أمر ما. وكل تدفق يصبح اختباراً واحداً على الأقل.

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

لماذا يهم

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

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

مكونات حالة الاستخدام

بلغة ISTQB، حالة الاستخدام سلسلة من التفاعلات بين فاعل والنظام تنتهي بنتيجة ملموسة. وقد يكون الفاعل مستخدماً أو أي شيء آخر يتبادل المعلومات مع النظام، وهو دور وليس شخصاً بعينه: «عميل» أو «بوابة دفع». الفاعل الرئيسي (Primary Actor) يبدأ حالة الاستخدام ليحقق هدفه، والفاعلون المساندون (Supporting Actors) هم الأشخاص أو الأنظمة التي يُحتاج إليها في الطريق.

تختلف التسميات بين القوالب، فبعض الفرق تسمي كل تفرع «امتداداً» (Extension)، لكن كل تفرع يجب أن يذكر أين يغادر التدفق الرئيسي وأين ينتهي. ولحالة الاستخدام المعتادة هذه الأجزاء:

  • الاسم: الهدف بصيغة فعل، مثل «تقديم طلب عبر الإنترنت».
  • الشرط المسبق (Precondition) والمُحفِّز (Trigger): ما يجب أن يكون صحيحاً قبل أن تبدأ، والحدث الذي يبدؤها.
  • التدفق الرئيسي (ويسمى أيضاً التدفق الأساسي أو سيناريو النجاح الرئيسي): الخطوات المرقمة للمسار المعتاد إلى الهدف.
  • التدفقات البديلة: مسارات صالحة أخرى بلا خطأ، تنتهي عادةً عند الهدف نفسه، مثل الدفع ببطاقة جديدة.
  • التدفقات الاستثنائية: استجابة النظام حين يسوء أمر ما، كمدخل غير صالح، أو قاعدة عمل تمنع خطوة، أو نظام مساند يرفض أو لا يرد. فإما أن يتعافى التدفق فيبقى تحقيق الهدف ممكناً، وإما أن تنتهي حالة الاستخدام بأمان دون تحقيق الهدف.
  • الشروط اللاحقة (Postconditions): ما يكون صحيحاً في النهاية، عند النجاح (حُفظ الطلب) وعند الإخفاق (لم يُخصم شيء وبقيت السلة)؛ وكثيراً ما يُنسى جانب الإخفاق.

مثال تطبيقي: حالة استخدام لإتمام الشراء

كتب محلل أعمال حالة الاستخدام التالية لمتجر إلكتروني. اقرأها بعين المختبِر: عُدّ التدفقات، ولاحظ أين يغادر كلٌّ منها التدفق الرئيسي وأين ينتهي.

فيها ستة تدفقات: التدفق الرئيسي، وتدفقان بديلان، وثلاثة تدفقات استثنائية. يتعافى E1 ويعود إلى التدفق الرئيسي، أما E2 وE3 فينتهيان دون طلب مدفوع، لذا يجب أن تتحقق اختباراتهما مما يجب ألا يحدث: طلب دفع ثانٍ، أو خصم دون طلب، أو سلة مفقودة.

UC-07  تقديم طلب عبر الإنترنت
الفاعل الرئيسي: العميل (مسجّل الدخول)
الفاعل المساند: بوابة الدفع
الشرط المسبق: في السلة منتج واحد متوفر على الأقل
المُحفِّز: يختار العميل «إتمام الشراء»

التدفق الرئيسي
1. يعرض النظام المنتجات والإجمالي وعنوان التوصيل المحفوظ.
2. يؤكد العميل العنوان.
3. يختار العميل البطاقة المحفوظة ثم «ادفع».
4. يرسل النظام طلب دفع واحداً، وتوافق عليه البوابة.
5. ينشئ النظام الطلب بحالة «مدفوع»، وينقص المخزون، ويفرّغ السلة،
   ويعرض رقم الطلب.

التدفقات البديلة
A1 عند 2  يضيف العميل عنواناً جديداً ويتحقق منه النظام. يعود إلى 3.
A2 عند 3  يُدخل العميل بطاقة جديدة. يعود إلى 4.

التدفقات الاستثنائية
E1 عند 4  ترفض البوابة الدفع: يعرض النظام السبب. رجوع إلى 3.
E2 عند 4  لا رد خلال 30 ثانية: يعرض النظام «جارٍ تأكيد الدفع»، ويسجّل الطلب
          بحالة «معلّق»، ولا يرسل طلب دفع ثانياً. تنتهي.
E3 عند 5  نفد منتج أثناء الدفع: يلغي النظام عملية الدفع، ويُبقي السلة،
          ويُبلغ العميل. تنتهي.
حالة الاستخدام UC-07 لإتمام الشراء: خمس خطوات في التدفق الرئيسي، وتدفقان بديلان يعودان إليه، وثلاثة تدفقات استثنائية تتعافى أو تنتهي بأمان؛ ستة تدفقات تعني ستة اختبارات على الأقل.
  1. 1عرض المنتجات والإجمالي والعنوان المحفوظالمُحفِّز: يختار العميل «إتمام الشراء»النظام
  2. 2تأكيد العنوانالعميل

    فرع: A1 · بديل: عنوان جديد يتحقق منه النظام ← يعود إلى 3

  3. 3اختيار البطاقة المحفوظة ثم «ادفع»العميل

    فرع: A2 · بديل: بطاقة جديدة ← يعود إلى 4

  4. 4إرسال طلب دفع واحد، وموافقة البوابةالنظام والبوابة

    يتكرر: E1 · استثناء: رفض ← عرض السبب ← رجوع إلى 3

    فرع: E2 · استثناء: لا رد خلال 30 ثانية ← طلب «معلّق» دون طلب دفع ثانٍ؛ تنتهي

  5. 5إنشاء الطلب «مدفوعاً» وإنقاص المخزون وتفريغ السلةعرض رقم الطلبالنظام

    فرع: E3 · استثناء: نفد منتج ← إلغاء الدفع وإبقاء السلة؛ تنتهي

بعد ذلك:تحقق الهدف: طلب مدفوع، ونقص المخزون، وسلة فارغة

تغادر التفرعات المتقطعة التدفق الرئيسي عند الخطوة التي تبدأ منها: التدفقات البديلة (A) تصل إلى الهدف أيضاً، والتدفقات الاستثنائية (E) تعالج خللاً ما.

استخراج حالات الاختبار من التدفقات

كل تدفق عنصر تغطية (Coverage Item)، فالحد الأدنى اختبار واحد لكل تدفق. واختبار التفرع يتبع التدفق الرئيسي حتى نقطة التفرع، ثم يُطلق التفرع ويتبعه حتى نهايته. فإذا كان التفرع يعود إلى التدفق الرئيسي في خطوة لاحقة، كما في A1 وA2، يُكمل الاختبارُ التدفقَ الرئيسي ليُظهر أن الهدف ما زال يتحقق. وإذا كان يرجع إلى خطوة سابقة، كما في E1، يتحقق الاختبار من أن الفاعل عاد إلى تلك الخطوة دون أي عمل نصف منجز: لا طلب ولا خصم.

  • الشرط المسبق ← تهيئة الاختبار؛ والمُحفِّز ← الخطوة الأولى؛ والشروط اللاحقة ← النتائج المتوقعة.
  • تحقق من البيانات لا من الشاشة وحدها: حالة الطلب، ومستوى المخزون، وسجل الدفع في بيئة الاختبار الخاصة ببوابة الدفع.
  • خطّط لطريقة إطلاق كل استثناء: بطاقة اختبار ترفضها دائماً البيئة التجريبية (Sandbox) لبوابة الدفع، وهي نسخة اختبار من الخدمة يشغّلها المزوّد؛ أو بديل وهمي (Stub) يؤخر الرد، وهو بديل عن البوابة يتحكم فيه الفريق؛ أو مستخدم اختبار ثانٍ يشتري آخر قطعة. فالتفرع الذي لا يستطيع أحد إطلاقه يسقط من الاختبار بصمت، لذا أثِره مبكراً.
  • داخل الخطوات أعِد استخدام تقنيات الدروس السابقة: القيم الحدّية لحقول العنوان، وانتقالات الحالة لحالة الطلب («معلّق» و«مدفوع»).
TC-07-01  الرئيسي: عنوان محفوظ وبطاقة محفوظة
          المتوقع: طلب مدفوع، ونقص المخزون، وسلة فارغة، وظهور رقم الطلب
TC-07-02  A1: عنوان جديد صالح في الخطوة 2
          المتوقع: طلب مدفوع عليه العنوان الجديد
TC-07-03  A2: بطاقة اختبار جديدة في الخطوة 3
          المتوقع: طلب مدفوع بالبطاقة الجديدة
TC-07-04  E1: بطاقة من البيئة التجريبية ترفضها البوابة
          المتوقع: ظهور السبب، والرجوع إلى الخطوة 3، ولا طلب ولا خصم
TC-07-05  E2: بديل وهمي يؤخر رد البوابة أكثر من 30 ثانية
          المتوقع: ظهور الرسالة، وطلب معلّق، وطلب دفع واحد فقط
TC-07-06  E3: مستخدم ثانٍ يشتري آخر قطعة أثناء الدفع
          المتوقع: إلغاء الدفع، ولا طلب، وبقاء السلة، وإبلاغ العميل

جرّبها: قصة المستخدم ← سيناريوهات اختبار جرّبها: المتطلبات ← سيناريوهات اختبار

تغطية حالات الاستخدام وحدودها

تغطية حالات الاستخدام هي عدد التدفقات التي مرّ بها اختبار واحد على الأقل مقسوماً على عدد التدفقات المحددة، معبَّراً عنه بنسبة مئوية. فحزمة اختبارات لا تشغّل إلا التدفق الرئيسي وA1 وE1 تغطي 3 من 6 تدفقات في UC-07، أي 50%. أما الاختبارات الستة أعلاه فتبلغ 100%.

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

  • يُلغي الفاعل، أو يرجع خطوة، أو ينتظر حتى تنتهي الجلسة.
  • يكرر الفاعل إجراءً: ينقر «ادفع» مرتين، أو يحدّث الصفحة أثناء الدفع.
  • نظام مساند بطيء، أو غير متاح، أو يرد مرتين.
  • مستخدم آخر يغيّر البيانات نفسها في اللحظة نفسها.

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

أخطاء شائعة

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

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

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

سمِّ كل اختبار أو ضع له وسماً بحالة الاستخدام والتدفق (UC-07/E2)، لتستطيع الإبلاغ عن التغطية لكل حالة استخدام ومعرفة الاختبارات التي يجب تحديثها حين تتغير. وعندها يذكر تقرير الخطأ حالة الاستخدام والتدفق والخطوة: «UC-07 E2، الخطوة 4: يُرسَل طلب دفع ثانٍ بعد انتهاء المهلة».

تمرين عملي

استخرج الاختبارات وقِس التغطية لحالة استخدام حجز موعد

المطلوب

حالة الاستخدام أدناه من تطبيق لعيادة، ولدى الفريق ثلاثة اختبارات: ⁦TC-21-01⁩ (التدفق الرئيسي) و⁦TC-21-02⁩ (A1) و⁦TC-21-03⁩ (E1). حدّد الناقص، وصمّم الاختبارات المتبقية، وقِس تغطية حالة الاستخدام قبل إضافتها وبعدها.

المادة
UC-21  حجز موعد في عيادة
الفاعل الرئيسي: المريض (مسجّل الدخول)
الفاعل المساند: خدمة الرسائل النصية (SMS)
المُحفِّز: يختار المريض «حجز موعد»

التدفق الرئيسي
1. يختار المريض عيادة وطبيباً.
2. يعرض النظام مواعيد الطبيب المتاحة في الأيام الـ 14 القادمة.
3. يختار المريض موعداً ويؤكده.
4. يحجز النظام الموعد، ويعرض رقم الحجز، ويطلب من خدمة الرسائل
   إرسال رسالة تأكيد.
الشرط اللاحق: لم يعد الموعد متاحاً، ويظهر الحجز في «مواعيدي».

التدفقات البديلة
A1 عند 1  يبحث المريض بالتخصص بدلاً من الطبيب. يعود إلى 2.
A2 عند 3  يضيف المريض ملاحظة للطبيب قبل التأكيد. يعود إلى 4.

التدفقات الاستثنائية
E1 عند 2  لا موعد متاحاً خلال 14 يوماً: يعرض النظام قائمة الانتظار. تنتهي.
E2 عند 3  حجز مريض آخر الموعد قبل لحظات: يُبلغ النظام بذلك
          ويعرض المواعيد المحدّثة. رجوع إلى 2.
E3 عند 4  خدمة الرسائل غير متاحة: يبقى الحجز ويظهر، ويعيد النظام
          محاولة إرسال الرسالة لاحقاً. تنتهي.
الخطوات
  1. اكتب كل تدفق بمعرّفه ونقطة تفرعه ونهايته.
  2. احسب تغطية الاختبارات الثلاثة الموجودة.
  3. لكل تدفق غير مختبَر اكتب كيف تُطلقه والحالة النهائية المتوقعة على الشاشة وفي البيانات.
  4. اكتب موقفين لا تصفهما حالة الاستخدام على شكل سؤالين لمحلل الأعمال.
إظهار الإجابة النموذجية
الإجابة النموذجية

التدفقات: الرئيسي؛ وA1 (عند 1، ويعود عند 2)؛ وA2 (عند 3، ويعود عند 4)؛ وE1 (عند 2، وينتهي دون حجز)؛ وE2 (عند 3، ويرجع إلى 2)؛ وE3 (عند 4، وينتهي والحجز قد تمّ، فالتدفق الاستثنائي لا يعني دائماً إخفاقاً للفاعل). المجموع ستة تدفقات.

التغطية: 3 من 6 تدفقات = 50% قبل الإضافة، و6 من 6 = 100% بعد إضافة اختبارات A2 وE2 وE3.

⁦TC-21-04⁩ (A2): أضف ملاحظة ثم أكّد؛ المتوقع: ظهور رقم الحجز، وحفظ الملاحظة مع الحجز، وعدم بقاء الموعد متاحاً. ⁦TC-21-05⁩ (E2): يختار مريضا اختبار الموعد نفسه في متصفحين ويؤكدان واحداً بعد الآخر؛ المتوقع: الرسالة والمواعيد المحدّثة للثاني، وحجز واحد فقط. ⁦TC-21-06⁩ (E3): احجز وخدمة الرسائل مستبدلة ببديل وهمي غير متاح؛ المتوقع: ظهور رقم الحجز ووجود الحجز في «مواعيدي»، وإرسال الرسالة حين يعود البديل الوهمي متاحاً.

أسئلة ممكنة: هل يُحجز الموعد مؤقتاً أثناء الخطوة 3، وإلى متى؟ هل يستطيع المريض حجز موعدين في الوقت نفسه؟

أسئلة شائعة

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

قصة المستخدم عبارة قصيرة عن حاجة، معها معايير قبول، غرضها أن تفتح حواراً وأن تتسع لدورة تطوير واحدة (Iteration). أما حالة الاستخدام فتصف التفاعل كاملاً خطوة بخطوة، بتدفقاته البديلة والاستثنائية. وقد يقسّم الفريق حالة استخدام واحدة إلى عدة قصص؛ ويمكنك استخراج الاختبارات من أيٍّ منهما، لكن حالة الاستخدام تسرد لك التفرعات جاهزة.

هل اختبار حالات الاستخدام جزء من منهج ISTQB للمستوى التأسيسي؟

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

كم اختباراً تحتاج حالة الاستخدام؟

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

المراجع

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

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

ولّد سيناريوهات اختبار عالية المستوى تغطي الجوانب الوظيفية والسلبية والأمنية وسهولة الاستخدام والتوافق لأي ميزة.

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

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

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

للتعمّق أكثر

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

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