المحطّة ١: المتطلّبات ورحلة المستخدم
نظامٌ بدورين: حدّد الفاعلين ورحلاتهم قبل أن تكتب سطرًا. ⏱ نحو 22 دقيقة.
- تحدّد الفاعلين وصلاحياتهم في نظامٍ متعدّد الأدوار.
- ترسم رحلة المستخدم لاكتشاف الحالات الخفيّة.
- تكتب قصص المستخدم والمتطلّبات للدورين.
- تُبرز المتطلّبات الحرجة مثل منع التعارض وعزل الأدوار.
١نظامٌ لأكثر من مستخدم
مشروعنا أعقد قليلًا من تطبيقٍ لمستخدمٍ واحد: له دوران مختلفان بصلاحياتٍ مختلفة. هذا النوع من الأنظمة هو الأشيع في العمل الحقيقيّ، ولذلك نبدأ — كما تعلّمت في 241 — بتحديد مَن يستخدم النظام قبل ماذا يفعل.
المشروع: نظام حجز مواعيد عيادة. الفاعلون:
الفاعل (Actor) | هدفه | لا يجوز له |
|---|---|---|
| المريض | يرى المواعيد المتاحة ويحجز موعدًا، ويلغي حجزه. | لا يرى بيانات مرضى آخرين، ولا يلغي حجز غيره. |
| الموظّف | يرى الجدول كاملًا، ويلغي أو يفتح مواعيد. | — |
٢رحلة المستخدم: القصّة قبل الشاشة
رحلة المستخدم (User Journey) تسرد الخطوات التي يمرّ بها الفاعل لتحقيق هدفه. رحلة المريض للحجز:
- يفتح النظام ويسجّل دخوله كمريض.
- يرى قائمة المواعيد المتاحة (طبيب + وقت).
- يختار موعدًا ويضغط «احجز».
- يؤكّد النظام الحجز، ويختفي الموعد من المتاحة.
- يستطيع لاحقًا رؤية حجزه وإلغاؤه.
رسم الرحلة قبل البناء يكشف الحالات الخفيّة: ماذا لو حاول اثنان حجز الموعد نفسه في اللحظة ذاتها؟ ماذا لو ألغى المريض؟ هذه أسئلةٌ تولّد متطلّباتٍ لا تظهر إلّا حين تتخيّل الرحلة.
٣قصص المستخدم والمتطلّبات
نحوّل الرحلتين إلى قصصٍ بصيغة (بصفتي… أريد… حتى…):
- بصفتي مريضًا، أريد رؤية المواعيد المتاحة، حتى أختار ما يناسبني.
- بصفتي مريضًا، أريد حجز موعدٍ متاح، حتى أضمن دوري.
- بصفتي مريضًا، أريد إلغاء حجزي، حتى أفسح المجال إن تغيّرت خطّتي.
- بصفتي موظّفًا، أريد رؤية الجدول كاملًا، حتى أديره.
- بصفتي موظّفًا، أريد إلغاء أيّ حجز، حتى أتعامل مع الطوارئ.
| النوع | أمثلة من مشروعنا |
|---|---|
| وظيفيّة | عرض المتاح، الحجز، الإلغاء، تمييز دور المستخدم. |
| غير وظيفيّة | لا يُحجَز موعدٌ مرّتين (منع التعارض)، كلّ دورٍ يرى ما يخصّه فقط، الواجهة تعمل على الجوّال، الرموز تُؤمّن المسارات. |
توقّع وتحقّق
لماذا نحدّد الفاعلين (المريض/الموظّف) أوّلًا؟
«لا يُحجَز الموعد مرّتين» متطلّبٌ:
ما الذي تكشفه رحلة المستخدم؟
أيّها قصّة مستخدمٍ صحيحة؟
الخلاصة
- ابدأ بتحديد الفاعلين (مريض/موظّف) وصلاحيات كلٍّ.
- رحلة المستخدم تكشف الحالات المتزامنة والخفيّة قبل البناء.
- القصص بصيغة (بصفتي… أريد… حتى…) لكلّ دور.
- منع حجز الموعد مرّتين متطلّبٌ غير وظيفيٍّ جوهريّ، لا تفصيل.
- عزل الأدوار (كلٌّ يرى ما يخصّه) متطلّبٌ أمنيٌّ تحدّده الآن.
تحدٍّ تصميمي: متطلّبات نظام حجز العيادة
تصميمياكتب وثيقة متطلّباتٍ للمشروع: حدّد الفاعلين، وارسم رحلة كلٍّ منهما، واكتب القصص والمتطلّبات. ستقود هذه الوثيقة تصميم الـ API في المحطّة القادمة.
- جدول الفاعلين (المريض، الموظّف) وصلاحيات كلٍّ.
- رحلة مستخدمٍ واحدةٍ على الأقلّ مرسومةً خطوةً خطوة.
- قصص المستخدم للدورين.
- المتطلّبات الوظيفيّة وغير الوظيفيّة، ومنها منع التعارض.