مشكلات البيئة وبيانات الاختبار
حين يفشل اختبار، اسأل أولاً: ما الذي أخفق، المنتج أم الإعداد الذي عمل عليه الاختبار؟ فمشكلة البيئة (Environment problem) خلل فيما يحيط بالبناء قيد الاختبار: خدمة متوقفة، أو بناء قديم، أو إعداد تغيّر، أو شهادة انتهت صلاحيتها. ومشكلة بيانات الاختبار (Test data problem) سجلٌّ يحتاجه الاختبار لكنه مفقود، أو في حالة خاطئة، أو قديم، أو غيّره شخص آخر.
مثال: يفشل اختبار استرداد المبلغ برسالة «تم استرداد مبلغ هذا الطلب مسبقاً». والمنتج على حق: فقد استردّ مختبِر آخر مبلغ ذلك الطلب قبل ساعة، وتقرير العيب هنا يجعل المطوّر يبحث عن عيب غير موجود. ويتابع هذا الدرس فرعَي البيئة والبيانات من الفرز الذي عرضه درس الاختبارات الفاشلة والمحجوبة.
لماذا يهم
في منهج ISTQB للمستوى التأسيسي يشمل تنفيذ الاختبار تحليل كل شذوذ (Anomaly) لمعرفة سببه المرجّح، والشذوذ المُبلَّغ عنه قد يتبيّن أنه نتيجة إيجابية كاذبة (False-positive result) لا عيبٌ حقيقي. ومشكلات البيئة وبيانات الاختبار من الأسباب المعتادة لهذه النتائج الإيجابية الكاذبة، وقد تُنتج أيضاً نتائج سلبية كاذبة (False negatives)، فينجح الاختبار مع أن العيب موجود.
وتُضعف أعطال الإعداد المتكررة الثقة بالنتائج أيضاً: فالفريق الذي تكثر تشغيلاته الحمراء لأسباب تتعلق بالإعداد يتعلّم تجاهل اللون الأحمر.
مشكلات البيئة وعلاماتها
قد تتعطل أثناء التنفيذ أي طبقة من طبقات البيئة التي وصفها درس بيئات الاختبار، ولكل عطل علامات معتادة.
- بناء خاطئ: نشرٌ قديم أو ناقص؛ يعود عيب سبق إصلاحه، أو يختلف الإصدار المُعلَن عن بناء التشغيل.
- اعتمادية متوقفة: قاعدة بيانات أو طابور رسائل أو بيئة تجربة الدفع (Sandbox) أو بديل الرسائل القصيرة (Stub) غير متاح. فتظهر في ميزات لا علاقة بينها أخطاء اتصال وانتهاء مهلة (Timeout) أو رموز حالة HTTP 502 (بوابة سيئة) و503 (الخدمة غير متاحة) و504 (انتهاء مهلة البوابة)؛ وبهذه الرموز يقول الخادم إنه، أو خدمة خلفه، لا يستطيع الإجابة إجابة سليمة الآن.
- انحراف الإعدادات (Configuration drift): علم ميزة (Feature flag) أو متغير بيئة أو عنوان خدمة يختلف عمّا تفترضه الاختبارات، فتغيب ميزة أو تتصل بنظام خاطئ.
- صلاحية وصول منتهية: كلمة مرور حساب اختبار، أو رمز وصول API (Token)، وهو المفتاح الذي يستخدمه نظام لاستدعاء نظام آخر، أو شهادة TLS الخاصة بالبيئة، وهي ما يتيح للمتصفحات الاتصال عبر HTTPS؛ فتُرفض طلبات كانت تعمل بالأمس برمز 401 (غير مُصادَق عليه)، أو يفشل تسجيل الدخول، أو ترفض المتصفحات الاتصال بتحذير من الشهادة.
- الموارد والتداخل: قرص ممتلئ، أو اتصالات قاعدة بيانات مستنفدة، أو شخص يعيد نشر البيئة المشتركة في منتصف تشغيلك؛ فيبدأ الفشل في منتصف التشغيل، أو يفشل كل شيء بضع دقائق ثم يعود إلى طبيعته.
جرّبها: فاحص صحة API جرّبها: مرجع رموز حالة HTTP جرّبها: فاحص انتهاء صلاحية JWT
مشكلات بيانات الاختبار وعلاماتها
كثير من الشروط المسبقة في حالة الاختبار يتعلق بالبيانات: العميل C-101 موجود، والطلب مدفوع ولم يُشحن. ومشكلة البيانات تعني أن شرطاً مسبقاً من هذا النوع لم يكن متحققاً حين نُفِّذ الاختبار، مع أن المنتج ربما تصرّف تصرّفاً صحيحاً.
وقد تُخفي البيانات عيباً أيضاً: اختبار الدخول الأول، الذي يجب أن يطلب من المستخدم تأكيد بريده الإلكتروني، يُنفَّذ على حساب أُكِّد بريده في تشغيل سابق، فلا تظهر خطوة التأكيد أبداً، وينجح الاختبار حتى لو كان التأكيد معطّلاً. ونادراً ما يُتحرّى عن هذه النتائج السلبية الكاذبة، لأن النتيجة خضراء.
- مفقودة: لم يُشغَّل سكربت تهيئة البيانات (Seed script)، أو لم يُستعَد خط الأساس بعد تحديث البيانات.
- في حالة خاطئة: استخدم السجلَّ اختبارٌ آخر أو مختبِر آخر، فصار الطلب مُستردّاً أو الحساب مقفلاً.
- تصادمات: تتشارك تشغيلات متوازية حساباً واحداً، أو تظهر رسالة «البريد الإلكتروني مسجّل مسبقاً» لأن تشغيلاً سابقاً ترك مستخدمه خلفه.
- قديمة: انتهت صلاحية تاريخ مكتوب بقيمة ثابتة أو قسيمة أو بطاقة اختبار، أو لم تعد نسخة من البيانات أُخذت قبل أشهر تطابق الأسعار أو الإعدادات الحالية.
التمييز بينها وبين عيوب المنتج
لا تحكم من رسالة الخطأ وحدها. اجمع بضع حقائق، بدءاً بالأرخص؛ فهي معاً تشير عادةً إلى سبب واحد.
وتنبّه إلى فخ: الشرط المسبق الخاطئ لا يبرّر السلوك الخاطئ. فإذا أنتج طلبٌ مُستردّ مسبقاً خطأً في الخادم بدلاً من رسالة واضحة، فالبيانات كانت خاطئة لذلك الاختبار، ومع ذلك ففي المنتج عيب: عليه أن يتعامل مع تلك الحالة بأمان. أصلح البيانات، وأبلغ عن معالجة الخطأ في تقرير مستقل.
- النمط: اختبارات كثيرة لا علاقة بينها تفشل معاً تشير إلى البيئة؛ واختبار واحد أو ميزة واحدة يشيران إلى البيانات أو المنتج.
- التوقيت: هل بدأ الفشل مع نشرٍ أو تغيير في الإعدادات أو تحديث للبيانات، لا مع التغيير قيد الاختبار؟
- الرسالة: أخطاء الاتصال والبوابات تشير إلى البيئة؛ ورسالة من قواعد العمل مثل «مُستردّ مسبقاً» تقول لك: افحص البيانات أولاً.
- خط الأساس: هل البناء صحيح، وهل الاعتماديات سليمة، وهل السجل في الحالة التي تشترطها حالة الاختبار؟
- إعادة تشغيل نظيفة: كرّر الاختبار ببيانات جديدة أو في بيئة ثانية. والفشل الذي يستمر في بيئة سليمة ببيانات صحيحة ليس مشكلة بيئة ولا مشكلة بيانات: افحص حالة الاختبار كما في الدرس السابق، فإن كانت صحيحة فأبلغ عن عيب في المنتج.
| العَرَض | يشير عادةً إلى | افحص أولاً | سجّله على أنه |
|---|---|---|---|
| اختبارات كثيرة لا علاقة بينها تفشل معاًأخطاء اتصال، انتهاء مهلة، 502 و503 و504 | البيئة: اعتمادية أو البيئة كلها متوقفة | فحوص الصحة؛ وآخر عمليات النشر وإعادة التشغيل | مشكلة بيئة؛ والاختبارات محجوبة |
| عيب أُصلح يعود، أو تظهر شاشات قديمة | البيئة: بناء خاطئ أو قديم | الإصدار الذي تُعلنه البيئة مقابل بناء التشغيل | مشكلة بيئة؛ وإعادة التشغيل بعد إعادة النشر |
| ميزة غائبة أو تتصل بنظام خاطئ | البيئة: انحراف الإعدادات | أعلام الميزات والإعدادات مقابل سجل البيئة | مشكلة بيئة؛ وإعادة التشغيل بعد الإصلاح |
| ينجح وحده ويفشل في تشغيل كامل أو متوازٍ | بيانات الاختبار: سجلات مشتركة أو متبقية | من يستخدم السجل أيضاً، وحالته قبل الخطوة | بيانات خاصة بكل اختبار؛ وإعادة التشغيل |
| «موجود مسبقاً»، «مُستردّ مسبقاً»، «الحساب مقفل» | بيانات الاختبار: سجل في حالة خاطئة | حالة السجل مقابل الشرط المسبق في حالة الاختبار | إصلاح البيانات وإعادة التشغيل؛ ولا عيب إلا إذا أساء المنتج التعامل مع الحالة |
| بدأ يفشل في تاريخ معيّن دون أي تغيير | بيانات الاختبار أو صلاحية الوصول: شيء انتهت صلاحيته | التواريخ الثابتة ورموز القسائم وبطاقات الاختبار ورموز الوصول والشهادات | تجديد البيانات أو صلاحية الوصول؛ وتواريخ نسبية إلى التشغيل من الآن فصاعداً |
| قاعدة واحدة تعطي نتيجة خاطئةبيئة سليمة وبيانات صحيحة | عيب في المنتج | أعد الإنتاج ببيانات جديدة؛ وقارن بالمتطلب | تقرير عيب |
- المحاط بإطار: الصف الوحيد الذي يذهب مباشرةً إلى تقرير عيب في المنتج
أسباب مرجّحة لا أحكام نهائية: أكّد كلاً منها بفحصه قبل أن تسجّله.
مثال تطبيقي: 14 اختباراً فاشلاً في صباح واحد
بحلول الساعة 09:40 فشل 14 اختباراً من أصل 40 في تشغيل انحدار إتمام الشراء على البناء 4.1.0. وبدلاً من كتابة 14 تقرير عيب، يجمّع المختبِر الاختبارات الفاشلة حسب العَرَض والتوقيت، ثم يفحص كل مجموعة.
تصيب حالات فشل الواجهة البرمجية (API) التسع نقاطَ نهاية (Endpoints) لا علاقة بينها، وكلها بالرمز 401 (غير مُصادَق عليه) نفسه منذ أول طلب في الساعة 09:00، وهذا يشير إلى صلاحية الوصول لا إلى ميزة بعينها. ويُظهر فكّ رمز الوصول (Token) الذي يستخدمه عميل الاختبار أن صلاحيته انتهت عند منتصف الليل: مشكلة بيئة واحدة، وحين جدّد مالك البيئة الرمز نجحت إعادة تشغيل الاختبارات التسعة كلها. واختبارات القسيمة استخدمت قسيمة لها تاريخ انتهاء ثابت قد مضى. والطلب الذي استخدمه اختبار الاسترداد كان تشغيلٌ آخر قد استردّ مبلغه مسبقاً، وهذا يفسّر الفشل لكنه لا يفسّر خطأ الخادم (HTTP 500)، فذلك عيب قائم بذاته. ولا يتكرر ببيانات جديدة في بيئة سليمة إلا فشل ضريبة القيمة المضافة.
النتيجة: مشكلة بيئة واحدة نجحت اختباراتها التسعة عند إعادة تشغيلها بعد تجديد الرمز، وإصلاحان للبيانات نجحت بعدهما إعادة التشغيل، وتقريرا عيب بدلاً من 14 تقريراً.
Run: Checkout regression / build 4.1.0 / test environment / 09:00-09:40
Not passed: 14 of 40 (before triage)
API-01..09 401 Unauthorized from cart, address and order endpoints alike
test client's API token expired at 00:00 -> ENV-31, renewed, reruns passed
CPN-01..03 "Coupon expired"
coupon in the data has a fixed end date -> data fixed, rerun passed
RFD-04 500 error when refunding order O-7781
O-7781 refunded by another run at 08:50 -> data reset, rerun passed
a refunded order needs a clear message -> defect DEF-436
TOT-02 VAT calculated on the price before discount
same result on a fresh order, healthy env -> defect DEF-437الوقاية: افحص الإعداد قبل الاختبارات
يجعل منهج ISTQB للمستوى التأسيسي بناء بيئة الاختبار والتحقق من صحة إعدادها جزءاً من تهيئة الاختبار (Test implementation) قبل التنفيذ، ويذكر توافر البيئات وبيانات الاختبار ضمن معايير الدخول المعتادة؛ ويصف المعيار ISO/IEC/IEEE 29119-3 تقارير جاهزية لكليهما. ويذكر مقال Martin Fowler عن عدم الحتمية في الاختبارات غيابَ العزل والخدمات البعيدة والوقت بين الأسباب المعتادة للنتائج غير الموثوقة. والعادات التالية تستهدف هذه الأسباب.
- اختبار الدخان أولاً: تحقق من سلامة الاعتماديات، وشغّل اختبار دخان (Smoke test) قصيراً بعد كل نشر، قبل الاختبار المخطط له.
- تحقق من البناء: قارن الإصدار الذي تُعلنه البيئة ببناء التشغيل.
- بيانات خاصة: سجلات فريدة لكل مختبِر ولكل تشغيل متوازٍ، يُنشئها الاختبار أو سكربت.
- بيانات قابلة للتكرار: استعد خط أساس معروفاً، واكتب التواريخ نسبةً إلى تاريخ التشغيل.
- أعلنوا التغييرات: لا نشر ولا إعادة تشغيل ولا تحديث بيانات في منتصف تشغيل أحد.
- سجّل مشكلات البيئة مع مسؤول عنها، وعامِل السبب الذي يعود كل أسبوع خطراً يجب إصلاحه، لا إزعاجاً يُلتفّ عليه.
أخطاء شائعة
- إعادة ضبط البيانات والمضيّ قُدماً حين يردّ المنتج على الحالة الخاطئة بخطأ في الخادم أو بسجل تالف.
- إصلاح مشكلات البيئة أو البيانات بصمت، فتعود المشكلة نفسها في التشغيل التالي ولا يرى أحد الوقت الضائع.
- تشارك الحسابات بين المختبِرين والتشغيلات المتوازية، وكتابة تواريخ ورموز تنتهي صلاحيتها بقيم ثابتة.
من منظور ضمان الجودة
نادراً ما يملك المختبِرون البيئات أو سكربتات تهيئة البيانات، لكنهم كثيراً ما يكونون أول من يرى تعطّلها. ومهمتك تشخيص أولي سريع مبني على الأدلة، ثم إيصال المشكلة إلى صاحبها: المطوّر لعيب المنتج، وفريق DevOps أو مالك البيئة للبيئة، ومن يتولى بيانات الاختبار للبيانات. ونبّه قناة الفريق فور أن تبدو البيئة المشتركة معطّلة.
سجّل ما وجدته، لا الحالة وحدها: رقم مشكلة البيئة ونافذتها الزمنية والبناء والاختبارات المتأثرة، أو السجل وحالته والإصلاح. وتضيف بعض الفرق إلى نظام التتبع نوع بلاغ أو قرار إغلاق مثل «Environment» أو «Test data» للتقارير التي يتبيّن أنها ليست عيوباً في المنتج؛ فاستخدمه بدلاً من حذف التقرير. أما الوقت الضائع والأسباب المتكررة فمكانها تقرير التنفيذ، وهو موضوع الدرس التالي.
تمرين عملي
صنّف خمسة اختبارات فاشلة حسب السبب
فيما يلي لقطة من تشغيل في بيئة Staging. لكل اختبار فاشل، قرّر هل هو على الأرجح مشكلة بيئة أم مشكلة بيانات اختبار أم عيب في المنتج، ثم اذكر ما ستسجّله والحالة التي يأخذها الاختبار.
التشغيل: انحدار الطلبات / البناء 2.7.0 / بيئة Staging / منذ الساعة 10:30
المعرّف ما رآه المختبِر
ORD-03 الدخول بحساب المندوب R-12: «الحساب مقفل. حاول مجدداً بعد 30 دقيقة.»
ORD-07 تتبّع الطلب: خريطة فارغة؛ وفي Console رمز 504 من maps-proxy بين 10:31 و10:44
ORD-08 تتبّع الطلب: خريطة فارغة؛ وفي Console رمز 504 من maps-proxy بين 10:31 و10:44
ORD-11 الإيصال: بقشيش قدره 5.00 SAR يُضاف إلى الإجمالي مرتين
ORD-12 إلغاء الطلب O-5521: «تم تسليم الطلب مسبقاً»- اجمع الاختبارات الفاشلة التي تشترك في عَرَض واحد ونافذة زمنية واحدة.
- لكل مجموعة، سمِّ السبب المرجّح والفحص الذي يؤكده.
- سجّل مشكلة بيئة، أو إصلاح بيانات مع إعادة تشغيل، أو تقرير عيب، وحدّد حالة كل اختبار.
إظهار الإجابة النموذجية
ORD-07 وORD-08 (بيئة): رمز 504 نفسه من وكيل الخرائط (maps-proxy) خلال الدقائق الـ13 نفسها. افحص سلامة خدمة الخرائط، وسجّل مشكلة بيئة واحدة مع النافذة الزمنية، واجعل حالة الاختبارين «محجوب»، وأعد تشغيلهما بعد الإصلاح.
ORD-03 (بيانات اختبار): الرسالة قفلٌ مقصود يأتي عادةً بعد محاولات دخول فاشلة متكررة، أي أن شخصاً آخر يستخدم R-12، كمختبِر آخر أو اختبار للقفل، قد استنفد المحاولات. افحص من يستخدم حساب مندوب التوصيل R-12 أيضاً، ثم اطلب فتح القفل أو استخدم حساب مندوب خاصاً بك وأعد التشغيل؛ واذكر سبب البيانات في النتيجة الأولى، وسجّل إعادة التشغيل تنفيذاً جديداً. واقترح حساب مندوب لكل مختبِر.
ORD-12 (بيانات اختبار): «تم تسليم الطلب مسبقاً» إجابة صحيحة لطلب تم تسليمه؛ فقد نقل اختبار آخر أو محاكي التوصيل الطلب O-5521 إلى حالة لاحقة. اذكر سبب البيانات، وأعد التشغيل بطلب جديد في حالة «قيد التحضير» يُنشئه الاختبار؛ ونتيجة إعادة التشغيل هي المعتمدة.
ORD-11 (عيب مرجّح في المنتج): خطأ حسابي. أعد إنتاجه بطلب جديد في بيئة سليمة؛ فإذا احتُسب البقشيش مرتين مجدداً، فسجّل الاختبار فاشلاً، واكتب تقرير عيب يذكر الطلب والمبالغ والإجمالي المتوقع.
النتيجة: تقرير عيب واحد، ومشكلة بيئة واحدة تغطي اختبارين محجوبين، وإصلاحان للبيانات، بدلاً من خمسة تقارير عيوب.
أسئلة شائعة
هل أكتب تقرير خطأ عن مشكلة في البيئة؟
ليس تقرير عيب في المنتج. سجّلها حيث يعمل مالك البيئة، وغالباً تكون بلاغ «مشكلة بيئة» في نظام التتبع نفسه بنوع أو مكوّن خاص، واربط بها الاختبارات المحجوبة. وإذا كان السبب سكربتاً أو إعداداً سيُستخدم في الإنتاج أيضاً، مثل خطوة نشر تنسى إعداداً ما، فاذكر ذلك: فهو عيب كذلك، لكنه ليس في شيفرة التطبيق.
كم من الوقت أتحرّى قبل أن أبلّغ؟
بقدر ما تستغرقه الفحوص الرخيصة فقط: البناء، وسلامة الاعتماديات، وحالة البيانات، وإعادة تشغيل واحدة ببيانات جديدة. واتفق مع فريقك على مهلة قصيرة. فإذا بقي السبب غامضاً، فأبلغ بما تعرفه مع الأدلة، واذكر الفحوص التي أجريتها، واطلب من مطوّر أن ينظر فيها معك؛ ولا تحتفظ بالمعلومة لنفسك.
هل الإخفاقات المتقطعة مشكلات بيئة؟
أحياناً، لكن ليس افتراضياً. فالاختبار الذي يفشل بين حين وآخر قد يكون سببه اعتمادية بطيئة، أو بيانات يتشاركها مع تشغيلات أخرى، أو الاختبار نفسه، كانتظار ناقص، أو حالة تسابق (Race condition) حقيقية في المنتج، أي أن النتيجة تتوقف على أيّ عمليتين متزامنتين تنتهي أولاً. ويبيّن درس إعادة إنتاج الإخفاقات كيف تضيّق الاحتمالات؛ فلا تصفه بأنه مشكلة بيئة إلا حين تقول الأدلة ذلك.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- ISO/IEC/IEEE 29119-3:2021 — Software and systems engineering — Software testing — Part 3: Test documentationنماذج ومحتوى وثائق الاختبار — سياسة الاختبار واستراتيجيته وخطته وتقارير الحالة والإنجاز وتقارير الحوادث.
- Eradicating Non-Determinism in Tests (Martin Fowler)لماذا تُفقد الاختبارات المتذبذبة الحزمةَ قيمتها، وأسبابها الشائعة (العزل وعدم التزامن والخدمات البعيدة والوقت وتسرّب الموارد)، والحجر كاستجابة.
تدرّب بأدوات متقن
افحص عدة نقاط نهاية لصحة API دفعة واحدة واحصل على الحالة وزمن الاستجابة وملخّص نجاح/فشل.
ابحث عن أي رمز حالة HTTP لمعرفة معناه ومرجعه في RFC ومتى يُستخدم.
التحقق مما إذا كان رمز JWT منتهي الصلاحية أو لم يصبح صالحاً بعد، أو المدة المتبقية حتى انتهاء صلاحيته.
قارن استجابتي API (مثل بيئة التجريب مقابل الإنتاج) واحصل على قائمة بكل فرق بنيوي أو في القيم.
توليد معرّفات UUID v4 (عشوائية) وv7 (مرتّبة زمنياً) بالجملة، والتحقق من المعرّفات الموجودة.
مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.