أهمية اختبار البرمجيات

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

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

لماذا يهم

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

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

ماذا يمكن أن يكلّف الإخفاق

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

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

الاختبار يقلّل المخاطر ويدعم القرارات

الخطر (Risk) حدث قد يقع فيُحدث ضرراً، ويصفه ISTQB بعاملين: الاحتمالية (Likelihood) والتأثير (Impact). ويخفّض الاختبار مستوى المخاطر بطريقتين: فهو يكشف عيوباً يصلحها المطورون بعد ذلك، وحين تنجح اختبارات منطقة عالية المخاطر يصبح لدى الفريق دليل، لا مجرد أمل، على أنها تعمل في الظروف التي اختُبرت فيها.

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

  • ما اختُبر: إتمام الشراء والدفع بالبطاقة والاسترداد؛ ⁦48⁩ اختباراً: نجح ⁦46⁩، وفشل واحد، ولم يُنفَّذ واحد.
  • المفتوح: عيب واحد مستوى خطورته «رئيسي» (Major)؛ رسالة الاسترداد بالبريد الإلكتروني تعرض مبلغاً خاطئاً، مع أن الاسترداد نفسه صحيح.
  • ما لم يُختبر: الدفع بالمحفظة الرقمية على iOS، لعدم توفر جهاز اختبار.
  • الخيارات: الإصدار مع إبلاغ فريق الدعم وإصلاح الرسالة في الإصدار ⁦4.2.1⁩، أو التأجيل يوماً واحداً.

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

ما يستطيع الاختبار إظهاره وما لا يستطيع

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

ويسهم الاختبار في الجودة دون أن يصنعها وحده: فالعيوب التي يكشفها تُزال بالتنقيح (Debugging) والإصلاح. وكما رأيت في درس التحقق والتحقق من الصلاحية، قد يجتاز البرنامج كل اختبار مقابل مواصفاته ومع ذلك لا يلبي احتياجات المستخدمين؛ ويسمي ISTQB ذلك مغالطة غياب العيوب (Absence-of-defects fallacy).

لذلك فعبارة «نجحت كل الاختبارات» تعني أن الاختبارات المخطط لها لم تكشف إخفاقاً، لا أنه لم يبقَ أي عيب ولا أن المناطق غير المختبَرة تعمل. والتقرير الجيد يذكر ما لم يُختبر والمخاطر الباقية، وتُسمى المخاطر المتبقية (Residual risk).

مثال تطبيقي: عيب واحد يُكتشف في ثلاث لحظات

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

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

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

اكتُشف في مراجعة المتطلباتالأبكر

  1. 1يسأل المختبِر: ⁦24⁩ ساعة بدءاً من متى؟ وهل تُسترد رسوم التوصيل؟
  2. 2يجيب مالك المنتج وتُعاد صياغة الجملة
ما بُني على العيب:
لا شيء بعد
من يلاحظه:
المختبِر، بمساءلة المتطلب
كلفة التصحيح:
محادثة وتعديل نص

اكتُشف في اختبار النظام

  1. 1اختبار: طلب دُفع بتحويل بنكي وأُكِّد في اليوم التالي
  2. 2يُرفض الإلغاء حتى بعد التأكيد مباشرةفشل
  3. 3تقرير عيب وتعديل في الكود واختبار تأكيد واختبارات انحدار
ما بُني على العيب:
التصميم والكود والاختبارات
من يلاحظه:
المختبِر، عبر اختبار فاشل
كلفة التصحيح:
إعادة عمل وإعادة اختبار وربما تأخير الإصدار

اكتُشف في الإنتاجالأكثر تأخراً

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

تزداد الكلفة بازدياد العمل المبني على العيب؛ ومقدار الزيادة يختلف من مشروع لآخر، لذا لا يظهر هنا مضاعِف ثابت.

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

أخطاء شائعة

  • أن تَعِد، أو تترك الآخرين يفترضون، بأن البرنامج المختبَر خالٍ من العيوب.
  • اختبار كل الميزات بالعمق نفسه بدلاً من التركيز حيث يكون الإخفاق أعلى كلفة.
  • الاكتفاء بالأعداد في التقارير، مثل «نجح ⁦120⁩ اختباراً»، دون ذكر ما لم يُختبر وما زال مفتوحاً.
  • انتظار نسخة بناء (Build) مكتملة وتخطّي مراجعة المتطلبات، حيث تكون إزالة العيوب أرخص ما تكون.
  • الاستشهاد بمضاعِف ثابت لكلفة العيوب المتأخرة على أنه حقيقة، بدلاً من العواقب الملموسة لمنتجك.
  • التصرف كحارس بوابة للإصدار: المختبِرون يزوّدون القرار بالمعلومات، وأصحاب المصلحة الذين يتحملون المخاطر هم من يتخذونه.

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

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

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

تمرين عملي

حدّد أين يهمّ الاختبار أكثر في إصدار

المطلوب

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

المادة
الإصدار 3.8 — التغييرات

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

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

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

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

الملاحظة: «البطاقات المحفوظة وتقريب الضريبة يُختبران بعمق، وساعات العمل والزر بفحص سريع. المخاطر الباقية: ساعات العمل فُحصت في منطقة زمنية واحدة فقط، ونجاح الاختبارات يقلّل احتمال وجود عيوب في البطاقات المحفوظة ولا يلغيه».

أسئلة شائعة

إذا كان الاختبار لا يستطيع إثبات خلوّ البرنامج من العيوب، فلماذا نختبر؟

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

هل صحيح أن إصلاح خطأ يُكتشف في الإنتاج يكلّف ⁦100⁩ ضعف؟

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

من يقرر أن البرنامج جاهز للإصدار؟

أصحاب المصلحة الذين يتحملون المخاطر: عادةً مالك المنتج أو المسؤول عن النشاط التجاري (Business owner)، وأحياناً مجلس إصدار، وفي المجالات الخاضعة للتنظيم من تحددهم القواعد. ويقدّم المختبِرون المعلومات اللازمة للقرار (النتائج والعيوب المفتوحة والمناطق غير المختبَرة والمخاطر الباقية)، وتوصيةً عند الطلب.

هل يعني مزيد من الاختبار جودة أفضل دائماً؟

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

المراجع

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
  • ISO/IEC/IEEE 29119-1:2022 — Software and systems engineering — Software testing — Part 1: General conceptsISO/IEC/IEEE · 2022المعيار الدولي لاختبار البرمجيات: المفاهيم والعمليات والتوثيق والتقنيات.
  • Personal Data Protection Law (English translation)الهيئة السعودية للبيانات والذكاء الاصطناعي (سدايا) · 2023النظام السعودي لحماية البيانات الشخصية — ولماذا ينبغي أن تستخدم بيئات الاختبار بيانات اصطناعية بدلاً من نسخ سجلات العملاء الحقيقية.

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

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

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

للتعمّق أكثر

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

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