اختبار الدخان والسلامة والانحدار: مقارنة

اختبار الدخان (Smoke testing) واختبار السلامة (Sanity testing) واختبار الانحدار (Regression testing) ثلاث إجابات عن ثلاثة أسئلة مختلفة بعد التغيير. يسأل اختبار الدخان: هل البناء مستقر بما يكفي لاختباره أصلاً؟ ويسأل اختبار السلامة، في معناه الأكثر شيوعاً: هل يبدو تغيير أو إصلاح محدد صحيحاً قبل الاستثمار في اختبار أوسع؟ ويسأل اختبار الانحدار: هل كسر التغيير شيئاً كان يعمل؟ والخلط بينها يقود إما إلى جهد مهدر — تشغيل انحدار لساعتين على بناء لا يستطيع تسجيل الدخول — أو إلى ثقة زائفة — تشغيل دخان لخمس دقائق يُعامل كموافقة على الإصدار.

يقارن هذا الدليل الثلاثة جنباً إلى جنب، ويصرّح بأن مصطلح «اختبار السلامة» يُستخدم بشكل غير متسق في الصناعة، ويشرح كيف تختار اختبارات الانحدار المناسبة لتغيير معين، ويبيّن موضع كل منها في خط أنابيب CI/CD، مع مثال إصدار محلول.

الدخان والسلامة والانحدار في لمحة

  • السؤال — الدخان: هل نستطيع اختبار هذا البناء؟ السلامة: هل يبدو هذا التغيير صحيحاً؟ الانحدار: هل كسر هذا التغيير شيئاً آخر؟
  • النطاق — الدخان: واسع وسطحي، المسارات الحرجة عبر المنتج كله. السلامة: ضيق وأعمق، المنطقة المتغيرة فقط. الانحدار: واسع وعميق، كل ما قد يتأثر بالتغيير وصولاً إلى الحزمة كاملة.
  • التوقيت — الدخان: فور كل بناء أو نشر. السلامة: بعد إصلاح أو تغيير صغير، قبل الاختبار الأوسع. الانحدار: بعد أي تغيير، وقبل الإصدار، وبشكل مجدول.
  • المدة — الدخان: دقائق. السلامة: من دقائق إلى ساعة. الانحدار: من دقائق (مجموعة مختارة) إلى ساعات (الحزمة الكاملة).
  • مكتوب أم لا — الدخان: مكتوب ومؤتمت بالكامل في الوضع المثالي. السلامة: غالباً غير مكتوب جزئياً، يوجّهه التغيير. الانحدار: مكتوب، والهدف الرئيسي للأتمتة.
  • نتيجة الإخفاق — الدخان: رفض البناء وعدم متابعة الاختبار. السلامة: إعادة التغيير وتأجيل الاختبار الأوسع. الانحدار: تسجيل عيب؛ وإيقاف الإصدار إن نصّت البوابة على ذلك.
نطاق الدخان واسع وسطحي، ونطاق السلامة ضيق وأعمق، ونطاق الانحدار واسع وعميق: ثلاث حزم تجيب عن أسئلة مختلفة في أوقات مختلفة. نموذج مفاهيمي

الدخان

هل نستطيع اختبار هذا البناء؟

النطاق:
واسع وسطحي: المسارات الحرجة عبر المنتج كله
التوقيت:
فور كل بناء أو نشر
المدة:
دقائق
مكتوب أم لا:
مكتوب، ومؤتمت بالكامل في الوضع المثالي
نتيجة الإخفاق:
رفض البناء وعدم متابعة الاختبار

السلامةالمعنى الأكثر شيوعاً

هل يبدو هذا التغيير صحيحاً؟

النطاق:
ضيق وأعمق: المنطقة المتغيرة فقط
التوقيت:
بعد إصلاح أو تغيير صغير، قبل الاختبار الأوسع
المدة:
من دقائق إلى ساعة
مكتوب أم لا:
غالباً غير مكتوب جزئياً، يوجّهه التغيير
نتيجة الإخفاق:
إعادة التغيير وتأجيل الاختبار الأوسع

الانحدار

هل كسر هذا التغيير شيئاً آخر؟

النطاق:
واسع وعميق: كل ما قد يتأثر بالتغيير وصولاً إلى الحزمة كاملة
التوقيت:
بعد أي تغيير، وقبل الإصدار، وبشكل مجدول
المدة:
من دقائق (مجموعة مختارة) إلى ساعات (الحزمة الكاملة)
مكتوب أم لا:
مكتوب، والهدف الرئيسي للأتمتة
نتيجة الإخفاق:
تسجيل عيب؛ وإيقاف الإصدار إن نصّت البوابة على ذلك

أشكال النطاق توضيحية: العرض مقدار ما يُغطّى من المنتج، والارتفاع عمق التغطية. والسلامة هنا بمعناها الأكثر شيوعاً؛ فبعض الفرق تستخدم الكلمة اسماً آخر لاختبار الدخان.

اختبار الدخان: هل البناء قابل للاختبار؟

اختبار الدخان مجموعة صغيرة من الفحوص تغطي أهم وظائف النظام من طرف إلى طرف، تعمل على كل بناء أو نشر جديد، لتقرر ما إذا كان البناء مستقراً بما يكفي لمزيد من الاختبار. والاسم مأخوذ من العتاد: شغّل الجهاز وانظر هل يتصاعد منه الدخان. وفي البرمجيات، يعني إخفاق الدخان أن شيئاً أساسياً معطّل — التطبيق لا يبدأ، أو خدمة لا تصل إلى قاعدة بياناتها، أو تسجيل الدخول معطّل، أو قيمة إعداد مفقودة — وأن كل اختبار لاحق سيفشل للسبب نفسه.

حزمة الدخان الجيدة قصيرة ومستقرة ومقتصرة على المسارات الحرجة. تلمس كل مكوّن رئيسي مرة واحدة، ولا تحاول إيجاد عيوب دقيقة، ولا تعتمد أبداً على بيانات تغيّرها اختبارات أخرى. ولأنها تعمل كثيراً جداً، فاختبار الدخان المتذبذب ضار بشكل خاص؛ أصلحه أو احذفه فوراً. والحزمة نفسها، حين توجَّه إلى الإنتاج بعد الإصدار، هي جوهر التحقق بعد النشر.

Smoke suite: web shop, build under test on staging (example)

[ ] GET /health returns 200 for web, orders, pricing, payments services
[ ] Home page loads; no console errors; main navigation renders
[ ] Log in with the smoke test account (smoke.user@example.com)
[ ] Search returns results for a known product
[ ] Add a known product to the cart; cart total is shown
[ ] POST /api/v1/orders with a fixed payload returns 201
[ ] Payment sandbox call returns an authorised result
[ ] Invoice endpoint returns 200 with Content-Type application/pdf

Rule: any failure -> build rejected, deeper testing does not start.
Budget: under 5 minutes, fully automated, runs on every deployment.

جرّبها: فاحص صحة API

اختبار السلامة: مصطلح يُستخدم بأكثر من معنى

اختبار السلامة هو الأقل اتساقاً في تعريفه بين الثلاثة، ومن الأفضل قول ذلك بدلاً من التظاهر بالعكس. في الاستخدام الأكثر شيوعاً يعني فحصاً سريعاً ومركّزاً لتغيير محدد — إصلاح خطأ، أو ميزة صغيرة، أو تغيير إعداد — على بناء جديد، للتأكد من أن التغيير يتصرف بشكل معقول قبل أن يخصص الفريق وقتاً لاختبار أوسع. وبهذا المعنى هو ضيق وعميق حيث يكون اختبار الدخان واسعاً وسطحياً، وكثيراً ما يتضمن اختبار التأكيد للعيب المُصلح.

وتستخدم فرق أخرى وبعض المسارد الأقدم «اختبار السلامة» مرادفاً لاختبار الدخان. ويستخدمه آخرون بشكل غير رسمي لأي فحص معقولية سريع، كالتحقق من أن مجموع تقرير ما ضمن نطاق مقبول. لا شيء من هذه خاطئ في سياقه، لكن خلطها داخل فريق واحد يسبب مشكلات حقيقية: يسمع المدير «نجح اختبار السلامة» فيفترض أن ما فُحص أكثر مما فُحص فعلاً. والحل العملي أن تعرّف المصطلح في استراتيجية الاختبار أو خطة الاختبار — ما الذي يغطيه، ومن ينفّذه، وكم يستغرق — وأن تستخدمه باتساق. وإن كانت الكلمة تسبب التباساً فاستخدم اسماً وصفياً بدلاً منها، مثل «التحقق من الإصلاح».

  • المعنى الشائع: فحص مركّز للمنطقة المتغيرة على بناء جديد، قبل الاختبار الأوسع.
  • معنى بديل: اسم آخر لاختبار الدخان.
  • معنى غير رسمي: فحص معقولية سريع لمخرَج ما.
  • التوصية: دوّن تعريف فريقك والتزم به.

اختبار الانحدار: هل كسر التغيير شيئاً آخر؟

اختبار الانحدار يعيد تشغيل الاختبارات الموجودة بعد التغيير لاكتشاف ما إذا أُدخلت عيوب أو كُشفت في أجزاء من البرمجية لم يكن يُقصد تغييرها. ويميّزه منهج ISTQB للمستوى التأسيسي عن اختبار التأكيد (Confirmation testing): اختبار التأكيد يتحقق من أن العيب المبلَّغ عنه قد أُصلح فعلاً؛ واختبار الانحدار يتحقق من أن الإصلاح، أو أي تغيير آخر، لم يُحدث آثاراً سلبية، سواء في المكوّن الذي تغيّر أو في مكونات أخرى أو في أنظمة متصلة به. وكلاهما لازم بعد كل إصلاح.

التغييرات التي تستدعي اختبار الانحدار تشمل الميزات الجديدة، وإصلاحات الأخطاء، وإعادة الهيكلة، وترقيات الاعتماديات والأطر، وتغييرات الإعدادات، وترحيلات البنية التحتية وقواعد البيانات. ولأن اختبارات الانحدار تتكرر مرات كثيرة ونتائجها المتوقعة معروفة، فهي المرشح الطبيعي للأتمتة، ومعظم حزم الانحدار تعيش في خط أنابيب CI. أما ماذا يُؤتمت وعلى أي مستوى — الوحدة أو API أو الواجهة — فيتبع هرم الاختبار ويغطيه دليل الاختبار اليدوي مقابل الآلي.

  • اختبار التأكيد (إعادة الاختبار) — خطوات العيب الأصلي تنجح الآن.
  • اختبار الانحدار — الاختبارات حول التغيير وما بعده ما زالت تنجح.
  • حزمة الانحدار تنمو مع المنتج؛ وبلا صيانة تصبح بطيئة ومكررة ومتذبذبة.

اختيار اختبارات الانحدار: ماذا تشغّل

تشغيل كل اختبار عند كل تغيير هو الخيار الأكثر أماناً، وهو الخيار الصحيح للحزمة الصغيرة. وحين تتجاوز الحزمة الميزانية الزمنية لمرحلة خط الأنابيب، يضطر الفريق إلى الاختيار. والاختيار قرار مخاطر، لذا ينبغي أن يكون صريحاً وقابلاً للمراجعة لا معتمداً على ذاكرة المختبِر عمّا «ينكسر عادة».

  • إعادة اختبار الكل — شغّل الحزمة كاملة. أعلى ثقة وأعلى كلفة؛ الخيار المعتاد للتشغيلات الليلية والمرشحين للإصدار.
  • الاختيار حسب الأثر — ابدأ مما تغيّر (الملفات والوحدات وواجهات API وجداول قاعدة البيانات والإعدادات) وضمّن الاختبارات التي تمارس هذه الأجزاء واعتمادياتها المباشرة. وأدوات تحليل أثر الاختبار (Test impact analysis) تؤتمت ذلك بربط الاختبارات بالكود، عادةً من بيانات التغطية.
  • الاختيار حسب المخاطر — أضف اختبارات للمناطق ذات الأثر التجاري العالي أو ذات تاريخ من العيوب حتى لو بدا التغيير غير متصل بها: الدفع، والمصادقة، وتصدير البيانات.
  • تحديد الأولويات — رتّب الاختبارات المختارة بحيث يعمل الأثمن أولاً: الاختبارات التي فشلت مؤخراً، واختبارات الكود المتغير، والرحلات الحرجة. فيصل الإخفاق مبكراً.
  • نواة دائمة — فحوص الدخان وعدد قليل من الرحلات الشاملة الحرجة تعمل عند كل تغيير بغض النظر عن الاختيار.
  • شبكة أمان — ما يتخطاه الاختيار لكل تغيير يغطيه التشغيل الكامل المجدول، فيُكتشف خطأ الاختيار خلال يوم لا عند الإصدار.

جرّبها: مولّد سيناريوهات الانحدار جرّبها: مولّد اختبارات الانحدار بالذكاء الاصطناعي جرّبها: مولّد الاختبار المبني على المخاطر

أين يعمل كل منها في خط أنابيب CI/CD

في خط الأنابيب، الثلاثة ليست مراحل منفصلة يؤديها أشخاص مختلفون؛ بل حزم مرتبطة بمحفّزات مختلفة. التوزيع التالي شائع ويصلح لمعظم منتجات الويب.

  • طلب الدمج — فحوص مرحلة الإيداع مع مجموعة انحدار مختارة (حسب الأثر والمخاطر) على مستوى الوحدة وAPI؛ والرحلات الشاملة الحرجة.
  • الدمج في الفرع الرئيسي — حزم انحدار الوحدة وAPI كاملة؛ وحزمة الاختبار الشامل في أجزاء متوازية.
  • كل نشر إلى بيئة اختبار — حزمة الدخان أولاً؛ ولا يبدأ شيء آخر حتى تنجح.
  • بعد نشر إصلاح — اختبار السلامة (التحقق من الإصلاح) من قِبل المختبِر الذي أبلغ عن العيب، بما في ذلك اختبار التأكيد.
  • ليلياً — حزمة الانحدار الكاملة عبر جميع المستويات، مع تشغيلات غير وظيفية أطول.
  • المرشح للإصدار — انحدار كامل أخضر، ثم دخان على الإنتاج فور الإصدار.

جرّبها: مولّد حالات اختبار من OpenAPI

مثال محلول: إصلاح تقريب ضريبة القيمة المضافة

على سبيل المثال، يبلّغ عميل أن الفواتير التي فيها خصم تعرض ضريبة القيمة المضافة بفارق هللة واحدة. يصلح المطورون التقريب في خدمة التسعير؛ ويمس الإصلاح حساب الضريبة الذي تستخدمه أيضاً المبالغ المستردة وإشعارات الدائن وسجل الطلبات. تبيّن الخطة أدناه كيف تتقاسم أنواع الاختبار الثلاثة العمل على البناء 5.8.1.

  • الدخان (مؤتمت، نحو 3 دقائق): هل يمكن اختبار هذا البناء أصلاً؟ نقطة النهاية ⁦/health⁩ تعيد 200 لخدمات الويب والتسعير والفواتير؛ وتسجيل الدخول بعميل الاختبار وإضافة صنف والوصول إلى صفحة الدفع؛ وإنشاء طلب عبر API يعيد 201؛ ونقطة نهاية ملف PDF للفاتورة تعيد 200 بنوع application/pdf.
  • السلامة (مركّزة، نحو 20 دقيقة): هل الإصلاح نفسه صحيح؟ 100.00 ريال بخصم 10% تعطي مجموعاً فرعياً 90.00 وضريبة 15% قدرها 13.50 وإجمالياً 103.50؛ و3 × 33.33 ريال بخصم 5% تتبع إجمالياتها قاعدة التقريب في المواصفة؛ وملف PDF للفاتورة يعرض الضريبة نفسها التي تعيدها API الطلب؛ وخطوات تقرير الخطأ الأصلي لم تعد تُظهر الخطأ (اختبار التأكيد).
  • الانحدار (مختار): هل انكسر شيء آخر؟ إلزامي: حزم وحدة التسعير وAPI التسعير كاملة، وحزمة API الفواتير، ورحلات الدفع الشاملة. مستحسن: المبالغ المستردة وإشعارات الدائن ورموز العروض الترويجية ومجاميع سجل الطلبات، لأنها كلها تستخدم الضريبة. يُتخطى: الملف الشخصي والإشعارات والبحث، إذ لا تعتمد على التسعير. لاحقاً: حزمة الانحدار الكاملة في التشغيل الليلي كما في كل ليلة.
Change: fix VAT rounding on invoices that have a discount (pricing service, invoice PDF)
Build: 5.8.1 on staging

1. SMOKE (automated, about 3 min): can this build be tested at all?
   [x] /health 200 for web, pricing and invoice services
   [x] log in with the test customer, add an item, reach checkout
   [x] create order via API -> 201
   [x] invoice PDF endpoint -> 200, application/pdf

2. SANITY (focused, about 20 min): is the fix itself right?
   [x] 100.00 SAR, 10% discount -> subtotal 90.00, VAT 15% 13.50, total 103.50
   [x] 3 x 33.33 SAR, 5% discount -> totals follow the rounding rule in the spec
   [x] invoice PDF shows the same VAT as the order API response
   [x] steps of the original bug report no longer reproduce (confirmation test)

3. REGRESSION (selected): did anything else break?
   must    pricing unit + API suites (all), invoice API suite, checkout E2E journeys
   should  refunds and credit notes, promo codes, order-history totals (all use VAT)
   skip    profile, notifications, search (no dependency on pricing)
   later   full regression suite in the nightly run, as every night

أخطاء شائعة

  • معاملة تشغيل دخان أخضر كموافقة على الإصدار. الدخان يقول إن البناء قابل للاختبار، لا إنه صحيح.
  • ترك حزمة الدخان تنمو حتى تستغرق نصف ساعة؛ فتتوقف عن العمل عند كل نشر.
  • الإبلاغ بأن «اختبار السلامة نجح» دون ذكر ما فُحص.
  • إغلاق العيب بعد اختبار التأكيد وحده، دون أي انحدار حول الإصلاح.
  • اختيار اختبارات الانحدار من الذاكرة بدلاً من التغيير وقائمة مخاطر مكتوبة.
  • عدم تشذيب حزمة الانحدار أبداً: الاختبارات المكررة، واختبارات الميزات المحذوفة، والاختبارات المتخطاة بشكل دائم تكلّف وقتاً في كل تشغيل.
  • تخطي التشغيل الكامل المجدول لأن الاختيار لكل تغيير «كان جيداً حتى الآن».

جرّبها: كاشف حالات الاختبار المكرّرة بالذكاء الاصطناعي

الأسئلة الشائعة

ما الفرق الرئيسي بين اختبار الدخان واختبار السلامة؟

في الاستخدام الأكثر شيوعاً، اختبار الدخان واسع وسطحي — يتحقق من أن الوظائف الحرجة في البناء كله تعمل ليبدأ الاختبار — بينما اختبار السلامة ضيق وأعمق، يتحقق من أن تغييراً أو إصلاحاً محدداً يتصرف بشكل صحيح. وتستخدم بعض الفرق المصطلحين كمترادفين، لذا اتفقوا على تعريف في استراتيجية الاختبار.

هل اختبار السلامة جزء من اختبار الانحدار؟

كثيراً ما يوصف بذلك، لأنه يعيد فحص منطقة بعد تغيير. وعملياً هو عادةً فحص سريع ومركّز للتغيير نفسه، يُجرى قبل بدء اختبار الانحدار، ويتضمن اختبار التأكيد للعيب المُصلح.

هل ينبغي أتمتة اختبارات الدخان؟

نعم. فهي تعمل على كل بناء ونشر، ويجب أن تكون سريعة ومتسقة، ونتيجتها تقرر بدء الاختبار الإضافي. قائمة الدخان اليدوية مقبولة فقط حيث لم تصبح الأتمتة ممكنة بعد، وينبغي أن تكون هدفاً مبكراً للأتمتة.

كم اختباراً يجب أن تضم حزمة الدخان؟

أقل عدد يلزم لملامسة كل مسار حرج وكل مكوّن رئيسي مرة واحدة — غالباً ما بين عشرة وبضع عشرات من الفحوص — وقصيرة بما يكفي لتنتهي خلال دقائق. وإن استغرقت أطول بكثير فبعضها مكانه حزمة الانحدار.

هل أحتاج إلى تشغيل حزمة الانحدار الكاملة لكل تغيير؟

ليس بالضرورة. للحزم الصغيرة نعم؛ وللأكبر شغّل مجموعة مختارة عند كل تغيير حسب الأثر والمخاطر، وشغّل الحزمة الكاملة بشكل مجدول وقبل الإصدار حتى يُكتشف بسرعة ما فات الاختيار.

ما الفرق بين اختبار الانحدار وإعادة الاختبار؟

إعادة الاختبار، أو اختبار التأكيد، تتحقق من أن عيباً محدداً قد أُصلح بتكرار خطواته. واختبار الانحدار يتحقق من أن الإصلاح، أو أي تغيير آخر، لم يكسر وظائف أخرى.

المراجع

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
  • The Practical Test Pyramid (Ham Vocke)martinfowler.com · 2018شرح واسع الاستشهاد لكيفية الموازنة بين اختبارات الوحدة والتكامل والعقود والواجهة في محفظة الاختبارات الآلية.
  • Continuous Integration (Martin Fowler)martinfowler.com · 2024الوصف الأكثر استشهاداً للتكامل المستمر: ادمج كثيراً، واجعل البناء يختبر نفسه وسريعاً، وأصلح البناء المكسور فوراً.

تمرين عملي

خطّط للدخان والسلامة والانحدار لإصلاح حد التحويل اليومي

المطلوب

تختبر تطبيق الويب لبنك أفراد. نُشر البناء ⁦3.4.2⁩ للتو على بيئة Staging ومعه إصلاح العيب BUG-1182. وتعرض المادة أدناه العيب، وملاحظة المطوّر، وقائمة مخاطر الفريق، وأحد عشر فحصاً مرشّحاً. ويستخدم فريقك «اختبار السلامة» (Sanity testing) بمعناه الأكثر شيوعاً في الدليل: تحقق مركّز من الإصلاح على البناء الجديد، يتضمن اختبار التأكيد (Confirmation testing) الخاص به.

حوّل الفحوص المرشّحة إلى خطة اختبار لهذا البناء، مستخدماً مجموعات المثال المحلول في الدليل: الدخان، والسلامة، والانحدار (إلزامي ومستحسن)، ويُتخطى، ولاحقاً. اكتب سبباً في سطر واحد لكل قرار انحدار أو تخطٍّ أو تأجيل. وينقص القائمةَ فحصان من فحوص السلامة: أضفهما. ثم أجب عن السؤالين في نهاية المادة.

المادة
تطبيق ويب لبنك أفراد - البناء 3.4.2 منشور على بيئة Staging

العيب BUG-1182 (أُصلح في هذا البناء)
  يُرفض التحويل المحلي إلى مستفيد محفوظ برسالة «تم تجاوز الحد اليومي»
  عندما يساوي المبلغ الحد اليومي المتبقي تماماً.
  مثال: الحد اليومي 10,000.00 ريال، وأُرسل اليوم 7,500.00 ريال،
  وتحويل 2,500.00 ريال يُرفض. المتوقع: يُقبل.

ملاحظة المطوّر
  أصبح فحص الحد في خدمة الحدود amount <= remaining
  (وكان amount < remaining). تستدعي هذا الفحص التحويلات المحلية وسداد
  الفواتير ومهمة التحويلات المجدولة. أما التحويلات الدولية فلها حدها الخاص
  في خدمة الصرف الأجنبي (FX). لم يتغير شيء آخر في هذا البناء.

قائمة مخاطر الفريق: التحويلات الدولية (أثر تجاري عالٍ، وتاريخ من العيوب
في الإنتاج).

الفحوص المرشّحة
  C1   GET /health يعيد 200 لخدمات الويب والحسابات والتحويلات والحدود
  C2   تسجيل الدخول بعميل الاختبار؛ صفحة ملخص الحسابات تعرض الأرصدة
  C3   تحويل محلي بمبلغ 10.00 ريال إلى مستفيد محفوظ عبر API يعيد 201
  C4   تكرار خطوات BUG-1182: يُقبل تحويل 2,500.00 ريال
  C5   سداد الفواتير: يُقبل ما هو ضمن الحد، ويُرفض ما يتجاوز الحد المتبقي
  C6   مهمة التحويلات المجدولة: يُنفَّذ ما هو ضمن الحد، ويُتخطى ما يتجاوزه
  C7   كل اختبارات الوحدة وAPI المؤتمتة لخدمة الحدود
  C8   تحويل دولي ضمن حده الخاص: يُقبل
  C9   تغيير صورة الملف الشخصي
  C10  تنزيل كشف حساب الشهر الماضي بصيغة PDF
  C11  حزمة الانحدار الكاملة على جميع المستويات

الأسئلة
  Q1  يفشل أول تشغيل للدخان عند C1: خدمة الحدود تعيد 503.
      ماذا يحدث لبقية الخطة؟
  Q2  يسألك قائد الاختبار: «هل نجح اختبار السلامة؟» اكتب إجابة في سطر واحد
      تذكر ما الذي فُحص.
الخطوات
  1. اقرأ العيب وملاحظة المطوّر، واكتب ما الذي تغيّر وأي الميزات تستدعي الكود المتغيّر.
  2. اختر فحوص الدخان: تلك التي تبيّن فقط ما إذا كان البناء ⁦3.4.2⁩ قابلاً للاختبار أصلاً.
  3. اختر فحوص السلامة للإصلاح، وحدّد اختبار التأكيد بينها، وأضف الفحصين الناقصين على جانبي الحد.
  4. اختر الانحدار الذي يُشغَّل الآن واكتب سبب كل اختيار (الأثر أو المخاطر)، وضع الباقي تحت «يُتخطى» أو «لاحقاً» مع السبب.
  5. اكتب ترتيب التنفيذ، ثم أجب عن السؤالين Q1 وQ2.
إظهار الإجابة النموذجية
الإجابة النموذجية

الدخان (مؤتمت، أولاً، بضع دقائق): C1 وC2 وC3. فهي معاً تبيّن ما إذا كان البناء ⁦3.4.2⁩ قابلاً للاختبار أصلاً: الخدمات تعمل، والعميل يستطيع تسجيل الدخول، ومسار التحويل يعمل من طرف إلى طرف. ويمر C3 عبر الفحص المتغيّر، لكنه ليس فحص سلامة: فمبلغ ⁦10.00⁩ ريال بعيد عن الحد، فلا يقول شيئاً عن الإصلاح. القاعدة: إن فشل أي فحص دخان رُفض البناء ولم يبدأ أي شيء آخر.

السلامة، بمعنى الفريق أي التحقق من الإصلاح (ضيقة وأعمق، بعد الدخان مباشرة): C4 هو اختبار التأكيد، لأنه يكرر خطوات BUG-1182. والفحصان الناقصان يقعان على جانبي الحد، بحالة البداية نفسها (حد ⁦10,000.00⁩ ريال، و⁦7,500.00⁩ ريال أُرسلت اليوم). S1: تحويل ⁦2,500.01⁩ ريال يُرفض برسالة «تم تجاوز الحد اليومي»، وهذا يبيّن أن الإصلاح لا يسمح بمبالغ تتجاوز الحد المتبقي. S2: تحويل ⁦2,499.99⁩ ريال يُقبل، وهذا يبيّن أن المبالغ تحت الحد ما زالت تعمل. ومعاً تختبر C4 وS1 وS2 الحدَّ المتبقي نفسه (⁦2,500.00⁩ ريال) وخطوةً واحدة قدرها ⁦0.01⁩ ريال على كل جانب منه: أي فحص «الحد بالضبط وما يتجاوزه بواحد» من درس الحالات الحدّية والحالات الطرفية، مطبَّقاً على الجانبين. وتسمّي وحدة تصميم الاختبار ذلك تحليل القيم الحدّية الثلاثي (3-value BVA). ويحتاج كل منها إلى أن يكون المُرسل اليوم ⁦7,500.00⁩ ريال بالضبط: إذ يستنفد C4 الحد المتبقي (فيصبح ⁦0.00⁩ بعده)، والعميل المستخدم في C3 أرسل بالفعل ⁦10.00⁩ ريال، لذا خصّص لكل فحص عميل اختبار خاصاً به أو أعد ضبط البيانات قبله. ومن الإضافات المفيدة: بعد C4 يُرفض تحويل إضافي قدره ⁦0.01⁩ ريال.

الانحدار، إلزامي (حسب الأثر: فحوص تمارس الفحص المتغيّر أو تستدعيه مباشرة): C7 أولاً، لأن اختبارات الوحدة وAPI لخدمة الحدود سريعة وتغطي الكود المتغيّر؛ ثم C5 (سداد الفواتير) وC6 (مهمة التحويلات المجدولة)، وهما المستدعيان الآخران المذكوران في ملاحظة المطوّر. الانحدار، مستحسن (حسب المخاطر): C8. فالتحويلات الدولية لا تستدعي الفحص المتغيّر، لكنها في قائمة مخاطر الفريق، فرحلة واحدة منها احتياط قليل الكلفة. ووضع C8 تحت «إلزامي» مقبول أيضاً إن كان فريقك يشغّل قائمة مخاطره دائماً؛ المهم أن يكون السبب مكتوباً.

يُتخطى: C9 وC10. فصورة الملف الشخصي وكشف الحساب بصيغة PDF لا يستدعيان فحص الحد؛ والكشف يقرأ فقط معاملات موجودة من قبل. لاحقاً: C11، أي حزمة الانحدار الكاملة، تعمل في التشغيل الليلي كما في كل ليلة، ويجب أن تكون خضراء للمرشح للإصدار. فهي شبكة الأمان لكل ما فات هذا الاختيار، لا بوابة هذا التغيير.

الترتيب: من C1 إلى C3، ثم C4 وS1 وS2، ثم C7 وC5 وC6 وC8. ولا يُشغَّل C9 وC10 لهذا التغيير، لكن التشغيل الليلي الكامل (C11) يغطيهما. وإن فشل S1 (قُبل مبلغ ⁦2,500.01⁩ ريال)، فقد أدخل الإصلاح عيباً أخطر: يستطيع العملاء تجاوز حدهم اليومي. أبلغ عنه بالمبالغ الدقيقة، وأعد الإصلاح إلى المطورين، وأجّل الانحدار. ولا تغلق BUG-1182 بعد اختبار التأكيد وحده؛ أغلقه بعد نجاح الانحدار المختار.

السؤال Q1: عندما يفشل C1 يُرفض البناء ⁦3.4.2⁩ للاختبار. لا تبدأ السلامة ولا الانحدار: لأن الإصلاح وكل ما يستدعي الفحص المتغيّر يعتمد على خدمة الحدود، فستفشل تلك الفحوص للسبب نفسه ولن تقول شيئاً عن الإصلاح، وقد يؤدي فشل اختبار التأكيد إلى إعادة فتح BUG-1182 خطأً. أبلغ المطورين فوراً وسجّل المشكلة كما تقتضي عملية فريقك، مع رقم البناء ونقطة النهاية ورمز الحالة 503 والوقت. وعندما يصل نشر مصحَّح، ابدأ من الدخان مجدداً.

السؤال Q2، مثلاً: «نجح التحقق من إصلاح BUG-1182 على البناء ⁦3.4.2⁩: يُقبل تحويل ⁦2,500.00⁩ ريال الذي يساوي الحد المتبقي (اختبار التأكيد)، ويُرفض ⁦2,500.01⁩، ويُقبل ⁦2,499.99⁩. والانحدار المختار (من C5 إلى C8) قيد التنفيذ.» أما عبارة «نجح اختبار السلامة» وحدها فتخفي ما الذي فُحص وما الذي لم يُفحص.

سؤال مفتوح لمالك المنتج: سداد الفواتير والتحويلات المجدولة تستدعي الفحص نفسه، فأصبحت الدفعة التي تساوي الحد المتبقي تماماً مقبولة فيهما أيضاً. هل هذا مقصود؟ سجّل الإجابة في العيب أو في تقرير الاختبار.

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة

الأدوات المذكورة في هذا الدليل

افحص عدة نقاط نهاية لصحة API دفعة واحدة واحصل على الحالة وزمن الاستجابة وملخّص نجاح/فشل.

اختبار واجهات API

كيف تساعدك متقن سوفت

أدلة أخرى

أدلة أخرى
تصميم الاختبارات

الاختبار المبني على المخاطر

كيف تطبّق الاختبار المبني على المخاطر: تحديد مخاطر المنتج، وتقييم الاحتمال والأثر، وعمق الاختبار، واختيار اختبارات الانحدار، والمخاطر المتبقية.

وقت القراءة 10 دقائق
الأتمتة

الاختبار في خطوط CI/CD

كيف يعمل الاختبار داخل خطوط CI/CD: مراحل الاختبار وترتيبها، وبوابات الجودة، وتقارير JUnit، والتقسيم، والاختبارات المتذبذبة، وفرز الإخفاقات.

وقت القراءة 13 دقائق
تصميم الاختبارات

الاختبار اليدوي مقابل الاختبار الآلي

مقارنة بين الاختبار اليدوي والآلي في التكلفة والسرعة وما يجده كل منهما وما يفوته والصيانة — مع قاعدة عملية لتقرير ما يُؤتمت وما يُترك للبشر.

وقت القراءة 6 دقائق
تصميم الاختبارات

دورة حياة اختبار البرمجيات (STLC)

مراحل STLC واحدة تلو الأخرى — التحليل والتخطيط والتصميم والبيئة والتنفيذ والإغلاق — مقابل عملية الاختبار في ISTQB، مع معايير الدخول والخروج لكل مرحلة.

وقت القراءة 12 دقائق
الأتمتة

الاختبارات المتذبذبة

ما الذي يجعل اختبارات الواجهة متذبذبة — التوقيت والحالة المشتركة والبيانات والبيئة والأطراف الثالثة — وكيف تُشخَّص، وسياسة معقولة لإعادة المحاولة والحجر.

وقت القراءة 9 دقائق
تصميم الاختبارات

ضمان جودة المنتج من البداية إلى النهاية

ما الذي يشمله ضمان الجودة الشامل — مراجعة المتطلبات وتصميم الاختبارات والاختبار الوظيفي واختبار الأداء والأمان وبوابات الإصدار والمقاييس — وكيف تنفّذه.

وقت القراءة 8 دقائق