حالة الاختبار vs سيناريو الاختبار - شرح أكثر

مقال مجاني 12 دقيقة

مقدمة

مرحبا ويعطيكم العافية وأهلا وسهلا فيكم في الدرس السادس عشر من رحلتنا في تعلم الاختبار!

في الدروس السابقة، تعلمنا استراتيجيات اختبار مهمة زي Equivalence Class Partitioning (ECP)، Boundary Value Analysis (BVA)، Decision Tables، و State Transition Testing. هذه الاستراتيجيات ساعدتنا نحدد شو لازم نختبر و كم عدد الاختبارات التي نحتاجها.

لكن السؤال: متى نستخدم هذه الاستراتيجيات؟ هل منفتح الموقع ومنبدأ نختبر على طول؟

الجواب: لا!

كمختبرين محترفين، نجهز كل شي قبل ما نبدأ الاختبار. نبني حالات الاختبار (Test Cases) مسبقاً. لكن قبل أن نوصل لهاي المرحلة، لازم نفهم: ما الفرق بين سيناريو الاختبار (Test Scenario) و حالة الاختبار (Test Case)؟


الأهداف التعليمية

بنهاية هذا الدرس، ستكون قادراً على:

  • التمييز بين سيناريو الاختبار وحالة الاختبار
  • كتابة سيناريوهات اختبار واضحة وفعّالة
  • بناء حالات اختبار مفصلة من السيناريوهات
  • تطبيق استراتيجيات الاختبار لتحويل سيناريو واحد لحالات متعددة
  • تحديد متى نستخدم السيناريوهات ومتى نستخدم الحالات

سيناريو الاختبار (Test Scenario)

ما هو سيناريو الاختبار؟

سيناريو الاختبار هو جملة واحدة فقط بتصف ماذا سنختبر، مش كيف سنختبره.

السيناريو يحكيلك الهدف من الاختبار، مش الطريقة التي ستتبعها حتى توصل للهدف.

خصائص سيناريو الاختبار

الخاصية التفصيل
الطول جملة واحدة (سطر واحد)
المحتوى يصف ماذا نختبر (What)
التفصيل عام وغير مفصل
المعرفة يحتاج معرفة بالتطبيق لفهمه وتنفيذه
السرعة سريع جداً في الكتابة
الهدف تحديد نطاق الاختبار

أمثلة على سيناريوهات اختبار

دعونا نشوف أمثلة من مواقع ومنتجات نستخدمها كل يوم:

مثال من موقع Miro:

"لازم يتمكن المستخدم المجاني من إنشاء ثلاث لوحات قابلة للتحرير"

مثال من موقع Amazon:

"لازم يتمكن المستخدم من إضافة منتج إلى سلة التسوق"

مثال من موقع Facebook:

"لازم يتمكن المستخدم من تسجيل الدخول بنجاح باستخدام بريد إلكتروني وكلمة مرور صحيحة"

مثال من تطبيق WhatsApp:

"لازم يتمكن المستخدم من إرسال رسالة نصية لجهة اتصال"

لاحظ إنه كل هذه الجمل لا تشرح كيف سنختبر، لكن تحدد شو سنختبر.


حالة الاختبار (Test Case)

ما هي حالة الاختبار؟

حالة الاختبار هي وثيقة مفصلة فيها دليل خطوة بخطوة يشرح كيف سننفذ الاختبار.

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

مكونات حالة الاختبار

كل حالة اختبار لازم تحتوي على العناصر التالية:

1. المعرّف (Test Case ID)

رقم فريد لكل حالة اختبار، مثال: TC-001, TC-002, TC-010

2. سيناريو الاختبار (Test Scenario)

الجملة التي نختبرها (السيناريو الذي حكينا عنه فوق)

3. بيانات الاختبار (Test Data)

البيانات التي سنستخدمها في الاختبار، مثال:

  • اسم المستخدم: test@example.com
  • كلمة المرور: Test@1234
  • رقم الهاتف: 0791234567

4. خطوات الاختبار (Test Steps)

الخطوات بالتفصيل الممل، واحدة واحدة، مرقمة:

  1. افتح الموقع
  2. اضغط على زر تسجيل الدخول
  3. أدخل البريد الإلكتروني
  4. أدخل كلمة المرور
  5. اضغط على زر "Login"

5. النتيجة المتوقعة (Expected Result)

ما المفروض أن يصير بعد تنفيذ الخطوات؟

مثال: "يتم تسجيل الدخول بنجاح ويظهر اسم المستخدم في الصفحة الرئيسية"

6. النتيجة الفعلية (Actual Result)

ما صار فعلياً عندما نفذنا الاختبار؟ (هذه بتنملأ بعد التنفيذ)

مثال: "تم تسجيل الدخول بنجاح ✅" أو "ظهرت رسالة خطأ ❌"


العلاقة بين السيناريو والحالة

سيناريو واحد = حالات اختبار متعددة

كل سيناريو اختبار بيتحول لأكثر من حالة اختبار، لأنه لازم نختبر:

  • الحالات الإيجابية (Positive Cases): عندما كل شي صح
  • الحالات السلبية (Negative Cases): عندما في خطأ أو مدخلات غلط
  • حالات الحدود (Boundary Cases): باستخدام BVA
  • حالات مختلفة (Different Partitions): باستخدام ECP

مثال عملي كامل: موقع Miro

خلينا ناخذ مثال حقيقي من موقع Miro (أداة التعاون والـ Whiteboarding).

المتطلبات (Requirements)

حسب خطة التسعير في Miro:

  • الخطة المجانية (Free Plan) تعطي 3 لوحات قابلة للتحرير (Editable Boards)
  • الخطة المجانية تعطي 5 مسارات صوتية (Audio Tracks)
  • أكثر من ذلك يحتاج ترقية للاشتراك المدفوع

سيناريو الاختبار #1

"لازم يتمكن المستخدم المجاني من إنشاء ثلاث لوحات قابلة للتحرير"

حالات الاختبار المشتقة من السيناريو

ID السيناريو بيانات الاختبار الخطوات النتيجة المتوقعة
TC-001 إنشاء 3 لوحات مستخدم مجاني جديد 1. سجل دخول بحساب مجاني
2. اذهب إلى Dashboard
3. اضغط "Create new board"
4. كرر الخطوة 3 مرتين
5. حاول تحرير اللوحات الثلاث
يتم إنشاء 3 لوحات بنجاح ويمكن تحريرها جميعاً
TC-002 محاولة إنشاء لوحة رابعة مستخدم مجاني عنده 3 لوحات 1. سجل دخول بحساب عنده 3 لوحات
2. اضغط "Create new board"
تظهر رسالة: "لازم الترقية للاشتراك المدفوع" أو يتم منع الإنشاء
TC-003 إنشاء أقل من 3 لوحات مستخدم مجاني جديد 1. سجل دخول
2. أنشئ لوحة واحدة فقط
3. حاول تحريرها
يتم الإنشاء والتحرير بنجاح

سيناريو الاختبار #2

"لازم يتمكن المستخدم المجاني من تسجيل خمسة مسارات صوتية"

حالات الاختبار

ID بيانات الاختبار الخطوات النتيجة المتوقعة
TC-004 مستخدم مجاني 1. افتح لوحة
2. ابدأ تسجيل صوتي
3. كرر 5 مرات
تسجيل 5 مسارات بنجاح ✅
TC-005 مستخدم مجاني عنده 5 مسارات 1. حاول تسجيل مسار سادس رسالة خطأ أو منع التسجيل ❌

مثال عملي: موقع تسوق (Amazon)

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

"لازم يتمكن المستخدم من إضافة منتج إلى سلة التسوق"

حالات الاختبار المشتقة

ID الخطوات النتيجة المتوقعة
TC-010 1. افتح صفحة منتج متوفر في المخزون
2. اضغط "Add to Cart"
المنتج يُضاف إلى السلة ويظهر عداد السلة (1)
TC-011 1. افتح صفحة منتج نفذ من المخزون
2. اضغط "Add to Cart"
تظهر رسالة "Out of Stock" أو الزر يكون غير نشط
TC-012 1. أضف منتج إلى السلة
2. أضف نفس المنتج مرة ثانية
الكمية تزيد إلى 2 والمنتج لا يتكرر
TC-013 1. أضف منتج بكمية تفوق المتوفر في المخزون رسالة خطأ: "الكمية المتوفرة أقل من المطلوبة"

لاحظ كيف سيناريو واحد تحول إلى 4 حالات اختبار تغطي:

  • ✅ الحالة الإيجابية (Positive)
  • ❌ الحالة السلبية - منتج غير متوفر (Negative)
  • 🔄 حالة التكرار (Duplicate)
  • ⚠️ حالة الحد الأقصى (Boundary)

الفرق بينهم: جدول مقارنة شامل

النقطة سيناريو الاختبار حالة الاختبار
التعريف جملة واحدة وثيقة مفصلة
يصف ماذا نختبر (What) كيف نختبر (How)
مستوى التفصيل عام وواسع خطوة بخطوة ومحدد
المعرفة المطلوبة للتنفيذ يحتاج معرفة بالتطبيق والـ Domain أي مختبر مبتدئ يقدر ينفذها
السرعة في الكتابة سريع جداً (ثواني) يحتاج وقت (دقائق)
العلاقة سيناريو واحد ← حالات متعددة
البيانات لا يحتوي على بيانات يحتوي على Test Data محددة
النتيجة المتوقعة عامة محددة بدقة
قابلية الأتمتة لا يمكن أتمتته مباشرة يمكن تحويله لكود أتمتة

متى نستخدم كل واحد؟

استخدام سيناريو الاختبار

استخدم سيناريوهات الاختبار في الحالات التالية:

1. التخطيط السريع للاختبار

  • عندما نحتاج نحدد نطاق الاختبار بسرعة في بداية Sprint
  • في اجتماعات الـ Sprint Planning

2. التواصل مع الفريق

  • شرح للـ Product Owner ماذا سـنختبر
  • مشاركة نطاق الاختبار مع الـ Developers

3. Exploratory Testing

  • عندما نختبر feature جديدة ونستكشفها
  • الاختبار الاستكشافي يعتمد على سيناريوهات عامة

4. High-Level Test Planning

  • إعداد خطة اختبار أولية
  • تقدير الوقت والجهد المطلوب

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

استخدم حالات الاختبار في الحالات التالية:

1. التوثيق الرسمي

  • عندما الشركة تطلب documentation رسمي
  • في المشاريع الذي تحتاج Compliance (مثل البنوك، الصحة)

2. مختبرين مبتدئين أو جدد

  • عندما مختبر جديد سينفذ الاختبارات
  • عندما تحتاج تدريب شخص على التطبيق

3. Regression Testing

  • عندما نختبر نفس الـ Features بعد كل Release
  • ضمان إنه الاختبار يتكرر بنفس الطريقة كل مرة

4. الأتمتة (Test Automation)

  • حالات الاختبار المفصلة أساس لكتابة الـ Automated Tests
  • التحويل من Manual Test Case ← Automated Test Script

5. اختبارات معقدة متعددة الخطوات

  • Integration Testing
  • End-to-End Testing
  • اختبارات تحتاج ترتيب دقيق للخطوات

نصائح عملية من الميدان

1. ابدأ دايماً بالسيناريوهات

قبل لا تكتب أي حالة اختبار، اكتب كل السيناريوهات أولاً. هذا يساعدك تشوف الصورة الكاملة.

مثال:

سيناريو 1: تسجيل دخول ناجح
سيناريو 2: تسجيل دخول فاشل - كلمة مرور خاطئة
سيناريو 3: تسجيل دخول فاشل - بريد إلكتروني غير موجود
سيناريو 4: تسجيل خروج
سيناريو 5: "تذكرني" يحفظ الجلسة

بعد ذلك، حوّل كل سيناريو لحالة أو أكثر.


2. استخدم الاستراتيجيات لتوليد الحالات

استخدم ECP, BVA, Decision Tables لتحديد حالات الاختبار من كل سيناريو.

مثال: حقل العمر في تطبيق

  • السيناريو: "لازم يقبل التطبيق عمر المستخدم بين 18 و 65 سنة"

استخدام BVA:

  • TC-1: عمر = 17 ← رفض ❌
  • TC-2: عمر = 18 ← قبول ✅
  • TC-3: عمر = 40 ← قبول ✅
  • TC-4: عمر = 65 ← قبول ✅
  • TC-5: عمر = 66 ← رفض ❌

3. كل سيناريو يحتاج Positive + Negative

لا تنسى إنه كل سيناريو لازم يكون عنده:

  • Positive Test Case: عندما كل شي صح
  • Negative Test Case: عندما في مدخلات خاطئة أو حالات خطأ

مثال: البحث في YouTube

  • Positive: بحث عن "React Tutorial" ← تظهر نتائج
  • Negative: بحث عن "xyzقثسي123" ← رسالة "No results found"

4. جهّز بيانات الاختبار مسبقاً

قبل أن تبدأ التنفيذ، جهّز كل البيانات:

  • حسابات مستخدمين (Emails, Passwords)
  • بيانات صالحة وغير صالحة
  • ملفات للرفع (إذا كان الاختبار يحتاج Upload)

لا تخلي المختبر يدور على بيانات وقت التنفيذ. كل شي لازم يكون جاهز في حالة الاختبار.


5. اكتب خطوات واضحة جداً

الخطوات لازم تكون مفصلة لدرجة إنه شخص لا يعرف التطبيق يقدر ينفذها.

خطأ ❌:

1. سجل دخول
2. أضف منتج للسلة

صح ✅:

1. افتح الموقع www.example.com
2. اضغط على زر "Login" في الزاوية العلوية اليمنى
3. أدخل البريد الإلكتروني: test@example.com
4. أدخل كلمة المرور: Test@1234
5. اضغط على زر "Sign In"
6. انتظر حتى تحميل الصفحة الرئيسية
7. ابحث عن منتج "iPhone 15"
8. اضغط على أول نتيجة بحث
9. اضغط على زر "Add to Cart"

مثال عملي: موقع Netflix

خلينا نطبق كل لا تعلمناه على مثال من Netflix.

الخطوة 1: كتابة السيناريوهات

1. لازم يتمكن المستخدم من البحث عن فيلم أو مسلسل
2. لازم يتمكن المستخدم من تشغيل فيديو
3. لازم يتمكن المستخدم من إضافة فيلم إلى قائمة "My List"
4. لازم يتمكن المستخدم من تغيير جودة الفيديو

الخطوة 2: تحويل السيناريو الأول إلى حالات

السيناريو: "لازم يتمكن المستخدم من البحث عن فيلم أو مسلسل"

ID نوع الحالة بيانات الاختبار الخطوات النتيجة المتوقعة
TC-N001 Positive كلمة بحث: "Stranger Things" 1. اضغط على أيقونة البحث 🔍
2. اكتب "Stranger Things"
3. اضغط Enter
تظهر نتائج البحث وفيها مسلسل Stranger Things
TC-N002 Negative كلمة بحث: "xyzabc123" 1. اضغط على أيقونة البحث
2. اكتب "xyzabc123"
3. اضغط Enter
رسالة: "No results found" أو "Your search did not have any matches"
TC-N003 Boundary كلمة بحث: حرف واحد "A" 1. ابحث عن "A" تظهر كل الأفلام والمسلسلات التي فيها حرف A
TC-N004 Negative كلمة بحث: فارغة 1. اضغط Enter بدون كتابة شي لا يحدث شيء أو رسالة "Please enter a search term"

الخطوة 3: تحويل السيناريو الثاني إلى حالات

السيناريو: "لازم يتمكن المستخدم من تشغيل فيديو"

ID نوع الحالة الخطوات النتيجة المتوقعة
TC-N010 Positive 1. اختر أي فيلم
2. اضغط على زر Play ▶️
الفيديو يبدأ التشغيل
TC-N011 Positive 1. شغل فيديو
2. اضغط Pause ⏸
3. اضغط Play ▶️ مرة ثانية
الفيديو يكمل من نفس النقطة
TC-N012 Boundary 1. شغل فيديو
2. اسحب شريط التقدم للنهاية
الفيديو ينتهي وتظهر Credits أو اقتراحات

الخلاصة

سيناريو الاختبار = جملة واحدة تصف ماذا نختبر (الهدف)

حالة الاختبار = وثيقة مفصلة تصف كيف نختبر (الطريقة)

سيناريو واحد ← حالات اختبار متعددة (Positive, Negative, Boundary)

✅ السيناريو يحتاج معرفة بالتطبيق لتنفيذه، الحالة يقدر أي شخص ينفذها

✅ نجهز كل شي قبل ما نبدأ الاختبار (البيانات، الحالات، الخطوات)

✅ نستخدم استراتيجيات الاختبار (ECP, BVA, Decision Tables) لتوليد حالات من السيناريوهات

✅ السيناريوهات للتخطيط السريع، الحالات للتوثيق والتنفيذ الدقيق


تمرين عملي

الآن دورك! 💪

المهمة

اكتب 3 سيناريوهات اختبار لموقع Instagram، وحوّل كل سيناريو إلى حالتين اختبار على الأقل (واحدة Positive وواحدة Negative).

مثال للبداية

السيناريو 1: "لازم يتمكن المستخدم من نشر صورة جديدة"

حالة 1 (Positive):

  • الخطوات: اضغط +، اختر صورة من المعرض، أضف تعليق، اضغط Share
  • النتيجة المتوقعة: الصورة تُنشر وتظهر في الـ Profile ✅

حالة 2 (Negative):

  • الخطوات: اضغط Share بدون اختيار صورة
  • النتيجة المتوقعة: رسالة خطأ "Please select a photo" ❌

سيناريوهاتك (أكمل بنفسك)

السيناريو 2: "لازم يتمكن المستخدم من ______________"

  • حالة Positive:...
  • حالة Negative:...

السيناريو 3: "لازم يتمكن المستخدم من ______________"

  • حالة Positive:...
  • حالة Negative:...

نصيحة
حاول تفكر بـ Features تستخدمها يومياً في Instagram: Stories, Comments, Likes, Follow, Direct Messages, Filters، إلخ.

الآن بعد أن فهمنا الفرق بين سيناريو الاختبار وحالة الاختبار، بنكون جاهزين للدرس الجاي حيث رح نبدأ فعلياً نكتب حالات اختبار كاملة بكل تفاصيلها!

يعطيكم العافية، ونلتقي في الدرس القادم! 🚀