الاختبار الوظيفي
الاختبار الوظيفي (Functional Testing) يتحقق مما يفعله النظام: الوظائف التي يجب أن يؤديها والنتائج التي تنتجها. ويحدد ISTQB هدفه الرئيسي في فحص ثلاثة أمور: الاكتمال الوظيفي والصحة الوظيفية والتناسب الوظيفي. فإذا قال المتطلب إن رمز الخصم WELCOME10 يخصم 10% من قيمة المنتجات في السلة، فالاختبار الوظيفي يطبّق الرمز على منتجات قيمتها 200.00 ريال ويتحقق من أن الخصم 20.00 ريالاً بالضبط.
تأتي نتائجه المتوقعة من المتطلبات وقصص المستخدمين ومعايير القبول، لا من الشيفرة، ولهذا تُصمَّم الاختبارات الوظيفية عادةً بأسلوب الصندوق الأسود (Black-box). أما مدى سرعة الميزة وأمانها وسهولة استخدامها فمن شأن الاختبار غير الوظيفي، موضوع الدرس التالي.
لماذا يهم
يستخدم الناس البرمجيات لإنجاز مهامهم: دفع فاتورة أو حجز موعد. وعندما تغيب وظيفة، أو تعطي نتيجة خاطئة، أو تجعل المهمة أصعب مما يلزم، يلاحظ المستخدمون ذلك فوراً، ومع المال أو البيانات الشخصية تُلحق النتيجة الخاطئة ضرراً حتى لو لم يتعطل شيء. فصفحة دفع سريعة وآمنة تعرض إجمالياً خاطئاً تبقى إخفاقاً.
وبالنسبة إلى المختبِر، الاختبار الوظيفي هو جوهر العمل اليومي. كما يبني العادة التي يقوم عليها كل ما سواه: أن تستنتج النتيجة المتوقعة من أساس الاختبار قبل أن تنظر إلى ما يفعله النظام.
نوع اختبار تطبّقه في كل مستوى
يصنّف ISTQB الاختبارات حسب المستوى وحسب النوع. والاختبار الوظيفي نوعٌ من أنواع الاختبار: يسأل ماذا يجب أن يفعل موضوع الاختبار، بينما يسأل الاختبار غير الوظيفي عن مدى جودة سلوكه. ويمكن تطبيق كل نوع في كل مستوى، لذا فلكل مستوى من الدروس السابقة اختباراته الوظيفية، ولا يتغير إلا حجم موضوع الاختبار.
- اختبار المكوّنات (Component Testing): دالة الخصم تُرجع 20.00 لمجموع فرعي قدره 200.00 مع الرمز WELCOME10.
- اختبار التكامل (Integration Testing): خدمة السلة ترسل إلى خدمة الدفع الإجمالي بعد الخصم، لا الإجمالي الأصلي.
- اختبار النظام (System Testing): عند إتمام الشراء في المتصفح، يضيف تطبيق الرمز سطراً للخصم وإجمالياً جديداً.
- اختبار القبول والاختبار من البداية إلى النهاية (End-to-End): يطبّق العميل الرمز، ويدفع، ويتلقى تأكيداً يُظهر المبلغ بعد الخصم.
الاكتمال والصحة والتناسب
وهذه الأمور الثلاثة هي الخصائص الفرعية للملاءمة الوظيفية (Functional Suitability) في ISO/IEC 25010، التي تعرّفت إليها في درس جودة البرمجيات. وهي تشمل الاحتياجات المعلنة المكتوبة في المتطلبات، والاحتياجات الضمنية التي لم يكتبها أحد. وكل هدف يمنحك سؤالاً مختلفاً تطرحه على الميزة نفسها:
- الاكتمال الوظيفي (Functional Completeness): هل تغطي الوظائف كل المهام المحددة وأهداف المستخدمين؟ فميزة رموز الخصم التي لا تتيح إزالة رمز مطبَّق ناقصة، مهما أحسنت في الباقي.
- الصحة الوظيفية (Functional Correctness): هل تعطي الوظائف نتائج دقيقة؟ تحقّق من الحسابات والبيانات المخزنة وتغيّرات الحالة والرسائل مقابل القاعدة. فخصم 10% على 249.95 ريالاً يجب أن يُقرَّب بالطريقة التي قررها أصحاب العمل، لا بالطريقة التي تقرّب بها الشيفرة مصادفةً.
- التناسب الوظيفي (Functional Appropriateness): هل تساعد الوظائف المستخدمين على إنجاز مهامهم دون خطوات لا داعي لها؟ فإذا كان حقل الرمز في السلة فقط، فعلى العميل الذي بلغ خطوة الدفع أن يرجع ليستخدمه: الوظيفة موجودة وصحيحة لكنها غير متناسبة مع المهمة. أما مدى سهولة أداء المهمة المدعومة فهو قابلية الاستخدام (وتسمّيها ISO/IEC 25010 في إصدار 2023 قابلية التفاعل)، وهي مسألة غير وظيفية.
أساس الاختبار: المتطلبات وقصص المستخدمين
تُصمَّم الاختبارات الوظيفية عادةً بأسلوب الصندوق الأسود: تشتقها من وثائق خارج موضوع الاختبار دون قراءة شيفرته. وبعض الفرق تستخدم «وظيفي» و«صندوق أسود» بمعنى واحد، لكن ISTQB يفرّق بينهما: «وظيفي» يحدد ما الذي يُفحص، و«الصندوق الأسود» يحدد من أين تأتي الاختبارات. فاختبار الوحدة الذي يكتبه المطور لدالة الخصم وظيفي وإن كُتب والشيفرة أمامه.
ومن أمثلة أساس الاختبار الوظيفي:
- المتطلبات والمواصفات وقواعد العمل، مثل «الطلبات بقيمة 300.00 ريال فأكثر توصيلها مجاني».
- قصص المستخدمين ومعايير القبول الخاصة بها، وهي الأساس الرئيسي في فرق Agile.
- حالات الاستخدام (Use Cases)، للمسارات التي فيها بدائل واستثناءات.
- عقود الواجهات البرمجية (API) واللوائح وأدلة المستخدم أو نظام سيُستبدل، متى اتفق الفريق على أنها تنطبق.
جرّبها: المتطلبات ← حالات اختبار جرّبها: مولّد معايير القبول
تشريح الفحص الوظيفي
لكل فحص وظيفي الأجزاء نفسها: الحالة التي يبدأ منها النظام، ومُدخل أو إجراء، والقاعدة من أساس الاختبار، والمُخرج المتوقع الذي تتنبأ به القاعدة. خذ سلة فيها منتجات بقيمة 200.00 ريال ورسوم توصيل 15.00 ريالاً، والمعيار «الرمز WELCOME10 يخصم 10% من المجموع الفرعي للمنتجات، ولا تُخصم رسوم التوصيل». مع المُدخل WELCOME10 تتنبأ القاعدة بخصم 20.00 ريالاً وإجمالي 195.00 ريالاً.
الفحص F1 من المثال التطبيقي
الجزء 1:state items 200.00 SAR + delivery fee 15.00 SAR الجزء 2:input promo code WELCOME10, then Apply الجزء 3:rule AC-1: 10% off the item subtotal; fee not discounted الجزء 4:expected discount 20.00 SAR, total 195.00 SAR الجزء 5:actual discount 20.00 SAR, total 195.00 SAR
- 1الحالةالشرط المسبق: ما في السلة قبل المُدخل.
- 2المُدخلما يُدخله المختبِر أو يفعله.
- 3القاعدة من أساس الاختبارمعيار القبول AC-1 هو ما يحدد النتيجة، والفحص مرتبط به للتتبع.
- 4المُخرج المتوقعمحسوب قبل التنفيذ: 10% من 200.00 تساوي 20.00، و215.00 ناقص 20.00 يساوي 195.00.يُكتب أولاً
- 5المُخرج الفعلييطابق المُخرج المتوقع، فينجح الفحص. أما إجمالي 193.50 فإخفاق: خُصمت رسوم التوصيل أيضاً.نجاح
اكتب المُخرج المتوقع قبل التنفيذ، فبعده يسهل أن تقبل أي شيء تعرضه الشاشة: إجمالي 193.50 ريالاً يبدو معقولاً، لكنه يعني أن رسوم التوصيل خُصمت أيضاً. هذا إخفاق، ويذكر التقرير القاعدة التي خالفها.
وعندما يصمت أساس الاختبار، مثلاً عن كيفية تقريب 24.995، فالصمت نفسه ملاحظة: اسأل مالك المنتج وسجّل الإجابة، أو سجّل الافتراض الذي اختبرت على أساسه.
مثال تطبيقي: فحوص وظيفية لرمز خصم
القصة ومعايير القبول الأربعة أدناه هي أساس الاختبار. يشتق المختبِر فحصاً واحداً على الأقل لكل معيار، ويحسب كل مُخرج متوقع مسبقاً، ثم يطرح الأسئلة الثلاثة على الميزة كلها.
- الصحة: يختبر F1 وF2 الحساب، ويختبر F3 إلى F5 قواعد الرفض. ولا نتيجة متوقعة لـF2 بعد، لأن AC-1 لا يحدد قاعدة للتقريب، فيسأل المختبِر قبل الاختبار.
- الاكتمال: يحتاج F6 إلى وظيفة إزالة. فإن لم تكن في النسخة، فهذه وظيفة مفقودة، أي عيب وظيفي.
- التناسب: تقول القصة «عند إتمام الشراء»، فيتأكد المختبِر من أن حقل الرمز متاح في خطوة الدفع، لا في السلة فقط.
- ليس في الجدول: سرعة ظهور الخصم، أو إمكانية تخمين الرموز. هذه أسئلة غير وظيفية.
القصة PROMO-31
بصفتي عميلاً، أريد تطبيق رمز خصم عند إتمام الشراء
لكي أدفع السعر بعد الخصم.
AC-1 الرمز WELCOME10 يخصم 10% من المجموع الفرعي للمنتجات. لا تُخصم رسوم التوصيل.
AC-2 الرمز المنتهي الصلاحية أو غير المعروف يُرفض برسالة، ولا يتغير الإجمالي.
AC-3 رمز واحد فقط لكل طلب: الرمز الثاني يُرفض برسالة.
AC-4 يستطيع العميل إزالة الرمز المطبَّق قبل الدفع.
السلة ما لم يُذكر غير ذلك: منتجات 200.00 ريال + توصيل 15.00 ريال = 215.00 ريال
F1 AC-1 تطبيق WELCOME10: الخصم 20.00، الإجمالي 195.00
F2 AC-1 منتجات 249.95 وتطبيق WELCOME10: الخصم 24.995،
يُقرَّب إلى 25.00 أم 24.99؟ اسأل.
F3 AC-2 تطبيق SUMMER24 (منتهي الصلاحية): يُرفض برسالة، الإجمالي 215.00
F4 AC-2 تطبيق WELCOM10 (خطأ إملائي): يُرفض برسالة، الإجمالي 215.00
F5 AC-3 بعد WELCOME10 تطبيق VIP5: يُرفض VIP5 برسالة، الإجمالي 195.00
F6 AC-4 إزالة WELCOME10: يختفي سطر الخصم، الإجمالي 215.00جرّبها: قصة المستخدم ← حالات اختبار جرّبها: حاسبة النسبة المئوية
أخطاء شائعة
- أخذ النتيجة المتوقعة مما يعرضه النظام بدلاً من استنتاجها من أساس الاختبار.
- الاكتفاء بفحص الصحة على المسار السعيد (Happy Path)، أي التدفق المعتاد بمدخلات صالحة، وعدم السؤال أبداً عن وظيفة موعودة غائبة أو عن تناسب الوظيفة مع مهمة المستخدم.
- معاملة الاختبار الوظيفي كأنه مستوى اختبار، أو كأنه اسم آخر لاختبار الصندوق الأسود أو للاختبار اليدوي.
- كتابة نتائج متوقعة غامضة مثل «طُبّق الخصم بشكل صحيح» بدلاً من المبلغ أو الرسالة أو الحالة بالضبط.
- التخمين عندما يصمت المتطلب بدلاً من السؤال وتسجيل الإجابة.
من منظور ضمان الجودة
يبدأ الاختبار الوظيفي في جلسات تحسين القصص (Refinement) قبل كتابة أي شيفرة: اسأل عن كل معيار ما الحالة والمدخلات والمخرجات التي يقتضيها، وأين يصمت. فسؤال التقريب يكلّف دقيقة هناك، ويكلّف إصلاح عيب بعد الإصدار. واتفق مع المطورين على من يفحص ماذا: اختبارات الوحدة تغطي عادةً الدوال المفردة، بينما تركز أنت على مستويي النظام والقبول وعلى نقاط الاتصال بين المكوّنات.
سجّل كل فحص مع المعيار الذي يرتبط به للتتبع، وحالته ومُدخله ومُخرجه المتوقع بالضبط. عندها يصبح الفحص الفاشل تقرير خطأ دقيقاً: «AC-1: منتجات 200.00 + توصيل 15.00 مع WELCOME10 يجب أن يكون الإجمالي 195.00؛ الفعلي 193.50 لأن رسوم التوصيل خُصمت». ويتيح لك التتبع أيضاً عرض النتائج لكل متطلب، لا مجرد عدد الاختبارات الناجحة.
تمرين عملي
اكتب فحوصاً وظيفية لإلغاء موعد
القصة ومعايير القبول أدناه لتطبيق عيادة. اكتب ستة فحوص وظيفية على الأقل بصيغة: الحالة، والمُدخل، والقاعدة، والمُخرج المتوقع، مع ربط كل فحص بمعيار.
صنّف كل فحص: اكتمال أو صحة أو تناسب، واكتب ما تتركه القصة مفتوحاً أسئلةً لمالك المنتج.
القصة APPT-7
بصفتي مريضاً، أريد إلغاء موعد من التطبيق
لكي يُتاح الموعد لمريض آخر.
AC-1 يستطيع المريض إلغاء موعد قادم من «مواعيدي».
AC-2 الإلغاء قبل بدء الموعد بـ 24 ساعة أو أكثر مجاني. والإلغاء بعد ذلك
عليه رسوم 50.00 ريالاً تظهر قبل أن يؤكد المريض.
AC-3 بعد الإلغاء يمكن حجز الموعد من جديد، ويتلقى المريض
رسالة SMS تؤكد الإلغاء.
AC-4 لا يمكن إلغاء المواعيد السابقة.- أعد صياغة كل معيار قاعدةً بكلماتك.
- اكتب فحصاً واحداً على الأقل لكل قاعدة، مع حساب المُخرج المتوقع الآن.
- صنّف كل فحص حسب الهدف.
- اكتب الأسئلة المفتوحة.
إظهار الإجابة النموذجية
الصحة: F1 (AC-2) موعد بعد 3 أيام، إلغاء ← لا رسوم، والحالة «ملغى». F2 (AC-2) قبل الموعد بـ24 ساعة بالضبط ← مجاني، لأن القاعدة تقول «24 ساعة أو أكثر». F3 (AC-2) قبل الموعد بـ23 ساعة ← تظهر رسوم 50.00 ريالاً قبل التأكيد. F4 (AC-2) يرى المريض الرسوم ويتراجع ← يبقى الموعد كما هو دون رسوم.
الصحة عبر المكوّنات: F5 (AC-3) بعد الإلغاء يستطيع مريض آخر حجز ذلك الموعد. F6 (AC-3) يتلقى المريض رسالة SMS تذكر الموعد الملغى. فإن لم تُرسَل أي رسالة أصلاً فهذه وظيفة موعودة غائبة (اكتمال)، أما رسالة تذكر موعداً خاطئاً فمشكلة في الصحة.
الاكتمال: F7 (AC-1) تعرض «مواعيدي» إجراء الإلغاء لكل موعد قادم. الصحة: F8 (AC-4) لا يظهر إجراء الإلغاء للموعد السابق. التناسب: F9 (AC-1) يستطيع المريض الإلغاء بخطوات قليلة دون الاتصال بالعيادة.
أسئلة مفتوحة: أي منطقة زمنية تحدد الساعات الأربع والعشرين؟ متى تُحصَّل الرسوم؟ هل يُعدّ الموعد الذي بدأ ولم ينتهِ موعداً سابقاً؟ هل يبقى الإلغاء سارياً إذا تعذّر تسليم رسالة SMS؟ هل يستطيع المريض التراجع عنه؟
أسئلة شائعة
هل الاختبار الوظيفي هو نفسه اختبار الصندوق الأسود؟
لا. الاختبار الوظيفي يتعلق بما يُفحص: الوظائف ونتائجها. واختبار الصندوق الأسود يتعلق بمصدر الاختبارات: وثائق خارج موضوع الاختبار. ومعظم الاختبارات الوظيفية تُصمَّم بأسلوب الصندوق الأسود، لكن اختبار الوحدة الذي يكتبه المطور لدالة ما وظيفي أيضاً، وإن كُتب والشيفرة أمامه.
هل الاختبار الوظيفي يدوي أم آلي؟
كلاهما. المصطلح يصف ما يُختبر لا طريقة تنفيذ الاختبار. والفحوص المستقرة التي تتكرر مع كل تغيير مرشحة جيدة للأتمتة، أما الميزات الجديدة فكثيراً ما تُختبر يدوياً أولاً. وتشرح دروس لاحقة ما الذي يُؤتمت.
ما الفرق بين الاختبار الوظيفي وغير الوظيفي؟
الاختبار الوظيفي يتحقق مما يفعله النظام، مثل: هل تحسب صفحة الدفع الإجمالي الصحيح؟ والاختبار غير الوظيفي يتحقق من مدى جودة ذلك: السرعة والأمان وسهولة الاستخدام والأجهزة التي يعمل عليها. ومعظم الميزات تحتاج إلى الاثنين، والدرس التالي يتناول الجانب غير الوظيفي.
ماذا أفعل إذا لم تكن هناك متطلبات مكتوبة؟
استخدم كل ما ينص على السلوك المتوقع: النظام الذي سيُستبدل، أو دليل المستخدم، أو قواعد المجال، أو اللوائح، أو حديثاً مع مالك المنتج. اكتب القاعدة التي تختبر على أساسها واحصل على تأكيدها، حتى لا تستند نتائجك المتوقعة إلى تخمينك وحدك.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelنموذج جودة المنتج: الملاءمة الوظيفية وكفاءة الأداء والتوافق وقابلية التفاعل والموثوقية والأمان وقابلية الصيانة والمرونة.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
تدرّب بأدوات متقن
حوّل قصة مستخدم (As a / I want / So that) إلى حالات اختبار منظّمة باستخدام القوالب والقواعد الاستدلالية.
حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.
ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.
ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.
حساب النسب المئوية ونسبة التغيّر والزيادة/النقصان وكم تمثّل X من Y بالنسبة المئوية.
للتعمّق أكثر
- كيف تكتب حالات الاختبار (Test Cases)من قصة المستخدم إلى حالات الاختبار
- ضمان جودة المنتج من البداية إلى النهايةأنواع الاختبار: الوظيفي والانحدار والاستكشافي وغير الوظيفي
- كيف تراجع المتطلباتكيف تراجع المتطلبات وقصص المستخدم: قائمة تحقق من 8 معايير، والكلمات المنذرة، ومثال عملي بتعليقات مراجعة واقعية، ودور أدوات الذكاء الاصطناعي.
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.