الاختبار الوظيفي مقابل غير الوظيفي - شرح أكثر

مقال مجاني 7 دقيقة

مقدمة

مرحبا ويعطيكم العافية وأهلا وسهلا فيكم في درس جديد من دروس الاختبار!

اليوم سنتحدث عن واحد من أهم المواضيع في عالم الاختبار: الفرق بين الاختبار الوظيفي والاختبار غير الوظيفي.

كثير ناس بتسمع هالمصطلحات وبتتلخبط فيهم، لكن الموضوع أبسط مما تتخيل! خلينا نفهمه مع بعض بطريقة سهلة وعملية.


الأهداف التعليمية

بنهاية هذا الدرس، راح تكون قادراً على:

  • تفهم الفرق الأساسي بين الاختبار الوظيفي وغير الوظيفي
  • تعرف أمثلة واقعية على كل نوع من التطبيقات التي تستخدمها يومياً
  • تحدد متى تستخدم كل نوع من الاختبار
  • تدرك أهمية الاثنين مع بعض لضمان جودة النظام

الفرق الأساسي - خلينا نبدأ بمثال بسيط

تخيل معي إنك تريد أن تشتري سيارة جديدة. ما الأسئلة التي تسألها؟

أسئلة وظيفية (Functional):

  • السيارة تمشي؟ ✅
  • الفرامل تعمل؟ ✅
  • المكيف يعمل؟ ✅
  • الراديو يعمل؟ ✅

أسئلة غير وظيفية (Non-Functional):

  • السيارة تمشي بسرعة؟ 🏎️
  • الفرامل بتستجيب بسرعة؟ ⚡
  • السيارة مريحة؟ 🛋️
  • السيارة آمنة؟ 🔒
  • السيارة تستهلك نزين كثير؟ ⛽

Functional Testing ← يختبر شو النظام يفعل (What it does)

Non-Functional Testing ← يختبر كيف النظام يفعل (How it does it)


الاختبار الوظيفي - Functional Testing

التعريف

الاختبار الوظيفي هو اختبار إنه النظام يفعل اللي المفروض أن يعمله.

منختبر الـ Features والـ Business Logic - يعني الوظائف الذي المستخدم بيتوقعها من النظام.

أمثلة واقعية

خلينا نشوف أمثلة من تطبيقات تستخدمها كل يوم:

Facebook:

  • أستطيع أسجل دخول؟ ✅
  • أستطيع أنشر بوست؟ ✅
  • أستطيع أضيف صديق؟ ✅
  • أستطيع أعمل Like؟ ✅

Amazon:

  • أستطيع أضيف منتج للسلة؟ ✅
  • أستطيع أشتري؟ ✅
  • أستطيع أدفع بالفيزا؟ ✅
  • أستطيع أتتبع الطلب؟ ✅

WhatsApp:

  • أستطيع أبعث رسالة؟ ✅
  • أستطيع أبعث صورة؟ ✅
  • أستطيع أعمل مكالمة صوتية؟ ✅
  • أستطيع أعمل Group؟ ✅

Netflix:

  • أستطيع أشغّل فيديو؟ ✅
  • أستطيع أوقف الفيديو؟ ✅
  • أستطيع أبحث عن فيلم؟ ✅
  • أستطيع أضيف لقائمة المفضلة؟ ✅
نصيحة
لاحظ إنه كل الأسئلة هذه تبدأ بـ "أستطيع أ...؟" - يعني نسأل: هل الوظيفة موجودة وبتشتغل؟

أنواع الاختبار الوظيفي

الاختبار الوظيفي إله أنواع كثيرة، حسب المستوى الذي نختبر فيه:

  1. Unit Testing ← اختبار الوحدات الصغيرة (Functions, Methods)
  2. Integration Testing ← اختبار التكامل بين الوحدات
  3. System Testing ← اختبار النظام ككل
  4. User Acceptance Testing (UAT) ← اختبار قبول المستخدم

الاختبار غير الوظيفي - Non-Functional Testing

التعريف

الاختبار غير الوظيفي هو اختبار كيف النظام يعمل - يعني الجودة، الأداء، الأمان، الخ.

مش عن "يعمل أو لأ" ← بل عن "يعمل كويس أو لأ"

الاختبار غير الوظيفي يركز على الخصائص النوعية (Quality Attributes) للنظام مش على الوظائف نفسها.

أنواع الاختبار غير الوظيفي

1. Performance Testing - اختبار الأداء

السؤال: النظام سريع؟

مثال - Instagram:

  • الصفحة الرئيسية بتحمّل في كم ثانية؟ ⏱️
  • الصورة بتنرفع في كم ثانية؟ 📤
  • التطبيق يستجيب للنقرات بسرعة؟ 👆

2. Load Testing - اختبار الحمل

السؤال: النظام بيستحمل ضغط؟

مثال - Amazon:

  • الموقع يعمل عندما يكون في 10,000 مستخدم بنفس الوقت؟ 👥
  • الموقع يتحمل Black Friday (مليون مستخدم)؟ 🛍️

3. Security Testing - اختبار الأمان

السؤال: النظام آمن؟

مثال - WhatsApp:

  • الرسائل مشفرة؟ 🔐
  • حد ثاني لا يستطيع يقرأ رسائلي؟ 🚫
  • البيانات محمية من الاختراق؟ 🛡️

4. Usability Testing - اختبار سهولة الاستخدام

السؤال: النظام سهل الاستخدام؟

مثال - Facebook:

  • المستخدم الجديد يستطيع يفهم كيف يستخدم التطبيق بسهولة؟ 🤔
  • الأزرار واضحة ومفهومة؟ 🔘
  • المستخدم يحتاج كم خطوة حتى يعمل اللي يريد أن ياه؟ 👣

5. Compatibility Testing - اختبار التوافق

السؤال: النظام يعمل على كل الأجهزة/المتصفحات؟

مثال - Netflix:

  • التطبيق يعمل على iPhone و Android؟ 📱
  • الموقع يعمل على Chrome و Safari و Firefox؟ 🌐
  • يعمل على Smart TV؟ 📺

6. Reliability Testing - اختبار الموثوقية

السؤال: النظام مستقر؟

مثال - Gmail:

  • التطبيق يعلق؟ 🔄
  • الإيميلات تضيع؟ ❌
  • النظام يعمل 24/7 بدون مشاكل؟ ⏰

أمثلة واقعية للتوضيح

خلينا نشوف أمثلة مقارنة بين الاثنين:

مثال 1: Amazon - إضافة منتج للسلة

Functional Testing:

  • أستطيع أضيف منتج للسلة؟ ✅
  • السلة تحفظ المنتجات؟ ✅
  • أستطيع أشيل منتج من السلة؟ ✅

Non-Functional Testing:

  • الصفحة بتحمّل بأقل من 3 ثواني؟ ⏱️
  • الموقع يعمل عندما يكون في 100,000 مستخدم؟ 👥
  • زر "Add to Cart" واضح وسهل لقيه؟ 🔘
  • الموقع يعمل على كل المتصفحات؟ 🌐

مثال 2: Netflix - تشغيل فيديو

Functional Testing:

  • أستطيع أشغّل فيديو؟ ✅
  • أستطيع أوقف الفيديو؟ ✅
  • أستطيع أقدم أو أرجع بالفيديو؟ ✅

Non-Functional Testing:

  • الفيديو يعمل بدون تقطيع؟ 📺
  • جودة الفيديو عالية (HD, 4K)؟ 🎬
  • الفيديو يعمل على إنترنت بطيء؟ 🐌
  • التطبيق يستهلك بطارية كثير؟ 🔋

مثال 3: WhatsApp - إرسال رسالة

Functional Testing:

  • أستطيع أبعث رسالة؟ ✅
  • الرسالة توصل للطرف الثاني؟ ✅
  • أستطيع أشوف إنه الرسالة اتقرت (✓✓)؟ ✅

Non-Functional Testing:

  • الرسالة توصل بثانية؟ ⚡
  • الرسائل مشفرة وآمنة؟ 🔐
  • التطبيق يعمل على كل الهواتف؟ 📱
  • التطبيق يستهلك بطارية كثير؟ 🔋

مثال 4: Instagram - رفع صورة

Functional Testing:

  • أستطيع أرفع صورة؟ ✅
  • الصورة تظهر في البروفايل؟ ✅
  • أستطيع أحذف الصورة؟ ✅

Non-Functional Testing:

  • الصورة بتنرفع بسرعة؟ 📤
  • التطبيق يعمل على iPhone 6 القديم؟ 📱
  • الصورة بتظل بجودة عالية؟ 📸
  • التطبيق سهل الاستخدام؟ 👆

جدول مقارنة شامل

الجانب Functional Testing Non-Functional Testing
السؤال الأساسي ما النظام يفعل؟ كيف النظام يفعل؟
التركيز الوظائف (Features) الجودة (Quality)
مثال بسيط Login يعمل؟ Login سريع؟
مثال من Amazon أستطيع أشتري؟ الموقع سريع؟
مثال من WhatsApp أستطيع أبعث رسالة؟ الرسالة توصل بسرعة؟
الهدف تأكد إنه النظام يعمل تأكد إنه النظام يعمل كويس
متى نختبره؟ من البداية، مع كل Feature عادةً بعد أن الـ Functional يكون مستقر
أدوات Selenium, Playwright, Cypress JMeter, LoadRunner, Burp Suite

ليش الاثنين مهمين؟

تحذير
Functional بدون Non-Functional ← سيارة تمشي لكن بطيئة، مش مريحة، ومش آمنة! 🚗💨 Non-Functional بدون Functional ← سيارة سريعة ومريحة لكن لا تشتغل! 🏎️❌

لازم الاثنين مع بعض حتى نضمن جودة النظام!

قصة واقعية

تخيل إنك فتحت تطبيق Amazon حتى تشتري هدية لصديقك:

  • لو الـ Functional مش شغال ← ما راح تقدر تضيف المنتج للسلة أصلاً! ❌
  • لو الـ Non-Functional مش شغال ← راح تقدر تضيف المنتج لكن راح تستنى 5 دقايق لحد ما الصفحة تحمّل! 🐌

النتيجة: راح تزهق وتروح تشتري من مكان ثاني! 🏃‍♂️

شركة Amazon تخسر ملايين الدولارات لو الموقع بطيء بثانية واحدة! 💰


نصائح عملية

1. لا تنسى Non-Functional Testing! ⚠️

كثير فرق تركز على Functional وتنسى Non-Functional، وبعد ذلك بتندم عندما:

  • الموقع يكون بطيء 🐌
  • النظام يعلق تحت الضغط 💥
  • البيانات تنسرق 🔓
  • المستخدمين يزهقوا من التطبيق 😤

2. اختبر على أجهزة حقيقية 📱

لا تختبر لكن على جهازك الجديد! اختبر على:

  • هواتف قديمة (iPhone 6, Samsung S5)
  • إنترنت بطيء (3G)
  • متصفحات مختلفة (Chrome, Safari, Firefox)

3. فكر كمستخدم 🧑‍💻

اسأل نفسك:

  • لو أنا المستخدم، راح يعجبني النظام؟
  • راح أستخدمه كل يوم؟
  • راح أنصح فيه أصدقائي؟

إذا الجواب لأ، معناته في مشكلة في Non-Functional Testing!


تذكّر: النظام الناجح = Functional (يعمل) + Non-Functional (يعمل كويس) ✨

مثل السيارة: لازم تمشي (Functional) ولازم تمشي بسرعة ومريحة وآمنة (Non-Functional)! 🚗


الدرس الجاي: راح نحكي عن Performance Testing بالتفصيل - كيف نقيس السرعة والأداء وكيف نحسنهم! ⚡

يعطيكم العافية! 💙