طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 245 · ضمان جودة تطبيقات الويب
الدرس 2 · الوحدة 1: مفاهيم ضمان جودة تطبيقات الويب

أنواع الاختبار ومستوياته

من الدالة الواحدة إلى التطبيق كاملًا: بأيّ مستوى نختبر، ولماذا؟ ⏱ نحو 35 دقيقة.

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

١هرم الاختبار: من الوحدة إلى القبول

لا نختبر كل شيء بالطريقة نفسها. الاختبار طبقاتٌ، كلٌّ منها يرى التطبيق من مستوى:

المستوىيختبرمثال في متجر ويب
اختبار الوحدة Unitدالة أو وحدة صغيرة بمعزلدالة حساب الخصم
اختبار التكامل Integrationتعاون وحدتين أو أكثرالطلب يُحفظ في قاعدة البيانات
اختبار النظام Systemالتطبيق كاملًارحلة شراء من البداية للنهاية
اختبار القبول Acceptanceهل يلبّي حاجة العميل؟يوافق العميل أن الميزة تمّت

القاعدة: اختبارات الوحدة كثيرة وسريعة (القاعدة العريضة للهرم)، واختبارات النظام قليلة وبطيئة (القمّة). كلما نزلت، صار العثور على سبب العطل أسهل.

٢اختبار وظيفي أم غير وظيفي؟

النوعيسألأمثلة
وظيفي Functionalهل يفعل ما يجب؟الدخول، الحساب، الحفظ
غير وظيفي Non-functionalكيف يفعله؟السرعة، الأمان، التحمّل، سهولة الاستخدام

الاختبار الوظيفي يتحقّق من الصواب، وغير الوظيفي من الجودة: صفحةٌ تعطي النتيجة الصحيحة لكنها تأخذ عشر ثوانٍ فشلت غير وظيفيًّا. سنلمس الأداء في الدرس 16 والأمان في 21.

٣الصندوق الأسود والأبيض

زاويةٌ أخرى: هل نرى الكود الداخليّ أم لا؟

المنهجالمُختبِر يرىيركّز على
الصندوق الأسودالمدخلات والمخرجات فقطالسلوك الظاهر
الصندوق الأبيضالكود الداخليّالمسارات والفروع كلها
main.py
# اختبار صندوق أسود: لا يهمّنا كيف تعمل، بل ماذا تُخرجdef is_valid_age(age):    return 0 <= age <= 120 cases = [(25, True), (-1, False), (130, False), (0, True), (120, True)]passed = 0for age, expected in cases:    if is_valid_age(age) == expected:        passed += 1print("نجح", passed, "من", len(cases), "حالة")
Shell×
>>> %Run main.py
نجح 5 من 5 حالة
>>>

اختبرنا الدالة من الخارج: مدخلاتٌ متنوّعة ونتائجها المتوقَّعة، دون النظر إلى كودها. هذا منهج الصندوق الأسود، وهو الأشيع.

توقّع وتحقّق

اختبار دالة واحدة بمعزل هو:

السرعة والأمان من الاختبار:

الاختبار الذي لا يرى الكود الداخليّ:

قاعدة هرم الاختبار (الأكثر):

الخلاصة

تحدٍّ برمجي: صندوق أسود

تمهيدي

اختبر دالة is_even بمنهج الصندوق الأسود على حالاتٍ معطاة، واطبع عدد الحالات الناجحة.

المطلوب:
  • مرّ على الحالات وقارن ناتج الدالة بالمتوقَّع.
  • اطبع عدد الحالات التي نجحت.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
def is_even(n):    return n % 2 == 0cases = [(4, True), (7, False), (0, True), (-2, True), (3, False)]# احسب واطبع عدد الحالات الناجحة
المطلوب×
5
💡 تلميح 1
مرّ على cases بـ for n, expected in cases.
💡 تلميح 2
زد passed حين is_even(n) == expected.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
def is_even(n):    return n % 2 == 0cases = [(4, True), (7, False), (0, True), (-2, True), (3, False)]passed = 0for n, expected in cases:    if is_even(n) == expected:        passed += 1print(passed)
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس