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

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

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

ما الذي يشمله ضمان الجودة الشامل؟

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

يمتد ضمان الجودة الشامل من كتابة المتطلب إلى قياس الإصدار في بيئة الإنتاج، وفي الطريق بوابة تستطيع إيقاف الإصدار.
  1. 1المتطلبات ومعايير القبوليبدأ حين يُكتب المتطلب، قبل الكودمراجعة بحثاً عن الغموض والحالات الناقصة وقابلية الاختبار؛ ومعايير لمسارات الخطأ أيضاً
  2. 2تصميم الاختباراتخطة الاختبار تتبع ترتيب المخاطر؛ تقسيم التكافؤ، القيم الحدّية، جداول القرار، انتقالات الحالة
  3. 3مستويات الاختبار وأنواعهالوحدة، التكامل / الواجهة البرمجية، النظام، القبول؛ الوظيفي، الانحدار، الاستكشافي، غير الوظيفي
  4. 4بيانات الاختبار والبيئاتبيانات اصطناعية، ومجموعة أساسية لإعادة الضبط، وبيئات تطابق الإنتاج، ومحاكاة للخدمات الخارجية
  5. 5بوابة الإصدارمعايير الخروج: الاختبارات المخططة نُفّذت، ولا عيوب حاجبة أو حرجة مفتوحة، وحزمة الانحدار خضراء، وأهداف الأداء متحققةتستطيع إيقاف الإصدار

    فرع: العيب الحاجب يوقف الإصدار

  6. 6الأرقام التي تستحق المتابعةمعدل التسرّب وتغطية المتطلبات وصحة الحزمة: تُراجع مع كل إصدار

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

الأجزاء بالترتيب الذي يواجهه الفريق، كما يعرضها هذا الدليل. ويُتفق على معايير الدخول والخروج لكل مستوى اختبار قبل السبرنت.

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

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

ابدأ قبل الكود: المتطلبات ومعايير القبول

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

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

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

جرّبها: كاشف غموض المتطلبات بالذكاء الاصطناعي جرّبها: مولّد معايير القبول جرّبها: مولّد الاختبار المبني على المخاطر

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

يصف ISTQB والمعيار ISO/IEC 29119 الاختبار كمستويات، لكل منها هدفه ومالكه. اختبارات الوحدة، التي يكتبها المطورون، تفحص دالة أو صنفاً واحداً بمعزل عن غيره. اختبارات التكامل تتحقق من أن المكوّنات والخدمات تعمل معاً — وهذا في المنتج الحديث يعني طبقة الواجهة البرمجية غالباً. اختبارات النظام تفحص المنتج المجمَّع مقابل متطلباته، واختبارات القبول تفحصه مقابل ما يحتاجه العمل أو المستخدم.

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

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

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

أنواع الاختبار: الوظيفي والانحدار والاستكشافي وغير الوظيفي

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

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

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

جرّبها: تحليل القيم الحدّية جرّبها: مولّد الاختبارات السلبية جرّبها: محلّل زمن الاستجابة جرّبها: محلّل ترويسات الأمان

بيانات الاختبار والبيئات

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

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

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

جرّبها: مصنع بيانات الاختبار جرّبها: مولّد استجابات API وهمية جرّبها: بريد إلكتروني مؤقت

بوابات الإصدار وإدارة العيوب والأرقام التي تستحق المتابعة

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

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

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

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

قائمة تحقق دنيا لضمان الجودة الشامل

  • لكل متطلب معايير قبول، تشمل مسارات الخطأ، تُراجع قبل بدء التطوير.
  • الميزات مرتّبة حسب المخاطر وخطة الاختبار تتبع الترتيب.
  • توجد حزمة انحدار آلية على مستوى الواجهة البرمجية، تعمل في CI عند كل تغيير، وتكون خضراء قبل الإصدار.
  • مجموعة صغيرة من رحلات واجهة المستخدم الشاملة مؤتمتة؛ والميزات الجديدة تحصل على جلسة استكشافية من مختبِر.
  • أهداف الأداء مكتوبة كأرقام (زمن الاستجابة عند المئين 95، ومعدل الخطأ عند الحمل المستهدف) وتُقاس قبل الإطلاق.
  • خط أساس OWASP مفحوص: التحكم في الوصول، والحقن، وترويسات الأمان، ومعالجة الجلسات، والمصادقة.
  • العربية واللغات المستهدفة الأخرى مختبَرة بنصها الحقيقي وتخطيطها من اليمين إلى اليسار وصيغها المحلية.
  • بيانات الاختبار اصطناعية؛ ولا تغادر أي بيانات شخصية بيئة الإنتاج.
  • معايير الدخول والخروج مكتوبة ومطبَّقة؛ والعيب الحاجب يوقف الإصدار.
  • معدل التسرّب وتغطية المتطلبات وصحة حزمة الانحدار تُراجع مع كل إصدار.

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

هل ضمان الجودة هو الاختبار نفسه؟

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

ما مقدار الاختبار الكافي؟

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

هل يمكن أتمتة ضمان الجودة الشامل بالكامل؟

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

من أين يبدأ الفريق الصغير؟

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

ما المعايير التي تعرّف هذه الممارسة؟

منهج ISTQB للمستوى التأسيسي للمصطلحات وعملية الاختبار، والمعيار ISO/IEC/IEEE 29119 لتوثيق الاختبار وعملياته، والمعيار ISO/IEC 25010 لخصائص الجودة، ومعيار OWASP ASVS لمتطلبات الأمان. المراجع في هذه الصفحة تربط بكل منها.

المراجع

تمرين عملي

قيّم ضمان الجودة لدى فريق صغير قبل الإطلاق

المطلوب

انضممت للتو إلى منصة تبرعات خيرية (مثال خيالي) بصفتك أول مختبِر فيها. تطبيق الويب بالعربية افتراضياً وبالإنجليزية، وتخدمه واجهة برمجية من نوع REST. يضيف الإصدار ⁦2.0⁩ التبرع الشهري المتكرر مع إيصال بالبريد الإلكتروني عن كل خصم، ومن المخطط إطلاقه بعد أسبوع من اليوم، قبل أكثر حملات السنة ازدحاماً بثلاثة أسابيع. وقد سألتك مالكة المنتج، ريم: «هل نستطيع الإطلاق يوم الأحد القادم؟» تصف المادة أدناه كيف يعمل الفريق اليوم (⁦P1–P10⁩)، ومتطلبات الإصدار الثلاثة (⁦R1–R3⁩)، وأعداد العيوب في الإصدار السابق، وحالة المرشح للإصدار (Release candidate) اليوم.

اعمل على الورق، واتخذ قائمة التحقق الدنيا لضمان الجودة الشامل في الدليل مقياساً لك، واكتب الإجابة كما سترسلها إلى ريم: موجزة، ومع سبب لكل نقطة. لا تختلق وقائع خارج المادة؛ وحيث تسكت المادة اكتب سؤالاً. تساعدك حاسبة النسبة المئوية في الخطوة ⁦4⁩، ويُريك مولّد بيانات الاختبار العربية نوع البيانات الذي ينقص P7. خصّص لذلك ⁦25–30⁩ دقيقة.

المادة
منصة تبرعات خيرية (مثال خيالي) - تطبيق ويب بالعربية (افتراضياً) والإنجليزية، وREST API
الفريق: أربعة مطورين، وريم مالكة المنتج، وأنت أول مختبِر في الفريق (منذ هذا السبرنت).
يضيف الإصدار 2.0 التبرع الشهري المتكرر، وإيصالاً بالبريد الإلكتروني عن كل خصم.
الإطلاق المخطط: الأحد 1 نوفمبر 2026. وتبدأ حملة التبرعات السنوية، أكثر أسابيع السنة
ازدحاماً، بعده بثلاثة أسابيع. اليوم: الأحد 25 أكتوبر 2026.
سؤال ريم إليك: «هل نستطيع الإطلاق يوم الأحد القادم؟»

كيف يعمل الفريق اليوم
  P1   للقصص وصف فقط. وتُكتب معايير القبول بعد التطوير، لمسار النجاح فقط.
  P2   لا ترتيب حسب المخاطر: تُختبر الميزات بالترتيب الذي تُسلَّم به.
  P3   تعمل اختبارات الوحدة عند كل إيداع. وفي كل مراجعة سبرنت يُعرض رقم
       «تغطية الأسطر 72%» على أنه مقياس الجودة لدى الفريق.
  P4   الواجهة البرمجية: مجموعة Postman من 40 طلباً، تُشغَّل يدوياً قبل كل إصدار
       (نحو ساعتين). وهي ليست في CI.
  P5   واجهة المستخدم: 38 اختباراً آلياً للمتصفح تعمل في CI (45 دقيقة). 5 منها
       تفشل أحياناً، فيُعاد تشغيلها حتى تنجح.
  P6   لا جلسات استكشافية، ولا اختبار أداء، ولا فحص أمان.
       وعن السرعة يقول الفريق: «كان الموقع سريعاً في العرض التجريبي».
  P7   كل حسابات الاختبار بأسماء إنجليزية مكتوبة بالحروف اللاتينية.
  P8   تُحدَّث بيئة Staging كل أسبوع بنسخة من قاعدة بيانات الإنتاج: أسماء المتبرعين
       وأرقام هواتفهم وعناوين بريدهم الإلكتروني وسجل تبرعاتهم.
  P9   ترسل بيئة Staging عمليات الدفع بالبطاقة إلى بيئة Sandbox لدى مزوّد الدفع،
       ولا يستطيع الفريق أن يجعلها تعيد رفضاً للبطاقة أو انتهاءً للمهلة.
  P10  للعيوب خطورة فقط، والأولوية يُتفق عليها في المحادثة. ولا توجد معايير دخول
       أو خروج مكتوبة: «نُصدر حين تقول ريم إنه جاهز».

متطلبات الإصدار 2.0
  R1   يستطيع المتبرع إنشاء تبرع شهري من 10 إلى 5,000 ريال. ويُخصم في اليوم نفسه
       من الشهر الذي جرى فيه التبرع الأول.
  R2   يجب أن تبقى صفحات التبرع سريعة أثناء الحملات.
  R3   بعد كل خصم شهري، يتلقى المتبرع إيصالاً بالبريد الإلكتروني.

الإصدار 1.9 (الإصدار السابق)
  عيوب اكتُشفت قبل الإصدار: 18.
  عيوب أُبلغ عنها في أول 30 يوماً في الإنتاج: 6.

الإصدار 2.0، البناء 2.0.0-rc1 على Staging، الحالة اليوم
  معايير القبول: 20. لها اختبار ناجح: 14. لها اختبار فاشل: 2. بلا اختبار: 4.
  مجموعة الواجهة البرمجية (Postman): لم تُشغَّل على rc1 بعد.
  حزمة واجهة المستخدم: خضراء في التشغيل الثالث.
  الأداء: لم يُقَس.
  العيوب المفتوحة
    D-71  حرج (Critical): حين يتعذر إرسال بريد الإيصال، تعيد مهمة إعادة المحاولة
          الخطوة كاملة، فتُخصم بطاقة المتبرع مرة ثانية. اكتشفه مطوّر في سجلات Staging.
    D-74  رئيسي (Major): تعرض الإيصالات أسماء المتبرعين العربية على شكل «????».
          اكتشفته ريم في العرض التجريبي للسبرنت، بحساب المتبرع الخاص بها المنسوخ
          من الإنتاج.
    D-75  ثانوي (Minor): الواجهة العربية: رمز العملة في الجانب الخطأ من حقل المبلغ.
الخطوات
  1. راجع ⁦R1–R3⁩ بسؤال الدليل: هل يستطيع مختبِران قراءة كل متطلب وتصميم الاختبار نفسه؟ في R1 اكتب أسئلتك والقيم الحدّية؛ وأعد كتابة R2 بأرقام؛ واكتب معايير قبول لـ R3 بصيغة «بافتراض/عندما/عندئذ» (Given/When/Then)، تتضمن مساري خطأ على الأقل.
  2. لكل مجموعة من المجموعات الخمس في قائمة خصائص الجودة في الدليل، سمِّ الخطر في الإصدار ⁦2.0⁩، ونشاط اختبار واحداً مقصوداً، ومستوى الاختبار الذي ينتمي إليه: الوحدة، أو التكامل (الواجهة البرمجية)، أو النظام، أو القبول.
  3. افحص ⁦P1–P10⁩ مقابل قائمة التحقق الدنيا: ما الناقص أو الخاطئ، وما الذي يحل محله؟ ودقّق خصوصاً في بيانات الاختبار والبيئات.
  4. احسب معدل تسرّب العيوب في الإصدار ⁦1.9⁩ وتغطية المتطلبات في الإصدار ⁦2.0⁩. وقل أي رقم ينبغي أن يكفّ الفريق عن تسميته مقياساً للجودة، وما الذي يعرضه بدلاً منه.
  5. اكتب معايير الخروج للإصدار ⁦2.0⁩، وطبّقها على حالة rc1، وأجب ريم: إطلاق أم لا في ⁦1⁩ نوفمبر، وما الذي يجب أن يتحقق أولاً. واختم بالتغييرات الثلاثة في طريقة عمل الفريق التي تبدأ بها، مرتبةً.
إظهار الإجابة النموذجية
الإجابة النموذجية

الخطوة ⁦1⁩، المتطلبان R1 وR2. يبدو R1 قابلاً للاختبار، ولهذا يسهل أن تفوت ثغراته. أسئلة لريم: هل المبلغان ⁦10⁩ و⁦5,000⁩ ريال مسموحان كلاهما كما توحي الصياغة؟ وهل يجوز للمتبرع أن يتبرع بالهللات، مثل ⁦10.50⁩؟ متى يُخصم التبرع في شهر لا يوجد فيه يومه، كتبرع بدأ في اليوم ⁦31⁩ في شهر من ⁦30⁩ يوماً، أو تبرع بدأ في اليوم ⁦29⁩ أو ⁦30⁩ أو ⁦31⁩ في فبراير؟ وهل يُخصم التبرع الأول عند إنشائه؟ وماذا يحدث حين يفشل خصم شهري؟ إذا كانت المبالغ بالريال الكامل وكان الطرفان مسموحين، فالقيم الحدّية في الصيغة الثنائية (2-value BVA) هي ⁦9⁩ (مرفوض) و⁦10⁩ (مقبول) و⁦5,000⁩ (مقبول) و⁦5,001⁩ (مرفوض)؛ وإذا سُمح بالهللات فالخطوة ⁦0.01⁩، فتصبح القيم ⁦9.99⁩ و⁦10.00⁩ و⁦5,000.00⁩ و⁦5,000.01⁩. ولموعد الخصم، ابدأ تبرعات في الأيام ⁦28⁩ و⁦29⁩ و⁦30⁩ و⁦31⁩ وتابعها عبر شهر من ⁦30⁩ يوماً وعبر فبراير. أما R2 فيسقط عند سؤال الدليل مباشرة: لا أحد يستطيع أن يقول إن الصفحة «سريعة» أثناء «حملة»، فلا يمكن الحكم عليه بالنجاح أو الفشل. أسئلة لريم: أي الصفحات وأي طلبات الواجهة البرمجية تُعدّ صفحات تبرع؟ وكم متبرعاً كانوا يتبرعون في الوقت نفسه عند ذروة الحملة الماضية؟ ثم أعد كتابته بأرقام توافق عليها ريم، مأخوذة من حركة المرور في الحملة الماضية، مثلاً: «حين يُكمل ⁦500⁩ متبرع تبرعاً في الوقت نفسه، لا يتجاوز زمن الاستجابة عند المئين ⁦95⁩ (p95) لصفحة التبرع ولواجهة التبرع البرمجية ثانيتين، ويفشل أقل من ⁦1%⁩ من الطلبات». الأرقام هنا مثال فقط؛ والصيغة نفسها — الحمل والمئين والحد ومعدل الخطأ — هي ما يجعل المتطلب قابلاً للاختبار.

الخطوة ⁦1⁩، المتطلب R3. يصف مسار النجاح فقط، بينما ينبّه الدليل إلى أن معظم حوادث الإنتاج تعيش في مسارات الخطأ. معايير قبول مع مساري خطأ: (أ) بافتراض متبرع لديه تبرع شهري نشط بقيمة ⁦100⁩ ريال، عندما ينجح الخصم الشهري، عندئذ يُسجَّل خصم واحد فقط بقيمة ⁦100.00⁩ ريال، ويُرسل بريد إيصال واحد فيه المبلغ والتاريخ ورقم مرجعي، بلغة المتبرع. (ب) بافتراض المتبرع نفسه، عندما يرفض مزوّد الدفع الخصم، عندئذ لا يُرسل إيصال، ويُعلَّم التبرع بحالة «فشل الدفع»، ويُطلب من المتبرع تحديث البطاقة. (ج) بافتراض خصم نجح، عندما يتعذر إرسال بريد الإيصال، عندئذ لا تُخصم البطاقة مرة أخرى، ويُعاد إرسال البريد وحده. المعيار (ج) هو D-71 نفسه: لو كُتب قبل التطوير لكان سؤالاً في جلسة التحسين (Refinement)، لا عيباً حرجاً قبل الإطلاق بأسبوع. أما عدد مرات إعادة المحاولة، ومتى يُعلَّق التبرع، فقراران لريم؛ ومعاييرك تجعلها تتخذهما. وكل هذا مراجعة، أي اختبار ساكن (Static testing) بمصطلحات ISTQB، تُجرى على النص قبل أن يعمل أي كود.

الخطوة ⁦2⁩، خصائص الجودة. الملاءمة الوظيفية: مبالغ أو مواعيد خصم أو إيصالات خاطئة (R1 وR3)؛ اختبارات القيم الحدّية والاختبارات السلبية، معظمها على مستوى التكامل عبر الواجهة البرمجية، مع تغطية حساب موعد الخصم أيضاً في اختبارات الوحدة التي يكتبها المطورون. الموثوقية وكفاءة الأداء: خصم يفشل أو تنتهي مهلته أو يتكرر، وهو الخطر الذي أظهره D-71، وذروة الحملة بعد الإطلاق بثلاثة أسابيع؛ اختبارات لحالات الفشل على مستوى الواجهة البرمجية مع محاكاة (Mock) مزوّد الدفع وخدمة البريد لتعيدا رفضاً أو انتهاءً للمهلة أو فشلاً في الإرسال، واختبار حمل مقابل أهداف R2 على بيئة مهيأة مثل الإنتاج، وهو نشاط على مستوى النظام له موعده الخاص في الخطة. الأمان: البيانات الشخصية للمتبرعين ومدفوعاتهم؛ خط الأساس من OWASP على Staging بحسابَي متبرعَين اختباريين: هل يستطيع متبرع أن يرى التبرع الشهري لمتبرع آخر أو يلغيه بتغيير معرّف في طلب إلى الواجهة البرمجية (التحكم في الوصول)، وهل معالجة الجلسات وترويسات الأمان صحيحة؟ وذلك على مستويي الواجهة البرمجية والنظام. التوافق وقابلية الاستخدام: منتج عربي أولاً بتخطيط من اليمين إلى اليسار، وأسماء عربية في الإيصالات، وهواتف ومتصفحات رئيسية؛ اختبارات نظام وجلسة استكشافية في الواجهة العربية ببيانات اختبار عربية، وكانت ستجد D-74 وD-75 قبل العرض التجريبي. قابلية الصيانة: تغيير لاحق في منطق الخصم أو الإيصال يكسر التبرعات المتكررة دون أن يلاحظه أحد، بينما لا يُشغَّل فحص الانحدار الوحيد للواجهة البرمجية إلا يدوياً مرة في كل إصدار؛ مجموعة الواجهة البرمجية في CI بوصفها حزمة الانحدار، على مستوى التكامل (الواجهة البرمجية)، حتى يمكن إجراء التغيير التالي بأمان. وفوق ذلك كله اختبار القبول: تنفّذ ريم معايير القبول للمتطلبات ⁦R1–R3⁩ على Staging أو تشاهد تنفيذها، وعليه يقوم قرار الإصدار.

الخطوة ⁦3⁩، الممارسات مقابل قائمة التحقق. P1: معايير القبول تأتي بعد التطوير ولا تغطي إلا مسار النجاح؛ اكتبها قبل التطوير، بما فيها مسارات الخطأ، وراجعها مع ريم. P2: رتّب ميزات الإصدار حسب المخاطر، أي الاحتمال مضروباً في الأثر — الخصومات المتكررة والإيصالات أولاً — واجعل خطة الاختبار تتبع هذا الترتيب. P3: تشغيل اختبارات الوحدة عند كل إيداع ممارسة جيدة؛ والمشكلة في المقياس فقط (الخطوة ⁦4⁩). P4: مجموعة الواجهة البرمجية أفضل ما يملكه الفريق للانحدار، وهي تُشغَّل يدوياً مرة واحدة قبل الإصدار؛ ضعها في CI عند كل تغيير، مع تأكيدات (Assertions) على رموز الحالة وأجسام الأخطاء، واجعل نجاح تشغيلها شرطاً للإصدار. P5: إعادة تشغيل الاختبارات حتى تنجح تُفقد اللون الأخضر معناه؛ اعزل الاختبارات المتذبذبة الخمسة، وأصلحها أو احذفها، ولا تحتسب إلا النجاح من التشغيل الأول. P6: الاختبار الاستكشافي واختبار الأداء واختبار الأمان يحتاج كل منها إلى نشاط مجدول خاص به (الخطوة ⁦2⁩)؛ فلا شيء منها يحدث كأثر جانبي للاختبار الوظيفي. P7: بيانات اختبار لاتينية فقط لا تكشف العيوب العربية؛ أضف أسماء عربية بالتشكيل، وأسماء طويلة، ومدخلات تخلط العربية بالإنجليزية. P8 أخطرها: البيانات الشخصية لمتبرعين حقيقيين موجودة في بيئة مفتوحة لكل من يملك صلاحية الوصول إلى بيئة الاختبار، وهو ما يعدّه نظام حماية البيانات الشخصية السعودي معالجة تحتاج إلى أساس وضمانات؛ ومع عناوين بريد إلكتروني حقيقية على Staging، يمكن لأي اختبار لميزة الإيصال أن يرسل بريداً إلى متبرع حقيقي. أوقف النسخ الأسبوعي، واحذف البيانات المنسوخة، وولّد متبرعين اصطناعيين بالعربية والإنجليزية، واجعلهم مجموعة بيانات أساسية معروفة يمكن للحزمة إعادة الضبط إليها. ولاحظ أن D-74 لم يظهر إلا عبر حساب ريم الحقيقي المنسوخ من الإنتاج، لأنه لا يوجد حساب اختبار باسم عربي؛ والبيانات العربية الاصطناعية تكشف العيب نفسه دون بيانات شخصية لأحد. P9: حاكِ مزوّد الدفع عند حدوده حتى يستطيع الاختبار أن يختار رفضاً أو انتهاءً للمهلة أو رداً متأخراً، واحتفظ ببضع تشغيلات على Sandbox للتكامل الحقيقي. P10: امنح كل عيب أولوية إلى جانب الخطورة، واكتب معايير الدخول والخروج (الخطوة ⁦5⁩).

الخطوة ⁦4⁩، الأرقام. معدل تسرّب العيوب في الإصدار ⁦1.9⁩: ⁦6 ÷ (18 + 6) = 6 ÷ 24 = 25%⁩، أي أن عيباً من كل أربعة عيوب عُرفت بعد ⁦30⁩ يوماً من الإصدار لم يُكتشف إلا في الإنتاج؛ ونسبة اكتشاف العيوب (DDP)، وهي مكمّلته، ⁦75%⁩. وبعض الفرق تعبّر عن معدل التسرّب بنسبة بين عددين بدلاً من ذلك: ⁦6⁩ عيوب في الإنتاج مقابل ⁦18⁩ اكتُشفت قبل الإصدار (عيب تسرّب مقابل كل ثلاثة اكتُشفت)؛ وكلتا الصيغتين صالحة ما دام التقرير يذكر أيهما يستخدم ويثبت عليها من إصدار إلى إصدار. تغطية المتطلبات في الإصدار ⁦2.0⁩: لـ ⁦14⁩ معياراً من معايير القبول الـ ⁦20⁩ اختبار ناجح، أي ⁦70%⁩. ولـ ⁦16⁩ معياراً من ⁦20⁩ (⁦80%⁩) اختبار من نوع ما، لكن المعيار الذي يفشل اختباره ليس مغطى بعد، و⁦4⁩ معايير لم تُختبر أصلاً. أما «تغطية الأسطر ⁦72%⁩» فتقول أي الأسطر نفّذتها اختبارات الوحدة، لا ما إذا كان أي متطلب يعمل: ويسمّيها الدليل مقياساً للمطورين لا مقياساً للجودة. اتركها للمطورين، واعرض بدلاً منها ثلاثة أرقام مع كل إصدار: معدل التسرّب، وتغطية المتطلبات، وصحة حزمة الانحدار — وهي اليوم تشغيل لواجهة المستخدم مدته ⁦45⁩ دقيقة فيه ⁦5⁩ اختبارات متذبذبة من ⁦38⁩ (نحو ⁦13%⁩)، ومجموعة للواجهة البرمجية ليست في CI أصلاً.

الخطوة ⁦5⁩، معايير الخروج والإجابة. معايير الخروج للإصدار ⁦2.0⁩، مكتوبة ومتفق عليها مع ريم: نُفّذت كل الاختبارات المخططة؛ لكل معيار قبول اختبار ناجح؛ لا عيب حاجباً (Blocker) أو حرجاً (Critical) مفتوحاً؛ حزمتا الانحدار للواجهة البرمجية ولواجهة المستخدم خضراوان من التشغيل الأول؛ أهداف الأداء في R2 متحققة على البيئة المهيأة مثل الإنتاج؛ وأي عيب رئيسي (Major) مفتوح قبلته ريم كتابةً وله حل بديل. وعند تطبيقها على rc1 لا يتحقق أي منها: لم تُشغَّل مجموعة الواجهة البرمجية على rc1، و⁦4⁩ معايير بلا اختبار؛ ومعياران يفشلان؛ وD-71 عيب حرج مفتوح؛ وحزمة واجهة المستخدم لم تنجح إلا في تشغيلها الثالث؛ وليس للأداء هدف ولا قياس؛ وD-74 عيب رئيسي مفتوح بلا قبول ولا حل بديل. لذلك فالتوصية لـ rc1: لا إطلاق. أجب ريم كتابةً: «ليس بـ rc1. ما زال الإطلاق في ⁦1⁩ نوفمبر ممكناً إذا أُصلح D-71 وD-74 حتى الخميس ⁦29⁩ أكتوبر واجتازا اختبار التأكيد (Confirmation testing)، واجتاز مرشح جديد للإصدار مجموعة الواجهة البرمجية وحزمة واجهة المستخدم من التشغيل الأول، وصار للمعايير الستة المفتوحة اختبارات ناجحة، وحقق اختبار حمل أهداف R2 التي توافقين عليها. ويمكن أن يُطلق D-75 بوصفه مشكلة معروفة». ويقع D-74 في قائمة ما يجب إصلاحه رغم أنه رئيسي: ففي منتج عربي أولاً سيحمل معظم الإيصالات اسماً لا يستطيع أحد قراءته. وللمرشح التالي أضف معايير دخول: البناء ينشر على Staging، واختبار الدخان يجتاز، ولكل قصة فيه معايير قبول. ويبقى قرار الإصدار لريم؛ ودورك أن تجعل الخطر ظاهراً ومكتوباً. وإن تعذّر تحقيق الشروط في الوقت، فإطلاق لاحق يسبق الحملة أقل كلفة من خصم مزدوج أثناءها.

الخطوة ⁦5⁩، التغييرات الثلاثة التي تبدأ بها، مرتبةً. أولاً P8، بيانات اصطناعية بدلاً من نسخ الإنتاج: فهي انكشاف قانوني ومخاطرة بالخصوصية في كل أسبوع تستمر فيه، أياً كان مصير الإصدار. ثانياً P4، مجموعة الواجهة البرمجية في CI عند كل تغيير وضمن معايير الخروج: إحدى نقطتي البداية اللتين يقترحهما الدليل على الفريق الصغير، وهي المستوى الذي يمكن فيه اختبار سيناريو D-71 — فشل البريد بعد خصم ناجح — بمحاكاة خدمة البريد. ثالثاً P1، معايير قبول بمسارات الخطأ قبل التطوير: نقطة البداية الأخرى في الدليل، وR3 يُظهر كلفة تأخيرها. وتليها مباشرة أهداف الأداء والأمان (P6) قبل الحملة، ثم جلسة استكشافية لكل ميزة جديدة حين تستقر هذه الثلاثة. ترتيب آخر مقبول إن دافعت عنه بالمخاطر؛ أما تأجيل P8 فغير مقبول.

كيف تتحقق من عملك. ينبغي أن تحتوي إجابتك على: سؤال واحد على الأقل لكل متطلب، وأرقام في R2؛ ومعيار لمسار خطأ في R3 يطابق D-71؛ ومستوى اختبار لكل نشاط في الخطوة ⁦2⁩؛ وتسمية P8 مشكلةً في البيانات الشخصية لا مسألة راحة؛ و⁦25%⁩ (أو النسبة ⁦6⁩ إلى ⁦18⁩ مع التصريح بأنها نسبة بين عددين) و⁦70%⁩ مع المعادلتين اللتين أنتجتاهما؛ وتوصية بعدم إطلاق rc1 مع الشروط التي تحوّلها إلى إطلاق. واختلاف أرقام المثال في R2، أو التغيير الأول، أو إضافة معايير خروج أخرى، كل ذلك مقبول إن كُتب السبب.

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

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

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

ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.

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

ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.

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

حوّل قصة مستخدم (As a / I want / So that) إلى حالات اختبار منظّمة باستخدام القوالب والقواعد الاستدلالية.

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

التحقق من مطابقة زوج طلب/استجابة API لعقد OpenAPI الخاص به: المسار والطريقة والمعاملات والجسم ومخطط الاستجابة.

التحقق

تحقّق سريعاً من إمكانية الوصول إلى نقطة نهاية API: الحالة وزمن الاستجابة والحجم ونوع المحتوى وTLS.

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

نفّذ تحليلاً كاملاً للقيم الحدّية (ثنائي القيم وثلاثي القيم) مع فئات التكافؤ والنتائج المتوقّعة.

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

ولّد حالات اختبار سلبية لحقول النماذج وواجهات API: قيم فارغة وnull ونوع خاطئ وطول زائد وحقن وصيغة غير صالحة.

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

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

الأداء

تقييم ترويسات أمان HTTP (CSP وHSTS وX-Frame-Options وReferrer-Policy وPermissions-Policy وCOOP/CORP) من ترويسات ملصقة أو عنوان URL عام.

التحقق

مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.

بيانات الاختبار

ولّد استجابات API وهمية كاملة (الحالة والترويسات وجسم JSON) لحالات النجاح والقوائم والتفاصيل والأخطاء والنتائج الفارغة.

المحاكاة

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

تحليل الأخطاء ذكاء اصطناعي

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

أدلة أخرى

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

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

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

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

فريق الجودة الداخلي مقابل الجودة المُسندة خارجياً

مقارنة بين الجودة الداخلية والمُسندة خارجياً والمعزَّزة والهجينة في التكلفة وسرعة البدء ومعرفة المنتج والتحكم وحماية البيانات والاحتفاظ بالمعرفة، مع قائمة تحقق.

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

كيف تكتب حالات الاختبار (Test Cases)

كيف تكتب حالات اختبار موثوقة: الحقول التي تحتاجها كل حالة، ونموذج جاهز للنسخ، ومثال تسجيل الدخول، وتقنيات التصميم التي تكتشف الأخطاء الحقيقية.

وقت القراءة 4 دقائق
اختبار واجهات API

ما هو اختبار API؟ وكيف تختبر REST API

شرح اختبار API: ما هو، وما الذي تفحصه في كل طلب واستجابة، وطريقة خطوة بخطوة لاختبار REST API، والأخطاء الشائعة، وأدوات مجانية من متصفحك.

وقت القراءة 6 دقائق
الأداء

اختبار مرونة الأداء والأمان

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

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

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

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

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