هندسة الجودة

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

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

لماذا يهم

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

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

ضمان الجودة التقليدي وهندسة الجودة

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

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

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

فريق منفصل يختبر نسخة بناء منتهية قبل الإصدار

  1. 1التطوير
  2. 2تسليم نسخة البناء
  3. 3الاختبار
  4. 4الإبلاغ عن العيوب
  5. 5الإصدار
التوقيت:
بعد «انتهاء» التطوير
من يشارك:
فريق اختبار منفصل
الناتج الرئيسي:
تقارير الأخطاء وتقارير تنفيذ الاختبار
التغذية الراجعة:
بعد أيام أو أسابيع من كتابة الشيفرة
السؤال الموجِّه:
«هل وجدنا العيوب؟»

هندسة الجودة

الفريق كله يبني الجودة في المنتج، من التنقيح حتى الإنتاج

  1. 1التنقيح: قابلية الاختبار والمخاطر
  2. 2البناء مع فحوص مؤتمتة
  3. 3خط الأنابيب عند كل تغيير
  4. 4الإصدار
  5. 5الرصد في الإنتاج

يتكرر: عودة إلى الخطوة 1

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

تبقى تقارير الأخطاء والاختبار الاستكشافي في الأسلوبين؛ وما يتغير هو توقيت العمل على الجودة ومن يشارك فيه.

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

بناء الجودة في المنتج: قابلية الاختبار والأتمتة وقابلية الرصد

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

  • قابلية الاختبار (Testability): يضع معيار ISO/IEC ⁦25010⁩ قابلية الاختبار ضمن قابلية الصيانة: مدى فاعلية وكفاءة وضع معايير الاختبار وإجراء الاختبارات للتحقق منها. واسأل عن كل ميزة: هل تستطيع التحكم فيها (الوصول إلى جلسة منتهية عبر واجهة برمجية، وضبط الساعة)، ورؤيتها (استجابات واضحة، وأحداث في السجل، ومعرّفات اختبار ثابتة أو test ids)، وعزلها (استبدال مزوّد الدفع ببديل اختبار أو test double).
  • الأتمتة: الفحوص التي يجب أن تنجح مع كل تغيير تعمل في خط الأنابيب (pipeline) على أدنى مستوى يستطيع كشف العيب، فيظهر الانحدار بعد دقائق من التغيير الذي سببه. وشيفرة الاختبار برمجيات: من دون مراجعة وسياسة للاختبارات المتذبذبة (flaky) لا يثق بها أحد.
  • قابلية الرصد (Observability): فهم ما يفعله النظام أثناء عمله من الإشارات التي يصدرها، وهي عادةً السجلات (logs) والمقاييس (metrics) والتتبعات (traces). وفي المراقبة تابع الإشارات الذهبية الأربع التي عرفتها في درس الإزاحة لليسار والإزاحة لليمين: زمن الاستجابة (latency)، وحجم الحركة (traffic)، والأخطاء (errors)، والتشبّع (saturation). والإشارات الجيدة تحوّل «فشلت عملية الشراء» إلى «انتهت مهلة استدعاء خدمة الدفع لهذا الطلب».

جرّبها: مولّد استجابات API وهمية جرّبها: فاحص صحة API

مثال تطبيقي: مواعيد التوصيل مع بناء الجودة من البداية

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

  • قابلية الاختبار: تقرأ الخدمة الوقت من ساعة يستطيع الاختبار ضبطها؛ ونقطة نهاية متاحة للاختبار فقط تملأ موعداً بـ⁦19⁩ حجزاً؛ ويحصل منتقي المواعيد على معرّفات اختبار ثابتة.
  • الأتمتة: اختبارات وحدة لوقت الإغلاق عند ⁦3:00:01⁩ و⁦3:00:00⁩ و⁦2:59:59⁩ قبل البداية (المتفق عليه: مغلق عند ⁦3:00:00⁩ تماماً)؛ واختبارات واجهة برمجية للحجز رقم ⁦20⁩ (مقبول) ورقم ⁦21⁩ (مرفوض مع SLOT_FULL)؛ واختبار واحد لواجهة المستخدم للمسار السعيد.
  • قابلية الرصد: كل حجز مرفوض يسجّل حدثاً منظّماً مع سببه؛ ولوحة متابعة تعرض حالات الرفض بحسب السبب؛ وتنبيه يُطلق إذا هبطت الحجوزات إلى الصفر خلال ساعات العمل.
  • ما يبقى يدوياً: استكشاف حالة عميلين يحجزان آخر مكان في اللحظة نفسها، وأوقات المواعيد بالعربية.
  • بعد الإصدار تُظهر اللوحة حالات رفض SLOT_FULL لمواعيد ما زالت تعرض أماكن شاغرة. ويحمل حدث السجل أدناه معرّف الموعد ومعرّف الطلب، فيعيد المختبِر إنتاج الحالة خلال ساعة: الطلبات الملغاة كانت ما زالت تُحتسب.
{
  "time": "2026-10-01T18:42:07Z",
  "level": "warn",
  "event": "slot_booking_rejected",
  "reason": "SLOT_FULL",
  "slot_id": "SLOT-7781",
  "booked_count": 20,
  "capacity": 20,
  "order_id": "ORD-58213",
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}

جرّبها: مولّد معايير القبول

ماذا يفعل مهندس الجودة

تتنوع المسميات، مثل مهندس الجودة ومهندس QA وSDET، لكن مهندس الجودة مختبِر أولاً: يبقى تحليل المخاطر وتصميم الاختبار والاختبار الاستكشافي في صميم عمله. ويصف منهج ISTQB للمستوى التأسيسي نهج الفريق الكامل (Whole-team approach)، الذي يستطيع فيه أي شخص يملك المعرفة والمهارات اللازمة أداء أي مهمة، ويكون الجميع مسؤولين عن الجودة؛ ومهندس الجودة يجعل ذلك عملياً.

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

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

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

أخطاء شائعة

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

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

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

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

تمرين عملي

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

المطلوب

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

المادة
القصة: بصفتي عميلاً، أريد إعادة تعيين كلمة المرور عبر البريد الإلكتروني
        حتى أتمكن من تسجيل الدخول مجدداً.

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

قابلية الاختبار: ساعة يستطيع الاختبار ضبطها لفحص انتهاء الصلاحية دون انتظار ⁦30⁩ دقيقة؛ وصندوق بريد للاختبار أو خدمة بريد وهمية لقراءة الرابط؛ وطريقة لتصفير عدّاد حدّ الطلبات بين الاختبارات؛ ومعرّفات اختبار ثابتة.

الأتمتة: اختبارات وحدة لانتهاء الصلاحية قبل بلوغ ⁦30⁩ دقيقة مباشرةً، وعند بلوغها، وبعدها مباشرةً، وللاستخدام لمرة واحدة، وللطلبين الخامس والسادس؛ واختبارات واجهة برمجية تتحقق من أن العناوين المسجلة وغير المسجلة تحصل على الاستجابة نفسها، ومن رفض الرابط المستخدم؛ واختبار واحد لواجهة المستخدم للرحلة كاملة.

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

يدوياً: البريد بالعربية وعلى الهاتف، وفتح الرابط على جهاز آخر. الأسئلة: هل الرابط صالح عند ⁦30:00⁩ تماماً؟ هل يُلغي الرابط الجديد الروابط الأقدم؟ هل تبدأ الساعة في AC3 من أول طلب أم من رأس الساعة؟ هل يكشف رفضُ الطلب وفق AC3 أن الحساب موجود، وهو ما يمنعه AC4؟

أسئلة شائعة

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

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

هل أحتاج إلى البرمجة لأصبح مهندس جودة؟

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

هل تحل هندسة الجودة محل الاختبار اليدوي والاستكشافي؟

لا. الفحوص المؤتمتة تؤكد ما توقعه أحدٌ مسبقاً، والاختبار الاستكشافي يجد ما لم يتوقعه أحد. ويقول منهج ISTQB للمستوى التأسيسي الشيء نفسه عن DevOps: حتى مع مستوى عالٍ من الاختبار المؤتمت، يظل الاختبار اليدوي مطلوباً، خاصةً من منظور المستخدم.

هل مهندس الجودة هو نفسه SDET؟

تتداخل المسميات ويختلف معناها بين الشركات. فمسمى SDET (Software Development Engineer in Test) يركّز عادةً على بناء شيفرة الاختبار وأدواته، بينما يشمل مسمى مهندس الجودة عادةً عملاً أوسع في قابلية الاختبار والأتمتة وقابلية الرصد وتحسين العملية. اقرأ المهام في الوصف الوظيفي بدلاً من المسمى.

المراجع

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

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

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

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

المحاكاة

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

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

للتعمّق أكثر

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

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