جودة حالات الاختبار ومراجعتها
مراجعة حالات الاختبار (Test Case Review) اختبار ساكن (Static Testing) يُطبَّق على مواد الاختبار (Testware): يفحص فيها شخصٌ غيرُ كاتبها حالاتِ الاختبار مقابل أساس الاختبار (Test Basis) وقائمة تحقق (Checklist) متفق عليها، قبل تنفيذها أو ضمّها إلى حزمة الانحدار. ويذكر منهج ISTQB للمستوى التأسيسي حالات الاختبار ضمن منتجات العمل التي يفحصها الاختبار الساكن، لذا تنطبق عليها أنواع المراجعة التي عرفتها في وحدة المتطلبات.
خذ حالة عنوانها «إلغاء الطلب» ونتيجتها المتوقعة «يُلغى الطلب بشكل صحيح». كل الحقول مملوءة. لكن المراجِع الذي يفتح قصة المستخدم يرى أنها لا تحدد أي طلب، ولا ترتبط بأي معيار قبول، ولا يمكن أن تفشل، لأن «بشكل صحيح» ليس شيئاً يمكن ملاحظته.
لماذا يهم
تُنفَّذ حالة الاختبار مرات كثيرة، ونتيجتها هي ما يُبلغ عنه الفريق. فالحالة ذات النتيجة المتوقعة الغامضة تنجح أياً كان سلوك المنتج، فقد يصل عيب حقيقي إلى بيئة الإنتاج بينما يقول التقرير إن المتطلب اختُبر. والشرط المسبق الناقص يفعل العكس: تفشل الحالة على منتج سليم، ويطارد المطوّر عيباً غير موجود.
قبل التنفيذ، يكفي لإصلاح الحالة تعديل بضعة أسطر. وحالات الاختبار هي أيضاً السجل الظاهر لعملك: منها يتعلّم أعضاء الفريق الجدد المنتج، ومنها يكتب مهندسو الأتمتة سكربتاتهم.
ما الذي يجعل حالة الاختبار جيدة
يصف مسرد ISTQB حالة الاختبار بأنها مجموعة من الشروط المسبقة والمدخلات والإجراءات والنتائج المتوقعة والشروط اللاحقة، تُطوَّر انطلاقاً من شروط الاختبار (Test Conditions). وأيّ من هذه الأجزاء قد يكون خاطئاً أو ناقصاً أو غامضاً. ولا توجد قائمة معيارية واحدة لصفات الجودة، لكن معظم قوائم التحقق تؤول إلى هذه الصفات:
- قابلة للتتبع (Traceable): تذكر المتطلب أو معيار القبول أو الخطر الذي تغطيه.
- صحيحة: نتيجتها المتوقعة مأخوذة من أساس الاختبار، لا مما يفعله النظام اليوم.
- واضحة لا لبس فيها: ينفّذ أي مختبِرَين الإجراءات نفسها، ويحكمان على النتيجة بالطريقة نفسها.
- قابلة للتحقق: كل نتيجة متوقعة تسمّي شيئاً يمكن ملاحظته، كقيمة أو رسالة أو حالة.
- مركّزة: تفحص سلوكاً واحداً، فيشير فشلها إلى سبب واحد.
- مستقلة وقابلة للتكرار: تذكر ما تحتاج إليه أو تُنشئه، وتعطي النتيجة نفسها بأي ترتيب نُفّذت.
- قابلة للصيانة وبمستوى التفصيل المتفق عليه: دقيقة حيث يحتاج الفريق قيماً دقيقة، وتُشير إلى الخطوات المشتركة بدل نسخها.
قائمة تحقق لمراجعة حالات الاختبار
راجع الحالات قبل تنفيذها أول مرة، وقبل ضمّها إلى حزمة الانحدار، وحين يتغيّر متطلب ترتبط به. وتكفي معظمَ الحالات مراجعةٌ غير رسمية بين الزملاء: يقرؤها مختبِر آخر والقصة مفتوحة أمامه.
اجعل قائمة التحقق قصيرة، ووسّعها من العيوب التي تجدها فعلاً. وهذه نقطة بداية:
- الأساس: هل تذكر الحالة ما تغطيه، وهل ما زال ذلك البند يقول ما تفترضه الحالة؟
- العنوان: هل يذكر سلوكاً واحداً وشرطه؟
- الشروط المسبقة: هل كُتب كل وضع مطلوب، مثل الدور وحالة السجل والإعدادات؟
- بيانات الاختبار: هل ذُكرت قيم دقيقة واصطناعية، أو مجموعة بيانات مسمّاة؟
- الخطوات: هل كل خطوة إجراء واضح يستطيع عضو جديد في الفريق اتباعه كما كُتب تماماً؟
- النتائج المتوقعة: هل كل نتيجة قابلة للملاحظة ومحددة ومأخوذة من أساس الاختبار؟
- التركيز والاستقلال: هل تفحص الحالة سلوكاً واحداً، وتعمل بشكل صحيح وحدها وبأي ترتيب؟
- المجموعة: هل كل معيار قبول مغطّى، وهل توجد حالات سلبية وحدّية، وهل هناك تكرار؟
جرّبها: المتطلبات ← حالات اختبار جرّبها: قصة المستخدم ← حالات اختبار
العيوب التي تكشفها المراجعة في حالات الاختبار
لحالات الاختبار عيوب كأي منتج عمل آخر. وكل نوع مما يلي يجعل الحالة تنجح حين يجب أن تفشل، أو تفشل حين يجب أن تنجح، أو يستهلك الوقت دون أن يضيف تغطية.
- نتيجة متوقعة غامضة («يعمل بشكل صحيح»، «تظهر رسالة خطأ»): تنجح الحالة أياً كان ما يحدث.
- نتيجة متوقعة منسوخة من النظام: إن كان ذلك السلوك خاطئاً، صارت الحالة تؤكّد العيب.
- شرط مسبق أو بيانات ناقصة: تفشل الحالة لأسباب لا علاقة لها بالمنتج، أو تنجح فقط ببيانات كاتبها.
- عدة سلوكيات في حالة واحدة: لا يكشف الفشل أيّ سلوك تعطّل.
- اعتماد خفيّ: لا تعمل الحالة إلا بعد أن تُنشئ حالة أخرى بياناتها.
- حالة متقادمة: تغيّر المتطلب ولم تتغيّر الحالة.
- التكرار: حالتان تختبران الشرط نفسه بعنوانين مختلفين.
- ثغرات في المجموعة: معيار قبول أو مسار سلبي أو دور بلا أي حالة على الإطلاق.
مثال تطبيقي: مراجعة حالة لإلغاء طلب
القصة ORD-31 تتيح للعميل إلغاء الطلب قبل شحنه. المعيار AC1: يمكن إلغاء الطلب الذي حالته «تم الطلب» أو «مدفوع» من صفحة «طلباتي» بعد التأكيد. المعيار AC2: يظهر الطلب الملغى بحالة «ملغى»، ويبدأ استرداد المبلغ كاملاً إلى وسيلة الدفع الأصلية. المعيار AC3: الطلب الذي حالته «تم الشحن» لا يظهر فيه زر «إلغاء الطلب».
كتب زميلك الحالة TC-ORD-07. تراجعها والقصة مفتوحة أمامك، وتصنّف كل ملاحظة رئيسية (قد تعطي الحالة نتيجة خاطئة) أو ثانوية (الحالة أصعب في القراءة أو الصيانة).
الحالة TC-ORD-07 للقصة ORD-31 قبل المراجعة
الجزء 1:ID: TC-ORD-07 الجزء 2:Title: Order cancellation الجزء 3:Requirement: - الجزء 4:Preconditions: User is logged in الجزء 5:Test data: Any order الجزء 6:Steps: 1. Open My orders and select the order 2. Click "Cancel order" and confirm الجزء 7: 3. Check the refund and that a shipped order cannot be cancelled الجزء 8:Expected result: Order is cancelled correctly and the refund works
- 1المعرّف (ID)ثابت وفريد، فيمكن الإشارة إليه من تقارير الأخطاء وتقارير الاختبار.نجاح
- 2العنوان (Title)يسمّي ميزة، لا السلوك المختبَر.
Title: Paid order can be cancelled before it shipsثانويةتنبيه - 3المتطلب (Requirement)غير قابلة للتتبع: لا يعرف أحد أي معايير قبول تغطيها الحالة.
Requirement: ORD-31 AC1, AC2رئيسيةفشل - 4الشروط المسبقة (Preconditions)لا تذكر شيئاً عن الطلب: فمع طلب مشحون تفشل الحالة على منتج سليم.
Her order ORD-1042 has status Paidرئيسيةفشل - 5بيانات الاختبار (Test data)طلب مختلف في كل تنفيذ، ولا مبلغ يُقارن به الاسترداد.
ORD-1042: 349.00 SAR, paid by cardرئيسيةفشل - 6الخطوتان 1 و2إجراءان واضحان يستطيع عضو جديد في الفريق اتباعهما؛ ولا تضيف إعادة العمل إلا اسم الزر في نافذة التأكيد.نجاح
- 7الخطوة 3تفحص AC2 وAC3 معاً، والمعيار AC3 يحتاج إلى طلب مشحون، فيُنقل إلى حالة خاصة به.
TC-ORD-08 (ORD-31 AC3)رئيسيةفشل - 8النتيجة المتوقعة (Expected result)«بشكل صحيح» و«يعمل» لا يمكن ملاحظتهما، فلا يمكن للحالة أن تفشل.
Status "Cancelled"; refund of 349.00 SAR "Started"رئيسيةفشل - 9ليس في الحالة: بقية القصة ORD-31لا تغطي أي حالة AC3، ولا إلغاء طلب حالته «تم الطلب» لم يُدفع بعد؛ فتضيف المراجعة حالتين.
TC-ORD-08 (AC3), TC-ORD-09 (AC1)رئيسية · المجموعةفشل
علامة «فشل» تعني ملاحظة رئيسية و«تنبيه» ملاحظة ثانوية؛ والسطر تحت كل جزء هو تصحيحه بعد المراجعة.
- ما نجح: المعرّف (ID)، والخطوتان 1 و2، فهما إجراءان واضحان يستطيع عضو جديد في الفريق اتباعهما، ولا تضيف إليهما إعادة العمل إلا اسم الزر في نافذة التأكيد.
- العنوان، ثانوية: يسمّي ميزة لا سلوكاً. المقترح: «يمكن إلغاء الطلب المدفوع قبل شحنه».
- المتطلب (Requirement)، رئيسية: فارغ، مع أن الحالة تغطي AC1 وAC2 من القصة ORD-31.
- الشروط المسبقة وبيانات الاختبار، رئيسية: قد يكون «أي طلب» طلباً مشحوناً، فتفشل الحالة على منتج سليم، ولا يوجد مبلغ استرداد يُقارن به.
- الخطوة 3، رئيسية: تفحص AC2 وAC3 معاً، مع أن AC3 يحتاج إلى طلب مشحون وإلى حالة خاصة به.
- النتيجة المتوقعة، رئيسية: «بشكل صحيح» و«يعمل» لا يمكن ملاحظتهما، فلا يمكن للحالة أن تفشل.
- المجموعة، رئيسية: لا تغطي أي حالة AC3، ولا إلغاء طلب حالته «تم الطلب» لم يُدفع بعد.
النسخة النصية
ID: TC-ORD-07
Title: إلغاء الطلبات
Requirement: -
Preconditions: المستخدم مسجّل الدخول
Test data: أي طلب
Steps:
1. افتح «طلباتي» واختر الطلب
2. انقر «إلغاء الطلب» ثم أكّد
3. تحقّق من الاسترداد ومن أن الطلب المشحون لا يمكن إلغاؤه
Expected result:
يُلغى الطلب بشكل صحيح ويعمل الاستردادتسجيل الملاحظات والتحقق من إعادة العمل
سجّل كل ملاحظة حيث سيراها الكاتب: معرّف الحالة، وبند قائمة التحقق، وما الخطأ، والتصحيح المقترح. وعلّق على الحالة لا على الشخص. وبعض الملاحظات ثغرات في المتطلب نفسه: فالمعيار AC2 يَعِد باسترداد لكل طلب ملغى، لكن الطلب الذي حالته «تم الطلب» لم يُدفع أصلاً. اسأل مالك المنتج بدل التخمين داخل حالة الاختبار.
ثم تحقّق من إعادة العمل بمقارنة النسختين القديمة والجديدة سطراً بسطر. ومعيار الخروج الشائع: لا ملاحظات رئيسية مفتوحة. وهذه الحالة بعد إعادة العمل، والحالتان اللتان أضافتهما المراجعة:
ID: TC-ORD-07
Title: يمكن إلغاء الطلب المدفوع قبل شحنه
Requirement: ORD-31 AC1, AC2
Preconditions: العميلة مسجّلة الدخول بالحساب sara.k@example.com
حالة طلبها «مدفوع» (ORD-1042)
Test data: ORD-1042
بقيمة 349.00 ريال، مدفوع بالبطاقة
Steps:
1. افتح «طلباتي» واختر الطلب ORD-1042
2. انقر «إلغاء الطلب»
3. في نافذة التأكيد انقر «نعم، ألغِ الطلب»
Expected result:
- تظهر حالة الطلب «ملغى» في «طلباتي»
- لم يعد زر «إلغاء الطلب» ظاهراً
- تعرض تفاصيل الطلب استرداد 349.00 ريال إلى البطاقة بحالة «بدأ»
أضافت المراجعة:
TC-ORD-08 لا يظهر زر «إلغاء الطلب» في طلب حالته «تم الشحن» (ORD-31 AC3)
TC-ORD-09 يمكن إلغاء طلب حالته «تم الطلب» ولم يُدفع بعد (ORD-31 AC1)جرّبها: مقارنة النصوص (Diff) جرّبها: محسّن حالات الاختبار بالذكاء الاصطناعي
أخطاء شائعة
- المراجعة دون أن يكون أساس الاختبار مفتوحاً أمامك: تفحص الشكل لا الصحة.
- الاكتفاء بالتأكد من أن كل الحقول مملوءة.
- إعادة كتابة حالات الكاتب بصمت بدل تسجيل الملاحظات، فلا يعرف أحد ما الذي تغيّر ولماذا.
- تعليقات مبهمة أو شخصية («غير واضح»، «أنت تنسى الشروط المسبقة دائماً») بدل تحديد السطر وبند قائمة التحقق والتصحيح.
- مراجعة الحالات واحدة واحدة دون النظر إلى المجموعة.
- إغلاق الملاحظات دون التحقق من إعادة العمل.
من منظور ضمان الجودة
في الفريق الرشيق (Agile) تُراجَع حالات القصة خلال السبرنت، بعد كتابتها بقليل: يقرؤها مختبِر آخر مقابل معايير القبول، وكثيراً ما يلتقط مطوّر القصة افتراضات خاطئة. والحالات المختارة لحزمة الانحدار تستحق نظرة ثانية، وحين يتغيّر متطلب يخبرك التتبع بالحالات التي يجب مراجعتها من جديد.
احتفظ بسجل خفيف: الملاحظات وحالتها والقرارات في الأسئلة المفتوحة. وراجع الحالات المولَّدة بقائمة التحقق نفسها، فالمولّد يعرف البنية لا قواعد عملك.
تمرين عملي
راجع حالة اختبار لتغيير البريد الإلكتروني
راجع الحالة TC-PRF-03 أدناه مقابل القصة PRF-14 بقائمة التحقق من هذا الدرس. سجّل كل ملاحظة مع بند قائمة التحقق، وتصنيفها رئيسيةً أو ثانوية، والتصحيح المقترح.
ثم أعد كتابة الحالة، واذكر الحالات التي ما زالت المجموعة تحتاج إليها.
PRF-14 تغيير البريد الإلكتروني في ملفي الشخصي
AC1 لا يصبح البريد الجديد فعّالاً إلا بعد أن يفتح العميل رابط التأكيد
المرسَل إليه؛ وحتى ذلك الحين يبقى البريد القديم فعّالاً.
AC2 تنتهي صلاحية رابط التأكيد بعد 24 ساعة من إرساله.
AC3 يُرفض البريد الذي يستخدمه حساب آخر برسالة
«هذا البريد مستخدم بالفعل».
ID: TC-PRF-03
Title: تغيير البريد
Requirement: PRF-14
Preconditions: -
Test data: بريد جديد
Steps:
1. سجّل الدخول وانتقل إلى «الملف الشخصي»
2. أدخل بريداً جديداً وانقر «حفظ»
3. افتح رسالة التأكيد وانقر الرابط
4. أعد المحاولة ببريد موجود مسبقاً
Expected result:
يتغيّر البريد وتظهر رسالة خطأ- لاحظ معايير القبول التي تدّعي الحالة تغطيتها.
- طبّق قائمة التحقق بنداً بنداً، وسجّل كل ملاحظة.
- أعد كتابة TC-PRF-03 بشروط مسبقة وبيانات دقيقة ونتائج متوقعة قابلة للملاحظة.
- اذكر معايير القبول غير المغطاة، والأسئلة الموجّهة لمالك المنتج.
إظهار الإجابة النموذجية
العنوان، ثانوية: يسمّي ميزة، والأفضل «لا يصبح البريد الجديد فعّالاً إلا بعد فتح رابط التأكيد». الأساس، ثانوية: «PRF-14» يسمّي القصة لا المعيار AC1. الشروط المسبقة، رئيسية: فارغة، فلا يُعرف الحساب ولا بريده الحالي. بيانات الاختبار، رئيسية: «بريد جديد» يتغيّر في كل تنفيذ، وقد يكون مستخدماً في حساب آخر. التركيز، رئيسية: الخطوة 4 تختبر AC3 داخل حالة AC1. النتائج المتوقعة، رئيسية: «يتغيّر البريد» تُغفل جوهر AC1، وهو أن البريد القديم يبقى فعّالاً حتى فتح الرابط، و«تظهر رسالة خطأ» لا تذكر نص الرسالة الذي يشترطه AC3.
بعد إعادة العمل: العميل omar.t@example.com مسجّل الدخول، والبريد الجديد omar.new@example.com لا يستخدمه أي حساب. 1. أدخل البريد الجديد في «الملف الشخصي» وانقر «حفظ». 2. سجّل الخروج ثم سجّل الدخول بالبريد القديم. 3. افتح الرابط المرسل إلى البريد الجديد. النتائج المتوقعة: بعد الخطوة 1 يبقى البريد القديم ظاهراً في «الملف الشخصي» وتصل رسالة تأكيد إلى omar.new@example.com؛ وتنجح الخطوة 2؛ وبعد الخطوة 3 يظهر البريد الجديد.
تحتاج المجموعة إلى TC-PRF-04 للمعيار AC3 وTC-PRF-05 للمعيار AC2؛ واسأل المطورين كيف يُنشأ رابط منتهي الصلاحية في بيئة الاختبار. ولمالك المنتج: هل يستطيع العميل تسجيل الدخول بالبريد الجديد قبل تأكيده؟
أسئلة شائعة
من يجب أن يراجع حالات الاختبار؟
الأفضل مختبِر آخر يعرف الميزة، وأمامه أساس الاختبار. واسأل مالك المنتج أو محلل الأعمال عن النتائج المتوقعة التي تجسّد قواعد العمل، والمطوّرَ عن التفاصيل التقنية. راجع حالاتك بنفسك بقائمة التحقق أولاً، لكن المراجعة الذاتية لا تغني عن قارئ ثانٍ: فالكاتب يميل إلى قراءة ما قصده لا ما كتبه.
هل تحتاج كل حالة اختبار إلى مراجعة رسمية؟
لا. اجعل درجة الرسمية على قدر المخاطر. فالمراجعة غير الرسمية بين الزملاء تناسب معظم الحالات، والجولة التفقدية (Walkthrough) تفيد عند تقديم حزمة جديدة للفريق، أما المراجعة الفنية (Technical Review) أو التفتيش (Inspection)، بقيادة ميسّر (Moderator) وبقائمة تحقق وسجل ملاحظات، فتناسب ميزات الدفع والأمان والميزات الخاضعة للتنظيم.
هل تحتاج الحالات المولَّدة أو المكتوبة بالذكاء الاصطناعي إلى مراجعة؟
نعم، وبقائمة التحقق نفسها. فالمولّدات وأدوات الذكاء الاصطناعي تنتج حالات حسنة البنية بسرعة، لكنها لا تعرف قواعد عملك، وقد تصف سلوكاً لا يتضمنه المتطلب، وكثيراً ما تفوّت ما يخص منتجك تحديداً. تعامل مع مخرجاتها كمسودة أولى.
ماذا لو اعترض الكاتب على ملاحظة؟
ارجع إلى أساس الاختبار. فإن حسم المسألة، تتبعه الحالة. وإن لم يحسمها، يذهب السؤال إلى مالك المنتج، ويُسجَّل القرار حتى لا يعيد المراجِع التالي فتحه.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- ISO/IEC 20246:2017 — Software and systems engineering — Work product reviewsإطار عام لمراجعة مخرجات العمل — عملية المراجعة وأدوارها وتقنياتها.
- ISO/IEC/IEEE 29119-3:2021 — Software and systems engineering — Software testing — Part 3: Test documentationنماذج ومحتوى وثائق الاختبار — سياسة الاختبار واستراتيجيته وخطته وتقارير الحالة والإنجاز وتقارير الحوادث.
تدرّب بأدوات متقن
حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.
حوّل قصة مستخدم (As a / I want / So that) إلى حالات اختبار منظّمة باستخدام القوالب والقواعد الاستدلالية.
ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.
قارن نصّين سطراً بسطر أو كلمةً بكلمة مع إبراز الاختلافات.
حسّن حالات الاختبار الموجودة: خطوات أوضح، ونتائج متوقّعة أدق، وشروط مسبقة مفقودة، وبنية أفضل، باستخدام الذكاء الاصطناعي من متقن.
اعثر على حالات الاختبار المكرّرة والمتداخلة في مجموعة اختبار واحصل على توصيات الدمج من الذكاء الاصطناعي من متقن.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.