🎯 دليل شامل لمخططات UML وهندسة البرمجيات

القفز السريع

مخطط الحالات الاستعمالية مخطط الفئات مخطط التسلسل مخطط النشاط مخطط الحالة
📋

مخطط الحالات الاستعمالية (Use Case Diagram)

سلوكي • متطلبات

📍 متى تستخدمه:

استخدمه عندما تريد توضيح من (الفاعلين) يستطيع فعل ماذا (الحالات الاستعمالية) في النظام. مثالي لالتقاط المتطلبات الوظيفية وحدود النظام.

مثال لمخطط حالات استعمالية لنظام الصراف الآلي

مثال لمخطط حالات استعمالية (نظام الصراف الآلي) من شرائح المحاضرة.

فاعل (Actor)
كيان خارجي (مستخدم، نظام، أو زمن) يتفاعل مع النظام
حالة استعمالية
حالة استعمالية (Use Case)
وظيفة أو إجراء مميز يقوم به النظام
حدود النظام
حدود النظام (System Boundary)
مستطيل يحدد نطاق النظام

العلاقات:

ارتباط (Association): خط بسيط يصل الفاعل بالحالة الاستعمالية
--→ <<include>>
تضمين (Include): سهم منقط - الحالة الأساسية دائماً تتضمن الحالة المدرجة
--→ <<extend>>
تمديد (Extend): سهم منقط - قد يتم تشغيل الحالة الممددة بشكل شرطي
─▷
تعميم (Generalization): سهم صلب مع مثلث فارغ - علاقة توريث

مثال من اختبار حقيقي - نظام الصراف الآلي

"يسمح نظام الصراف الآلي لعميل البنك بسحب النقود، إيداع الأموال، وتحويل الأموال. في أي وقت يريد العميل إجراء هذه المعاملات، يجب على النظام التحقق من صلاحية المستخدم. عند سحب النقود، إذا كانت الأموال غير كافية، تتم معالجة ذلك بحالة استعمالية منفصلة. إذا تجاوز السحب الحد اليومي، يتم تشغيل حالة 'تجاوز الحدود'. يقوم موظف الصيانة بإعادة تعبئة الصراف الآلي دورياً."

طريقة الحل:

  • الفاعلون: العميل، موظف الصيانة، نظام البنك
  • الحالات الاستعمالية الرئيسية: سحب نقود، إيداع أموال، تحويل أموال
  • تضمين (Include): التحقق من المستخدم (تدرج في جميع المعاملات)
  • تمديد (Extend): معالجة الأموال غير الكافية، تجاوز الحد اليومي (تمدد حالة سحب النقود)
  • إضافي: إعادة تعبئة الصراف الآلي (بواسطة موظف الصيانة)

💡 نصائح وطرق للاختبار:

  • حدد جميع الفاعلين أولاً - ابحث عن الأدوار، وليس أشخاصاً محددين
  • استخدم التضمين عندما يجب أن يحدث شيء ما (التحقق، المصادقة)
  • استخدم التمديد للحالات الاختيارية/الشرطية (معالجة الأخطاء، حالات خاصة)
  • حدود النظام تحتوي على الحالات الاستعمالية فقط، الفاعلون يبقون خارجها
  • سم الحالات الاستعمالية كفعل + اسم (مثال: "سحب نقود"، "التحقق من المستخدم")
🏗️

مخطط الفئات (Class Diagram)

هيكلي • ثابت

📍 متى تستخدمه:

استخدمه لعرض هيكل النظام - الفئات، خصائصها، دوالها، وعلاقاتها. أساسي للتصميم كائني التوجه.

مثال لمخطط فئات UML لنظام بنكي

مثال لمخطط فئات UML (بنك / صراف آلي / حساب) من شرائح المحاضرة.

اسم الفئة +خاصية: النوع +دالة(): النوع
فئة (Class)
مستطيل بثلاث أقسام: الاسم، الخصائص، العمليات

+ عام (public)
- خاص (private)
# محمي (protected)
~ حزمة (package)

محددات الوصول (Visibility)
معدلات الوصول للخصائص والدوال

العلاقات:

──────
ارتباط (Association): خط بسيط مع التعددية (1, 0..1, *, 1..*, إلخ)
- - - - →
تبعية (Dependency): سهم متقطع - فئة تستخدم أخرى مؤقتاً
──▷
تعميم (Generalization): خط صلب مع مثلث فارغ - توريث (هو - IS-A)
──◇
تجميع (Aggregation): خط مع معين فارغ - لديه (HAS-A) (الأجزاء يمكن أن توجد مستقلة)
──◆
تكوين (Composition): خط مع معين معبأ - يملك (OWNS) (الأجزاء لا توجد بدون الكل)

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

"يتتبع النظام الشركات وموظفيها، المدراء والمقاولين. كل شركة لديها موظف واحد أو أكثر. لكل موظف: رقم الموظف، الاسم، الراتب. لكل شركة اسم وعنوان. كل مدير هو موظف يشرف على موظفين آخرين. بعض الموظفين هم مقاولون لديهم مدة العقد."

طريقة الحل:

  • الفئات: شركة، موظف، مدير، مقاول
  • توريث: المدير والمقاول يرثان من الموظف
  • تجميع: الشركة لديها موظفون (1..*)
  • ارتباط: المدير يشرف على موظفين (1..*)
  • خصائص: الشركة (اسم، عنوان)، الموظف (رقم الموظف، اسم، راتب)، المقاول (+مدة العقد)

💡 نصائح وطرق للاختبار:

  • تحقق دائماً من التعددية: 1 (واحد بالضبط), 0..1 (اختياري), * (العديد), 1..* (واحد على الأقل)
  • تجميع (◇) = "يستخدم" - الفريق لديه لاعبون (اللاعبون يمكن أن يوجدوا بدون فريق)
  • تكوين (◆) = "جزء من" - المنزل لديه غرف (الغرف لا يمكن أن توجد بدون منزل)
  • ابحث عن علاقات (هو - IS-A) للتوريث (المدير هو موظف)
  • الخصائص المشتقة تبدأ بـ "/" (مثال: /العمر محسوب من تاريخ الميلاد)
🔄

مخطط التسلسل (Sequence Diagram)

سلوكي • ديناميكي

📍 متى تستخدمه:

استخدمه لعرض كيفية تفاعل الكائنات خلال الزمن. مثالي لنمذجة تدفق الرسائل في سيناريو محدد.

مخطط تسلسل لعرض معلومات المريض

مثال لمخطط التسلسل (عرض معلومات المريض) من شرائح المحاضرة.

كائن
خط الحياة (Lifeline)
كائن/فاعل مع خط عمودي متقطع يظهر الزمن
مربط التنشيط (Activation Box)
مستطيل يظهر عندما يكون الكائن نشطاً/يعالج
رسالة()
رسالة متزامنة (Synchronous Message)
سهم صلب - المرسل ينتظر الرد
رسالة غير متزامنة()
رسالة غير متزامنة (Asynchronous Message)
سهم خطي - المرسل لا ينتظر
عودة
رسالة عودة (Return Message)
سهم متقطع يعود إلى المرسل

مثال من اختبار حقيقي - معاملة قاعدة بيانات

"فكر في مخطط تسلسل مع c:العميل و p:وكيل ODBC. العميل ينشئ معاملة، يحدد الإجراءات (a,d,o)، يحدد القيم (d,3,4)، يحدد القيم (a,'CO')، ثم يصدق المعاملة."

عناصر رئيسية لتحديدها:

  • c:العميل هي التسمية لكائن اسمه 'c' من فئة 'العميل'
  • الخط العمودي المتقطع هو خط الحياة
  • المستطيل الضيق على خط الحياة هو التنشيط (عندما يعالج الكائن)
  • تحديد القيم(d,3,4) هو استدعاء دالة بمعاملات
  • وكيل ODBC هو الفئة المناسبة لعمليات قاعدة البيانات

💡 نصائح وطرق للاختبار:

  • الزمن يتدفق من الأعلى للأسفل - الرسائل الأقدم تكون أعلى
  • إطار البديل (Alt) = إذا-ثم-وإلا، إطار الحلقة (Loop) = تكرار، إطار اختياري (Opt) = اختياري
  • رسالة ذاتية: سهم يعود لنفس الكائن
  • إنشاء الكائن: رسالة تشير إلى مربط الكائن (ليس خط الحياة)
  • تدمير الكائن: X في نهاية خط الحياة

مخطط النشاط (Activity Diagram)

سلوكي • تدفق

📍 متى تستخدمه:

استخدمه لعرض سير العمل أو تدفق العملية. مثل مخطط انسيابي متقدم مع أنشطة متوازية وحارات سباحة.

مخطط نشاط لعملية حجز

مثال لمخطط النشاط (عملية الحجز) من شرائح المحاضرة.

عقدة البداية (Initial Node)
دائرة معبأة - نقطة البداية
عقدة النهاية (Final Node)
عيون الثور - نقطة النهاية
نشاط
نشاط/إجراء (Activity/Action)
مستطيل ذو زوايا دائرية - مهمة أو إجراء
[؟]
عقدة قرار (Decision Node)
معين - تفرع شرطي
شريط التفرع/الدمج (Fork/Join Bar)
خط سميك - يقسم/يدمج التدفقات المتوازية
حارة 1 حارة 2 حارة 3
حارات السباحة (Swimlanes)
أقسام عمودية/أفقية لفاعلين مختلفين

مثال من اختبار حقيقي - عملية تسجيل الوصول للطيران

"يسجل المسافر الوصول قبل الرحلة. يعرض التذكرة على مكتب التسجيل. خدمات المسافرين تتحقق من التذكرة. إذا كانت صحيحة، يسجل المسافر الأمتعة وتقبلها الخدمات. إذا لم تكن صحيحة، يحال إلى خدمة العملاء. بمجرد قبول الأمتعة، يتم التحقق من إذا كانت تخضع لرسوم. إذا نعم، يدفع المسافر الرسوم ثم يحصل على بطاقة الصعود، وإلا يحصل على بطاقة الصعود مباشرة."

الحل مع حارات السباحة:

  • حارة 1: المسافر - عرض التذكرة، تسجيل الأمتعة، دفع الرسوم
  • حارة 2: خدمات المسافرين - التحقق من التذكرة، قبول الأمتعة، التحقق من الرسوم، إصدار بطاقة الصعود
  • حارة 3: خدمة العملاء - معالجة التذاكر غير الصالحة
  • نقاط القرار: [التذكرة صحيحة؟]، [هل هناك رسوم مطلوبة؟]
  • التدفق: تسلسلي مع تفرعات شرطية

💡 نصائح وطرق للاختبار:

  • التفرع (─) يقسم إلى أنشطة متوازية، الدمج (─) يجمعها مجدداً
  • القرار (◇) له مدخل واحد، مخارج متعددة مع حراس [شرط]
  • الدمج (◇) له مداخل متعددة، مخرج واحد (بدون شروط)
  • حارات السباحة تجمع الأنشطة حسب الفاعل/القسم - استخدم عند مشاركة فاعلين متعددين
  • عقد الكائنات [مستطيلات] تظهر البيانات المتدفقة بين الأنشطة
🔀

مخطط آلة الحالة/مخطط الحالة (State Machine/Statechart Diagram)

سلوكي • انتقالات الحالة

📍 متى تستخدمه:

استخدمه لعرض كيف يتغير حالة الكائن استجابةً . مثالي لنمذجة دورة حياة الكائنات.

مخطط الحالة

مثال لمخطط الحالة من شرائح المحاضرة.

الحالة الأولية (Initial State)
دائرة معبأة - حالة البداية
الحالة النهائية (Final State)
عيون الثور - حالة النهاية
اسم الحالة
حالة (State)
مستطيل ذو زوايا دائرية - حالة/وضع
حدث[حارس]/إجراء
انتقال (Transition)
سهم مع حدث، حارس اختياري وإجراء
حالة مركبة دخول/إجراء خروج/إجراء
حالة مركبة (Composite State)
حالة بأنشطة داخلية

مثال من اختبار حقيقي - فرن ميكروويف

"للمايكروويف مفتاح للطاقة الكاملة/النصفية، لوحة مفاتيح رقمية لوقت الطهي، زر بدء/إيقاف، وشاشة أبجدية رقمية."

الحالات والانتقالات:

  • الحالات: خامل، ضبط الطاقة، ضبط الوقت، يطهو، متوقف مؤقتاً، مكتمل
  • الحالة الأولية → خامل: النظام يبدأ
  • خامل → ضبط الطاقة: ضغط زر الطاقة
  • ضبط الطاقة → ضبط الوقت: ضغط زر الوقت
  • ضبط الوقت → يطهو: ضغط زر البدء
  • يطهو → متوقف مؤقتاً: ضغط زر الإيقاف
  • يطهو → مكتمل: انتهاء المؤقت

💡 نصائح وطرق للاختبار:

  • انتقال ذاتي: سهم يعود لنفس الحالة (الحالة لا تتغير)
  • شروط الحراس بين أقواس مربعة: [الرصيد > 0]
  • الإجراءات بعد الشرطة المائلة: ضغط زر/تشغيل الضوء
  • إجراءات الدخول/الخروج: تنفذ عند الدخول/الخروج من الحالة
  • التفرع (─) والدمج (─) للحالات المتزامنة
🎯

إستراتيجية الاختبار: اختيار المخطط المناسب

📝 اقرأ كلمات السيناريو المفتاحية:

  • "فاعلين", "مستخدمين", "وظائف النظام" → مخطط الحالات الاستعمالية
  • "فئات", "خصائص", "توريث", "لديه" → مخطط الفئات
  • "تدفق الرسائل", "تفاعل", "تسلسل زمني" → مخطط التسلسل
  • "سير العمل", "عملية", "أنشطة متوازية" → مخطط النشاط
  • "حالات", "انتقالات", "أحداث", "دورة حياة" → مخطط الحالة

🏆 نصائح عالمية للاختبار:

  • ارسم دائماً مخططاً تقريبياً أولاً قبل المخطط النهائي
  • ضع تسمية لكل شيء - لا تترك أسهم أو علاقات بدون تسمية
  • أظهر التعددية في مخططات الفئات والحالات الاستعمالية (1, *, 0..1, 1..*)
  • استخدم ترميز UML الصحيح - لا تخترع رموزك الخاصة
  • أضف وسيلة إيضاح إذا استخدمت أي ترميز غير قياسي
  • في السيناريوهات، حدد الفاعلين/الكائنات أولاً، ثم الإجراءات/العلاقات
  • عند الشك، أضف ملاحظة لشرح منطقك