كيف تكتب حالات الاختبار (Test Cases)
حالة الاختبار تعليمة دقيقة قابلة للتكرار: مع هذه الشروط المسبقة، نفّذ هذه الخطوات بهذه البيانات، وتوقّع هذه النتيجة. وعندما تُكتب جيداً تتيح لأي مختبِر — أو سكربت أتمتة — التحقق من سلوك واحد بالطريقة نفسها في كل مرة، وتخبر المطوّر بالضبط كيف يعيد إنتاج الفشل. أما عندما تُكتب بشكل سيئ فهي جملة غامضة تنجح يوم الاثنين وتفشل يوم الثلاثاء لأسباب لا يستطيع أحد تسميتها.
يمنحك هذا الدليل بنية حالة الاختبار الجيدة، ونموذجاً يمكنك لصقه في Jira أو TestRail أو جدول بيانات، ومثالاً عملياً، وتقنيات التصميم التي تحوّل المتطلب إلى مجموعة صغيرة من الحالات ذات تغطية حقيقية.
الحقول التي تحتاجها كل حالة اختبار
- المعرّف — معرّف ثابت (TC-LOGIN-004) حتى يمكن الإشارة إلى الحالة من تقارير الأخطاء والتقارير.
- العنوان — سطر واحد يسمّي السلوك لا الميزة: «تسجيل الدخول يرفض كلمة المرور الخاطئة برسالة واضحة»، لا «اختبار تسجيل الدخول».
- الشروط المسبقة — الحالة التي يجب أن يكون عليها النظام قبل الخطوة 1: مستخدم موجود وموثّق، أو سلة فارغة، أو دور محدد.
- بيانات الاختبار — القيم الدقيقة المستخدمة، أو إشارة إلى مجموعة بيانات مولّدة. «بريد إلكتروني صالح» ليس بيانات اختبار؛ أما «layla.h@example.com» فهو كذلك.
- الخطوات — مرقّمة، إجراء واحد في كل خطوة، مكتوبة بحيث يستطيع موظف جديد اتباعها.
- النتيجة المتوقعة — ما يجب ملاحظته بعد الخطوة الأخيرة، بتحديد يكفي للتحقق: رمز الحالة، ونص الرسالة، وحالة السجل.
- الأولوية والنوع — دخاني، انحدار، سلبي، حدّي — حتى يمكن تصفية الحزم.
- التتبّع — المتطلب أو قصة المستخدم أو معيار القبول الذي تغطيه الحالة.
نموذج حالة اختبار
ID: TC-LOGIN-004
Title: Login rejects a wrong password with a clear message
Priority: High Type: Negative
Requirement: US-12 (User can sign in with email and password)
Preconditions: A verified account exists for layla.h@example.com
Test data: email = layla.h@example.com, password = WrongPass!9
Steps:
1. Open /login
2. Enter the email and the wrong password
3. Click "Sign in"
Expected result:
- The page stays on /login
- The message "Email or password is incorrect" is shown
- No session cookie is set; the failed attempt is counted
Postconditions: Account is not locked (attempt 1 of 5)جرّبها: مولّد حالات الاختبار جرّبها: قصة المستخدم ← حالات اختبار
الفرق بين سيناريو الاختبار وحالة الاختبار
سيناريو الاختبار عبارة من سطر واحد عمّا يجب اختباره — «التحقق من تسجيل الدخول ببيانات صالحة وغير صالحة». أما حالة الاختبار فهي السكربت التفصيلي الذي يختبر مساراً واحداً من ذلك السيناريو. يتوسع السيناريو الواحد عادةً إلى عدة حالات: تسجيل دخول صالح، وكلمة مرور خاطئة، وبريد غير معروف، وحساب مقفل، وحقول فارغة. ابدأ بالسيناريوهات للاتفاق على النطاق، ثم اكتب الحالات للمسارات المهمة.
تقنيات تصميم تكتشف الأخطاء الحقيقية
- تقسيم التكافؤ — اجمع المدخلات التي يجب أن يعاملها النظام بالطريقة نفسها (الأعمار 18–65) واختبر قيمة واحدة من كل مجموعة بدلاً من كل قيمة.
- تحليل القيم الحدّية — تعيش معظم العيوب عند الحواف. لحقل يقبل 1–100، اختبر 0 و1 و2 و99 و100 و101.
- جداول القرار — عندما تتحد عدة شروط (عضو؟ قسيمة؟ أكثر من 50 ريالاً؟)، يضمن جدول بكل التوليفات عدم نسيان أي قاعدة.
- اختبار انتقال الحالات — لأي شيء له دورة حياة (طلب: أُنشئ ← دُفع ← شُحن ← استُرد)، اختبر كل انتقال مسموح والانتقالات الممنوعة.
- الاختبار السلبي — أنواع خاطئة، وحقول ناقصة، وأحرف خاصة، ومدخلات طويلة جداً، وإجراءات متزامنة، وجلسات منتهية.
- الاختبار الزوجي — عندما تكثر توليفات المعاملات، غطِّ كل زوج من القيم بجزء صغير من الحالات.
جرّبها: مولّد القيم الحدّية جرّبها: مولّد أقسام التكافؤ جرّبها: مولّد جداول القرار جرّبها: مولّد الاختبارات السلبية
من قصة المستخدم إلى حالات الاختبار
ابدأ من معايير القبول. كل عبارة Given/When/Then هي حالة إيجابية واحدة على الأقل؛ وكل «يجب ألا» أو «يجب» تخفي حالة سلبية. ثم أضف حدود كل حقل تذكره القصة، وحالة لكل دور مستخدم يلامس الميزة، وحالة لما يحدث عند فشل تبعية (مزوّد الدفع أو خدمة البريد). تنتج القصة ذات معايير القبول الثلاثة عادةً ما بين ثماني وخمس عشرة حالة.
جرّبها: قصة المستخدم ← حالات اختبار جرّبها: مولّد معايير القبول جرّبها: مولّد حالات الاختبار بالذكاء الاصطناعي
الأخطاء الشائعة
- اختبار عدة أشياء في حالة واحدة — عندما تفشل لا يعرف أحد أي جزء تعطّل.
- نتائج متوقعة غامضة («يعمل بشكل صحيح»، «تظهر رسالة خطأ») لا يمكن الحكم عليها بالنجاح أو الفشل.
- خطوات تعتمد على تنفيذ حالة أخرى أولاً، فلا يمكن تشغيل الحزمة بأي ترتيب.
- بيانات اختبار من بيانات عملاء حقيقيين — استخدم بيانات مولّدة واقعية لكنها اصطناعية.
- كتابة المسار السعيد فقط. معظم حوادث الإنتاج حالات سلبية أو حدّية.
- عدم التشذيب أبداً: الحالات الخاصة بميزات محذوفة والحالات المكررة تجعل دورات الانحدار بطيئة وغير موثوقة.
جرّبها: مصنع بيانات الاختبار جرّبها: كاشف حالات الاختبار المكرّرة بالذكاء الاصطناعي
الأسئلة الشائعة
ما الفرق بين حالة الاختبار وسيناريو الاختبار؟
السيناريو يصف ما يجب اختباره في سطر واحد؛ وحالة الاختبار هي السكربت خطوة بخطوة لمسار واحد عبر ذلك السيناريو، مع البيانات والنتيجة المتوقعة.
كم حالة اختبار يجب أن تكون للميزة الواحدة؟
ما يكفي لتغطية كل معيار قبول، وكل حد لكل مدخل، وكل دور، وأنماط الفشل الرئيسية — عادةً 8–15 لقصة مستخدم نموذجية. تغطية السلوكيات أهم من العدد.
هل يجب أن تتضمن حالات الاختبار بيانات اختبار؟
نعم، أو إشارة إلى مجموعة بيانات مولّدة. بدون قيم دقيقة لا تكون الحالة قابلة للتكرار ويصعب إعادة إنتاج الفشل.
ما الصيغة التي تتوقعها Jira وTestRail وXray؟
جميعها تستورد CSV بأعمدة للعنوان والشروط المسبقة والخطوات والنتيجة المتوقعة والأولوية. اجعل كل خطوة في صف عندما تدعم الأداة جداول الخطوات.
هل يستطيع الذكاء الاصطناعي كتابة حالات الاختبار؟
يستطيع الذكاء الاصطناعي صياغة مجموعة أولى قوية من قصة مستخدم أو متطلب، بما فيها الحالات السلبية والحدّية التي يتجاوزها المراجعون كثيراً. وينبغي للمختبِر مراجعة كل حالة في سياق العمل وحذف ما لا ينطبق.
كيف أكتب حالات اختبار لواجهة API؟
تنطبق البنية نفسها: الخطوات طلبات، وبيانات الاختبار هي الحمولة والترويسات، والنتيجة المتوقعة هي رمز الحالة وجسم الاستجابة وأي تغيّر في الحالة. راجع دليل اختبار API للطريقة الكاملة.
الأدوات المذكورة في هذا الدليل
ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.
ولّد سيناريوهات اختبار عالية المستوى تغطي الجوانب الوظيفية والسلبية والأمنية وسهولة الاستخدام والتوافق لأي ميزة.
حوّل قصة مستخدم (As a / I want / So that) إلى حالات اختبار منظّمة باستخدام القوالب والقواعد الاستدلالية.
ولّد حالات اختبار سلبية لحقول النماذج وواجهات API: قيم فارغة وnull ونوع خاطئ وطول زائد وحقن وصيغة غير صالحة.
ولّد القيم الحدّية (min-1 وmin وmin+1 والقيمة الاسمية وmax-1 وmax وmax+1) للقيود الرقمية وقيود الطول.
اشتق فئات التكافؤ الصالحة وغير الصالحة لكل مدخل واختر قيم اختبار تمثيلية.
أنشئ جداول القرار من الشروط والإجراءات، وولّد جميع تركيبات القواعد، واختزل المستحيل منها.
ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.
حوّل قصة مستخدم إلى حالات اختبار احترافية ومنظّمة (المعرّف والعنوان والنوع والأولوية والشروط المسبقة والبيانات والخطوات والنتيجة المتوقّعة) باستخدام الذكاء الاصطناعي من متقن.
مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.