المتطلبات الوظيفية وغير الوظيفية
كيف تفصل ما يفعله النظام عن الجودة المطلوبة منه، وتكتب كليهما بدقة يمكن اختبارها؟ ⏱ نحو 40 دقيقة.
- تميّز المتطلب الوظيفي من غير الوظيفي.
- تصنّف المتطلبات غير الوظيفية: الأداء والتوفر والأمان وقابلية الاستخدام والتوافق والخصوصية والصيانة.
- تترجم عبارات العميل إلى متطلبات دقيقة قابلة للقياس.
- تقرأ مخطط المتطلبات
requirementDiagram.
١ماذا يفعل النظام؟ وكيف يجب أن يكون؟
كل متطلب يجيب عن واحد من سؤالين. المتطلب الوظيفي Functional Requirement يصف ماذا يفعل النظام: وظيفة يراها المستخدم ويمكن أن يضغط زرًّا لتنفيذها. المتطلب غير الوظيفي Non-Functional Requirement يصف كيف يجب أن يكون النظام وهو يؤدي وظائفه: سريعًا؟ آمنًا؟ متاحًا؟
| وظيفي FR | غير وظيفي NFR | |
|---|---|---|
| يجيب عن | ماذا يفعل النظام؟ | بأي جودة وتحت أي قيود؟ |
| مثال من «دورات» | يسجّل المتدرب في دورة ويدفع رسومها | تفتح صفحة الدورة خلال ثانيتين لـ 95% من الطلبات |
| إن غاب | تنقص ميزة واضحة | النظام «يعمل» لكن الناس يتركونه: بطيء، أو غير آمن، أو يتعطل |
| يُختبر بـ | سيناريو: افعل كذا، فيحدث كذا | قياس: زمن، أو نسبة، أو عدد، أو معيار |
٢فئات المتطلبات غير الوظيفية
| الفئة | السؤال | صياغة قابلة للقياس لـ «دورات» |
|---|---|---|
| الأداء | ما سرعته تحت الضغط؟ | تظهر نتائج البحث خلال ثانيتين لـ 95% من الطلبات مع 200 مستخدم متزامن. |
| التوفر | كم يبقى متاحًا؟ | يعمل النظام 99.5% من الوقت شهريًّا، والصيانة المجدولة بعد 11 مساءً فقط. |
| الأمان | من يصل إلى ماذا؟ وكيف تُحمى البيانات؟ | تُخزَّن كلمات المرور مُجزّأة bcrypt، ويُقفل الحساب 15 دقيقة بعد 5 محاولات فاشلة. |
| قابلية الاستخدام | هل يستخدمه الناس بسهولة؟ | يُكمل متدرب جديد التسجيل في 3 خطوات وأقل من دقيقتين دون مساعدة. |
| التوافق | على أي أجهزة يعمل؟ | يعمل على آخر نسختين من Chrome و Safari و Edge، وعلى شاشات من عرض 360px. |
| الخصوصية والأنظمة | ما القوانين الواجب الالتزام بها؟ | يلتزم بنظام حماية البيانات الشخصية في المملكة، ولا يُعرض رقم الهوية كاملًا لغير الموظفين. |
| قابلية الصيانة | هل يسهل تعديله؟ | إضافة نوع دورة جديد لا تتطلب تغيير الكود، بل إعدادًا من لوحة الإدارة. |
٣من لغة العميل إلى لغة الفريق التقني
العميل يتكلم بلغة عمله، والمطور يحتاج جملة لا تحتمل إلا معنى واحدًا. الترجمة بينهما أهم مهارة في هذا الدرس:
| قال العميل | المتطلب بعد الترجمة | النوع |
|---|---|---|
| «أبي المتدرب يعرف إذا فيه مكان» | FR-03: يعرض النظام عدد المقاعد المتاحة لكل دورة. | وظيفي |
| «ما نبي زحمة اتصالات يوم التسجيل» | NFR-01: يتحمل النظام 300 مستخدم متزامن دون أن يتجاوز زمن الاستجابة 3 ثوانٍ. | غير وظيفي (أداء) |
| «الموظفة تعتمد الطلبات» | FR-07: يجب أن تتمكن موظفة التسجيل من اعتماد طلب التسجيل أو رفضه مع ذكر السبب. | وظيفي |
| «البيانات سرية» | NFR-04: لا يطّلع المدرب إلا على أسماء المسجلين في دوراته، دون أرقام الجوال. | غير وظيفي (أمان) |
- النظام يكون سريعًا وسهل الاستخدام.
- يتم إرسال إشعارات للمستخدمين.
- يجب دعم الدفع والتقارير والشهادات.
- تفتح صفحة الدورة خلال ثانيتين لـ 95% من الطلبات.
- يرسل النظام رسالة نصية للمتدرب خلال دقيقة من اعتماد تسجيله.
- ثلاثة متطلبات منفصلة:
FR-10الدفع،FR-11التقارير،FR-12الشهادات.
المتطلب الدقيق: يحدد من وماذا ومتى، ويقيس بالأرقام، ويحوي متطلبًا واحدًا فقط في الجملة.
٤صفات المتطلب الجيد
| الصفة | اسأل نفسك |
|---|---|
| واضح | هل يفهمه شخصان بالمعنى نفسه؟ (تجنّب: سريع، سهل، مناسب، حديث، إلخ) |
| قابل للاختبار | هل يمكن أن يقول المختبِر «نجح» أو «فشل»؟ |
| مفرد | هل يحوي متطلبًا واحدًا؟ (كلمة «و» بين وظيفتين علامة خطر) |
| ممكن | هل يمكن تنفيذه بالوقت والميزانية والتقنية المتاحة؟ |
| قابل للتتبع | هل له معرّف ومصدر نعود إليه؟ |
| متسق | هل يتعارض مع متطلب آخر؟ |
ويمكن رسم المتطلبات وعلاقاتها بـ مخطط المتطلبات requirementDiagram: كل متطلب بنوعه ومعرّفه ودرجة خطورته وطريقة التحقق منه، وأي جزء من النظام يحققه satisfies:
requirementDiagram functionalRequirement FR1 { id: FR1 text: "يعرض النظام المقاعد المتاحة لكل دورة" risk: high verifymethod: test } performanceRequirement NFR1 { id: NFR1 text: "تفتح صفحة الدورة خلال ثانيتين" risk: medium verifymethod: test } element course_page { type: "صفحة الدورة" } course_page - satisfies -> FR1 course_page - satisfies -> NFR1
لاحظ النوعين: functionalRequirement و performanceRequirement (وهناك أيضًا interfaceRequirement و designConstraint). سنستخدم هذا المخطط لاحقًا في تتبع المتطلبات حتى التنفيذ.
توقّع وتحقّق
«يرسل النظام إيصال الدفع إلى بريد المتدرب» متطلب:
«يعمل النظام 99.5% من الوقت شهريًّا» من فئة:
أي متطلب قابل للاختبار؟
ما المشكلة في «يجب دعم الدفع والتقارير والشهادات»؟
الخلاصة
- الوظيفي: ماذا يفعل النظام. غير الوظيفي: بأي جودة وتحت أي قيود.
- غير الوظيفي لا يقوله العميل غالبًا؛ اسأل عن الضغط والتوفر والبيانات الحساسة.
- المتطلب الجيد: واضح، وقابل للاختبار، ومفرد، وممكن، وقابل للتتبع، ومتسق.
- استبدل الكلمات الغامضة بأرقام وإجراءات محددة.
تحدٍّ تصميمي: أعد صياغة متطلبات «دورات»
متوسطوصلتك هذه الملاحظات من الاجتماعات: «النظام يكون سريع وسهل»، «المتدرب يسجل ويدفع ويشوف شهادته»، «البيانات لازم تكون محمية»، «يشتغل على الجوال»، «الموظفة تعتمد وترفض». حوّلها إلى متطلبات دقيقة.
- أربعة متطلبات وظيفية على الأقل، كل منها في سطر يبدأ بمعرّف FR-رقم ويحوي «يجب» أو فعلًا مضارعًا للنظام.
- ثلاثة متطلبات غير وظيفية على الأقل، كل منها في سطر يبدأ بـ NFR-رقم ويذكر فئته ورقمًا يُقاس.
- ثلاث فئات مختلفة على الأقل للمتطلبات غير الوظيفية.
- بلا كلمات غامضة: سريع، سهل، مناسب، حديث، آمن (وحدها).
- أربعة متطلبات وظيفية على الأقل
- كل متطلب وظيفي يبدأ بمعرّف FR-رقم
- كل متطلب وظيفي يصف ما يفعله النظام أو المستخدم (يجب/يتمكن/يعرض…)
- كل سطر متطلب واحد: لا «و» تربط بين فعلين مثل «يسجل ويدفع»
- ثلاثة متطلبات غير وظيفية على الأقل
- كل متطلب غير وظيفي يبدأ بمعرّف NFR-رقم
- كل متطلب غير وظيفي فيه رقم يُقاس
- ثلاث فئات مختلفة على الأقل
- لا كلمات غامضة في المتطلبات غير الوظيفية
- لا كلمات غامضة في المتطلبات الوظيفية
💡 تلميح 1
💡 تلميح 2
💡 تلميح 3
نموذج واحد من إجابات كثيرة صحيحة.
- المتطلبات الوظيفية
- FR-01: يجب أن يتمكن المتدرب من التسجيل في دورة متاحة.
FR-02: يجب أن يتمكن المتدرب من دفع رسوم الدورة إلكترونيًّا.
FR-03: يجب أن يتمكن المتدرب من تنزيل شهادة الدورة بعد إكمالها.
FR-04: يجب أن تتمكن موظفة التسجيل من اعتماد طلب التسجيل.
FR-05: يجب أن تتمكن موظفة التسجيل من رفض الطلب مع ذكر السبب. - المتطلبات غير الوظيفية
- NFR-01 (الأداء): تفتح صفحة الدورة خلال ثانيتين لـ 95% من الطلبات.
NFR-02 (قابلية الاستخدام): يكمل المتدرب التسجيل في 3 خطوات على الأكثر.
NFR-03 (الأمان): يُقفل الحساب 15 دقيقة بعد 5 محاولات دخول فاشلة.
NFR-04 (التوافق): يعمل النظام على شاشات الجوال من عرض 360px.