🎓 ملخص نهائي هندسة البرمجيات

التركيز على الامتحانات السابقة | نصائح وحيل | مرجع سريع

📋 نماذج عمليات البرمجيات (تظهر كثيراً في الامتحانات!)

تظهر دائماً في أسئلة الاختيار المتعدد ومطابقة السيناريوهات!

دليل سريع لاختيار النموذج

النموذج متى تستخدمه المميزات الرئيسية كلمات الامتحان
شلالي (Waterfall) المتطلبات واضحة وثابتة تسلسلي، لا عودة للخلف "مفهومة جيداً"، "أمان حرج"، "متطلبات ثابتة"
تزايدي (Incremental) الحاجة لتسليم سريع للنواة تسليم على دفعات "بسرعة"، "المنتج الأساسي"، "منافسة تجارية"
تطوري/حلزوني (Evolutionary/Spiral) مخاطر عالية، متطلبات متغيرة إدارة المخاطر، تكرارية "إدارة المخاطر"، "ينمو تدريجياً"
النماذج الأولية (Prototyping) متطلبات غير واضحة، تركيز على واجهة المستخدم بناء نسخة يمكن التخلص منها "متطلبات غير واضحة"، "واجهة المستخدم"، "ملاحظات أصحاب المصلحة"
العملية الموحدة (Unified Process) أنظمة المؤسسات الكبيرة مقادة بحالات الاستخدام، مركزية على الهندسة المعمارية "مقادة بحالات الاستخدام"، "مركزية على الهندسة المعمارية"، "تكرارية وتزايدية"
مثال مطابقة سيناريو (من النهائي 2022):
س: "حاجة ملحة لتقديم وظائف محددة للمستخدمين بسرعة ثم تحسينها في الإصدارات اللاحقة"

الخطوة 1: تحديد الكلمات المفتاحية → "بسرعة"، "وظائف محددة"، "تحسين لاحقاً"
الخطوة 2: مطابقة مع خصائص النماذج:
  • شلالي؟ لا - لا يسمح بالتحسين
  • تزايدي؟ نعم - يسلم النواة بسرعة، يضيف ميزات لاحقاً
  • حلزوني؟ لا - يركز على المخاطر، ليس السرعة
الخطوة 3: الإجابة = النموذج التزايدي
مثال اختيار متعدد:
س: "نموذج تكرارى يركز على إدارة المخاطر ويطور إصدارات أكثر اكتمالاً تدريجياً"

الخطوة 1: عبارات مفتاحية → "تكرارى"، "إدارة المخاطر"، "أكثر اكتمالاً تدريجياً"
الخطوة 2: استبعاد الخيارات:
  أ) شلالي - ليس تكرارى ❌
  ب) تطوري/حلزوني - تكرارى + مخاطر ✓
  ج) تزايدي - تكرارى لكن لا يركز على المخاطر ❌
الخطوة 3: الإجابة = ب) نموذج العملية التطورية
سيناريوهات امتحان حقيقية - طابق النموذج:

السيناريو 1: "تم تطوير النظام في عدة مواقع"
الحل: شلالي (مراحل واضحة للفرق الموزعة)

السيناريو 2: "المتطلبات ضخمة وغير واضحة، تحتاج مشاركة المستخدم"
الحل: النماذج الأولية (ملاحظات المستخدم تحسن المتطلبات غير الواضحة)

السيناريو 3: "تاريخ تسليم الأجهزة غير مؤكد"
الحل: حلزوني (يتعامل مع عدم اليقين من خلال إدارة المخاطر)

السيناريو 4: "مقاد بحالات الاستخدام، مركزية على الهندسة المعمارية، تكرارية"
الحل: العملية الموحدة (هذه هي خصائصها المميزة)
شجرة قرار سريعة:
1. المتطلبات واضحة؟ → نعم: شلالي | لا: تابع
2. تحتاج تسليم سريع؟ → نعم: تزايدي | لا: تابع
3. مخاطر عالية/عدم يقين؟ → نعم: حلزوني | لا: تابع
4. واجهة المستخدم/ملاحظات المستخدم حرجة؟ → نعم: النماذج الأولية

🏃 الأجايل، Scrum و XP (أسئلة مضمونة!)

مصطلحات Scrum - يجب معرفتها!

المصطلح التعريف فخ الامتحان
سبرنت (Sprint) تكرار ثابت من 2-4 أسابيع لا يتم تمديده أبداً للعمل غير المكتمل
مالك المنتج (Product Owner) يرتب أولويات المهام، يمثل العميل ليس مدير مشروع!
ماستر Scrum ميسر، يزيل العقبات لا يدير الفريق مباشرة
مهام السبرنت (Sprint Backlog) مهام السبرنت الحالي للمطورين لإدارة أنفسهم
مهام المنتج (Product Backlog) جميع الميزات/المتطلبات المعلقة يرتب أولوياتها مالك المنتج
اجتماع Scrum اليومي اجتماع وقوف 15 دقيقة 3 أسئلة: بالأمس، اليوم، العقبات
حجم فريق التطوير: 7 أشخاص (حتى 10 كحد أقصى) - سؤال شائع في الاختيار المتعدد!

ممارسات XP

  • البرمجة الثنائية (Pair Programming) - مطوران، كمبيوتر واحد
  • التطوير بقيادة الاختبارات (Test-First Development) - كتابة الاختبارات قبل الكود
  • التكامل المستمر (Continuous Integration) - تكرار الكود بشكل متكرر
  • إصدارات صغيرة (Small Releases) - تسليم متكرر
  • تصميم بسيط (Simple Design) - تجنب التعقيد
  • قصص المستخدم (User Stories) - المتطلبات كسيناريوهات (صحيح في XP!)
مثال اختيار متعدد لـ Scrum (من النهائي 2022):
س: "ما هو الهدف الرئيسي من مهام السبرنت (Sprint Backlog)؟"
أ) للمطورين لإدارة أنفسهم أثناء السبرنت
ب) لماستر Scrum لإدارة التقدم
ج) للمطورين لإدارة الساعات المستغرقة
د) لمالك المنتج لفهم الالتزامات

الخطوة 1: تذكر ملكية مهام السبرنت → تعود لفريق التطوير
الخطوة 2: استبعاد الأدوار الخطأ:
  • ماستر Scrum لا يديرها (ب) ❌
  • مالك المنتج يدير مهام المنتج، ليس مهام السبرنت (د) ❌
الخطوة 3: مقارنة الخيارات المتبقية:
  • تتبع الساعات هو تفصيل ثانوي (ج) ❌
  • الإدارة الذاتية هي مبدأ أساسي في Scrum (أ) ✓
الإجابة: أ) للمطورين لإدارة أنفسهم
مثال صواب/خطأ:
س: "متطلبات المستخدم تُعبر عنها كسيناريوهات في البرمجة المتطرفة (XP)"

الخطوة 1: تذكر مصطلحات XP → قصص المستخدم = سيناريوهات
الخطوة 2: تأكيد: XP يستخدم "قصص المستخدم" وهي متطلبات قائمة على السيناريو
الخطوة 3: الإجابة = صواب

فخ شائع: لا تخلط مع حالات الاستخدام (هذا لـ RUP/العملية الموحدة)
مشكلة حسابية في Scrum:
س: "فريق لديه سرعة 40 نقطة. السبرنت 3 أسابيع. مهام المنتج 200 نقطة. كم عدد السبرنتس المطلوبة؟"

الخطوة 1: تحديد البيانات المعطاة
  • السرعة = 40 نقطة/سبرنت
  • العمل الكلي = 200 نقطة
الخطوة 2: حساب السبرنتس
  • السبرنتس المطلوبة = العمل الكلي ÷ السرعة
  • السبرنتس = 200 ÷ 40 = 5 سبرنتس
الخطوة 3: حساب الوقت (إذا طُلب)
  • الوقت = 5 سبرنتس × 3 أسابيع = 15 أسبوع
الإجابة: 5 سبرنتس (15 أسبوع إجمالاً)
مثال تحديد دور:
س: "من المسؤول عن تعظيم قيمة المنتج؟"

الخطوة 1: مراجعة مسؤولية كل دور:
  • ماستر Scrum → ميسر العملية ❌
  • فريق التطوير → يخلق المنتج ❌
  • مالك المنتج → تعظيم القيمة ✓
الإجابة: مالك المنتج

تذكر:
• مالك المنتج = ماذا نبني (القيمة)
• فريق التطوير = كيف نبني (التقنية)
• ماستر Scrum = حارس العملية

📊 مخططات UML (أسئلة الرسم والتحليل)

أنواع المخططات ومتى تستخدمها

مخططات هيكلية

  • مخطط الفئات (Class Diagram) - يظهر الفئات والعلاقات
  • المكونات: اسم الفئة، الخصائص، العمليات
  • العلاقات: ارتباط، اعتماد، تعميم

مخططات سلوكية

  • مخطط حالات الاستخدام (Use Case) - تفاعلات المستخدم
  • مخطط التسلسل (Sequence) - تدفق الرسائل عبر الزمن
  • مخطط النشاط (Activity) - سير العمل/العملية
  • مخطط الحالة (State) - تغيرات حالة الكائن

علاقات مخطط الفئات

العلاقة الرمز المعنى مثال
ارتباط (Association) —— علاقة عامة طالب — مقرر
تجميع (Aggregation) ◇—— يملك-أ (يمكن أن يوجد بشكل منفصل) فريق ◇—— موظف
تكوين (Composition) ◆—— جزء-من (لا يمكن أن يوجد بشكل منفصل) منزل ◆—— غرفة
اعتماد (Dependency) - - -> يستخدم مؤقتاً فئة - - -> معامل
تعميم (Generalization) ——▷ وراثة (هو-أ) كلب ——▷ حيوان
تحقيق (Realization) - - -▷ تنفيذ واجهة فئة - - -▷ واجهة

معدلات الرؤية في مخطط الفئات

الرمز الرؤية مستوى الوصول
+ عام (Public) يمكن الوصول من أي مكان
- خاص (Private) فقط داخل الفئة
# محمي (Protected) داخل الفئة والفئات الفرعية
~ حزمة (Package) داخل نفس الحزمة

رموز التعددية

الرمز المعنى مثال
1 واحد بالضبط شخص لديه جواز سفر واحد
0..1 صفر أو واحد شخص لديه 0..1 زوج
* صفر أو أكثر عميل يقدم * طلبات
1..* واحد أو أكثر مقرر به 1..* طلاب
n n بالضبط فريق به 11 لاعباً
m..n بين m و n سيارة بها 2..5 أبواب
تذكر: التجميع = معين فارغ (يمكن أن يكون فارغ/منفصل)، التكوين = معين ممتلئ (يجب أن يكون معاً)

مكونات مخطط التسلسل

  • ممثل (Actor) - شكل إنسان أو مربع
  • خط الحياة (Lifeline) - خط عمقي منقط
  • تفعيل (Activation) - مستطيل على خط الحياة (يظهر نشطاً)
  • رسائل (Messages) - أسهم أفقية بين خطوط الحياة
  • كتل بديل/حلقة (Alt/Loop blocks) - للشروط والتكرارات
مخطط حالات الاستخدام - نظام الصراف الآلي (شائع في الامتحان):

⭐ الخطوة 1: تحديد الممثلين
  • عميل (أساسي)
  • نظام البنك (ثانوي)
  • مسؤول (صيانة)

⭐ الخطوة 2: تحديد حالات الاستخدام
  • تسجيل الدخول/المصادقة
  • سحب نقدي
  • التحقق من الرصيد
  • تحويل أموال
  • طباعة إيصال

⭐ الخطوة 3: تحديد العلاقات
  • سحب نقدي «يشمل» المصادقة
  • التحقق من الرصيد «يشمل» المصادقة
  • طباعة إيصال «يمتد» من جميع المعاملات

⭐ الخطوة 4: رسم المخطط
    [عميل]──────(تسجيل دخول)
         │         ↗«يشمل»
         ├────(سحب نقدي)
         │         ↘«يمتد»
         ├────(التحقق من الرصيد)──────(طباعة إيصال)
         │         ↗«يمتد»
         └────(تحويل أموال)
                    │
              [نظام البنك]
                    
مخطط الفئات - نظام المكتبة:

⭐ الخطوة 1: تحديد الفئات
  • كتاب، عضو، أمين مكتبة، إعارة

⭐ الخطوة 2: إضافة الخصائص
    كتاب               عضو
    ---------          ---------
    -الرقم التسلسلي: نص      -معرف العضو: عدد صحيح
    -العنوان: نص          -الاسم: نص
    -المؤلف: نص          -البريد الإلكتروني: نص
    -متوفر: منطقي        -الحد الأقصى للكتب: عدد صحيح
                    
⭐ الخطوة 3: إضافة العمليات
    كتاب               عضو
    ---------          ---------
    +استعارة()          +استعارة كتاب()
    +إرجاع()            +إرجاع كتاب()
    +حجز()              +دفع غرامة()
                    
⭐ الخطوة 4: إضافة العلاقات
  • عضو ──── إعارة (1 إلى 0..*)
  • كتاب ──── إعارة (1 إلى 0..*)
  • أمين مكتبة ──▷ عضو (وراثة)
  • مكتبة ◆──── كتاب (تكوين)
مخطط التسلسل - عملية تسجيل الدخول:

⭐ الخطوة 1: تحديد الكائنات/الممثلين
  • مستخدم، واجهة تسجيل دخول، متحكم المصادقة، قاعدة البيانات

⭐ الخطوة 2: تحديد الرسائل بالترتيب
  1. مستخدم → واجهة تسجيل دخول: إدخال بيانات الاعتماد()
  2. واجهة تسجيل دخول → متحكم المصادقة: التحقق من تسجيل الدخول(مستخدم، كلمة مرور)
  3. متحكم المصادقة → قاعدة البيانات: التحقق من المستخدم(مستخدم، كلمة مرور)
  4. قاعدة البيانات → متحكم المصادقة: مستخدم صالح
  5. متحكم المصادقة → واجهة تسجيل دخول: نجاح تسجيل الدخول
  6. واجهة تسجيل دخول → مستخدم: عرض الصفحة الرئيسية

⭐ الخطوة 3: الرسم بالرموز الصحيحة
    مستخدم        واجهة تسجيل دخول     متحكم المصادقة    قاعدة البيانات
     |             |              |              |
     |--إدخال----->|              |              |
     |             |--التحقق----->|              |
     |             |              |--التحقق----->|
     |             |              |<---صالح------|
     |             |<--نجاح-------|              |
     |<--عرض-------|              |              |
                    
مخطط النشاط - معالجة الطلب:

⭐ الخطوة 1: تحديد الأنشطة
  • استلام الطلب، التحقق من المخزون، معالجة الدفع
  • شحن الطلب، إرسال تأكيد

⭐ الخطوة 2: تحديد نقاط القرار
  • هل المخزون متاح؟ (نعم/لا)
  • هل الدفع ناجح؟ (نعم/لا)

⭐ الخطوة 3: تحديد الأنشطة المتوازية
  • شحن الطلب وإرسال بريد إلكتروني (متزامن)

⭐ الخطوة 4: الرسم بالرموز
         ● بداية
         ↓
    [استلام الطلب]
         ↓
      مخزون؟
        ◇
  ↙ نعم    ↘ لا
[معالجة الدفع]  [إشعار العميل]
      ↓              ↓
   ناجح؟     ◉ نهاية
       ◇
 ↙ نعم    ↘ لا
   ▬تفرع▬    [إلغاء]
   ↙    ↘         ↓
[شحن] [بريد]    ◉
   ↘    ↙
   ▬التقاء▬
      ↓
      ◉ نهاية
                    
ترتيب رسم المخططات:
1. حالات الاستخدام: الممثلون → حالات الاستخدام → العلاقات
2. الفئات: الفئات → الخصائص → العمليات → العلاقات
3. التسلسل: الكائنات → الرسائل (من الأعلى للأسفل)
4. النشاط: البدء → الأنشطة → القرارات → النهاية

📈 إدارة المشاريع - المسار الحرج (دائماً في النهائيات!)

طريقة المسار الحرج (CPM) تظهر في كل نهائي - توقع 8-10 درجات!

حل المسار الحرج خطوة بخطوة

  1. رسم مخطط الشبكة - مربعات متصلة بأسهم بناءً على المتطلبات الأساسية
  2. التمرير الأمامي (Forward Pass) - حساب ES و EF
    ES = أقصى EF لجميع المهام السابقة
    EF = ES + المدة
  3. التمرير الخلفي (Backward Pass) - حساب LS و LF
    LF = أقل LS لجميع المهام التالية
    LS = LF - المدة
  4. حساب الوقت المرن (Slack)
    الوقت المرن الكلي = LS - ES = LF - EF
    الوقت المرن الحر = ES(التالية) - EF(الحالية)
  5. تحديد المسار الحرج - المسار حيث جميع المهام لديها الوقت المرن الكلي = 0
المهام على المسار الحرج: EF = LF (الانتهاء المبكر يساوي الانتهاء المتأخر)
مثال كامل للمسار الحرج (من النهائي 2022):
المعطى WBS: أ(15 يوم)، ب(9 أيام)، ج(12، يحتاج أ)، د(10، يحتاج ب)، هـ(29، يحتاج ب)

⭐ الخطوة 1: رسم مخطط الشبكة
  • ابدأ بالمهام بدون متطلبات أساسية (أ، ب)
  • أضف المهام المعتمدة بناءً على المتطلبات الأساسية
  • صل بأسهم توضح التبعيات
                    البدء → أ(15) → ج(12) → النهاية
                         ↘
                           ب(9) → د(10) → النهاية
                                ↘
                                  هـ(29) → النهاية
                    
⭐ الخطوة 2: التمرير الأمامي (حساب ES و EF)
  • ES للمهام الأولى = 0
  • EF = ES + المدة
  • ES للمهمة التالية = أقصى EF لجميع المهام السابقة

المهمةالحسابESEF
أمهمة بداية00+15=15
بمهمة بداية00+9=9
جبعد أ1515+12=27
دبعد ب99+10=19
هـبعد ب99+29=38
⭐ الخطوة 3: مدة المشروع
  • أقصى EF = الحد الأقصى(27، 19، 38) = 38 يوم

⭐ الخطوة 4: التمرير الخلفي (حساب LS و LF)
  • LF للمهام الأخيرة = مدة المشروع = 38
  • LS = LF - المدة
  • LF للسابقة = أقل LS للواصفات

المهمةالحسابLSLF
جLF=3838-12=2638
دLF=3838-10=2838
هـLF=3838-29=938
أLF=أقل(LS لـ ج)=2626-15=1126
بLF=أقل(LS لـ د،هـ)=99-9=09
⭐ الخطوة 5: حساب الوقت المرن
  • الوقت المرن الكلي = LS - ES = LF - EF

المهمةESLSالوقت المرنحرج؟
أ01111لا
ب000نعم
ج152611لا
د92819لا
هـ990نعم
⭐ الخطوة 6: تحديد المسار الحرج
  • المهام ذات الوقت المرن = 0: ب، هـ
  • المسار الحرج: ب → هـ (38 يوم)
حساب تأثير التأخير:
س: "إذا تأخرت المهمة هـ بـ 5 أيام، متى يكتمل المشروع؟"

الخطوة 1: تحقق إذا كانت المهمة حرجة
  • هـ لديها وقت مرن = 0 → إنها حرجة
الخطوة 2: حساب التأثير
  • تأخير مهمة حرجة = تأخير المشروع
  • المدة الجديدة = 38 + 5 = 43 يوم
الإجابة: 43 يوم

س: "إذا تأخرت المهمة د بـ 9 أيام؟"

الخطوة 1: تحقق من الوقت المرن
  • د لديها وقت مرن = 19 يوم
الخطوة 2: مقارنة التأخير مع الوقت المرن
  • التأخير (9) < الوقت المرن (19)
  • لا تأثير على المشروع
الإجابة: لا تأثير، لا يزال 38 يوم
فحوصات سريعة لـ CPM:
• مهمة حرجة: ES = LS و EF = LF
• صيغة التأخير: إذا كان التأخير > الوقت المرن، يتأخر المشروع بـ (التأخير - الوقت المرن)
• الوقت المرن الحر = ES(التالية) - EF(الحالية) - يؤثر فقط على المهمة التالية مباشرة

صيغة مربع مخطط الشبكة

                    ┌──────────────────┐
                    │  ES | المهمة | EF  │
                    │  LS | المدة | LF  │
                    └──────────────────┘
                    

🔧 هندسة المتطلبات

المتطلبات الوظيفية مقابل غير الوظيفية

متطلبات وظيفية

  • ماذا يجب أن يفعل النظام
  • وظائف/ميزات محددة
  • مثال: "يجب أن يرسل النظام بريداً إلكترونياً"
  • كلمات مفتاحية: "يجب"، "سوف"

متطلبات غير وظيفية

  • كيف يجب أن يؤدي النظام
  • سمات الجودة
  • مثال: "زمن الاستجابة < 2 ثانية"
  • أنواع: الأداء، الأمان، سهولة الاستخدام
مثال وظيفي مقابل غير وظيفي (من النهائيات):
س: "يستشعر مستشعر الحرارة التسلق وينبه شركة الأمن"

الخطوة 1: تحديد الفعل الرئيسي
  • "يستشعر" و"ينبه" هما أفعال
الخطوة 2: تطبيق القاعدة
  • أفعال/ما يفعله النظام = وظيفي
  • الجودة/مدى جودة = غير وظيفي
الخطوة 3: التحقق
  • هذا يصف ما يفعله النظام
الإجابة: أ) متطلب وظيفي
المزيد من أمثلة التصنيف:

المثال 1: "يجب أن يعالج النظام 1000 معاملة في الثانية"
  الخطوة 1: ابحث عن مقياس جودة → "1000 في الثانية"
  الخطوة 2: هذا هو السرعة، ليس الماذا
  الإجابة: غير وظيفي (أداء)

المثال 2: "يجب أن يشفر النظام جميع كلمات المرور المخزنة"
  الخطوة 1: كلمة فعل → "يشفر"
  الخطوة 2: يصف ما يفعله النظام
  الإجابة: وظيفي

المثال 3: "يجب أن يكون زمن الاستجابة أقل من 2 ثانية"
  الخطوة 1: قيد جودة → "أقل من 2 ثانية"
  الخطوة 2: يصف مدى الجودة
  الإجابة: غير وظيفي (أداء)

المثال 4: "يجب أن يكون النظام متاحاً 99.9% من الوقت"
  الخطوة 1: مقياس نسبة مئوية → "99.9%"
  الخطوة 2: سمة جودة
  الإجابة: غير وظيفي (موثوقية)
مثال تصنيف المخاطر:
س: "تغير المتطلبات هو أي نوع من المخاطر؟"

الخطوة 1: تحليل مجالات التأثير
  • التغييرات تؤثر على الجدول الزمني → مخاطر المشروع ✓
  • التغييرات تؤثر على الجودة → مخاطر المنتج ✓
  • التغييرات تؤثر على المؤسسة → ربما ليس بشكل مباشر
الخطوة 2: فحص الخيارات المعطاة
  أ) مخاطر المشروع ✓
  ب) مخاطر المنتج ✓
  ج) مخاطر تنظيمية ❌
  د) أ و ب ✓
الإجابة: د) كل من مخاطر المشروع والمنتج
مثال استراتيجية إدارة المخاطر:
س: "يشير تجنب المخاطر إلى؟"

الخطوة 1: تذكر استراتيجيات المخاطر:
  • التجنب = تقليل الاحتمالية
  • التخفيف = تقليل التأثير
  • الطوارئ = خطة بديلة إذا حدثت
  • القبول = قبول المخاطر
الخطوة 2: مطابقة التعريف
  "تقليل الاحتمالية" = تجنب
الإجابة: أ) تقليل الاحتمالية التي ستنشأ فيها المخاطر
اختبار سريع للمتطلبات:
• هل يمكن اختبارها بنعم/لا؟ → وظيفي
• هل تحتاج لقياس كم/سرعة/جودة؟ → غير وظيفي
• هل بها رقم/مقياس؟ → عادة غير وظيفي

مشاكل جمع المتطلبات (شائعة في الاختيار المتعدد)

  • أصحاب المصلحة لا يعرفون ما يريدون
  • أصحاب المصلحة يستخدمون مصطلحاتهم الخاصة (لغة المجال)
  • متطلبات متضاربة من أصحاب مصلحة مختلفين
  • العوامل السياسية/التنظيمية تؤثر على المتطلبات

فئات المخاطر

نوع الخطر أمثلة نصيحة الامتحان
مخاطر المشروع الجدول الزمني، الميزانية، الموارد تؤثر على جدول المشروع
مخاطر المنتج قضايا الجودة، الأداء تؤثر على جودة المنتج
مخاطر الأعمال تغيرات السوق، المنافسة تؤثر على جدوى المنتج
"تغير المتطلبات" هو كلاً من مخاطر المشروع ومخاطر المنتج!

🏗️ أنماط الهندسة المعمارية للبرمجيات

محدد نمط الهندسة المعمارية

النمط حالة الاستخدام الميزة الرئيسية كلمة الامتحان
الطبقات (Layered) تطبيقات المؤسسات فصل الاهتمامات "طبقات"، "n-tier"
عميل-خادم (Client-Server) أنظمة موزعة نموذج طلب-استجابة "عميل رفيع/سمين"
الأنبوب والمرشح (Pipe & Filter) تحويلات البيانات معالجة تسلسلية "دفعة"، "تحويلات تسلسلية"
المستودع (Repository) أنظمة مركزية البيانات تخزين بيانات مركزي "بيانات مشتركة"، "قاعدة بيانات مركزية"
MVC تطبيقات الويب فصل واجهة المستخدم/المنطق/البيانات "النموذج-العرض-المتحكم"
مثال اختيار الهندسة المعمارية (من النهائي 2021):
س: "يقبل النظام دفعة من البيانات ويطبق سلسلة من التحويلات التسلسلية"

الخطوة 1: تحديد المتطلبات الرئيسية
  • "دفعة من البيانات" → معالجة كتل
  • "تحويلات تسلسلية" → معالجة خطوة بخطوة
الخطوة 2: مطابقة مع الأنماط
  أ) الأنبوب والمرشح → تدفق بيانات تسلسلي ✓
  ب) المستودع → تخزين بيانات مركزي ❌
  ج) عميل-خادم → طلب-استجابة ❌
  د) الطبقات → تنظيم هرمي ❌
الخطوة 3: التحقق من المطابقة
  • الأنبوب والمرشح: بيانات → مرشح1 → مرشح2 → مخرج
الإجابة: أ) هندسة الأنبوب والمرشح
مطابقة سيناريوهات الهندسة المعمارية:

السيناريو 1: "عدة مستخدمين يصلون إلى سجلات المرضى المشتركة"
  الخطوة 1: المفتاح = بيانات "مشتركة"
  الخطوة 2: يحتاج تخزين مركزي
  الإجابة: هندسة المستودع

السيناريو 2: "تطبيق ويب بفصل واجهة المستخدم، منطق الأعمال، وقاعدة البيانات"
  الخطوة 1: ثلاث طبقات متميزة مذكورة
  الخطوة 2: لكل منها مسؤولية محددة
  الإجابة: هندسة الطبقات/3-tier

السيناريو 3: "مترجم يعالج شفرة المصدر"
  الخطوة 1: تسلسلي: معجمي → تركيب → دلالي → توليد كود
  الخطوة 2: كل مرحلة تحول البيانات
  الإجابة: الأنبوب والمرشح

السيناريو 4: "تطبيق ويب يحتاج وجهات نظر مختلفة لنفس البيانات"
  الخطوة 1: وجهات نظر متعددة لنفس البيانات
  الخطوة 2: يحتاج فصل الاهتمامات
  الإجابة: نمط MVC
تحديد مكونات MVC:
س: "في الخدمات المصرفية عبر الإنترنت، أين ينتمي منطق التحقق من كلمة المرور؟"

الخطوة 1: فهم أدوار MVC
  • النموذج = منطق الأعمال والبيانات
  • العرض = العرض/واجهة المستخدم
  • المتحكم = معالجة إدخال المستخدم
الخطوة 2: تصنيف "منطق التحقق"
  • إنه قاعدة عمل/منطق
  • ليس واجهة مستخدم، ليس معالجة إدخال
الإجابة: النموذج

س: "أين ينتمي زر تسجيل الدخول؟"
  الإجابة: العرض (عنصر واجهة مستخدم)

س: "أين يذهب معالجة حدث النقر؟"
  الإجابة: المتحكم (يتعامل مع تفاعل المستخدم)
مطابقة سريعة للهندسة المعمارية:
• "تسلسلي/تحويل" → الأنبوب والمرشح
• "بيانات مشتركة" → المستودع
• "طبقات/مستويات" → الطبقات
• "طلب-استجابة" → عميل-خادم
• "وجهات نظر مختلفة" → MVC

مكونات MVC

  • النموذج (Model) - البيانات ومنطق الأعمال
  • العرض (View) - العرض/واجهة المستخدم
  • المتحكم (Controller) - يتعامل مع إدخال المستخدم، يحدث النموذج/العرض

🧪 اختبار البرمجيات (ضروري للنهائيات!)

مستويات الاختبار (تسأل عنها دائماً!)

  1. اختبار الوحدة (Unit Testing) - مكونات فردية
  2. اختبار التكامل (Integration Testing) - واجهات المكونات
  3. اختبار النظام (System Testing) - النظام الكامل
  4. اختبار القبول (Acceptance Testing) - تحقق العميل
اختبار الانحدار = إعادة الاختبار بعد التغييرات (مرحلة الصيانة)

اختبار الصندوق الأسود مقابل الأبيض

اختبار الصندوق الأسود

  • لا حاجة لمعرفة الكود
  • يختبر الوظائف
  • مبني على المتطلبات
  • تقسيم فئات التكافؤ
  • تحليل القيم الحدودية

اختبار الصندوق الأبيض

  • يحتاج معرفة الكود
  • يختبر الهيكل الداخلي
  • تغطية المسار
  • تغطية العبارات
  • تغطية الفروع
  • اختبار المسار الأساسي
تحديد مستوى الاختبار (شائع في الاختيار المتعدد):
س: "الاختبار بعد مرحلة الصيانة مع حالات الاختبار السابقة هو؟"

الخطوة 1: كلمات مفتاحية = "صيانة"، "حالات اختبار سابقة"
الخطوة 2: تذكر أنواع الاختبار للتغييرات:
  • اختبار الوحدة = مكونات فردية ❌
  • اختبار التكامل = واجهات المكونات ❌
  • اختبار النظام = النظام الكامل ❌
  • اختبار الانحدار = إعادة الاختبار بعد التغييرات ✓
الإجابة: د) اختبار الانحدار
اختبار الصندوق الأسود - تقسيم فئات التكافؤ:
س: "اختبر حقل يقبل عمر 18-65"

⭐ الخطوة 1: تحديد الأقسام
  • غير صالح: عمر < 18
  • صالح: 18 ≤ عمر ≤ 65
  • غير صالح: عمر > 65

⭐ الخطوة 2: اختيار قيم اختبار (واحدة من كل قسم)
  • القسم 1: عمر = 10 (< 18)
  • القسم 2: عمر = 40 (صالح)
  • القسم 3: عمر = 70 (> 65)

⭐ الخطوة 3: إضافة القيم الحدودية
  • الحدود الدنيا: 17، 18، 19
  • الحدود العليا: 64، 65، 66

حالات الاختبار النهائية:
  10 (غير صالح منخفض)، 17، 18، 19، 40 (صالح متوسط)، 64، 65، 66، 70 (غير صالح عالي)
قواعد سريعة للاختبار:
• عدد حالات الاختبار = 2^ن (ن = شروط) لتغطية كاملة
• اختبر دائماً: صالح، غير صالح، حدودي، فارغ/خالي
• ترتيب التكامل: حرج → داعم → واجهة المستخدم

💎 مفاهيم تصميم البرمجيات

التماسك مقابل الاقتران

التماسك (نريد مرتفع!)

  • قوة داخل الوحدة
  • كيف ترتبط العناصر داخل الوحدة
  • تماسك عالي = تصميم جيد
  • غرض واحد محدد جيداً

الاقتران (نريد منخفض!)

  • الاعتماد بين الوحدات
  • كيف تعتمد الوحدات على بعضها
  • اقتران منخفض = تصميم جيد
  • وحدات مستقلة
ذاكرة: "تماسك عالي، اقتران منخفض" = TAAA = تصميم جيد، كود طويل الأمد

سمات جودة التصميم

  • الصحة (Correctness) - لا أخطاء تمنع الوظيفة
  • الملاءمة (Commodity/Suitability) - مناسب للغرض المقصود
  • سهولة الاستخدام (Usability) - تجربة مستخدم ممتعة
  • الاتساق (Consistency) - لا تناقضات أو حذف
تماسك مقابل اقتران في الاختيار المتعدد (من النهائيات):
س: "ما الذي يعرّف درجة الاعتماد المتبادل داخل عناصر الوحدة؟"

الخطوة 1: تحليل السؤال
  • "داخل" = within
  • "داخل عناصر الوحدة" = inside one module
الخطوة 2: تذكر التعريفات
  • التماسك = داخل الوحدة ✓
  • الاقتران = بين الوحدات ❌
الإجابة: أ) التماسك
مثال جودة التصميم:
س: "تصميم جيد حيث يكون البرنامج مناسباً للغرض المقصود هو؟"

الخطوة 1: مطابقة الوصف مع السمات
  • الصحة = لا أخطاء ❌
  • الملاءمة = مناسب للغرض ✓
  • سهولة الاستخدام = تجربة ممتعة ❌
  • الاتساق = لا تناقضات ❌
الإجابة: ب) الملاءمة
تحليل التماسك - مثال عملي:
قيّم هذه الفئة للتماسك:
class UserManager {
    validateEmail()
    calculateTax()      // ???
    saveUser()
    sendEmail()
    generateReport()    // ???
}
                    
الخطوة 1: تحقق إذا كانت جميع الطرق تتعلق بغرض واحد
  • validateEmail ✓ (متعلق بالمستخدم)
  • calculateTax ❌ (ليس إدارة مستخدم)
  • saveUser ✓ (متعلق بالمستخدم)
  • sendEmail ✓ (تواصل مع المستخدم)
  • generateReport ❌ (يمكن أن يكون أي تقرير)
الخطوة 2: تقييم مستوى التماسك
  • مسؤوليات مختلطة = تماسك منخفض (سيء)
الخطوة 3: التحسين بالتقسيم:
  • UserManager: validateEmail, saveUser, sendEmail
  • TaxCalculator: calculateTax
  • ReportGenerator: generateReport
  النتيجة: تماسك عالي (جيد)
تحليل الاقتران - مثال عملي:
// اقتران عالي (سيء)
class Order {
    Database db = new Database();
    EmailService email = new EmailService();
    PaymentGateway payment = new PaymentGateway();
    
    processOrder() {
        db.connect();
        payment.charge();
        email.send();
    }
}

// اقتران منخفض (جيد)
class Order {
    processOrder(IDatabase db, IEmail email, IPayment payment) {
        db.save(this);
        payment.charge(amount);
        email.notify(customer);
    }
}
                    
التحليل:
  الإصدار 1: يخلق تبعياته الخاصة = اقتران شديد
  الإصدار 2: التبعيات تحقن = اقتران مرن
  الأفضل: الإصدار 2 (يمكن اختباره، تغيير التنفيذات بسهولة)
فحص سريع لمبادئ SOLID:
س: "يجب أن يكون للفئة سبب واحد فقط للتغيير" - أي مبدأ؟

الخطوة 1: مطابقة مع SOLID
  • S = المسؤولية الواحدة ✓
  • O = المفتوح/المغلق
  • L = استبدال لسكوف
  • I = فصل الواجهة
  • D = انعكاس الاعتماد
الإجابة: مبدأ المسؤولية الواحدة
تذكر الهدف:
• تماسك عالي = الأشياء المتعلقة معاً (جيد)
• اقتران منخفض = وحدات مستقلة (جيد)
• ذاكرة: "TM-AN" = تماسك مرتفع - اقتران نازل

⚡ مرجع سريع للامتحان

أخطاء شائعة يجب تجنبها

  • ❌ الشلالي ليس مناسباً لاستيعاب التغييرات
  • ❌ ماستر Scrum ليس مدير مشروع
  • ❌ مهام السبرنت ليست لمالك المنتج لإدارتها
  • ❌ تغير المتطلبات يؤثر على كلاً من مخاطر المشروع والمنتج
  • ❌ لا يتم تمديد السبرنتس أبداً للعمل غير المكتمل

أرقام يجب تذكرها

  • حجم فريق Scrum: 7 (10 كحد أقصى)
  • مدة السبرنت: 2-4 أسابيع
  • الاجتماع اليومي لـ Scrum: 15 دقيقة
  • مستويات CMM: 1-5 (البدائي إلى الأمثل)

اختصارات يجب معرفتها

CMM نموذج النضج القدرة تحسين العملية
XP البرمجة المتطرفة منهجية الأجايل
MVC النموذج-العرض-المتحكم نمط هندسي
WBS هيكل تجزئة العمل مهام المشروع
CPM طريقة المسار الحرج جدولة المشروع

قائمة مراجعة قبل الأخيرة

  • ✅ معرفة جميع أدوار Scrum والأدوات
  • ✅ القدرة على حساب المسار الحرج (ES، EF، LS، LF، Slack)
  • ✅ معرفة متى تستخدم كل نموذج عملية
  • ✅ القدرة على تمييز الوظيفي مقابل غير الوظيفي
  • ✅ معرفة ترتيب مستويات الاختبار
  • ✅ تذكر التماسك (مرتفع) مقابل الاقتران (منخفض)
  • ✅ القدرة على تحديد أنماط الهندسة المعمارية من الأوصاف