حزم الاختبارات وتشغيلات الاختبار
حزمة الاختبارات (Test Suite) مجموعة من حالات الاختبار أو الإجراءات أو السكربتات اختيرت لتُشغَّل معاً لغرض واحد: حزمة اختبار الدخان، أو حزمة انحدار إتمام الشراء، أو اختبارات قصص المستخدم في السبرنت الحالي. أما تشغيل الاختبار (Test Run) فهو تنفيذ واحد لحزمة على إصدار محدد من البرمجية، في بيئة مذكورة، مع نتيجة مسجَّلة لكل اختبار. وبمصطلحات ISTQB، الحزمة هي مجموعة الاختبارات، والتشغيل هو تنفيذها على إصدار واحد من موضوع الاختبار (Test Object).
مثال: تضم حزمة انحدار إتمام الشراء 24 حالة اختبار. وحين يصل البناء (Build) 2.4.0-rc2، أي النسخة المرشّحة للإصدار (Release Candidate) الثانية من 2.4.0، إلى بيئة Staging، ينشئ المختبِر تشغيلاً لهذه الحزمة على هذا البناء. يبدأ كل اختبار بحالة «لم يُنفَّذ» وينتهي بحالة «ناجح» أو «فاشل» أو «محجوب» أو «مُتخطّى». وحين يصل البناء rc3 يبدأ تشغيل جديد، وتبقى نتائج rc2 سجلاً لما فعله rc2.
لماذا يهم
من دون حزم، تبدأ كل جولة اختبار بسؤال «ماذا نشغّل هذه المرة؟»، وتختلف الإجابة باختلاف من تسأله. ومن دون تشغيلات، تنفصل النتائج عن البناءات: فلا يمكن تمييز نجاح سُجّل يوم الاثنين عن نجاح على بناء يوم الخميس الذي يحتوي ثلاثة تغييرات إضافية، فيُصدر الفريق المنتج اعتماداً على نتائج تصف إصداراً آخر.
وبالنسبة إلى المختبِر، التشغيل هو السجل الذي يقرؤه الآخرون: ما أُنجز، وما فشل، وما تعذّر اختباره ولماذا. وتُبنى عليه تقارير الحالة وقرارات الإصدار، لذا فإن حالة تُضبط بلا عناية، كاختبار محجوب يُسجَّل فاشلاً، تضلّل كل من يعتمد عليه.
حزم الاختبارات: تجميع الاختبارات لغرض محدد
في درس تهيئة الاختبار جُمعت الإجراءات في حزم. وفي كثير من أدوات إدارة الاختبار تُخزَّن كل حالة اختبار مرة واحدة في مستودع، وغالباً في مجلدات حسب الميزة، وتختار الحزمة الحالات اللازمة لغرض واحد. وعندئذٍ يمكن أن تنتمي الحالة إلى عدة حزم؛ فالحزمة تشير إليها ولا تنسخها، وبذلك يصل أي تصحيح في خطواتها إلى كل الحزم.
تبني بعض الأدوات الحزمة من قائمة ثابتة، وأخرى من استعلام أو وسم، مثل كل حالة تحمل الوسم checkout وأولويتها High. والحزم المؤتمتة تعمل بالطريقة نفسها: مجلد أو ملف أو وسم يشغّله خط الأنابيب (Pipeline) معاً. ومن الأغراض الشائعة:
- اختبار الدخان (Smoke): فحوص قليلة تُظهر أن البناء الجديد مستقر بما يكفي لمتابعة الاختبار.
- الميزة (Feature): الاختبارات الجديدة للسبرنت أو الإصدار الحالي.
- الانحدار (Regression): اختبارات للسلوك القائم، تُشغَّل كاملة أو كاختيار مبني على المخاطر بعد أي تغيير.
- الإعداد (Configuration): الاختبارات نفسها لمتصفح أو جهاز أو لغة بعينها، حيث قد تختلف النتائج.
جرّبها: مولّد حالات الاختبار جرّبها: مولّد سيناريوهات الانحدار جرّبها: مولّد الاختبار المبني على المخاطر
تشغيلات الاختبار ودورات الاختبار
يصف منهج ISTQB للمستوى التأسيسي تنفيذ الاختبار بأنه تشغيل الاختبارات وفق جدول التنفيذ، في تشغيلات اختبار، مع مقارنة النتائج الفعلية بالمتوقعة وتسجيل النتيجة. والتشغيل يحفظ هذا السجل: نتيجة لكل اختبار، مع من نفّذه ومتى وعلى أي بناء.
تجيب الحزمة عن سؤال «ماذا نختبر؟» وتُستخدم شهوراً. ويجيب التشغيل عن سؤال «ماذا حدث على هذا البناء، في هذه البيئة؟» ويُغلَق حين ينتهي ذلك الاختبار، لذا فتشغيل الحزمة على بناء جديد يعني إنشاء تشغيل جديد، لا الكتابة فوق النتائج السابقة. وتجمع فرق كثيرة تشغيلات بناء واحد أو فترة اختبار واحدة في دورة اختبار (Test Cycle)، مثل «الإصدار 2.4، دورة اختبار النظام 2» مع تشغيل لكل متصفح. ويسجّل رأس التشغيل ما يلزم لتكراره بالشروط نفسها:
Run: Checkout regression / 2.4.0-rc2 / Chrome
Suite: Checkout regression (24 test cases)
Cycle: Release 2.4, system test cycle 2
Build: 2.4.0-rc2
Environment: staging, payment sandbox, data baseline CHK-BASE-3
Configuration: Chrome desktop, English UI
Assigned: Sara CHK-01..12, Omar CHK-13..24
Planned: day 1 to day 2خمس حالات وما تعنيه كل منها
لكل اختبار في التشغيل حالة حالية واحدة. اتفقوا على معنى كل حالة قبل التشغيل الأول واكتبوه، وإلا عنت الأعداد أشياء مختلفة لمختبِرين مختلفين. والنواة المشتركة:
- لم يُنفَّذ (Not run): ضمن نطاق التشغيل لكنه لم يُنفَّذ بعد، وتسمّيها بعض الأدوات Untested أو To do.
- ناجح (Passed): نُفّذ، وطابقت كل نتيجة فعلية نتيجتها المتوقعة.
- فاشل (Failed): نُفّذ، واختلفت نتيجة فعلية واحدة على الأقل عن المتوقعة. وما زال السبب يحتاج إلى تحليل: عيب في المنتج، أو خطأ في الاختبار، أو مشكلة في البيئة.
- محجوب (Blocked): تعذّر بدؤه أو إكماله لأن شيئاً خارج الاختبار أوقفه، مثل توقف البيئة، أو نقص البيانات أو الصلاحيات، أو عيب في خطوة سابقة. سجّل السبب واربط الاختبار بالمشكلة التي تمنعه.
- مُتخطّى (Skipped): لم يُنفَّذ في هذا التشغيل عمداً بقرار مسجَّل، كأن تكون الميزة معطّلة هنا أو لا ينطبق الاختبار على هذا الإعداد. وتعرض تقارير الاختبارات المؤتمتة حالة Skipped أيضاً للاختبارات المعطّلة في الشيفرة، وتستخدمها بعض أطر العمل حين تفشل خطوة تهيئة (Set-up)، وهذا أقرب إلى «محجوب»: فتحقّق من السبب قبل أن تعدّه.
| # | من | إلى | الحدث أو القرار |
|---|---|---|---|
| 1 | لم يُنفَّذالبداية | ناجحنجاح | نُفّذ: كل نتيجة فعلية تطابق نتيجتها المتوقعة |
| 2 | لم يُنفَّذالبداية | فاشلفشل | نُفّذ: نتيجة فعلية واحدة على الأقل تختلف عن المتوقعة |
| 3 | لم يُنفَّذالبداية | محجوبتنبيه | تعذّر البدء أو الإكمال: البيئة متوقفة، أو البيانات أو الصلاحيات ناقصة، أو عيب سابق يعترض الطريق؛ ويُربط السببمسار بديل |
| 4 | محجوبتنبيه | لم يُنفَّذالبداية | زال العائق: يعود إلى قائمة الانتظار ثم يُنفَّذمسار بديل |
| 5 | لم يُنفَّذالبداية | مُتخطّى | قرار مسجَّل بعدم تشغيله في هذا التشغيل، مع السببمسار بديل |
| 6 | فاشلفشل | ناجحنجاح | تنجح إعادة الاختبار على بناء فيه الإصلاح: نتيجة جديدة، وتبقى النتيجة الفاشلة في السجلمسار بديل |
المنفَّذ = الناجح + الفاشل. وتُعَدّ حالات «محجوب» و«مُتخطّى» و«لم يُنفَّذ» منفصلة. وتسمّي الأدوات هذه الحالات بأسماء مختلفة.
مثال تطبيقي: متابعة تشغيل انحدار
أدناه تشغيل انحدار إتمام الشراء في نهاية اليوم الأول، وكل حالة فيه غير «ناجح» و«لم يُنفَّذ» تحمل ملاحظة.
المنفَّذ هو الناجح مع الفاشل: 17 من 24. ونسبة النجاح، أي الناجح مقسوماً على المنفَّذ، هي 15 من 17، أي نحو 88%، لكنها وحدها تخفي 3 اختبارات محجوبة و3 لم تُنفَّذ ما زالت متبقية، واختباراً مُتخطّى، لذا يعرض الملخص الأعداد الخمسة. والخطوات التالية:
- فاشل، CHK-05 وCHK-06: يرتبطان بعيب واحد هو DEF-512، ويُعاد اختبارهما على البناء الذي يحتوي الإصلاح، وهو ما يسمّيه ISTQB اختبار التأكيد (Confirmation Testing)، فيحصل كل منهما على نتيجة جديدة يُسجَّل معها ذلك البناء.
- محجوب، من CHK-02 إلى CHK-04: كلها تنتظر حلّ مشكلة البيئة ENV-77، ولهذه المشكلة مالك. وحين تعود بيئة التجربة للدفع (Sandbox) تعود إلى «لم يُنفَّذ» ثم تُنفَّذ، ولا تُعلَّم «ناجح» دون تنفيذ أبداً.
- مُتخطّى، CHK-07: سُجّل السبب ومن اتخذ القرار، فتظهر فجوة التغطية في التقرير.
- لم يُنفَّذ، من CHK-22 إلى CHK-24: مخطط لها في اليوم الثاني؛ وإن ضاق الوقت يقرر قائد الاختبار تخطّيها أو تمديد التشغيل.
Run: Checkout regression / 2.4.0-rc2 / Chrome end of day 1
ID Test case Status Note
CHK-01 Pay cash on delivery, single item Passed
CHK-02 Pay by card, 3-D Secure challenge Blocked ENV-77 payment sandbox down
CHK-03 Pay by card, declined card Blocked ENV-77
CHK-04 Refund to card after cancellation Blocked ENV-77
CHK-05 Apply promo code SAVE10 Failed DEF-512 discount applied twice
CHK-06 Remove promo code Failed DEF-512 (same cause)
CHK-07 Pay with a digital wallet Skipped wallet off on staging (test lead)
CHK-08 .. CHK-21 (14 tests) Passed
CHK-22 .. CHK-24 (3 tests) Not run planned for day 2
Planned 24 Passed 15 Failed 2 Blocked 3 Skipped 1 Not run 3
Executed (passed + failed) 17 Pass rate 15 / 17 = 88%أخطاء شائعة
- تسجيل الاختبار المحجوب «فاشلاً»، فيُرسَل المطورون خلف مشكلة ليست مشكلتهم.
- تسجيل الاختبار «ناجحاً» لأنه نجح على البناء السابق، أو لأن الخطوات التي أمكن تنفيذها كانت سليمة.
- الكتابة فوق نتائج البناء السابق بدلاً من بدء تشغيل جديد، فلا يعرف أحد إلى أي بناء تنتمي النتيجة.
- تخطّي الاختبارات بصمت لإنهاء العمل في موعده. فالتخطّي يحتاج إلى سبب وإلى صاحب قرار، وإلا ادّعى التقرير تغطية لم تحدث.
- الاكتفاء بنسبة النجاح، وهي لا تقول شيئاً عن الاختبارات المحجوبة أو التي لم تُنفَّذ.
- بناء الحزم حول الأشخاص («اختبارات أحمد») بدلاً من الأغراض، فلا يعرف أحد ما تغطيه الحزمة حين ينتقل صاحبها إلى عمل آخر.
من منظور ضمان الجودة
في معظم الفرق ينشئ قائد الاختبار التشغيلات من الخطة: أي الحزم والبناءات والبيئات والإعدادات، ومن ينفّذ ماذا. ويُبقي المختبِرون أجزاءهم محدَّثة خلال اليوم، لأن المطورين وقائد الاختبار ومالك المنتج يقرؤونها ليقرروا خطوتهم التالية. اربط كل فشل بعيبه وكل حجب بسببه، واذكر في الاجتماع اليومي ما هو محجوب ومن يملك حلّه.
قبل بدء التشغيل اسأل: أي بناء بالضبط؟ وأي بيئة وإعداد؟ وأي الحزم ضمن النطاق؟ وما معنى حالاتكم هنا؟ وحين يصل بناء جديد، قارن قائمتي الحالات في التشغيلين، بأداة مقارنة النصوص مثلاً: فالاختبار الذي نجح على rc2 وفشل على rc3 انحدار محتمل.
تمرين عملي
تابع تشغيلاً لحزمة تسجيل الدخول
تضم حزمة تسجيل الدخول 10 حالات اختبار، من LOG-01 إلى LOG-10، وتُشغَّل على البناء 5.1.0 في بيئة Staging على Chrome. الحالات من LOG-01 إلى LOG-05 تطابق نتائجها المتوقعة. وLOG-06 «تسجيل الدخول بحساب مقفَل» تعرض لوحة التحكم بدلاً من رسالة القفل. وLOG-07 وLOG-08 تحتاجان إلى رمز لمرة واحدة عبر SMS، وبديل خدمة SMS (Stub) متوقف. وLOG-09 «تسجيل الدخول عبر SSO» (الدخول الموحّد) تخص الإصدار المؤسسي غير الموجود على Staging، ووافق قائد الاختبار على عدم تشغيلها. وLOG-10 لم تبدأ حين انتهى اليوم.
سجّل نتائج التشغيل كما تسجّلها في أداة إدارة الاختبار.
- أعطِ كل اختبار حالة، وملاحظة حيث تلزم.
- عُدّ كل حالة، ثم المنفَّذ ونسبة النجاح.
- اكتب الإجراء التالي لكل اختبار لم ينجح.
إظهار الإجابة النموذجية
الحالات: من LOG-01 إلى LOG-05 ناجحة. وLOG-06 فاشلة ومرتبطة بتقرير عيب جديد؛ فالحساب المقفَل الذي يستطيع تسجيل الدخول يتجاوز ضابطاً أمنياً. وLOG-07 وLOG-08 محجوبتان، والملاحظة: بديل SMS متوقف، مع ربطهما بمشكلة البيئة. وLOG-09 مُتخطّاة، والملاحظة: الإصدار المؤسسي غير موجود على Staging، بقرار قائد الاختبار. وLOG-10 لم تُنفَّذ.
الملخص: ناجح 5، فاشل 1، محجوب 2، مُتخطّى 1، لم يُنفَّذ 1. المنفَّذ = 6. ونسبة النجاح = 5 / 6، أي نحو 83%. والمتبقي للتنفيذ 3 اختبارات (LOG-07 وLOG-08 وLOG-10)، إضافة إلى إعادة اختبار LOG-06 بعد الإصلاح.
التالي: يُعاد اختبار LOG-06 على البناء الذي يحتوي الإصلاح وتُسجَّل له نتيجة جديدة. وتعود LOG-07 وLOG-08 إلى «لم يُنفَّذ» حين يعود البديل ثم تُنفَّذان. وتدخل LOG-09 تشغيلاً على بيئة فيها الإصدار المؤسسي، أو تُذكر الفجوة في التقرير. وتُشغَّل LOG-10 أولاً في اليوم التالي.
أسئلة شائعة
ما الفرق بين حزمة الاختبارات وتشغيل الاختبار؟
الحزمة مجموعة اختبارات قابلة لإعادة الاستخدام اختيرت لغرض، مثل اختبار الدخان أو انحدار إتمام الشراء. والتشغيل تنفيذ واحد لحزمة، أو لجزء منها، على بناء محدد في بيئة محددة، مع نتيجة لكل اختبار. وللحزمة الواحدة عادةً تشغيلات كثيرة طوال عمرها.
هل الاختبار المحجوب هو نفسه الاختبار الفاشل؟
لا. الاختبار الفاشل نُفّذ وأعطى نتيجة تختلف عن المتوقعة. أما المحجوب فتعذّر تنفيذه أو إكماله، فلا يقول شيئاً بعدُ عن عمل الميزة. وتُعَدّ الاختبارات المحجوبة منفصلة، وتحتاج إلى سبب وإلى مالك للعائق.
هل تُسجَّل إعادة الاختبار بعد الإصلاح في التشغيل نفسه أم في تشغيل جديد؟
يعتمد ذلك على عُرف الفريق وعلى أداته. فرق كثيرة تضيف إعادة الاختبار نتيجةً جديدة في التشغيل نفسه مع البناء الذي يحتوي الإصلاح، وفرق أخرى تنشئ تشغيلاً للبناء الجديد. وفي الحالتين احتفظ بالنتيجة الفاشلة في السجل، وسجّل البناء الذي تنتمي إليه النتيجة الجديدة.
ما دورة الاختبار؟
تستخدم الفرق عبارة «دورة الاختبار» (Test Cycle) لجولة من تنفيذ الاختبار، وغالباً تضم كل التشغيلات لبناء واحد أو لفترة اختبار واحدة، مثل «دورة اختبار النظام 2». وتستخدم الأدوات كلمات Run وExecution وCycle بطرق مختلفة، فتعلّم ما تعنيه أداة فريقك بكل منها.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
تدرّب بأدوات متقن
ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.
ولّد سيناريوهات اختبار الانحدار من وصف التغيير وقائمة الوحدات المتأثرة والمرتبطة.
قيّم الميزات حسب الاحتمالية والأثر، ثم ولّد خطة اختبار مبنية على المخاطر ومرتّبة حسب الأولوية.
حساب النسب المئوية ونسبة التغيّر والزيادة/النقصان وكم تمثّل X من Y بالنسبة المئوية.
قارن نصّين سطراً بسطر أو كلمةً بكلمة مع إبراز الاختلافات.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.