📋 نماذج عمليات البرمجيات (تظهر كثيراً في الامتحانات!)
تظهر دائماً في أسئلة الاختيار المتعدد ومطابقة السيناريوهات!
دليل سريع لاختيار النموذج
| النموذج | متى تستخدمه | المميزات الرئيسية | كلمات الامتحان |
|---|---|---|---|
| شلالي (Waterfall) | المتطلبات واضحة وثابتة | تسلسلي، لا عودة للخلف | "مفهومة جيداً"، "أمان حرج"، "متطلبات ثابتة" |
| تزايدي (Incremental) | الحاجة لتسليم سريع للنواة | تسليم على دفعات | "بسرعة"، "المنتج الأساسي"، "منافسة تجارية" |
| تطوري/حلزوني (Evolutionary/Spiral) | مخاطر عالية، متطلبات متغيرة | إدارة المخاطر، تكرارية | "إدارة المخاطر"، "ينمو تدريجياً" |
| النماذج الأولية (Prototyping) | متطلبات غير واضحة، تركيز على واجهة المستخدم | بناء نسخة يمكن التخلص منها | "متطلبات غير واضحة"، "واجهة المستخدم"، "ملاحظات أصحاب المصلحة" |
| العملية الموحدة (Unified Process) | أنظمة المؤسسات الكبيرة | مقادة بحالات الاستخدام، مركزية على الهندسة المعمارية | "مقادة بحالات الاستخدام"، "مركزية على الهندسة المعمارية"، "تكرارية وتزايدية" |
مثال مطابقة سيناريو (من النهائي 2022):
س: "حاجة ملحة لتقديم وظائف محددة للمستخدمين بسرعة ثم تحسينها في الإصدارات اللاحقة"
الخطوة 1: تحديد الكلمات المفتاحية → "بسرعة"، "وظائف محددة"، "تحسين لاحقاً"
الخطوة 2: مطابقة مع خصائص النماذج:
• شلالي؟ لا - لا يسمح بالتحسين
• تزايدي؟ نعم - يسلم النواة بسرعة، يضيف ميزات لاحقاً
• حلزوني؟ لا - يركز على المخاطر، ليس السرعة
الخطوة 3: الإجابة = النموذج التزايدي
س: "حاجة ملحة لتقديم وظائف محددة للمستخدمين بسرعة ثم تحسينها في الإصدارات اللاحقة"
الخطوة 1: تحديد الكلمات المفتاحية → "بسرعة"، "وظائف محددة"، "تحسين لاحقاً"
الخطوة 2: مطابقة مع خصائص النماذج:
• شلالي؟ لا - لا يسمح بالتحسين
• تزايدي؟ نعم - يسلم النواة بسرعة، يضيف ميزات لاحقاً
• حلزوني؟ لا - يركز على المخاطر، ليس السرعة
الخطوة 3: الإجابة = النموذج التزايدي
مثال اختيار متعدد:
س: "نموذج تكرارى يركز على إدارة المخاطر ويطور إصدارات أكثر اكتمالاً تدريجياً"
الخطوة 1: عبارات مفتاحية → "تكرارى"، "إدارة المخاطر"، "أكثر اكتمالاً تدريجياً"
الخطوة 2: استبعاد الخيارات:
أ) شلالي - ليس تكرارى ❌
ب) تطوري/حلزوني - تكرارى + مخاطر ✓
ج) تزايدي - تكرارى لكن لا يركز على المخاطر ❌
الخطوة 3: الإجابة = ب) نموذج العملية التطورية
س: "نموذج تكرارى يركز على إدارة المخاطر ويطور إصدارات أكثر اكتمالاً تدريجياً"
الخطوة 1: عبارات مفتاحية → "تكرارى"، "إدارة المخاطر"، "أكثر اكتمالاً تدريجياً"
الخطوة 2: استبعاد الخيارات:
أ) شلالي - ليس تكرارى ❌
ب) تطوري/حلزوني - تكرارى + مخاطر ✓
ج) تزايدي - تكرارى لكن لا يركز على المخاطر ❌
الخطوة 3: الإجابة = ب) نموذج العملية التطورية
سيناريوهات امتحان حقيقية - طابق النموذج:
السيناريو 1: "تم تطوير النظام في عدة مواقع"
الحل: شلالي (مراحل واضحة للفرق الموزعة)
السيناريو 2: "المتطلبات ضخمة وغير واضحة، تحتاج مشاركة المستخدم"
الحل: النماذج الأولية (ملاحظات المستخدم تحسن المتطلبات غير الواضحة)
السيناريو 3: "تاريخ تسليم الأجهزة غير مؤكد"
الحل: حلزوني (يتعامل مع عدم اليقين من خلال إدارة المخاطر)
السيناريو 4: "مقاد بحالات الاستخدام، مركزية على الهندسة المعمارية، تكرارية"
الحل: العملية الموحدة (هذه هي خصائصها المميزة)
السيناريو 1: "تم تطوير النظام في عدة مواقع"
الحل: شلالي (مراحل واضحة للفرق الموزعة)
السيناريو 2: "المتطلبات ضخمة وغير واضحة، تحتاج مشاركة المستخدم"
الحل: النماذج الأولية (ملاحظات المستخدم تحسن المتطلبات غير الواضحة)
السيناريو 3: "تاريخ تسليم الأجهزة غير مؤكد"
الحل: حلزوني (يتعامل مع عدم اليقين من خلال إدارة المخاطر)
السيناريو 4: "مقاد بحالات الاستخدام، مركزية على الهندسة المعمارية، تكرارية"
الحل: العملية الموحدة (هذه هي خصائصها المميزة)
شجرة قرار سريعة:
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 (أ) ✓
الإجابة: أ) للمطورين لإدارة أنفسهم
س: "ما هو الهدف الرئيسي من مهام السبرنت (Sprint Backlog)؟"
أ) للمطورين لإدارة أنفسهم أثناء السبرنت
ب) لماستر Scrum لإدارة التقدم
ج) للمطورين لإدارة الساعات المستغرقة
د) لمالك المنتج لفهم الالتزامات
الخطوة 1: تذكر ملكية مهام السبرنت → تعود لفريق التطوير
الخطوة 2: استبعاد الأدوار الخطأ:
• ماستر Scrum لا يديرها (ب) ❌
• مالك المنتج يدير مهام المنتج، ليس مهام السبرنت (د) ❌
الخطوة 3: مقارنة الخيارات المتبقية:
• تتبع الساعات هو تفصيل ثانوي (ج) ❌
• الإدارة الذاتية هي مبدأ أساسي في Scrum (أ) ✓
الإجابة: أ) للمطورين لإدارة أنفسهم
مثال صواب/خطأ:
س: "متطلبات المستخدم تُعبر عنها كسيناريوهات في البرمجة المتطرفة (XP)"
الخطوة 1: تذكر مصطلحات XP → قصص المستخدم = سيناريوهات
الخطوة 2: تأكيد: XP يستخدم "قصص المستخدم" وهي متطلبات قائمة على السيناريو
الخطوة 3: الإجابة = صواب
فخ شائع: لا تخلط مع حالات الاستخدام (هذا لـ RUP/العملية الموحدة)
س: "متطلبات المستخدم تُعبر عنها كسيناريوهات في البرمجة المتطرفة (XP)"
الخطوة 1: تذكر مصطلحات XP → قصص المستخدم = سيناريوهات
الخطوة 2: تأكيد: XP يستخدم "قصص المستخدم" وهي متطلبات قائمة على السيناريو
الخطوة 3: الإجابة = صواب
فخ شائع: لا تخلط مع حالات الاستخدام (هذا لـ RUP/العملية الموحدة)
مشكلة حسابية في Scrum:
س: "فريق لديه سرعة 40 نقطة. السبرنت 3 أسابيع. مهام المنتج 200 نقطة. كم عدد السبرنتس المطلوبة؟"
الخطوة 1: تحديد البيانات المعطاة
• السرعة = 40 نقطة/سبرنت
• العمل الكلي = 200 نقطة
الخطوة 2: حساب السبرنتس
• السبرنتس المطلوبة = العمل الكلي ÷ السرعة
• السبرنتس = 200 ÷ 40 = 5 سبرنتس
الخطوة 3: حساب الوقت (إذا طُلب)
• الوقت = 5 سبرنتس × 3 أسابيع = 15 أسبوع
الإجابة: 5 سبرنتس (15 أسبوع إجمالاً)
س: "فريق لديه سرعة 40 نقطة. السبرنت 3 أسابيع. مهام المنتج 200 نقطة. كم عدد السبرنتس المطلوبة؟"
الخطوة 1: تحديد البيانات المعطاة
• السرعة = 40 نقطة/سبرنت
• العمل الكلي = 200 نقطة
الخطوة 2: حساب السبرنتس
• السبرنتس المطلوبة = العمل الكلي ÷ السرعة
• السبرنتس = 200 ÷ 40 = 5 سبرنتس
الخطوة 3: حساب الوقت (إذا طُلب)
• الوقت = 5 سبرنتس × 3 أسابيع = 15 أسبوع
الإجابة: 5 سبرنتس (15 أسبوع إجمالاً)
مثال تحديد دور:
س: "من المسؤول عن تعظيم قيمة المنتج؟"
الخطوة 1: مراجعة مسؤولية كل دور:
• ماستر Scrum → ميسر العملية ❌
• فريق التطوير → يخلق المنتج ❌
• مالك المنتج → تعظيم القيمة ✓
الإجابة: مالك المنتج
تذكر:
• مالك المنتج = ماذا نبني (القيمة)
• فريق التطوير = كيف نبني (التقنية)
• ماستر Scrum = حارس العملية
س: "من المسؤول عن تعظيم قيمة المنتج؟"
الخطوة 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: تحديد الفئات
• كتاب، عضو، أمين مكتبة، إعارة
⭐ الخطوة 2: إضافة الخصائص
• عضو ──── إعارة (1 إلى 0..*)
• كتاب ──── إعارة (1 إلى 0..*)
• أمين مكتبة ──▷ عضو (وراثة)
• مكتبة ◆──── كتاب (تكوين)
⭐ الخطوة 1: تحديد الفئات
• كتاب، عضو، أمين مكتبة، إعارة
⭐ الخطوة 2: إضافة الخصائص
كتاب عضو
--------- ---------
-الرقم التسلسلي: نص -معرف العضو: عدد صحيح
-العنوان: نص -الاسم: نص
-المؤلف: نص -البريد الإلكتروني: نص
-متوفر: منطقي -الحد الأقصى للكتب: عدد صحيح
⭐ الخطوة 3: إضافة العمليات
كتاب عضو
--------- ---------
+استعارة() +استعارة كتاب()
+إرجاع() +إرجاع كتاب()
+حجز() +دفع غرامة()
⭐ الخطوة 4: إضافة العلاقات• عضو ──── إعارة (1 إلى 0..*)
• كتاب ──── إعارة (1 إلى 0..*)
• أمين مكتبة ──▷ عضو (وراثة)
• مكتبة ◆──── كتاب (تكوين)
مخطط التسلسل - عملية تسجيل الدخول:
⭐ الخطوة 1: تحديد الكائنات/الممثلين
• مستخدم، واجهة تسجيل دخول، متحكم المصادقة، قاعدة البيانات
⭐ الخطوة 2: تحديد الرسائل بالترتيب
1. مستخدم → واجهة تسجيل دخول: إدخال بيانات الاعتماد()
2. واجهة تسجيل دخول → متحكم المصادقة: التحقق من تسجيل الدخول(مستخدم، كلمة مرور)
3. متحكم المصادقة → قاعدة البيانات: التحقق من المستخدم(مستخدم، كلمة مرور)
4. قاعدة البيانات → متحكم المصادقة: مستخدم صالح
5. متحكم المصادقة → واجهة تسجيل دخول: نجاح تسجيل الدخول
6. واجهة تسجيل دخول → مستخدم: عرض الصفحة الرئيسية
⭐ الخطوة 3: الرسم بالرموز الصحيحة
⭐ الخطوة 1: تحديد الكائنات/الممثلين
• مستخدم، واجهة تسجيل دخول، متحكم المصادقة، قاعدة البيانات
⭐ الخطوة 2: تحديد الرسائل بالترتيب
1. مستخدم → واجهة تسجيل دخول: إدخال بيانات الاعتماد()
2. واجهة تسجيل دخول → متحكم المصادقة: التحقق من تسجيل الدخول(مستخدم، كلمة مرور)
3. متحكم المصادقة → قاعدة البيانات: التحقق من المستخدم(مستخدم، كلمة مرور)
4. قاعدة البيانات → متحكم المصادقة: مستخدم صالح
5. متحكم المصادقة → واجهة تسجيل دخول: نجاح تسجيل الدخول
6. واجهة تسجيل دخول → مستخدم: عرض الصفحة الرئيسية
⭐ الخطوة 3: الرسم بالرموز الصحيحة
مستخدم واجهة تسجيل دخول متحكم المصادقة قاعدة البيانات
| | | |
|--إدخال----->| | |
| |--التحقق----->| |
| | |--التحقق----->|
| | |<---صالح------|
| |<--نجاح-------| |
|<--عرض-------| | |
مخطط النشاط - معالجة الطلب:
⭐ الخطوة 1: تحديد الأنشطة
• استلام الطلب، التحقق من المخزون، معالجة الدفع
• شحن الطلب، إرسال تأكيد
⭐ الخطوة 2: تحديد نقاط القرار
• هل المخزون متاح؟ (نعم/لا)
• هل الدفع ناجح؟ (نعم/لا)
⭐ الخطوة 3: تحديد الأنشطة المتوازية
• شحن الطلب وإرسال بريد إلكتروني (متزامن)
⭐ الخطوة 4: الرسم بالرموز
⭐ الخطوة 1: تحديد الأنشطة
• استلام الطلب، التحقق من المخزون، معالجة الدفع
• شحن الطلب، إرسال تأكيد
⭐ الخطوة 2: تحديد نقاط القرار
• هل المخزون متاح؟ (نعم/لا)
• هل الدفع ناجح؟ (نعم/لا)
⭐ الخطوة 3: تحديد الأنشطة المتوازية
• شحن الطلب وإرسال بريد إلكتروني (متزامن)
⭐ الخطوة 4: الرسم بالرموز
● بداية
↓
[استلام الطلب]
↓
مخزون؟
◇
↙ نعم ↘ لا
[معالجة الدفع] [إشعار العميل]
↓ ↓
ناجح؟ ◉ نهاية
◇
↙ نعم ↘ لا
▬تفرع▬ [إلغاء]
↙ ↘ ↓
[شحن] [بريد] ◉
↘ ↙
▬التقاء▬
↓
◉ نهاية
ترتيب رسم المخططات:
1. حالات الاستخدام: الممثلون → حالات الاستخدام → العلاقات
2. الفئات: الفئات → الخصائص → العمليات → العلاقات
3. التسلسل: الكائنات → الرسائل (من الأعلى للأسفل)
4. النشاط: البدء → الأنشطة → القرارات → النهاية
1. حالات الاستخدام: الممثلون → حالات الاستخدام → العلاقات
2. الفئات: الفئات → الخصائص → العمليات → العلاقات
3. التسلسل: الكائنات → الرسائل (من الأعلى للأسفل)
4. النشاط: البدء → الأنشطة → القرارات → النهاية
📈 إدارة المشاريع - المسار الحرج (دائماً في النهائيات!)
طريقة المسار الحرج (CPM) تظهر في كل نهائي - توقع 8-10 درجات!
حل المسار الحرج خطوة بخطوة
- رسم مخطط الشبكة - مربعات متصلة بأسهم بناءً على المتطلبات الأساسية
- التمرير الأمامي (Forward Pass) - حساب ES و EF
ES = أقصى EF لجميع المهام السابقة
EF = ES + المدة - التمرير الخلفي (Backward Pass) - حساب LS و LF
LF = أقل LS لجميع المهام التالية
LS = LF - المدة - حساب الوقت المرن (Slack)
الوقت المرن الكلي = LS - ES = LF - EF
الوقت المرن الحر = ES(التالية) - EF(الحالية) - تحديد المسار الحرج - المسار حيث جميع المهام لديها الوقت المرن الكلي = 0
المهام على المسار الحرج: EF = LF (الانتهاء المبكر يساوي الانتهاء المتأخر)
مثال كامل للمسار الحرج (من النهائي 2022):
المعطى WBS: أ(15 يوم)، ب(9 أيام)، ج(12، يحتاج أ)، د(10، يحتاج ب)، هـ(29، يحتاج ب)
⭐ الخطوة 1: رسم مخطط الشبكة
• ابدأ بالمهام بدون متطلبات أساسية (أ، ب)
• أضف المهام المعتمدة بناءً على المتطلبات الأساسية
• صل بأسهم توضح التبعيات
• ES للمهام الأولى = 0
• EF = ES + المدة
• ES للمهمة التالية = أقصى EF لجميع المهام السابقة
⭐ الخطوة 3: مدة المشروع
• أقصى EF = الحد الأقصى(27، 19، 38) = 38 يوم
⭐ الخطوة 4: التمرير الخلفي (حساب LS و LF)
• LF للمهام الأخيرة = مدة المشروع = 38
• LS = LF - المدة
• LF للسابقة = أقل LS للواصفات
⭐ الخطوة 5: حساب الوقت المرن
• الوقت المرن الكلي = LS - ES = LF - EF
⭐ الخطوة 6: تحديد المسار الحرج
• المهام ذات الوقت المرن = 0: ب، هـ
• المسار الحرج: ب → هـ (38 يوم)
المعطى WBS: أ(15 يوم)، ب(9 أيام)، ج(12، يحتاج أ)، د(10، يحتاج ب)، هـ(29، يحتاج ب)
⭐ الخطوة 1: رسم مخطط الشبكة
• ابدأ بالمهام بدون متطلبات أساسية (أ، ب)
• أضف المهام المعتمدة بناءً على المتطلبات الأساسية
• صل بأسهم توضح التبعيات
البدء → أ(15) → ج(12) → النهاية
↘
ب(9) → د(10) → النهاية
↘
هـ(29) → النهاية
⭐ الخطوة 2: التمرير الأمامي (حساب ES و EF)• ES للمهام الأولى = 0
• EF = ES + المدة
• ES للمهمة التالية = أقصى EF لجميع المهام السابقة
| المهمة | الحساب | ES | EF |
|---|---|---|---|
| أ | مهمة بداية | 0 | 0+15=15 |
| ب | مهمة بداية | 0 | 0+9=9 |
| ج | بعد أ | 15 | 15+12=27 |
| د | بعد ب | 9 | 9+10=19 |
| هـ | بعد ب | 9 | 9+29=38 |
• أقصى EF = الحد الأقصى(27، 19، 38) = 38 يوم
⭐ الخطوة 4: التمرير الخلفي (حساب LS و LF)
• LF للمهام الأخيرة = مدة المشروع = 38
• LS = LF - المدة
• LF للسابقة = أقل LS للواصفات
| المهمة | الحساب | LS | LF |
|---|---|---|---|
| ج | LF=38 | 38-12=26 | 38 |
| د | LF=38 | 38-10=28 | 38 |
| هـ | LF=38 | 38-29=9 | 38 |
| أ | LF=أقل(LS لـ ج)=26 | 26-15=11 | 26 |
| ب | LF=أقل(LS لـ د،هـ)=9 | 9-9=0 | 9 |
• الوقت المرن الكلي = LS - ES = LF - EF
| المهمة | ES | LS | الوقت المرن | حرج؟ |
|---|---|---|---|---|
| أ | 0 | 11 | 11 | لا |
| ب | 0 | 0 | 0 | نعم |
| ج | 15 | 26 | 11 | لا |
| د | 9 | 28 | 19 | لا |
| هـ | 9 | 9 | 0 | نعم |
• المهام ذات الوقت المرن = 0: ب، هـ
• المسار الحرج: ب → هـ (38 يوم)
حساب تأثير التأخير:
س: "إذا تأخرت المهمة هـ بـ 5 أيام، متى يكتمل المشروع؟"
الخطوة 1: تحقق إذا كانت المهمة حرجة
• هـ لديها وقت مرن = 0 → إنها حرجة
الخطوة 2: حساب التأثير
• تأخير مهمة حرجة = تأخير المشروع
• المدة الجديدة = 38 + 5 = 43 يوم
الإجابة: 43 يوم
س: "إذا تأخرت المهمة د بـ 9 أيام؟"
الخطوة 1: تحقق من الوقت المرن
• د لديها وقت مرن = 19 يوم
الخطوة 2: مقارنة التأخير مع الوقت المرن
• التأخير (9) < الوقت المرن (19)
• لا تأثير على المشروع
الإجابة: لا تأثير، لا يزال 38 يوم
س: "إذا تأخرت المهمة هـ بـ 5 أيام، متى يكتمل المشروع؟"
الخطوة 1: تحقق إذا كانت المهمة حرجة
• هـ لديها وقت مرن = 0 → إنها حرجة
الخطوة 2: حساب التأثير
• تأخير مهمة حرجة = تأخير المشروع
• المدة الجديدة = 38 + 5 = 43 يوم
الإجابة: 43 يوم
س: "إذا تأخرت المهمة د بـ 9 أيام؟"
الخطوة 1: تحقق من الوقت المرن
• د لديها وقت مرن = 19 يوم
الخطوة 2: مقارنة التأخير مع الوقت المرن
• التأخير (9) < الوقت المرن (19)
• لا تأثير على المشروع
الإجابة: لا تأثير، لا يزال 38 يوم
فحوصات سريعة لـ CPM:
• مهمة حرجة: ES = LS و EF = LF
• صيغة التأخير: إذا كان التأخير > الوقت المرن، يتأخر المشروع بـ (التأخير - الوقت المرن)
• الوقت المرن الحر = ES(التالية) - EF(الحالية) - يؤثر فقط على المهمة التالية مباشرة
• مهمة حرجة: ES = LS و EF = LF
• صيغة التأخير: إذا كان التأخير > الوقت المرن، يتأخر المشروع بـ (التأخير - الوقت المرن)
• الوقت المرن الحر = ES(التالية) - EF(الحالية) - يؤثر فقط على المهمة التالية مباشرة
صيغة مربع مخطط الشبكة
┌──────────────────┐
│ ES | المهمة | EF │
│ LS | المدة | LF │
└──────────────────┘
🔧 هندسة المتطلبات
المتطلبات الوظيفية مقابل غير الوظيفية
متطلبات وظيفية
- ماذا يجب أن يفعل النظام
- وظائف/ميزات محددة
- مثال: "يجب أن يرسل النظام بريداً إلكترونياً"
- كلمات مفتاحية: "يجب"، "سوف"
متطلبات غير وظيفية
- كيف يجب أن يؤدي النظام
- سمات الجودة
- مثال: "زمن الاستجابة < 2 ثانية"
- أنواع: الأداء، الأمان، سهولة الاستخدام
مثال وظيفي مقابل غير وظيفي (من النهائيات):
س: "يستشعر مستشعر الحرارة التسلق وينبه شركة الأمن"
الخطوة 1: تحديد الفعل الرئيسي
• "يستشعر" و"ينبه" هما أفعال
الخطوة 2: تطبيق القاعدة
• أفعال/ما يفعله النظام = وظيفي
• الجودة/مدى جودة = غير وظيفي
الخطوة 3: التحقق
• هذا يصف ما يفعله النظام
الإجابة: أ) متطلب وظيفي
س: "يستشعر مستشعر الحرارة التسلق وينبه شركة الأمن"
الخطوة 1: تحديد الفعل الرئيسي
• "يستشعر" و"ينبه" هما أفعال
الخطوة 2: تطبيق القاعدة
• أفعال/ما يفعله النظام = وظيفي
• الجودة/مدى جودة = غير وظيفي
الخطوة 3: التحقق
• هذا يصف ما يفعله النظام
الإجابة: أ) متطلب وظيفي
المزيد من أمثلة التصنيف:
المثال 1: "يجب أن يعالج النظام 1000 معاملة في الثانية"
الخطوة 1: ابحث عن مقياس جودة → "1000 في الثانية"
الخطوة 2: هذا هو السرعة، ليس الماذا
الإجابة: غير وظيفي (أداء)
المثال 2: "يجب أن يشفر النظام جميع كلمات المرور المخزنة"
الخطوة 1: كلمة فعل → "يشفر"
الخطوة 2: يصف ما يفعله النظام
الإجابة: وظيفي
المثال 3: "يجب أن يكون زمن الاستجابة أقل من 2 ثانية"
الخطوة 1: قيد جودة → "أقل من 2 ثانية"
الخطوة 2: يصف مدى الجودة
الإجابة: غير وظيفي (أداء)
المثال 4: "يجب أن يكون النظام متاحاً 99.9% من الوقت"
الخطوة 1: مقياس نسبة مئوية → "99.9%"
الخطوة 2: سمة جودة
الإجابة: غير وظيفي (موثوقية)
المثال 1: "يجب أن يعالج النظام 1000 معاملة في الثانية"
الخطوة 1: ابحث عن مقياس جودة → "1000 في الثانية"
الخطوة 2: هذا هو السرعة، ليس الماذا
الإجابة: غير وظيفي (أداء)
المثال 2: "يجب أن يشفر النظام جميع كلمات المرور المخزنة"
الخطوة 1: كلمة فعل → "يشفر"
الخطوة 2: يصف ما يفعله النظام
الإجابة: وظيفي
المثال 3: "يجب أن يكون زمن الاستجابة أقل من 2 ثانية"
الخطوة 1: قيد جودة → "أقل من 2 ثانية"
الخطوة 2: يصف مدى الجودة
الإجابة: غير وظيفي (أداء)
المثال 4: "يجب أن يكون النظام متاحاً 99.9% من الوقت"
الخطوة 1: مقياس نسبة مئوية → "99.9%"
الخطوة 2: سمة جودة
الإجابة: غير وظيفي (موثوقية)
مثال تصنيف المخاطر:
س: "تغير المتطلبات هو أي نوع من المخاطر؟"
الخطوة 1: تحليل مجالات التأثير
• التغييرات تؤثر على الجدول الزمني → مخاطر المشروع ✓
• التغييرات تؤثر على الجودة → مخاطر المنتج ✓
• التغييرات تؤثر على المؤسسة → ربما ليس بشكل مباشر
الخطوة 2: فحص الخيارات المعطاة
أ) مخاطر المشروع ✓
ب) مخاطر المنتج ✓
ج) مخاطر تنظيمية ❌
د) أ و ب ✓
الإجابة: د) كل من مخاطر المشروع والمنتج
س: "تغير المتطلبات هو أي نوع من المخاطر؟"
الخطوة 1: تحليل مجالات التأثير
• التغييرات تؤثر على الجدول الزمني → مخاطر المشروع ✓
• التغييرات تؤثر على الجودة → مخاطر المنتج ✓
• التغييرات تؤثر على المؤسسة → ربما ليس بشكل مباشر
الخطوة 2: فحص الخيارات المعطاة
أ) مخاطر المشروع ✓
ب) مخاطر المنتج ✓
ج) مخاطر تنظيمية ❌
د) أ و ب ✓
الإجابة: د) كل من مخاطر المشروع والمنتج
مثال استراتيجية إدارة المخاطر:
س: "يشير تجنب المخاطر إلى؟"
الخطوة 1: تذكر استراتيجيات المخاطر:
• التجنب = تقليل الاحتمالية
• التخفيف = تقليل التأثير
• الطوارئ = خطة بديلة إذا حدثت
• القبول = قبول المخاطر
الخطوة 2: مطابقة التعريف
"تقليل الاحتمالية" = تجنب
الإجابة: أ) تقليل الاحتمالية التي ستنشأ فيها المخاطر
س: "يشير تجنب المخاطر إلى؟"
الخطوة 1: تذكر استراتيجيات المخاطر:
• التجنب = تقليل الاحتمالية
• التخفيف = تقليل التأثير
• الطوارئ = خطة بديلة إذا حدثت
• القبول = قبول المخاطر
الخطوة 2: مطابقة التعريف
"تقليل الاحتمالية" = تجنب
الإجابة: أ) تقليل الاحتمالية التي ستنشأ فيها المخاطر
اختبار سريع للمتطلبات:
• هل يمكن اختبارها بنعم/لا؟ → وظيفي
• هل تحتاج لقياس كم/سرعة/جودة؟ → غير وظيفي
• هل بها رقم/مقياس؟ → عادة غير وظيفي
• هل يمكن اختبارها بنعم/لا؟ → وظيفي
• هل تحتاج لقياس كم/سرعة/جودة؟ → غير وظيفي
• هل بها رقم/مقياس؟ → عادة غير وظيفي
مشاكل جمع المتطلبات (شائعة في الاختيار المتعدد)
- أصحاب المصلحة لا يعرفون ما يريدون
- أصحاب المصلحة يستخدمون مصطلحاتهم الخاصة (لغة المجال)
- متطلبات متضاربة من أصحاب مصلحة مختلفين
- العوامل السياسية/التنظيمية تؤثر على المتطلبات
فئات المخاطر
| نوع الخطر | أمثلة | نصيحة الامتحان |
|---|---|---|
| مخاطر المشروع | الجدول الزمني، الميزانية، الموارد | تؤثر على جدول المشروع |
| مخاطر المنتج | قضايا الجودة، الأداء | تؤثر على جودة المنتج |
| مخاطر الأعمال | تغيرات السوق، المنافسة | تؤثر على جدوى المنتج |
"تغير المتطلبات" هو كلاً من مخاطر المشروع ومخاطر المنتج!
🏗️ أنماط الهندسة المعمارية للبرمجيات
محدد نمط الهندسة المعمارية
| النمط | حالة الاستخدام | الميزة الرئيسية | كلمة الامتحان |
|---|---|---|---|
| الطبقات (Layered) | تطبيقات المؤسسات | فصل الاهتمامات | "طبقات"، "n-tier" |
| عميل-خادم (Client-Server) | أنظمة موزعة | نموذج طلب-استجابة | "عميل رفيع/سمين" |
| الأنبوب والمرشح (Pipe & Filter) | تحويلات البيانات | معالجة تسلسلية | "دفعة"، "تحويلات تسلسلية" |
| المستودع (Repository) | أنظمة مركزية البيانات | تخزين بيانات مركزي | "بيانات مشتركة"، "قاعدة بيانات مركزية" |
| MVC | تطبيقات الويب | فصل واجهة المستخدم/المنطق/البيانات | "النموذج-العرض-المتحكم" |
مثال اختيار الهندسة المعمارية (من النهائي 2021):
س: "يقبل النظام دفعة من البيانات ويطبق سلسلة من التحويلات التسلسلية"
الخطوة 1: تحديد المتطلبات الرئيسية
• "دفعة من البيانات" → معالجة كتل
• "تحويلات تسلسلية" → معالجة خطوة بخطوة
الخطوة 2: مطابقة مع الأنماط
أ) الأنبوب والمرشح → تدفق بيانات تسلسلي ✓
ب) المستودع → تخزين بيانات مركزي ❌
ج) عميل-خادم → طلب-استجابة ❌
د) الطبقات → تنظيم هرمي ❌
الخطوة 3: التحقق من المطابقة
• الأنبوب والمرشح: بيانات → مرشح1 → مرشح2 → مخرج
الإجابة: أ) هندسة الأنبوب والمرشح
س: "يقبل النظام دفعة من البيانات ويطبق سلسلة من التحويلات التسلسلية"
الخطوة 1: تحديد المتطلبات الرئيسية
• "دفعة من البيانات" → معالجة كتل
• "تحويلات تسلسلية" → معالجة خطوة بخطوة
الخطوة 2: مطابقة مع الأنماط
أ) الأنبوب والمرشح → تدفق بيانات تسلسلي ✓
ب) المستودع → تخزين بيانات مركزي ❌
ج) عميل-خادم → طلب-استجابة ❌
د) الطبقات → تنظيم هرمي ❌
الخطوة 3: التحقق من المطابقة
• الأنبوب والمرشح: بيانات → مرشح1 → مرشح2 → مخرج
الإجابة: أ) هندسة الأنبوب والمرشح
مطابقة سيناريوهات الهندسة المعمارية:
السيناريو 1: "عدة مستخدمين يصلون إلى سجلات المرضى المشتركة"
الخطوة 1: المفتاح = بيانات "مشتركة"
الخطوة 2: يحتاج تخزين مركزي
الإجابة: هندسة المستودع
السيناريو 2: "تطبيق ويب بفصل واجهة المستخدم، منطق الأعمال، وقاعدة البيانات"
الخطوة 1: ثلاث طبقات متميزة مذكورة
الخطوة 2: لكل منها مسؤولية محددة
الإجابة: هندسة الطبقات/3-tier
السيناريو 3: "مترجم يعالج شفرة المصدر"
الخطوة 1: تسلسلي: معجمي → تركيب → دلالي → توليد كود
الخطوة 2: كل مرحلة تحول البيانات
الإجابة: الأنبوب والمرشح
السيناريو 4: "تطبيق ويب يحتاج وجهات نظر مختلفة لنفس البيانات"
الخطوة 1: وجهات نظر متعددة لنفس البيانات
الخطوة 2: يحتاج فصل الاهتمامات
الإجابة: نمط MVC
السيناريو 1: "عدة مستخدمين يصلون إلى سجلات المرضى المشتركة"
الخطوة 1: المفتاح = بيانات "مشتركة"
الخطوة 2: يحتاج تخزين مركزي
الإجابة: هندسة المستودع
السيناريو 2: "تطبيق ويب بفصل واجهة المستخدم، منطق الأعمال، وقاعدة البيانات"
الخطوة 1: ثلاث طبقات متميزة مذكورة
الخطوة 2: لكل منها مسؤولية محددة
الإجابة: هندسة الطبقات/3-tier
السيناريو 3: "مترجم يعالج شفرة المصدر"
الخطوة 1: تسلسلي: معجمي → تركيب → دلالي → توليد كود
الخطوة 2: كل مرحلة تحول البيانات
الإجابة: الأنبوب والمرشح
السيناريو 4: "تطبيق ويب يحتاج وجهات نظر مختلفة لنفس البيانات"
الخطوة 1: وجهات نظر متعددة لنفس البيانات
الخطوة 2: يحتاج فصل الاهتمامات
الإجابة: نمط MVC
تحديد مكونات MVC:
س: "في الخدمات المصرفية عبر الإنترنت، أين ينتمي منطق التحقق من كلمة المرور؟"
الخطوة 1: فهم أدوار MVC
• النموذج = منطق الأعمال والبيانات
• العرض = العرض/واجهة المستخدم
• المتحكم = معالجة إدخال المستخدم
الخطوة 2: تصنيف "منطق التحقق"
• إنه قاعدة عمل/منطق
• ليس واجهة مستخدم، ليس معالجة إدخال
الإجابة: النموذج
س: "أين ينتمي زر تسجيل الدخول؟"
الإجابة: العرض (عنصر واجهة مستخدم)
س: "أين يذهب معالجة حدث النقر؟"
الإجابة: المتحكم (يتعامل مع تفاعل المستخدم)
س: "في الخدمات المصرفية عبر الإنترنت، أين ينتمي منطق التحقق من كلمة المرور؟"
الخطوة 1: فهم أدوار MVC
• النموذج = منطق الأعمال والبيانات
• العرض = العرض/واجهة المستخدم
• المتحكم = معالجة إدخال المستخدم
الخطوة 2: تصنيف "منطق التحقق"
• إنه قاعدة عمل/منطق
• ليس واجهة مستخدم، ليس معالجة إدخال
الإجابة: النموذج
س: "أين ينتمي زر تسجيل الدخول؟"
الإجابة: العرض (عنصر واجهة مستخدم)
س: "أين يذهب معالجة حدث النقر؟"
الإجابة: المتحكم (يتعامل مع تفاعل المستخدم)
مطابقة سريعة للهندسة المعمارية:
• "تسلسلي/تحويل" → الأنبوب والمرشح
• "بيانات مشتركة" → المستودع
• "طبقات/مستويات" → الطبقات
• "طلب-استجابة" → عميل-خادم
• "وجهات نظر مختلفة" → MVC
• "تسلسلي/تحويل" → الأنبوب والمرشح
• "بيانات مشتركة" → المستودع
• "طبقات/مستويات" → الطبقات
• "طلب-استجابة" → عميل-خادم
• "وجهات نظر مختلفة" → MVC
مكونات MVC
- النموذج (Model) - البيانات ومنطق الأعمال
- العرض (View) - العرض/واجهة المستخدم
- المتحكم (Controller) - يتعامل مع إدخال المستخدم، يحدث النموذج/العرض
🧪 اختبار البرمجيات (ضروري للنهائيات!)
مستويات الاختبار (تسأل عنها دائماً!)
- اختبار الوحدة (Unit Testing) - مكونات فردية
- اختبار التكامل (Integration Testing) - واجهات المكونات
- اختبار النظام (System Testing) - النظام الكامل
- اختبار القبول (Acceptance Testing) - تحقق العميل
اختبار الانحدار = إعادة الاختبار بعد التغييرات (مرحلة الصيانة)
اختبار الصندوق الأسود مقابل الأبيض
اختبار الصندوق الأسود
- لا حاجة لمعرفة الكود
- يختبر الوظائف
- مبني على المتطلبات
- تقسيم فئات التكافؤ
- تحليل القيم الحدودية
اختبار الصندوق الأبيض
- يحتاج معرفة الكود
- يختبر الهيكل الداخلي
- تغطية المسار
- تغطية العبارات
- تغطية الفروع
- اختبار المسار الأساسي
تحديد مستوى الاختبار (شائع في الاختيار المتعدد):
س: "الاختبار بعد مرحلة الصيانة مع حالات الاختبار السابقة هو؟"
الخطوة 1: كلمات مفتاحية = "صيانة"، "حالات اختبار سابقة"
الخطوة 2: تذكر أنواع الاختبار للتغييرات:
• اختبار الوحدة = مكونات فردية ❌
• اختبار التكامل = واجهات المكونات ❌
• اختبار النظام = النظام الكامل ❌
• اختبار الانحدار = إعادة الاختبار بعد التغييرات ✓
الإجابة: د) اختبار الانحدار
س: "الاختبار بعد مرحلة الصيانة مع حالات الاختبار السابقة هو؟"
الخطوة 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 (غير صالح عالي)
س: "اختبر حقل يقبل عمر 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^ن (ن = شروط) لتغطية كاملة
• اختبر دائماً: صالح، غير صالح، حدودي، فارغ/خالي
• ترتيب التكامل: حرج → داعم → واجهة المستخدم
• عدد حالات الاختبار = 2^ن (ن = شروط) لتغطية كاملة
• اختبر دائماً: صالح، غير صالح، حدودي، فارغ/خالي
• ترتيب التكامل: حرج → داعم → واجهة المستخدم
💎 مفاهيم تصميم البرمجيات
التماسك مقابل الاقتران
التماسك (نريد مرتفع!)
- قوة داخل الوحدة
- كيف ترتبط العناصر داخل الوحدة
- تماسك عالي = تصميم جيد
- غرض واحد محدد جيداً
الاقتران (نريد منخفض!)
- الاعتماد بين الوحدات
- كيف تعتمد الوحدات على بعضها
- اقتران منخفض = تصميم جيد
- وحدات مستقلة
ذاكرة: "تماسك عالي، اقتران منخفض" = TAAA = تصميم جيد، كود طويل الأمد
سمات جودة التصميم
- الصحة (Correctness) - لا أخطاء تمنع الوظيفة
- الملاءمة (Commodity/Suitability) - مناسب للغرض المقصود
- سهولة الاستخدام (Usability) - تجربة مستخدم ممتعة
- الاتساق (Consistency) - لا تناقضات أو حذف
تماسك مقابل اقتران في الاختيار المتعدد (من النهائيات):
س: "ما الذي يعرّف درجة الاعتماد المتبادل داخل عناصر الوحدة؟"
الخطوة 1: تحليل السؤال
• "داخل" = within
• "داخل عناصر الوحدة" = inside one module
الخطوة 2: تذكر التعريفات
• التماسك = داخل الوحدة ✓
• الاقتران = بين الوحدات ❌
الإجابة: أ) التماسك
س: "ما الذي يعرّف درجة الاعتماد المتبادل داخل عناصر الوحدة؟"
الخطوة 1: تحليل السؤال
• "داخل" = within
• "داخل عناصر الوحدة" = inside one module
الخطوة 2: تذكر التعريفات
• التماسك = داخل الوحدة ✓
• الاقتران = بين الوحدات ❌
الإجابة: أ) التماسك
مثال جودة التصميم:
س: "تصميم جيد حيث يكون البرنامج مناسباً للغرض المقصود هو؟"
الخطوة 1: مطابقة الوصف مع السمات
• الصحة = لا أخطاء ❌
• الملاءمة = مناسب للغرض ✓
• سهولة الاستخدام = تجربة ممتعة ❌
• الاتساق = لا تناقضات ❌
الإجابة: ب) الملاءمة
س: "تصميم جيد حيث يكون البرنامج مناسباً للغرض المقصود هو؟"
الخطوة 1: مطابقة الوصف مع السمات
• الصحة = لا أخطاء ❌
• الملاءمة = مناسب للغرض ✓
• سهولة الاستخدام = تجربة ممتعة ❌
• الاتساق = لا تناقضات ❌
الإجابة: ب) الملاءمة
تحليل التماسك - مثال عملي:
قيّم هذه الفئة للتماسك:
• validateEmail ✓ (متعلق بالمستخدم)
• calculateTax ❌ (ليس إدارة مستخدم)
• saveUser ✓ (متعلق بالمستخدم)
• sendEmail ✓ (تواصل مع المستخدم)
• generateReport ❌ (يمكن أن يكون أي تقرير)
الخطوة 2: تقييم مستوى التماسك
• مسؤوليات مختلطة = تماسك منخفض (سيء)
الخطوة 3: التحسين بالتقسيم:
• UserManager: validateEmail, saveUser, sendEmail
• TaxCalculator: calculateTax
• ReportGenerator: generateReport
النتيجة: تماسك عالي (جيد)
قيّم هذه الفئة للتماسك:
class UserManager {
validateEmail()
calculateTax() // ???
saveUser()
sendEmail()
generateReport() // ???
}
الخطوة 1: تحقق إذا كانت جميع الطرق تتعلق بغرض واحد• validateEmail ✓ (متعلق بالمستخدم)
• calculateTax ❌ (ليس إدارة مستخدم)
• saveUser ✓ (متعلق بالمستخدم)
• sendEmail ✓ (تواصل مع المستخدم)
• generateReport ❌ (يمكن أن يكون أي تقرير)
الخطوة 2: تقييم مستوى التماسك
• مسؤوليات مختلطة = تماسك منخفض (سيء)
الخطوة 3: التحسين بالتقسيم:
• UserManager: validateEmail, saveUser, sendEmail
• TaxCalculator: calculateTax
• ReportGenerator: generateReport
النتيجة: تماسك عالي (جيد)
تحليل الاقتران - مثال عملي:
الإصدار 1: يخلق تبعياته الخاصة = اقتران شديد
الإصدار 2: التبعيات تحقن = اقتران مرن
الأفضل: الإصدار 2 (يمكن اختباره، تغيير التنفيذات بسهولة)
// اقتران عالي (سيء)
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 = انعكاس الاعتماد
الإجابة: مبدأ المسؤولية الواحدة
س: "يجب أن يكون للفئة سبب واحد فقط للتغيير" - أي مبدأ؟
الخطوة 1: مطابقة مع SOLID
• S = المسؤولية الواحدة ✓
• O = المفتوح/المغلق
• L = استبدال لسكوف
• I = فصل الواجهة
• D = انعكاس الاعتماد
الإجابة: مبدأ المسؤولية الواحدة
تذكر الهدف:
• تماسك عالي = الأشياء المتعلقة معاً (جيد)
• اقتران منخفض = وحدات مستقلة (جيد)
• ذاكرة: "TM-AN" = تماسك مرتفع - اقتران نازل
• تماسك عالي = الأشياء المتعلقة معاً (جيد)
• اقتران منخفض = وحدات مستقلة (جيد)
• ذاكرة: "TM-AN" = تماسك مرتفع - اقتران نازل
⚡ مرجع سريع للامتحان
أخطاء شائعة يجب تجنبها
- ❌ الشلالي ليس مناسباً لاستيعاب التغييرات
- ❌ ماستر Scrum ليس مدير مشروع
- ❌ مهام السبرنت ليست لمالك المنتج لإدارتها
- ❌ تغير المتطلبات يؤثر على كلاً من مخاطر المشروع والمنتج
- ❌ لا يتم تمديد السبرنتس أبداً للعمل غير المكتمل
أرقام يجب تذكرها
- حجم فريق Scrum: 7 (10 كحد أقصى)
- مدة السبرنت: 2-4 أسابيع
- الاجتماع اليومي لـ Scrum: 15 دقيقة
- مستويات CMM: 1-5 (البدائي إلى الأمثل)
اختصارات يجب معرفتها
| CMM | نموذج النضج القدرة | تحسين العملية |
| XP | البرمجة المتطرفة | منهجية الأجايل |
| MVC | النموذج-العرض-المتحكم | نمط هندسي |
| WBS | هيكل تجزئة العمل | مهام المشروع |
| CPM | طريقة المسار الحرج | جدولة المشروع |
قائمة مراجعة قبل الأخيرة
- ✅ معرفة جميع أدوار Scrum والأدوات
- ✅ القدرة على حساب المسار الحرج (ES، EF، LS، LF، Slack)
- ✅ معرفة متى تستخدم كل نموذج عملية
- ✅ القدرة على تمييز الوظيفي مقابل غير الوظيفي
- ✅ معرفة ترتيب مستويات الاختبار
- ✅ تذكر التماسك (مرتفع) مقابل الاقتران (منخفض)
- ✅ القدرة على تحديد أنماط الهندسة المعمارية من الأوصاف