بوابات الجودة

بوابة الجودة (Quality Gate) نقطة فحص بين مرحلتين من مراحل التسليم، تُقارَن فيها الأدلة المتعلقة بتغيير أو بإصدار بمعايير متفق عليها مسبقاً، وتحدد النتيجة هل يُسمح للعمل بالانتقال إلى المرحلة التالية. مثال ذلك: قبل دمج طلب الدمج (Pull Request) يجب أن ينجح البناء، وأن تنجح كل اختبارات الوحدة واختبارات الواجهة البرمجية (API)، وألا يُظهر فحص الاعتماديات، الذي يفحص المكتبات الخارجية التي تستخدمها الشيفرة بحثاً عن ثغرات أمنية معروفة، أي ثغرة حرجة جديدة. وإذا فشل أي فحص يبقى الدمج محجوباً حتى تُصلَح المشكلة.

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

لماذا يهم

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

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

أين تقع البوابات: خط الأنابيب وعملية الإصدار

لكل بوابة الأجزاء نفسها: موضع بين مرحلتين، ومعايير نتيجتها نجاح أو فشل، والدليل الذي يُقرأ منه كل معيار (تقرير خط الأنابيب، أو تقرير الاختبار، أو نظام تتبع العيوب)، ومالك، وإجراء عند الفشل. والذي يختلف هو من يقرّر.

بوابات خط الأنابيب آلية وتعمل عند كل تغيير؛ وتتيح منصات مثل GitHub وGitLab جعل نتيجة خط الأنابيب فحصاً إلزامياً، فلا يمكن دمج طلب الدمج ما دامت النتيجة حمراء. أما بوابات عملية الإصدار فأقل عدداً: يراجع شخصٌ أدلة إصدار كامل ثم يقرّر. ومعظم الفرق تجمع بين النوعين:

  • بوابة الدمج (آلية): البناء والفحوص الساكنة واختبارات الوحدة والواجهة البرمجية عند كل طلب دمج؛ وأي فحص أحمر يحجب الدمج.
  • بوابة الخروج من الاختبار: بعد اختبار النظام واختبار الانحدار تُفحص معايير الخروج الواردة في خطة الاختبار مقابل تقرير الاختبار.
  • بوابة الإصدار (يقرّر فيها شخص): قبل بيئة الإنتاج يراجع مالك البوابة الأدلة ويقرّر المضي أو التوقف (Go/No-Go)، أو يعتمد استثناءً مسجلاً.
  • بوابة ما بعد النشر: تعمل اختبارات الدخان وفحوص الصحة فور النشر، وأي فشل يؤدي إلى التراجع (Rollback).
أربع بوابات بين طلب الدمج والإصدار المتاح للمستخدمين: فحوص آلية عند الدمج، ومعايير الخروج بعد الاختبار، وقرار المالك بالمضي أو التوقف، واختبارات الدخان وفحوص الصحة فور النشر.
  1. 1طلب الدمجالبناء والفحوص الساكنة واختبارات الوحدة والواجهة البرمجية عند كل تغييرآلية

    فرع: أي فحص أحمر ← يُحجب الدمجفشل

    بوابة: بوابة الدمج: كل الفحوص الإلزامية خضراء

  2. 2بيئة الاختباراختبار النظام واختبار الانحدار للبناء المدموج

    فرع: معايير الخروج لم تتحقق ← تابع الاختبار أو أصلحفشل

    بوابة: بوابة الخروج من الاختبار: معايير الخروج متحققة في تقرير الاختبار

  3. 3الإصدار المرشح في Stagingيراجع مالك البوابة أدلة الإصدار كاملاًيقرّر شخص

    فرع: توقف (No-go) ← إصلاح وإعادة اختبار وإصدار مرشح جديدفشل

    بوابة: بوابة الإصدار: مضيّ، أو استثناء مسجّل

  4. 4الإنتاج: بوابة ما بعد النشراختبارات الدخان وفحوص الصحة فور النشرآلية

    فرع: فشل أي فحص ← تراجعفشل

بعد ذلك:كل الفحوص ناجحة: يبقى الإصدار في بيئة الإنتاج

خارج التسلسل
  • الاستثناء (Waiver)يعتمده مالك البوابة أو نائب محدد بالاسم فقط، ويسجّل المعيار الذي لم يتحقق والسبب والمخاطرة والتخفيف وتاريخ الانتهاء

توضيحي: يختلف عدد البوابات ومواضعها من فريق لآخر.

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

معايير بوابة تؤدي الغرض

المعيار المفيد قابل للقياس، ومرتبط بمخاطرة حقيقية، وسريع التقييم بما يناسب مرحلته، ومتفق عليه قبل بدء العمل. فعبارة «الجودة مقبولة» تسقط في الشرط الأول، لأن أحداً لا يستطيع القول هل تحققت، أما «لا عيوب مفتوحة بدرجة حاجب (Blocker) أو حرج (Critical)» فيمكن أن تستوفي الشروط الأربعة. السياسة أدناه توضيحية وليست صيغة أي أداة CI، وأرقامها أمثلة: استمدّ أرقامك من خط الأساس الخاص بك.

تجنّب المعايير الشكلية (Vanity Criteria). فشرط «تغطية الأسطر ⁦80%⁩ على الأقل» وشرط «نجاح ⁦95%⁩ من الاختبارات» يمكن تحقيقهما معاً وإتمام الشراء معطل: الأول يكافئ اختبارات لا تتحقق من شيء، والثاني يخفي أيّ ⁦5%⁩ هي التي فشلت. فالتغطية تُظهر ما لم يُختبر ولا تثبت الجودة. فضّل «لكل معيار قبول ضمن النطاق اختبار ناجح» و«لا اختبار فاشلاً في حزمة الرحلات الحرجة».

gates:
  - name: merge
    owner: engineering-lead
    on_failure: block
    criteria:
      build: passed
      failed_unit_and_api_tests: 0
      skipped_tests_without_ticket: 0
      breaking_api_contract_changes: 0
      new_critical_or_high_vulnerabilities: 0
  - name: release-to-production
    owner: product-owner
    on_failure: no-go-unless-approved-exception
    criteria:
      failed_regression_tests: 0
      acceptance_criteria_without_passing_test: 0
      open_blocker_or_critical_defects: 0
      checkout_api_p95_ms_max: 800
  - name: post-deploy
    owner: release-engineer-on-call
    on_failure: roll-back
    criteria:
      failed_smoke_tests: 0
      failing_health_checks: 0

جرّبها: منسّق YAML جرّبها: المتطلبات ← حالات اختبار جرّبها: مقارنة عقود الاستجابات

من يملك البوابة، وكيف تُدار الاستثناءات

تحتاج كل بوابة إلى مالك محدد بالاسم يحافظ على معاييرها ويقرّر في الاستثناءات: عادةً قائد الفريق الهندسي لبوابة الدمج، وفريق الأمن لمعايير الأمان، ومالك المنتج (Product Owner) أو مدير الإصدار لبوابة الإصدار. ونادراً ما يملك المختبِر بوابة وحده؛ فهو يقدّم الأدلة وتوصية واضحة، والمالك يقرّر ويتحمل مسؤولية قراره.

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

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

مثال تطبيقي: إصدار لم يستوفِ معياراً واحداً

يخطط متجر إلكتروني للإصدار ⁦3.4⁩ الذي يضيف ميزة رموز الخصم. ولبوابة الإصدار، التي يملكها مالك المنتج، أربعة معايير: نجاح حزمة الانحدار؛ ولكل معيار قبول ضمن النطاق اختبار ناجح؛ ولا عيوب مفتوحة بدرجة حاجب أو حرج؛ وزمن الاستجابة p95 لواجهة إتمام الشراء البرمجية لا يتجاوز ⁦800⁩ ملّي ثانية عند حمل اختبار الدخان. ويقدّم قائد فريق الجودة الأدلة.

في يوم الإصدار تنجح ⁦412⁩ من أصل ⁦412⁩ اختبار انحدار، ولجميع معايير القبول وعددها ⁦38⁩ اختبارات ناجحة، وتبلغ قيمة p95 ⁦640⁩ ملّي ثانية. لكن عيباً حرجاً ما زال مفتوحاً: DEF-1182، إذ يُطبَّق الخصم مرتين حين ينقر المستخدم نقراً مزدوجاً على «تطبيق» في اتصال بطيء. فالبوابة لم تُجتز: إما أن ينتظر الإصدار إصلاحاً مؤكداً، وإما أن يعتمد المالك استثناءً.

بقية الإصدار ⁦3.4⁩، ومنها إصلاحات ينتظرها العملاء، جاهزة، والميزة الجديدة موجودة خلف علم ميزة (Feature Flag)، فيقترح الفريق الإصدار مع إبقاء العلم معطّلاً. يعتمد مالك المنتج القرار، ويُسجَّل الاستثناء:

  • البوابة والمعيار الذي لم يتحقق: بوابة الإصدار ⁦3.4⁩؛ «لا عيوب مفتوحة بدرجة حاجب أو حرج» (العيب DEF-1182 مفتوح).
  • السبب والمخاطرة: بقية تغييرات الإصدار ⁦3.4⁩ مطلوبة في الموعد المخطط؛ ولو فُعِّل العلم لأمكن أن يحصل العملاء على الخصم مرتين.
  • التخفيف: يبقى العلم معطّلاً في بيئة الإنتاج؛ وقد تحقق قائد فريق الجودة في بيئة Staging من أن حقل الخصم لا يمكن الوصول إليه عندئذ، وأن إتمام الشراء يعمل كما في الإصدار ⁦3.3⁩.
  • اعتمده: مالك المنتج، بعد مراجعة مع قائد فريق الجودة وقائد الفريق الهندسي.
  • الانتهاء والمتابعة: العيب DEF-1182 هو تذكرة المتابعة، ومالكها قائد الفريق الهندسي؛ ويبقى العلم معطّلاً حتى يجتاز إصلاحه اختبار التأكيد واختبار الانحدار، ويُغلق الاستثناء في موعد أقصاه الإصدار ⁦3.5⁩.

جرّبها: محلّل زمن الاستجابة

أخطاء شائعة

  • معايير لا يمكن قياسها مثل «الجودة جيدة بما يكفي» أو «معظم الاختبارات تنجح».
  • عتبات شكلية مجردة مثل تغطية أسطر ⁦80%⁩، يمكن بلوغها بينما الرحلات الحرجة معطلة.
  • تخطي اختبار فاشل أو حذفه لتصبح البوابة خضراء، بدلاً من حجره بتذكرة.
  • استثناءات شفهية بلا سجل ولا معتمِد ولا تاريخ انتهاء، فلا يتابعها أحد.
  • بوابة دمج أبطأتها الحزم الطويلة حتى صار الناس يلتفون عليها؛ ومكان الحزم الطويلة البوابات اللاحقة أو التشغيلات المجدولة.
  • معاملة المختبِر حارساً وحيداً للبوابة: المختبِر يقدّم الأدلة والتوصية، والمالك المحدد بالاسم يقرّر.

من منظور ضمان الجودة

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

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

تمرين عملي

صمّم البوابات لفريق منتج صغير

المطلوب

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

اقترح بوابات كانت ستوقف كل مشكلة، وقاعدة استثناء يستطيع الفريق العمل بها.

الخطوات
  1. لكل حادثة، سمِّ البوابة التي كان يجب أن تلتقطها وحدّد موضعها.
  2. اكتب معيارين أو ثلاثة قابلة للقياس لكل بوابة، والدليل الذي يُقرأ منه كلٌّ منها.
  3. سمِّ مالك كل بوابة والإجراء عند الفشل.
  4. اكتب قاعدة الاستثناء: من يعتمد، وماذا يُسجَّل، ومتى ينتهي.
إظهار الإجابة النموذجية
الإجابة النموذجية

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

بوابة الإصدار، وهي توقف الحادثة الثانية (قبل بيئة الإنتاج؛ المالك: مالك المنتج؛ الأدلة من قائد فريق الجودة): نجاح حزمة الانحدار، ولكل معيار قبول ضمن النطاق اختبار ناجح، ولا عيوب مفتوحة بدرجة حاجب أو حرج؛ الدليل: تقرير الاختبار ونظام تتبع العيوب. عند الفشل يكون القرار «توقف» ما لم يُعتمد استثناء، فإما أن يُصلَح عيب الاسترداد وإما أن يقبله شخص محدد بالاسم عن علم.

بوابة ما بعد النشر، وهي توقف الحادثة الثالثة (بعد كل نشر؛ المالك: مهندس الإصدار المناوب): تنجح في بيئة الإنتاج اختبارات الدخان للرحلات الحرجة، ومنها تتبع الطلب، وفحوص الصحة لواجهات API الرئيسية؛ الدليل: تقرير خط أنابيب النشر. عند الفشل يُتراجَع عن النشر (Rollback)، فيكتشف الفريقُ الصفحةَ المعطلة بدلاً من أن يكتشفها أحد العملاء.

قاعدة الاستثناء: لا يعتمده إلا مالك البوابة أو نائب محدد بالاسم؛ ويتضمن السجل المعيار الذي لم يتحقق والسبب والمخاطرة والتخفيف والمعتمِد؛ ولكل استثناء تذكرة متابعة، وينتهي في الإصدار التالي على الأكثر، ويُراجَع في المراجعة الاستعادية.

أسئلة شائعة

هل بوابة الجودة هي نفسها معايير الخروج؟

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

هل يجب أن يكون المختبِر هو من يوقف الإصدار؟

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

هل يمكن أن تكون البوابة صارمة أكثر من اللازم؟

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

المراجع

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
  • Continuous Integration (Martin Fowler)martinfowler.com · 2024الوصف الأكثر استشهاداً للتكامل المستمر: ادمج كثيراً، واجعل البناء يختبر نفسه وسريعاً، وأصلح البناء المكسور فوراً.
  • Eradicating Non-Determinism in Tests (Martin Fowler)martinfowler.com · 2011لماذا تُفقد الاختبارات المتذبذبة الحزمةَ قيمتها، وأسبابها الشائعة (العزل وعدم التزامن والخدمات البعيدة والوقت وتسرّب الموارد)، والحجر كاستجابة.

تدرّب بأدوات متقن

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

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

حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.

تصميم الاختبارات

مقارنة استجابة API فعلية بعقد متوقَّع (مثال أو مخطط) والإبلاغ عن الفروق الكاسرة وغير الكاسرة.

التحقق

قِس زمن استجابة نقطة نهاية عبر عدة عيّنات: الحد الأدنى والأقصى والمتوسط والوسيط وp95.

الأداء

تنسيق YAML والتحقق من صحته بمسافات بادئة وعلامات اقتباس متسقة.

التنسيق

للتعمّق أكثر

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

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