مخطّط حالات الاستخدام
درس 2 من 6
2مخطّط حالات الاستخدام
أبسط مخطّط في UML وأكثره إساءةً للاستخدام. سؤاله واحد: من يريد شيئًا من النظام، وما ذلك الشيء؟، ومن يرسم فيه أزرارًا وشاشات يرسم شيئًا آخر تمامًا.
ماذا تشاهد في الرسم: الممثّل خارج حدود النظام، وكل بيضاوي هدف يريده منه: يستعير، يعيد، يبحث.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
مخطط حالات الاستخدام مثل قائمة الخدمات على باب مكتب حكومي: من يأتي (مواطن، موظف) وماذا يريد أن ينجز (تجديد هوية، دفع رسوم). لا يشرح كيف تُنجز الخدمة من الداخل، فقط من يطلب ماذا. ولهذا يفهمه صاحب المشروع الذي لا يعرف البرمجة.
الممثل actor دور خارج النظام (إنسان أو نظام آخر)، وحالة الاستخدام هدف له قيمة لذلك الممثل، وحدود النظام صندوق. العلاقتان include وextend تُستخدمان بحذر، وأشهر خطأ أن تتحول الحالات إلى خطوات شاشات أو وظائف برمجية بدل أهداف.
المتطلبات قبل البداية
الجزء الأول
قواعد المكتبة الأربع مكتوبة أمامك، والأسماء والأفعال محدّدة بخط.
فكرة «الفاعل»
الفاعل ليس شخصًا بالضرورة: قد يكون نظامًا آخر أو مؤقّتًا زمنيًا. شرطه الوحيد أنه خارج حدود نظامك ويريد منه شيئًا.
فكرة «الحدّ»
ما داخل نظامك وما خارجه. بلا هذا الخط لا معنى للمخطّط كله.
المفاهيم الأساسية
من يريد شيئًا من النظام، وما ذلك الشيء؟ لا كيف يُنجز، ولا بأي ترتيب، ولا بأي شاشة. فقط «من» و«ماذا».
دور لا شخص. «العضو» فاعل، و«أحمد» ليس فاعلًا. وأمين المكتبة الذي يستعير كتابًا لنفسه يلعب دور العضو في تلك اللحظة، ولهذا نرسم الأدوار لا الأسماء.
هدف كامل ينتهي بقيمة للفاعل، يُسمّى بـفعل + مفعول: «استعارة نسخة» نعم، و«زرّ الاستعارة» لا، و«التحقّق من قاعدة البيانات» لا لأنها خطوة داخلية لا يريدها أحد لذاتها.
المستطيل حول حالات الاستخدام. الفاعلون خارجه دائمًا. وأكثر ما يُصلح المخططات الخاطئة هو رسم هذا المستطيل أولًا والسؤال: هل هذا الشيء مسؤوليتنا أم مسؤولية غيرنا؟
«يتضمّن» (include): خطوة دائمًا تحدث داخل الحالة، تُفصل لأنها مشتركة، التحقّق من الأهلية داخل الاستعارة. و«يمدّد» (extend): سلوك اختياري يُضاف في حالة خاصة، الحجز حين لا تكون النسخة متاحة. الفرق بينهما: «دائمًا» و«أحيانًا».
هذا المخطّط لا يصف الترتيب ولا الاستثناءات ولا البيانات. من يحاول حشر تفاصيل فيه يحصل على مخطّط لا يُقرأ ولا يُجيب، وغالبًا كان يريد مخطّط نشاط.
كيف يعمل؟
شكل 1، مكتبتنا: دائرتان فاعلان، والمستطيلات حالات استخدام، والخطان المتقطّعان يتضمّن ويمدّد
شكل 2، اختبار من سؤالين يستبعد معظم ما يُرسم خطأً في هذا المخطّط
| مرشّح | حالة استخدام؟ | السبب |
|---|---|---|
| استعارة نسخة | ✅ نعم | فاعل خارجي، وقيمة كاملة له |
| البحث في الفهرس | ✅ نعم | العضو وأمين المكتبة كلاهما يريدها |
| تسجيل الدخول | ⚠️ غالبًا لا | ليست هدفًا بذاتها؛ تُرسم كـ«يتضمّن» إن تكرّرت |
| التحقّق من الأهلية | ➖ خطوة | لا يريدها أحد لذاتها، «يتضمّن» داخل الاستعارة |
| الضغط على زر «استعر» | ❌ لا | تفصيلة واجهة لا هدف |
| حفظ السجلّ في الجدول | ❌ لا | خطوة داخلية لا فاعل لها |
| إرسال تنبيه التأخير | ✅ نعم | فاعله مؤقّت زمني، والفاعل ليس بشرًا بالضرورة |
التمرين: من القواعد الأربع إلى مخطّط وسرد
نعود إلى قواعد المكتبة الأربع ونستخرج المخطّط منها بخمس خطوات. لاحظ أن كل خطوة ترفض شيئًا بقدر ما تقبل شيئًا:
| «يتضمّن» (include) | «يمدّد» (extend) | |
|---|---|---|
| متى تحدث؟ | دائمًا | أحيانًا، بشرط |
| من يعرف من؟ | الحالة الأساسية تعرف المضمّنة | الممدِّدة تعرف الأساسية |
| مثالنا | التحقّق من الأهلية | حجز نسخة غير متاحة |
| في الكود | نداء في المسار الرئيسي | فرع مشروط |
| لو حذفتها؟ | الحالة الأساسية تصير ناقصة | الحالة الأساسية تبقى سليمة |
سرد الحالة: ما لا يظهر في الرسم
المخطّط يقول «استعارة نسخة» ولا يقول كيف. ما ينقص يُكتب نصًّا بجواره، وهذا هو الجزء الذي يقرأه المبرمج فعلًا:
حالة الاستخدام: استعارة نسخة الفاعل: العضو الشرط المسبق: العضو مسجّل، والنسخة موجودة في المكتبة المسار الرئيسي: 1. العضو يطلب استعارة نسخة بعينها 2. النظام يتحقّق من الأهلية «يتضمّن» 3. النظام يسجّل الاستعارة ويحدّد تاريخ إرجاع 4. النظام يعلم العضو بتاريخ الإرجاع المسارات البديلة: 2أ. العضو عليه تأخير -> ترفض الاستعارة، يُعلم بالسبب 2ب. العضو عنده 5 نسخ -> ترفض الاستعارة، يُعلم بالحدّ 1أ. النسخة مستعارة أصلًا -> يُعرض الحجز «يمدّد» الشرط اللاحق: النسخة غير متاحة، وعدد استعارات العضو زاد واحدًا
اعتقاد شائع × الحقيقة
| الاعتقاد | الحقيقة |
|---|---|
| «الفاعل دائمًا إنسان.» | المؤقّت الزمني الذي يرسل تنبيه التأخير فاعل، ونظام الدفع الخارجي فاعل. الشرط: خارج الحدّ ويريد شيئًا. |
| «تسجيل الدخول حالة استخدام أساسية.» | ليست هدفًا بذاته: لا أحد يفتح النظام ليسجّل الدخول. تُرسم كـ«يتضمّن» إن احتجتها. |
| «كل شاشة حالة استخدام.» | الشاشة قد تخدم ثلاث حالات، وحالة واحدة قد تمرّ بخمس شاشات. لا علاقة بينهما. |
| ««يتضمّن» و«يمدّد» شيء واحد تقريبًا.» | واحد «دائمًا» والآخر «أحيانًا»، وكل منهما يصير كودًا مختلفًا: نداء في المسار مقابل فرع مشروط. |
| «المخطّط يكفي، لا نحتاج سردًا.» | المخطّط يقول «ماذا»، والسرد يقول المسارات البديلة والشروط. المبرمج يبني من الثاني. |
| «مخطّط أكبر = تحليل أعمق.» | مخطّط فيه ثلاثون حالة لا يُقرأ. العمق في السرد لا في عدد البيضات. |
جرّب بنفسك
«التحقّق من الأهلية» يحدث في كل استعارة بلا استثناء. كيف تربطه؟
«دائمًا» تعني «يتضمّن». ولو رسمتها «يمدّد» لأصبحت في الكود فرعًا مشروطًا فيمكن أن تُستعار نسخة بلا تحقّق، وهذا خطأ وظيفي لا شكلي. والخيار الأول خطأ لأن العضو لا يريد «التحقّق من أهليته» كهدف.
أي اسم يصلح حالة استخدام؟
فعل + مفعول من منظور الفاعل، وينتهي بقيمة واضحة. الأول اسم وظيفة إدارية تحتها عدة أهداف، والثاني شاشة، والثالث مكوّن تقني، ولا واحد منها هدف يريده فاعل.
بطاقات مراجعة سريعة
تحقّق من فهمك
1. بجملة واحدة: لماذا «الضغط على زر الاستعارة» ليس حالة استخدام؟
لأن الفاعل لا يريد ضغط الزرّ، يريد نسخة في يده. والزرّ وسيلة قابلة للاستبدال: لو صارت الاستعارة بمسح رمز QR أو بأمر صوتي لبقيت حالة الاستخدام «استعارة نسخة» صحيحة كما هي.
2. اشرح بالتفصيل كيف يصير «يتضمّن» و«يمدّد» كودًا مختلفًا.
«يتضمّن» يعني أن الخطوة جزء من تعريف الحالة، فتصير نداءً غير مشروط في المسار الرئيسي: كل استعارة تنادي التحقّق، ولو فشل التحقّق فُشلت الاستعارة. و«يمدّد» يعني سلوكًا يُضاف عند شرط، فيصير فرعًا: إن كانت النسخة غير متاحة يُعرض الحجز، وإلا فلا يُنفَّذ شيء من ذلك الكود. والفرق العملي أن الخلط بينهما يُنتج نظامًا يستعير بلا تحقّق أو يحجز بلا سبب.
3. (اكتشف الخطأ) مخطّط فيه فاعل «قاعدة البيانات» بسهم إلى «حفظ الاستعارة». ما الخطأ؟
قاعدة البيانات داخل حدّ النظام، فليست فاعلًا، والفاعل شرطه أن يكون خارج الحدّ ويريد شيئًا، وقاعدة البيانات لا تريد شيئًا. و«حفظ الاستعارة» خطوة داخلية لا هدف لأحد. الصحيح: الفاعل «العضو»، والحالة «استعارة نسخة»، والحفظ تفصيلة تنفيذ تظهر في مخطّط التسلسل.
4. العميل يريد إضافة «الدفع الإلكتروني للغرامات». كيف يظهر هذا في المخطّط؟
فاعل جديد غير بشري: بوّابة الدفع خارج الحدّ. وحالة استخدام «سداد غرامة» للعضو، تتضمّن «التحقّق من مبلغ الغرامة». ولاحظ أن بوّابة الدفع فاعل ثانوي: النظام يناديها، لا هي من يبدأ الحالة، والفاعل الثانوي يُرسم على الطرف الآخر من الحالة.
5. (قرار) مديرك يطلب مخطّط حالات استخدام واحدًا يغطّي نظامًا فيه ٤٠ وظيفة. ما ردّك؟
أن المخطّط الواحد سيكون غير مقروء، وأن العدد نفسه إشارة إلى أن «النظام» في الحقيقة عدة أنظمة. البديل: قسّم بحسب الفاعل أو بحسب المجال (الاستعارة، الفهرسة، العضويات، التقارير) وارسم مخططًا لكل مجال مع سرد لأهم ثلاث حالات فيه. قياس نجاح هذا المخطّط أنه يُقرأ في دقيقة، فإن احتاج شرحًا شفهيًا فقد فشل في وظيفته.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
مقالات1
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.