مرحبا ويعطيكم العافية وأهلا وسهلا فيكم في الدرس السادس عشر من رحلتنا في تعلم الاختبار!
في الدروس السابقة، تعلمنا استراتيجيات اختبار مهمة زي Equivalence Class Partitioning (ECP)، Boundary Value Analysis (BVA)، Decision Tables، و State Transition Testing. هذه الاستراتيجيات ساعدتنا نحدد شو لازم نختبر و كم عدد الاختبارات التي نحتاجها.
لكن السؤال: متى نستخدم هذه الاستراتيجيات؟ هل منفتح الموقع ومنبدأ نختبر على طول؟
الجواب: لا!
كمختبرين محترفين، نجهز كل شي قبل ما نبدأ الاختبار. نبني حالات الاختبار (Test Cases) مسبقاً. لكن قبل أن نوصل لهاي المرحلة، لازم نفهم: ما الفرق بين سيناريو الاختبار (Test Scenario) و حالة الاختبار (Test Case)؟
بنهاية هذا الدرس، ستكون قادراً على:
سيناريو الاختبار هو جملة واحدة فقط بتصف ماذا سنختبر، مش كيف سنختبره.
السيناريو يحكيلك الهدف من الاختبار، مش الطريقة التي ستتبعها حتى توصل للهدف.
| الخاصية | التفصيل |
|---|---|
| الطول | جملة واحدة (سطر واحد) |
| المحتوى | يصف ماذا نختبر (What) |
| التفصيل | عام وغير مفصل |
| المعرفة | يحتاج معرفة بالتطبيق لفهمه وتنفيذه |
| السرعة | سريع جداً في الكتابة |
| الهدف | تحديد نطاق الاختبار |
دعونا نشوف أمثلة من مواقع ومنتجات نستخدمها كل يوم:
مثال من موقع Miro:
"لازم يتمكن المستخدم المجاني من إنشاء ثلاث لوحات قابلة للتحرير"
مثال من موقع Amazon:
"لازم يتمكن المستخدم من إضافة منتج إلى سلة التسوق"
مثال من موقع Facebook:
"لازم يتمكن المستخدم من تسجيل الدخول بنجاح باستخدام بريد إلكتروني وكلمة مرور صحيحة"
مثال من تطبيق WhatsApp:
"لازم يتمكن المستخدم من إرسال رسالة نصية لجهة اتصال"
لاحظ إنه كل هذه الجمل لا تشرح كيف سنختبر، لكن تحدد شو سنختبر.
حالة الاختبار هي وثيقة مفصلة فيها دليل خطوة بخطوة يشرح كيف سننفذ الاختبار.
حالة الاختبار مكتوبة بطريقة واضحة جداً، بحيث أي مختبر مبتدئ يقدر ياخذها وينفذها من غير ما يحتاج يسأل أسئلة.
كل حالة اختبار لازم تحتوي على العناصر التالية:
رقم فريد لكل حالة اختبار، مثال: TC-001, TC-002, TC-010
الجملة التي نختبرها (السيناريو الذي حكينا عنه فوق)
البيانات التي سنستخدمها في الاختبار، مثال:
test@example.comTest@12340791234567الخطوات بالتفصيل الممل، واحدة واحدة، مرقمة:
ما المفروض أن يصير بعد تنفيذ الخطوات؟
مثال: "يتم تسجيل الدخول بنجاح ويظهر اسم المستخدم في الصفحة الرئيسية"
ما صار فعلياً عندما نفذنا الاختبار؟ (هذه بتنملأ بعد التنفيذ)
مثال: "تم تسجيل الدخول بنجاح ✅" أو "ظهرت رسالة خطأ ❌"
سيناريو واحد = حالات اختبار متعددة
كل سيناريو اختبار بيتحول لأكثر من حالة اختبار، لأنه لازم نختبر:
خلينا ناخذ مثال حقيقي من موقع Miro (أداة التعاون والـ Whiteboarding).
حسب خطة التسعير في Miro:
"لازم يتمكن المستخدم المجاني من إنشاء ثلاث لوحات قابلة للتحرير"
| 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. حاول تحريرها |
يتم الإنشاء والتحرير بنجاح |
"لازم يتمكن المستخدم المجاني من تسجيل خمسة مسارات صوتية"
| ID | بيانات الاختبار | الخطوات | النتيجة المتوقعة |
|---|---|---|---|
| TC-004 | مستخدم مجاني | 1. افتح لوحة 2. ابدأ تسجيل صوتي 3. كرر 5 مرات |
تسجيل 5 مسارات بنجاح ✅ |
| TC-005 | مستخدم مجاني عنده 5 مسارات | 1. حاول تسجيل مسار سادس | رسالة خطأ أو منع التسجيل ❌ |
"لازم يتمكن المستخدم من إضافة منتج إلى سلة التسوق"
| 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 حالات اختبار تغطي:
| النقطة | سيناريو الاختبار | حالة الاختبار |
|---|---|---|
| التعريف | جملة واحدة | وثيقة مفصلة |
| يصف | ماذا نختبر (What) | كيف نختبر (How) |
| مستوى التفصيل | عام وواسع | خطوة بخطوة ومحدد |
| المعرفة المطلوبة للتنفيذ | يحتاج معرفة بالتطبيق والـ Domain | أي مختبر مبتدئ يقدر ينفذها |
| السرعة في الكتابة | سريع جداً (ثواني) | يحتاج وقت (دقائق) |
| العلاقة | سيناريو واحد | ← حالات متعددة |
| البيانات | لا يحتوي على بيانات | يحتوي على Test Data محددة |
| النتيجة المتوقعة | عامة | محددة بدقة |
| قابلية الأتمتة | لا يمكن أتمتته مباشرة | يمكن تحويله لكود أتمتة |
استخدم سيناريوهات الاختبار في الحالات التالية:
1. التخطيط السريع للاختبار
2. التواصل مع الفريق
3. Exploratory Testing
4. High-Level Test Planning
استخدم حالات الاختبار في الحالات التالية:
1. التوثيق الرسمي
2. مختبرين مبتدئين أو جدد
3. Regression Testing
4. الأتمتة (Test Automation)
5. اختبارات معقدة متعددة الخطوات
قبل لا تكتب أي حالة اختبار، اكتب كل السيناريوهات أولاً. هذا يساعدك تشوف الصورة الكاملة.
مثال:
سيناريو 1: تسجيل دخول ناجح
سيناريو 2: تسجيل دخول فاشل - كلمة مرور خاطئة
سيناريو 3: تسجيل دخول فاشل - بريد إلكتروني غير موجود
سيناريو 4: تسجيل خروج
سيناريو 5: "تذكرني" يحفظ الجلسةبعد ذلك، حوّل كل سيناريو لحالة أو أكثر.
استخدم ECP, BVA, Decision Tables لتحديد حالات الاختبار من كل سيناريو.
مثال: حقل العمر في تطبيق
استخدام BVA:
لا تنسى إنه كل سيناريو لازم يكون عنده:
مثال: البحث في YouTube
قبل أن تبدأ التنفيذ، جهّز كل البيانات:
لا تخلي المختبر يدور على بيانات وقت التنفيذ. كل شي لازم يكون جاهز في حالة الاختبار.
الخطوات لازم تكون مفصلة لدرجة إنه شخص لا يعرف التطبيق يقدر ينفذها.
خطأ ❌:
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.
1. لازم يتمكن المستخدم من البحث عن فيلم أو مسلسل
2. لازم يتمكن المستخدم من تشغيل فيديو
3. لازم يتمكن المستخدم من إضافة فيلم إلى قائمة "My List"
4. لازم يتمكن المستخدم من تغيير جودة الفيديوالسيناريو: "لازم يتمكن المستخدم من البحث عن فيلم أو مسلسل"
| 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" |
السيناريو: "لازم يتمكن المستخدم من تشغيل فيديو"
| 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):
حالة 2 (Negative):
السيناريو 2: "لازم يتمكن المستخدم من ______________"
السيناريو 3: "لازم يتمكن المستخدم من ______________"
الآن بعد أن فهمنا الفرق بين سيناريو الاختبار وحالة الاختبار، بنكون جاهزين للدرس الجاي حيث رح نبدأ فعلياً نكتب حالات اختبار كاملة بكل تفاصيلها!
يعطيكم العافية، ونلتقي في الدرس القادم! 🚀